Die hier vorgestellte Variante des Port-Knocking wird auf unseren eigenen Server bereits seit einiger Zeit eingesetzt und sorgt - unter anderem - dafür, dass es keine Versuche mehr gibt sich auf den Geräten per SSH einzuloggen. Implementiert wurde es von Christian Hesse <mail@eworm.de>.

Im Gegensatz zu vielen anderen Verfahren wird bei dieser Variante nicht versucht auf unterschiedlichen Ports zu horchen und die Freigabe der Dienste zu machen nachdem alle Ports angesprungen wurden. Stattdessen wird das ICMP - Protokoll mit Paketen des Typs 8 (Echo-Request) eingesetzt.

Hierdurch ist für einen Angreifer mit Tools wie nmap, etc. nicht erkennbar, ob auf einem Port gehorcht wird, denn ICMP Typ 8 wird meist offen gelassen um auf Pings zu reagieren.

Und genau dieses Tool - ping - ist nachher der Schlüssel zum Schloss. Grundsätzlich ist dieser Befehl auf allen Plattformen verfügbar und kann auf den meisten auch in einer Art eingesetzt werden in der er zum Port-Knocking genutzt werden kann.

Nun, aber wie identifiziert man sich nun per Ping? Schauen wir mal einen normalen ping an:

user@linux $ ping -c 1 1.1.1.1
PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.
64 Bytes von 1.1.1.1: icmp_seq=1 ttl=118 Zeit=19.5 ms
--- 1.1.1.1 ping statistics ---
1 Pakete übertragen, 1 empfangen, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 19.545/19.545/19.545/0.000 ms

Dem ping wird die Adresse für den Ping (1.1.1.1) mitgegeben und zusätzlich ein Parameter (-c 1) um nur ein einzelnes Paket zu senden. Dieses Paket ist dann ein ICMP Paket vom Typ Echo-Request (8).

Im Normalfall - unter Linux - werden in das Paket 56 Bytes gepackt. Zusammen mit dem benötigten Paket - Header (28 Bytes) wird das Paket dann 84 Bytes gross. Genau diese Größe kann innerhalb der Firewall - Regeln des Mikrotik abgefragt werden.

Mit einem zusätzlichen Parameter (-s) können wir die Größe des Paketes anpassen:

user@linux $ ping -c 1 -s 100 1.1.1.1
PING 1.1.1.1 (1.1.1.1) 100(128) bytes of data.
108 Bytes von 1.1.1.1: icmp_seq=1 ttl=58 Zeit=19.4 ms
--- 1.1.1.1 ping statistics ---
1 Pakete übertragen, 1 empfangen, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 19.416/19.416/19.416/0.000 ms

In diesem Fall 100 + 28 Bytes. Der Mikrotik sieht also 128 Bytes, die ankommen.

Zuletzt geändert: Mittwoch, 6. Januar 2021, 13:51