IP Filter…

Um Dienste von dem Zugriff durch bestimmte IP-Adressen zu sperren oder bestimmte IP Ports zu verbieten bietet sich ein IPTables Block an.

iptables -N block-enemy
iptables -A block-enemy -j DROP

Ziel-Port in die Blockliste aufnehmen

iptables -I INPUT 1 -p tcp --dport 3306 -j block-enemy
iptables -I INPUT 1 -p tcp --dport 8080 -j block-enemy

Eine IP-Adresse in die Liste Aufnehmen:

iptables -I INPUT 1 -p tcp --source 190.17.238.139 -j block-enemy

Eine Anwendung (MySQL Standartport) die Liste Aufnehmen:

iptables -I INPUT 1 -p tcp --dport 3306 -j block-enemy

Entfernen lässt sich der Inhalt des Blocks wieder mit:

iptables --flush block-enemy

Login versuche…

Es gibt auf jedem, offen im Internet zu erreichenden Server eine Unzahl von Login Versuchen mit den verscheidensten Benutzernahmen. Diese Bruteforce-Angriffe können einen Server auslasten und, im Schlimmsten Fall wird auch bei größter Vorsicht doch einmal ein Kennwort erraten.

Die SSH-Loginversuche lassen sich unter Linux mit den folgenden Snippets beobachten.:

cat /var/log/auth.log |grep "Failed password for invalid user "|cut -d' ' -f11|sort|uniq
cat /var/log/auth.log |grep "Failed password for invalid user "|cut -d' ' -f11|sort|wc -l

Um diese Bruteforce Passwort-Versuche zu unterbinden bietet es sich an im IPTABLES die Fehlerhaften Logins zu Monitoren und nach einigen Versuchen den Port 22, oder entsprechenden SSH-Port für einige Zeit zu sperren.

Im folgenden Beispiel wird eine Ausnahmeliste erszellt, bei diesen IP-Adressen wird nicht gesperrt, und im Anschluss nach 2 erfolglosen Loginversuchen ein Logeintrag gemacht und der Port 22 für 240 Sekunden gesperrt.

iptables -N SSH_WHITELIST
iptables -A SSH_WHITELIST -s 192.168.0.1 -m recent --remove --name SSH -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j SSH_WHITELIST
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 240 --hitcount 2 --rttl --name SSH -j ULOG --ulog-prefix SSH_brute_force
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 240 --hitcount 2 --rttl --name SSH -j DROP