I.d.R. werden Linux Systeme mit SSH Ferngewartet. Doch wenn man mal einen Blick in das auth Logfile wirft wird einem manchmal ganz anders. Da wird teilweise alle x Sekunden versucht sich über SSH anzumelden. Auch ein umlegen des SSH Ports bringt da nicht immer das gewünschte Ergebniss.
Jeder hat mittlerweile schon was von Portknocking gehört. Das Prinzip das dahinter steckt ist relativ simpel. Der eigentliche Dienst Port wird von der Firewall blockiert. Möchte man nun die Anwendung dahinter erreichen so senden man Pakete eines vorher definierten Typs an vorher fesgelegte Ports. Erkennt das System innerhalb von X Sekunden die entsprechenden Pakte an den definierten Ports, so wird der Zugriff für das absenden System für eine bestimmte Zeit geöffnet. Für SSH reichen wenigen Sekunden, da die Verbindung auch nach blockierung des Ports noch aktiv bleiben kann (bereites initiierte Verbindungen dürfen nicht von der Firewall gekappt werden).
Nun aber zur Einrichtung des port knocking dameons…. Unter Debian gibt es ein Paket namens knockd das zuerst installiert werden muss…
apt-get install knockd
Anschließend muss der Dienst noch aktiviert werden
/etc/default/knockd START_KNOCKD=1
Nun kommt die Konfiguration des Daemons
/etc/knockd.conf[options] logfile = /var/log/knockd.log[openSSH] sequence = 1234,5678,9101 seq_timeout = 15 start_command = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT tcpflags = syn cmd_timeout = 30 stop_command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
Dieses Beispiel erwartet innerhalb von 15 Sekunden (seq_timeout) syn Pakete (tcpflags) auf den Ports 1234, 4567, 9101 (sequence) und erweitert nach erfolgreicher „Authentifizierung“ die iptables (start_command) um eine Regel die Verbindungen der Quelladresse auf Port 22 zulässt. Anschließend wird nach 30 Sekunden der Port 22 wieder geschlossen (cmd_timeout)
Um nun eine Verbindung aufzubauen müssen Sie zuerst an den entsprechenden Ports „anklopfen“
knock 1234 5678 9101 ssh host