Pull to refresh

Защищаем сервер от атаки DNS Amplification с помощью fail2ban

Наверное, каждый владелец и арендатор серверов, которые обслуживают доменные зоны, рано или поздно сталкивается с атакой «DNS усиление» и ее негативными последствиями: жалобами и резким увеличением исходящего трафика, — это потеря времени и денег. Описание атаки и методы защиты описаны на данном сайте, я же хочу предложить свой вариант защиты.

Установка и настройка необходимого ПО


Устанавливаем необходимый софт:
sudo aptitude install fail2ban ipset logrotate

Настройка fail2ban

В /etc/fail2ban/jail.conf необходимо ввести следующие строки:
[named-antidos]

enabled = true
banaction = iptables-ipset
logpath = /var/log/iptables.log
filter = iptables-named
port = any
protocol = all


В /etc/fail2ban/action.d создаем файл iptables-ipset.conf со следующим содержимым:
[Definition]
actionstart = ipset --create fail2ban- iphash

actionstop = ipset --flush fail2ban- ipset --destroy fail2ban-actionban = ipset --test fail2ban- || ipset --add fail2ban- actionunban = ipset --test fail2ban- && ipset --del fail2ban-

И в /etc/fail2ban/filter.d файл iptables-named.conf с содержимым
[Definition]
failregex = .* IPTables-Dropped: .* SRC= .*
ignoreregex =


На этом настройка fail2ban закончена. Перезапускаем демона командой:
sudo invoke-rc.d fail2ban restart


Настройка iptables

Добавляем правила командами:
sudo iptables -N bl
sudo iptables -A bl -j LOG --log-prefix "IPTables-Dropped: " --log-level 4
sudo iptables -A bl -j DROP

sudo iptables -I INPUT -p udp --dport 53 -m recent --name ddns --set
sudo iptables -I INPUT -p tcp --dport 53 -m recent --name ddns --set
sudo iptables -I INPUT -p udp --dport 53 -m recent --name ddns --update --seconds 60 --hitcount 15 -j bl
sudo iptables -I INPUT -p tcp --dport 53 -m recent --name ddns --update --seconds 60 --hitcount 15 -j bl
sudo iptables -I INPUT -m set --match-set fail2ban-named-antidos src -j DROP


Настройка syslog

Теперь необходимо организовать вывод в лог от iptables в отдельный файл, чтобы не захламлять syslog. На примере rsyslog в /etc/rsyslog.conf добавляем строчку
kern.warning /var/log/iptables.log
И перезапускаем демон:
sudo invoke-rc.d rsyslog restart

Настройка logrotate

При интенсивных атаках с нескольких хостов, размер лог файла может разрастись до нескольких десятков мегабайт за сутки. Чтобы логи не забили все свободное дисковое пространство, создадим файл /etc/logrotate.d/iptables с содержимым:
/var/log/iptables.log
{
rotate 3
daily
missingok
notifempty
delaycompress
compress
postrotate
invoke-rc.d rsyslog rotate > /dev/null
endscript
}


Заключение


После вышеописанной настройке, трафик по DNS ответам упал с нескольких гигабайт в час до незначительных значений. Нагрузка так же незаметна.

iptables-ipset-proto4.conf на GitHub
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.