Hetzner - DokuWiki

Knockd

Inhaltsverzeichnis

Vorwort

In diesem kleinen Tutorial möchte ich nun erklären wie wir mit hilfe von Knock und iptables unseren SSHD ein wenig absichern.

In diesem Tutorial verwende ich Gentoo! Es kann bei anderen Distributionen möglicherweise etwas anders sein!

Testet solche Dinge bitte erst lokal! Wenn ihr Fehler macht, sperrt ihr euch gegebenenfalls von eurem Server aus!

Jeder Mensch macht mal Fehler. Auch ich. Sollte ich hier irgendwo einen gemacht haben, ist das allein euer Ding, also lest euch alles genau durch und kontrolliert alles genau!

Erklärung

Wenn unser Knockd fertig eingerichtet ist, wird man nurnoch mithilfe von knock auf den Server via SSH zugreifen können.

Das würde dann in etwa so aussehen:

knock <unsere ip oder domain> 1234 5678 91011
ssh user@host

Installation

Es wird sicher bei fast jeder Distribution im package System zu finden sein. Bei Gentoo z.B.

emerge knock

Ansonsten: Knock.

Ich denke dazu brauche ich nicht viel erklären, da jeder Admin in der lage sein sollte eine App aus den Sources zu bauen.

Konfiguration

Wir haben nun (je nach installationsweise) in /etc eine knockd.conf.

Diese Datei editieren wir nun:

[options]
       logfile = /var/log/knockd.log
[opencloseSSH]
       sequence      = 1234,5678,9101
       seq_timeout   = 15
       tcpflags      = syn
       start_command = /sbin/iptables -A open -s %IP% -p tcp --dport 22 -j ACCEPT
       cmd_timeout   = 10
       stop_command  = /sbin/iptables -D open -s %IP% -p tcp --dport 22 -j ACCEPT

Erklärungen dazu:

[options] = grundeinstellungen für den knockd
logfile = speicherort für die knockd logs.


[opencloseSSH] = in dem fall öffnen und auch wieder schliessen des SSH ports.
sequence = die ports auf die wir anklopfen müssen damit wir rein gelassen werden :)
seq_timeout = die zeit die der knockd wartet bis die ganze sequence zu ende ist.
seq_timeout muss grösser sein als cmd_timeout!
tcpflags = auf welche pakete der knockd reagieren soll (fin|syn|rst|psh|ack|urg).
start_command = das cmd was beim erfolgreichen anklopfen "als erstes" ausgeführt wird.
cmd_timeout = man kann es mit einem sleep vergleichen also nach 10 sek z.b. wird stop_command aufgerufen.
stop_command = der endbefehl wie in unserem beispiel zum entfernen der port 22 zugriffserlaubnis für ip xyz.

Damit kann man nun auch ein wenig rumspielen... wer nicht genau weiss was er da macht sollte es lassen :P.

Testen

Nun startet wir den knockd erstmal zum testen:

knockd --debug --verbose
odin ~ # knockd --debug --verbose
config: new section: 'options'
config: log file: /var/log/knockd.log
config: new section: 'opencloseSSH'
config: opencloseSSH: sequence: 1234:tcp,5678:tcp,9101:tcp
config: opencloseSSH: seq_timeout: 15
config: tcp flag: SYN
config: opencloseSSH: start_command: /sbin/iptables -A open -s %IP% -p tcp --dport 22 -j ACCEPT
config: opencloseSSH: cmd_timeout: 10
config: opencloseSSH: stop_command: /sbin/iptables -D open -s %IP% -p tcp --dport 22 -j ACCEPT
ethernet interface detected
Local IP: 192.168.2.3
listening on eth0...

Von einem anderen Rechner aus klopfen wir nun an:

knock 192.168.2.3 1234 5678 9101

Nun sollte auf dem Server folgendes zu sehen sein:

2006-10-27 15:41:57: tcp: 192.168.2.9:52946 -> 192.168.2.3:1234 74 bytes
192.168.2.9: opencloseSSH: Stage 1
2006-10-27 15:41:57: tcp: 192.168.2.9:59128 -> 192.168.2.3:5678 74 bytes
192.168.2.9: opencloseSSH: Stage 2
2006-10-27 15:41:57: tcp: 192.168.2.9:51323 -> 192.168.2.3:9101 74 bytes
192.168.2.9: opencloseSSH: Stage 3
192.168.2.9: opencloseSSH: OPEN SESAME
opencloseSSH: running command: /sbin/iptables -A open -s 192.168.2.9 -p tcp --dport 22 -j ACCEPT
192.168.2.9: opencloseSSH: command timeout
opencloseSSH: running command: /sbin/iptables -D open -s 192.168.2.9 -p tcp --dport 22 -j ACCEPT

Wenn das der fall ist sind wir fertig mit der Konfiguration und können den knockd nun starten.

Starten

Wenn ihr den Knockd aus dem package System eurer Distri Installiert sollte normalerweise dort ein init script vorhanden sein.

Bei Gentoo z.B. ist eins vorhanden und wir starten ihn einfach via:

/etc/init.d/knock start

Das sollte bei anderen Distris ähnlich sein.

Nun sollte man ihn auch beim booten mitstarten lassen (auch je nach distri anders).

Bei Gentoo würde das so aussehen:

rc-update add knock default

Schlusswort

Nun sind wir fertig mit allem und der Knockd läuft.

Ich habe hier unten mal ein paar links zusammengefasst und werde auch noch einen wiki eintrag zum SSHD bzw. zu iptables hinzufügen.

Wer mag kann ja auch gerne ein paar externe links zu Iptables und SSHD hinzufügen.

Links

Knock
SSHD
iptables

--idle 16:02, 27. Nov 2006 (CET)



© 2018. Hetzner Online GmbH. Alle Rechte vorbehalten.