Останнім часом значно почастішали атаки на DNS-сервери з використання DNS ANY reflection. Багато власників власних серверів в мережі Інтернет навіть не підозрюють, що саме їх машини є знаряддям DDOS-атак зловмисників!
Якщо Ви НЕ надаєте послуги публічного DNS-сервера (кешуючий ДНС) на зразок гуглового 8.8.8.8/8.8.4.4 то саме для Вас нижченаведені поради допоможуть запобігти використанню Вашого сервера як рефлек тора, збереже Ваш трафік, ресурси машини і репутацію!
Що ж! Кілька нескладних кроків:
1.Забороняємо рекурсивні DNS запити:
В секцію options {} файла /etc/named.conf (або /var/named/chroot/etc/named.conf , якщо використовується chroot), додаємо
recursion no; allow-recursion { none; };
2.Включаємо ведення журналу (логу):
Секцію logging {} файла /etc/named.conf (або /var/named/chroot/etc/named.conf , якщо використовується chroot), приводимо (щонайменше) до такого виду:
logging { channel default_debug { file "/var/log/default_debug.log"; severity dynamic; }; channel security_file { file "/var/log/security.log" versions 3 size 1m; severity dynamic; print-time yes; }; category security { security_file; }; };
Рестартуємо BIND (named) на зразок service named restart і:
2.1. Перевіряємо виконання заборони на рекурсію:
dig -t ANY google.com @IP.ADDRESS.YOUR.SERVER
; <<>> DiG 9.7.4b1-RedHat-9.7.4-0.2.b1.fc14 <<>> -t ANY google.com @IP.ADDRESS.YOUR.SERVER
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: REFUSED, id: 57079
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
;; WARNING: recursion requested but not available
;; QUESTION SECTION:
;google.com. IN ANY
;; Query time: 10 msec
;; SERVER: IP.ADDRESS.YOUR.SERVER#53(IP.ADDRESS.YOUR.SERVER)
;; WHEN: Sat Aug 3 16:05:26 2013
;; MSG SIZE rcvd: 28
Status: REFUSED свідчить про вірне налаштування служби.
2.2. Перевіряємо журнал:
tail /var/log/security.log
В сервері під атакою будуть з’являтися безліч записів на зразок:
03-Aug-2013 15:37:35.433 client 198.1.88.35#19410: query (cache) 'stellolstel.cc/ANY/IN' denied
3. Налаштовуємо fail2ban:
Налаштовуємо фільтр, якщо його не було в стандартній поставці (/etc/fail2ban/filter.d/named-refused.conf):
# Fail2Ban configuration file for named (bind9). Trying to generalize the # structure which is general to capture general patterns in log # lines to cover different configurations/distributions # # Author: Yaroslav Halchenko # # $Revision$ # [Definition] # # Daemon name _daemon=named # # Shortcuts for easier comprehension of the failregex __pid_re=(?:\[\d+\]) __daemon_re=\(?%(_daemon)s(?:\(\S+\))?\)?:? __daemon_combs_re=(?:%(__pid_re)s?:\s+%(__daemon_re)s|%(__daemon_re)s%(__pid_re)s?:) # hostname daemon_id spaces # this can be optional (for instance if we match named native log files) __line_prefix=(?:\s\S+ %(__daemon_combs_re)s\s+)? # Option: failregex # Notes.: regex to match the password failures messages in the logfile. # Values: TEXT # failregex = %(__line_prefix)sclient <HOST>#.+: query(?: \(cache\))? '.*' denied\s*$ # Option: ignoreregex # Notes.: regex to ignore. If this regex matches, the line is ignored. # Values: TEXT # ignoreregex =
Включаємо правило блокування небажаного трафіку DNS-запитів (/etc/fail2ban/jail.conf):
[named-refused-udp] enabled = true filter = named-refused action = iptables-multiport[name=NAMEd, port="domain,953", protocol=udp] sendmail-whois[name=NAMEd, dest=main26@anyplace-hosting.net] logpath = /var/named/chroot/var/log/security.log #ignoreip = 168.192.0.1 bantime = 86400 ; 1 day findtime = 60 ; 1 minute maxretry = 10
Не забуваємо (при потребі) — внести список ІР-адрес, які слід ігнорувати при блокуванні (відповідно ці адреси не будуть блокуватися цим правилом).
При успішному спрацюванні в журналі (tail /var/log/fail2ban.log) будуть з’являтися записи на зразок:
2013-08-03 16:37:33,733 fail2ban.actions: WARNING [named-refused-udp] Ban 93.31.232.114 2013-08-03 16:38:47,313 fail2ban.actions: WARNING [named-refused-udp] Ban 174.132.78.251 2013-08-03 16:42:21,821 fail2ban.actions: WARNING [named-refused-udp] Ban 86.196.78.14 2013-08-03 16:44:21,180 fail2ban.actions: WARNING [named-refused-udp] Ban 74.63.223.98 2013-08-03 16:46:04,164 fail2ban.actions: WARNING [named-refused-udp] Ban 2.27.34.247 2013-08-03 16:46:27,923 fail2ban.actions: WARNING [named-refused-udp] Ban 81.218.109.90 2013-08-03 16:46:46,199 fail2ban.actions: WARNING [named-refused-udp] Ban 77.251.8.229 2013-08-03 16:47:11,003 fail2ban.actions: WARNING [named-refused-udp] Ban 149.154.208.179 2013-08-03 16:47:49,868 fail2ban.actions: WARNING [named-refused-udp] Ban 212.33.233.189 2013-08-03 16:49:55,215 fail2ban.actions: WARNING [named-refused-udp] Ban 130.0.125.26
І, звісно, якщо це не було зроблено раніше, то не забуваємо включити запуск fail2ban при завантаженні сервера 🙂
chkconfig fail2ban on