Categories
Linux Networking

DNS DDOS: fail2ban mit Bind

In letzter Zeit werden einige DNS Server mittels Anfragen wie die folgenden geflutet.

query: ripe.net IN ANY +ED
query: isc.org IN ANY +ED

Mittels fail2ban (“apt-get install fail2ban”) kann man diese Querys recht einfach auf die schwarze Liste setzen und mit iptables blocken. Dazu muss der Named erst mal alle Querys loggen:

# /etc/bind/named.conf.local

logging {
    channel query.log {
        file "/var/log/named/query.log" versions 0 size 1m;
        severity debug 3;
        print-time yes;
    };
    category queries { query.log; };
};

Das “versions 0 size 1m” gibt an, das Named eine Datei von 1MB Größe immer wieder überschreiben soll. Das File hätte ohne diese Anweisung schnell einige GB erreicht…

Für fail2ban habe ich hier ein quick-and-dirty script angepasst, welches auf die beiden oben genannten Domains testet (Download: named-ddos.conf). Das Rezept ist auch gut anpassbar für eigene Zwecke. Das Script “named-ddos.conf” gehört nach “/etc/fail2ban/filters.d/”.

In der /etc/fail2ban/jail.conf muss das Rezept jetzt noch aktiviert werden:

[named-ddos-tcp]
enabled  = true
port     = domain,953
protocol = tcp
filter   = named-ddos
logpath  = /var/log/named/query.log
maxretry = 8

[named-ddos-udp]
enabled  = true
port     = domain,953
protocol = udp
filter   = named-ddos
logpath  = /var/log/named/query.log
maxretry = 8

Nach einem restart von fail2ban sollte /var/log/fail2ban.log anzeigen, dass IPs gebannt werden:

2012-08-02 22:56:44,886 fail2ban.actions: WARNING [named-ddos-udp] Ban 63.166.xxx.xxx
2012-08-02 22:56:44,903 fail2ban.actions: WARNING [named-ddos-udp] Ban 216.9.xxx.xxx

Wenn alles funktioniert würde ich den loglevel in der /etc/fail2ban/fail2ban.conf auf “1” setzen damit das logfile nicht überläuft.

Nutzung auf eigene Gefahr ;-) Man sollte sich dessen bewusst sein, dass u.U. auch “legale” User ausgesperrt werden könnten und bei Bedarf die Schwellwerte anpassen.