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.


