Ответы пользователя по тегу Система доменных имен
  • Фаервол iptables, модуль state - можно использовать как вид защиты?

    zhovner
    @zhovner
    Гик, задрот и богомол
    Во первых, не нужно светить рекурсивным DNS в интернет.

    Для bind это выглядит так:

    //disable recursive requests from outside
            allow-recursion { 127.0.0.1; 
                                       ::1; };


    Приведенные вами правила iptables никак не решают задачу защиты от dns amplification.


    В следствии, iptables разрешит принять запрос на 53 порт с сервера злоумышленника, а вот далее при отправке ответа на подставной сервер iptables сбросит ли соединение? Ответ ведь разрешен только на тот сервер, с которым установлено соединение.


    Так как в случае этой атаки используется UDP, никакие соединения не устанавливаются. Атакующий отправляет ОДИН UDP пакет с запросом (в котором source адрес заменен на атакуемый ip) и ваш сервер отправляет один пакет с ответом на этот запрос, на тот адрес который был указан в source. Состояние NEW,ESTABLISHED в таком случае вполне корректно.

    Атака с подменой source адреса не возможна в случае с TCP, так как для установления соединения используется несколько пакетов в обе стороны. SYN->ACK<--SYN_ACK и только после этого открывается соединение. А так как в случае с подменой исходящего адреса ответ сервера на SYN уйдет по другому адресу, соответственно на него никто не ответит SYN_ACK.

    Для решения вашей задачи нужно использовать ограничение запросов с одного адреса:

    # Requests per second
    RQS="15"
    
    # Requests per 7 seconds
    RQH="35"
    
    iptables -I INPUT -p udp --dport 53 -m state --state NEW -m recent --set --name DNSQF --rsource
    iptables -I INPUT -p udp --dport 53 -m state --state NEW -m recent --update --seconds 1 --hitcount ${RQS} --name DNSQF --rsource -j DROP
    iptables -I INPUT -p udp --dport 53 -m state --state NEW -m recent --set --name DNSHF --rsource
    iptables -I INPUT -p udp --dport 53 -m state --state NEW -m recent --update --seconds 7 --hitcount ${RQH} --name DNSHF --rsource -j DROP
    Ответ написан
    1 комментарий