Zugriffe auf Services per Iptables limitieren

Erst kürzlich habe ich eine Variante gesucht um den SSH Zugang meines Heimrechners vor Verbindungsversuchen einfach abzusichern. Skripte wie fail2ban oder ein Portknocker wie knockd sind für mich ausgeschieden, da in beiden Fällen zusätzlich Software installiert werden muß und weiters im zweiten Fall sogar ein weiterer Dienst an der Netzwerkschnittstelle lauscht. Ein weiteres Problem bei der Benutzung von knockd ist die Änderung der Portsequenz in regelmässigen Abständen, wozu entweder ein Parser aus der Konigurationdatei aufgerufen werden müßte der die aktuelle Sequenz einliest oder cron o.ä. benutzt werden müsste um die Portsequenz hardcodiert in der Konfigurationsdatei zu ändern. Ein weiteres Problem stellt dann die Syncronisation der Portsequenzlisten zwischen Client und Server dar. Aus diesen Gründen scheiden die obigen Varianten leider aus.

Aber eines haben beide gemeinsam, in beiden Fällen werden mit Iptables Regeln Eingriffe in das Verhalten der Firewall vorgenommen. Nach kurzem Suchen mit $Suchmaschine bin ich auf folgenden Treffer gestossen.

http://www.debian-administration.org/articles/187

Auf meine Iptables angewendet ergeben sich folgende Regeln:

# cat firewall.sh | grep SSH
SSH_PORT=22
iptables -N SSH_TEMP
iptables -I SSH_TEMP -m state --state NEW -m recent --set
iptables -I SSH_TEMP -m state --state NEW -m recent --update --seconds 120 --hitcount 4 -j LOG_DROP
iptables -A SSH_TEMP -j LOG_ACCEPT
iptables -A INPUT -p tcp --dport $SSH_PORT -j SSH_TEMP

Diese Lösung scheint genau mein Problem zu lösen, wenn auch mit einigen Nebenwirkungen. Nachdem alle neuen Verbindungen mit der im Artikel beschriebenen Regel limitiert werden gibt es zumindest zwei Scenarien wie man sich für die konfiguriete Zeit, in meinem Fall 4 Versuche in 2 Minuten, aus dem Server aussperrt, dh nicht mehr neu verbinden kann.

  • Wenn man sich in einem instabilen Netz befindet und es sehr oft zu Verbindungsabbrüchen kommt, ist man versucht nach jedem Verbindungsabbruch neu zuverbinden. Jedoch nach dem 4. Mal ist fürs Erste für zwei Minuten Schluss, so die Verbindungsversuche zu schnell aufeinander folgen.
  • Man sollte umbedingt das Vervollständigen per Tabulatortaste beim Befehl scp vermeiden, denn bei jedem Vervollständigen wird erneut zum Server verbunden und somit sperrt der Server die IP für neue Verbindungen.

Wenn man sich dieser Mankos bewußt ist und entweder die Limits seinem Verhalten nach richtig setzt oder sich seiner Konfiguration entsprechend verhält ist dies die vermutlich eine der einfachsten Methoden, eine sichere Konfiguration der Services vorausgesetzt, den Zugang auf diese, in meinem Fall SSH, mit Bordmitteln weiter zu limitieren.