Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung | Nächste Überarbeitung Beide Seiten der Revision | ||
kb [2012/11/15 15:01] flacco [Gegenmaßnahmen] |
kb [2012/11/15 15:28] flacco [Gegenmaßnahmen] |
||
---|---|---|---|
Zeile 254: | Zeile 254: | ||
Soll der Nameserver allerdings öffentlich für alle Anfragen zur Verfügung stehen, kommt diese Abwehrstrategie nicht in Frage. | Soll der Nameserver allerdings öffentlich für alle Anfragen zur Verfügung stehen, kommt diese Abwehrstrategie nicht in Frage. | ||
+ | |||
+ | Es bietet sich an Clients deren Anfragen dem Muster des Angriffs entsprechen auf eine Blacklist zu setzen. Da die Angriffe allerdings von ständig neuen Hosts (vermutlich aus einem Bot-Netz) kommen, darf eine solche Blacklist aber nicht statisch sein. | ||
+ | |||
+ | Generell kann //**bind**// über die Direktive "//allow-query//" Anfragen mit einem "Refused" beantworten oder mit der Direktive "//blackhole//" gänzlich ins Leere laufen lassen. Da es ja um die Vermeidung von Traffic geht bietet sich Letzteres an. Nützlich ist natürlich auch, dass //**bind**// mit Access-Control-Lists umgehen kann. | ||
+ | |||
+ | Zur Abwehr habe ich eine externe Konfigurationsdatei erzeugt, die lediglich eine ACL namens "blackhole" enthält. Die darin aufgeführte Liste wird dynamisch durch ein per Cron-Job regelmäßig ausgeführtes Shellscript gepflegt. Das Shellscript durchsucht beim Aufspüren der Angreifer wiederum die Datei "/var/log/messages" nach entsprechenden Einträgen. Voraussetzung ist ein aktiviertes Query-Logging. | ||
+ | |||
+ | Das Shellscript: | ||
+ | |||
+ | <code> | ||
+ | #!/bin/bash | ||
+ | # Dynamisch Blacklist fuer bind erzeugen | ||
+ | cat /var/log/messages |grep "IN ANY +E" |cut -d " " -f7|cut -d "#" -f1| sort -u >> /var/tmp/badhosts.tmp | ||
+ | cat /var/tmp/badhosts.tmp | sort -u > /var/tmp/badhosts | ||
+ | |||
+ | # Attacking Hosts acl erstellen | ||
+ | echo "acl blackhole {" > /etc/named.d/named.blackhole | ||
+ | |||
+ | for badhost in `cat /var/tmp/badhosts`;do | ||
+ | echo -e "\t$badhost;" >> /etc/named.d/named.blackhole | ||
+ | done | ||
+ | |||
+ | echo -e "};\n" >> /etc/named.d/named.blackhole | ||
+ | |||
+ | # bind reload | ||
+ | /etc/init.d/named reload | ||
+ | </code> | ||
+ | |||
+ | Das geht sicherlich auch noch eleganter, aber auf die Schnelle erfüllte es seinen Zweck. Ausgeführt wird das Script einmal pro Minute. Häufig, aber erforderlich. | ||
+ | |||
+ | In der Datei "named.conf" wird zunächst vor der Options-Sektion die vom Shellscript erzeugte Konfigurationsergänzung "named.blackhole" eingebunden: | ||
+ | |||
+ | <code> | ||
+ | ... | ||
+ | include /etc/named.d/named.blackhole | ||
+ | ... | ||
+ | </code> | ||
+ | |||
+ | Innerhalb der Options-Sektion wird //**bind**// dann lediglich mitgeteilt, was er mit der generierten ACL machen soll: | ||
+ | |||
+ | <code> | ||
+ | blackhole { blackhole; 2.0.0.0/8; 224.0.0.0/3; }; | ||
+ | allow-query { any; }; | ||
+ | </code> | ||
+ | |||
===== Postfix, Amavis & Dovecot ===== | ===== Postfix, Amavis & Dovecot ===== | ||