Dienstag, 22 Mai, 2018

Wer einen Linux Server betreibt und bei seinem Provider keine vorgeschaltetet Firewall erhält, hat es in der Regel recht schwer Attacken auf den SSH-Port zu unterbinden. Mit dem Dienst Knock ist es möglich Ports nach außen zu sperren und erst bei einem korrekten Anklopfen einer vorher festgelegten Port-Sequenz, wird der Port für die anklopfenden freigeschaltet.

Die Verwendung von Knock macht den versteckten Dienst nicht sicherer, da die Anklopfsequenz mitgeschnitten werden könnte, allerdings bleiben standard Bruteforce-Attacken aus den Logdateien und ernsthafte Attacken werden einfacher zu erkennen. Ein deutlich größerer Sicherheitsgewinn ist da schon eher, dass der Header des SSH-Ports nicht mehr adhoc lesbar ist, da dieser schon viel über die verwendet Distribution und über deren Patchlevel verrät.

Der hier beschriebene Weg, um ein SSH-Port zu verstecken, ist nur ein Beispiel und kann natürlich auf jeden Port und den dahinter liegenden Dienst angewendet werden.

Installation

Unter Debian und Ubuntu:

apt-get install knockd

Unter RedHat oder CentOS:

yum install knock

Konfiguration

In der /etc/knockd.conf werden die Klopfsequenzen definiert. In der Standardkonfiguration mit den Ports 7000,8000 und 9000. Wenn die Anklopfsequenz korrekt war, wird das Kommando ausgeführt, in diesem Fall die Portöffnung 22 für die anklopfende IP-Adresse. Die closeSSH-Konfiguration erlaubt es den Port bzw. die IPTables Regel per Anklopfsequenz wieder zu löschen.

[options]
UseSyslog

[openSSH]
sequence = 7000,8000,9000
seq_timeout = 5
command = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags = syn

[closeSSH]
sequence = 9000,8000,7000
seq_timeout = 5
command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags = syn

Damit der Dienst überhaupt gestartet werden kann, muss in der /etc/default/knockd der Start aktiviert werden.

START_KNOCKD=1

Den Dienst Knock starten:

/etc/init.d/knockd start
  • Bitte darauf achten, das keine eigene Regel unter IPTables die der Knock widerspricht bzw. berschreibt.
  • Die Sequenz sollte mit eigenen Nummer versehen werden !

Anwendung

Wenn alles soweit richtig eingerichtet ist, dürfte der Port (22) nicht mehr zu erreichen sein. Wer sich jetzt an dem Server anmelden möchte, muss entsprechend anklopfen, dazu muss der Client ebenfalls den Dienst Knock installiert haben, allerdings nicht konfiguriert und auch nicht als Dienst gestartet!

knock  7000 8000 9000

Nun sollte man wieder an den Port und den damit verbunden Dienst kommen. Um den Port wieder für die anklopfende IP-Adresse zu schließen wird der gleiche obige Befehl genutzt, nur mit der anderen Sequenz [closeSSH].

knock  9000 8000 7000