Solstice
22.12.2009, 12:04
Dies ist ein kleines Tut wie ihr auf eurem Server Knockd installieren könnt.
Serverseitig verwende ich Linux Debian-etch
Clientseitig Windows XP
In erster Linie ist die sein Tut zum absichern von SSH
Das Tutorial ist akribisch in der Reihenfolge zu befolgen, andernfalls werdet ihr euch vom System aussperren! Ich übernehme keinerlei Gewährleistung und gehe davon aus dass dieses Tut nur von denjenigen angewendet wird die sich mit Servern schon eingehend befasst haben.
Bei anderen Betriebssystemen kann es Abweichungen geben.
Was tut knockd?
Knockd ist ein Programm, dass Security by Obscurity bietet, dh. ein eventueller Hacker mit Portscan kann nicht entdecken da die Portöffnung selbst durch eine Art Passwort geschützt ist, dh der Port Standardmässig ZU ist. Diese Art Passwort wird durch eine festgelegte Reihenfolge von Paketen definiert die knockd an bestimmten festgelegten Ports des Servers gemäss seiner Konfiguration erwartet damit er einen Befehl auf dem Server ausführt.
In unserem Fall beeinflussen wir damit die Linux Firewall, die iptables
Wozu also?
Gehn wir von einem nicht mit allen Wassern gewaschenen Hacker aus, der nen Portscan macht... ohne Knockd und installiertem SSH sieht der Hacker also ohne weiteres das der PORT offen ist.
Falls wir Knockd installiert haben und damit den SSH Port verschleiert haben (also solange geschlossen bis wir 'anklopfen') sieht dieser hacker diesen Port zu und kann auch nichts machen da er auch wirklich zu ist *lmao*
Da wir ja knockd installiert und konfiguriert haben, können wir aber auf den Server verbinden sobald wir vorher angeklopft haben... dies erkläre ich in diesem Tutorial.
Howto:
1. knockd Installieren:
apt-get install knockd2. knockd konfigurieren:
Datei: /etc/default/knockd
################################################
#
# knockd's default file, for generic sys config
#
################################################
# control if we start knockd at init or not
# 1 = start
# anything else = don't start
START_KNOCKD=1
# command line options
#KNOCKD_OPTS="-i -d eth0"
Datei /etc/knockd.conf
[options]
logfile = /var/log/knockd.log
[opencloseSSH]
sequence = 2222:tcp,3333:tcp,4444:tcp,5555:udp
seq_timeout = 20
tcpflags = syn
start_command = iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
cmd_timeout = 3600
stop_command = iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
Sequenz anpassen, wie ihr sie haben wollt. Form *PORT*:protokoll
Protokoll ist tcp und udp möglich, ich empfehle zu mischen.
3. Client Runterladen:
zeroflux.org (http://www.zeroflux.org/projects/knock)
(Windows Xp/Vista: Cygwin/Win32 Knock Client (http://www.zeroflux.org/proj/knock/files/knock-cygwin.zip) )
Den Ordner schiebt ihr dorthin wohin ihr ihn haben wollt, ist völlig egal.
4. Neue Batch Datei runterladen (Anhang) leider nötig, da der Konsolenbefehl allein zu schnell ist und die sequenz beim Server dann in unterschiedlicher reihenfolge ankommt... was zur folge hat dass der Knock nicht erfolgreich ist, mit batch kann man nen kleinen Zeitpuffer dawzischen machen
5. Batch anpassen
Batches kann man mit nem ganz normalen Editor bearbeiten.
Die Batch baut sich so auf:
@echo offist damit die Ausgabe unterdrückt wird
cls ist damit der Konsolenschirm gesäubert wird
Dann der Befehl:
knock *ip-server* -v 2222:tcp, 3333:tcp, 4444:tcp, 5555:udpSo würde er zumindest aussehen, jedoch fiel mir auf, wie oben schon gesagt dass er die Pakete so verdammt schnell abschickt, dass sie beim server als
2222:tcp, 4444:tcp, 3333:tcp, 5555:udp ankommen oder schlimmer durchgewürfelt, also in falscher reihenfolge.
Mein Workaround ist hier also eine Batch die zwischen jedem Paket eine minimale Pause einlegt.
Die Pause wird durch einen 1 Sekunden ping auf den eigenen Rechner erreicht (der Befehl war einfach als einzige Pausenfunktion auf allen Windows OS gleich.)
Die Batch baut die Sequenz also so auf:
1. Knock
knock *ip-server* -v 2222:tcpPause
ping 127.0.0.1 -n 12. Knock
knock *ip-server* -v 3333:tcpPause
ping 127.0.0.1 -n 13. Knock
knock *ip-server* -v 4444:tcp Pause
ping 127.0.0.1 -n 14. Knock
knock *ip-server* -v 5555:udpNach dem Letzten muss keine Pause, es sei denn es folgen weitere Knocks.
Diese Batch wurde aufgrund der Beispiel sequenz gemacht, dh ihr solltet eure Sequenz entsprechend ändern.
Beispiel:
(Mit 5 anderen Knocking Ports)
Sequenz:
sequence = 345:tcp,6654:udp,6578:tcp,2465:udp,5665:tcpBatch:
@echo off
cls
knock 91.121.152.55 -v 345:tcp
ping 127.0.0.1 -n 1
knock 91.121.152.55 -v 6654:udp
ping 127.0.0.1 -n 1
knock 91.121.152.55 -v 6578:tcp
ping 127.0.0.1 -n 1
knock 91.121.152.55 -v 2465:udp
ping 127.0.0.1 -n 1
knock 91.121.152.55 -v 5665:tcp
Es können beliebig viele Knocks vereinbart werden. ich empfehle MINDESTENS 3 verschiedene. Gut finde ich 4 , aber für paranoide gehen unendlich mehr....
Batch speichern!
6. Testlauf!
Konsole eingeben:
knockd --debug --verbose
Es sollten einige Zeilen mit infos kommen an dessen Ende:
listening on eth0...
steht.
Dann klopft ihr mit euer gerade eben gemachten Batch an indem ihr ebendiese durch einen doppelklick ausführt.
in euer Konsole sollte dann eine Reaktion erfolgen die, bei erfolg die Steps angibt (jedes am richtigen Port angekommene paket ist ein Step) und dann nach den Steps diese Nachricht gibt:
*deineip*: opencloseSSH: OPEN SESAMEDa haben die Entwickler wohl etwas Humor gehabt... nunja XD
Danach wird der befehl den wir vorher in start_command festgelegt haben ausgeführt.
nach cmd_timeout (in sekunden) wird der stop_command ausgeführt.
ersterer fügt der Firewall eine regel hinzu die UNSERER Ip den Zugang zum SSH Port gewährt. Letztere löscht ebendiese Regel nach der Zeit aus cmd_timeout. Wir haben hier 1 Stunde Konfiguriert. Solange kann man arbeiten am SSH bevor man erneut Knocken muss.
7. knockd aktivieren
befehl in der konsole:
/etc/init.d/knockd restart
knockd --debug --verbose
von vorher hat knockd schon aktiviert, allerdings nur im debugmodus, daher ein einfaches restart
8. SSH Port Sperren
Ist dies alles erfolgreich, sperren wir nun den SSH Port komplett.
Das ist wohl das gefährlichste, denn wenn in unserer ganzen vorherigen Konfiguration was falsch ist, heißt das SSH zugang ade. Helfen tut dann nur noch direkt an den Server per Schnittstelle ,Providerseitige Hilfe oder (falls vorhanden) Administrationsoberfläche (Webmin etc.).
Also falls schiss bekommen... lieber jetzt aufhören bevor man viel ärger wegen unfähigkeit hat :P
Befehl der konsole:
iptables -A INPUT -p tcp --dport 22 -j DROP
9. Das wars eigentlich... nun solltet ihr erstmal aus der konsole fliegen.
Wiederverbinden wäre dann per Knocken und dann Verbinden per SSH client für 1 Stunde. Falls ihr etwas an der Konfiguration von knockd ändern wollt könnt ihr das jederzeit tun, müsst änderungen der Sequenz auch wieder auf eure batch übertragen. knockd muss nach Änderungen wieder neugestartet werden.
Als Anhängsel:
Ich habe ca. 5 Knockd Dokus gewälzt und Die Funktion der IPtables lernen müssen bis ich dieses Tut machen konnte und auch dass es auf meinem Server funktionierte. Während ich dies an meinem Server gemacht habe habe ich mich 3 Mal ausgesperrt gehabt... habe aber nun rausgefunden woran es lag und so läuft es nun auch auf meinem Server einwandfrei.
Grüße von mir...
Euer Sol
Serverseitig verwende ich Linux Debian-etch
Clientseitig Windows XP
In erster Linie ist die sein Tut zum absichern von SSH
Das Tutorial ist akribisch in der Reihenfolge zu befolgen, andernfalls werdet ihr euch vom System aussperren! Ich übernehme keinerlei Gewährleistung und gehe davon aus dass dieses Tut nur von denjenigen angewendet wird die sich mit Servern schon eingehend befasst haben.
Bei anderen Betriebssystemen kann es Abweichungen geben.
Was tut knockd?
Knockd ist ein Programm, dass Security by Obscurity bietet, dh. ein eventueller Hacker mit Portscan kann nicht entdecken da die Portöffnung selbst durch eine Art Passwort geschützt ist, dh der Port Standardmässig ZU ist. Diese Art Passwort wird durch eine festgelegte Reihenfolge von Paketen definiert die knockd an bestimmten festgelegten Ports des Servers gemäss seiner Konfiguration erwartet damit er einen Befehl auf dem Server ausführt.
In unserem Fall beeinflussen wir damit die Linux Firewall, die iptables
Wozu also?
Gehn wir von einem nicht mit allen Wassern gewaschenen Hacker aus, der nen Portscan macht... ohne Knockd und installiertem SSH sieht der Hacker also ohne weiteres das der PORT offen ist.
Falls wir Knockd installiert haben und damit den SSH Port verschleiert haben (also solange geschlossen bis wir 'anklopfen') sieht dieser hacker diesen Port zu und kann auch nichts machen da er auch wirklich zu ist *lmao*
Da wir ja knockd installiert und konfiguriert haben, können wir aber auf den Server verbinden sobald wir vorher angeklopft haben... dies erkläre ich in diesem Tutorial.
Howto:
1. knockd Installieren:
apt-get install knockd2. knockd konfigurieren:
Datei: /etc/default/knockd
################################################
#
# knockd's default file, for generic sys config
#
################################################
# control if we start knockd at init or not
# 1 = start
# anything else = don't start
START_KNOCKD=1
# command line options
#KNOCKD_OPTS="-i -d eth0"
Datei /etc/knockd.conf
[options]
logfile = /var/log/knockd.log
[opencloseSSH]
sequence = 2222:tcp,3333:tcp,4444:tcp,5555:udp
seq_timeout = 20
tcpflags = syn
start_command = iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
cmd_timeout = 3600
stop_command = iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
Sequenz anpassen, wie ihr sie haben wollt. Form *PORT*:protokoll
Protokoll ist tcp und udp möglich, ich empfehle zu mischen.
3. Client Runterladen:
zeroflux.org (http://www.zeroflux.org/projects/knock)
(Windows Xp/Vista: Cygwin/Win32 Knock Client (http://www.zeroflux.org/proj/knock/files/knock-cygwin.zip) )
Den Ordner schiebt ihr dorthin wohin ihr ihn haben wollt, ist völlig egal.
4. Neue Batch Datei runterladen (Anhang) leider nötig, da der Konsolenbefehl allein zu schnell ist und die sequenz beim Server dann in unterschiedlicher reihenfolge ankommt... was zur folge hat dass der Knock nicht erfolgreich ist, mit batch kann man nen kleinen Zeitpuffer dawzischen machen
5. Batch anpassen
Batches kann man mit nem ganz normalen Editor bearbeiten.
Die Batch baut sich so auf:
@echo offist damit die Ausgabe unterdrückt wird
cls ist damit der Konsolenschirm gesäubert wird
Dann der Befehl:
knock *ip-server* -v 2222:tcp, 3333:tcp, 4444:tcp, 5555:udpSo würde er zumindest aussehen, jedoch fiel mir auf, wie oben schon gesagt dass er die Pakete so verdammt schnell abschickt, dass sie beim server als
2222:tcp, 4444:tcp, 3333:tcp, 5555:udp ankommen oder schlimmer durchgewürfelt, also in falscher reihenfolge.
Mein Workaround ist hier also eine Batch die zwischen jedem Paket eine minimale Pause einlegt.
Die Pause wird durch einen 1 Sekunden ping auf den eigenen Rechner erreicht (der Befehl war einfach als einzige Pausenfunktion auf allen Windows OS gleich.)
Die Batch baut die Sequenz also so auf:
1. Knock
knock *ip-server* -v 2222:tcpPause
ping 127.0.0.1 -n 12. Knock
knock *ip-server* -v 3333:tcpPause
ping 127.0.0.1 -n 13. Knock
knock *ip-server* -v 4444:tcp Pause
ping 127.0.0.1 -n 14. Knock
knock *ip-server* -v 5555:udpNach dem Letzten muss keine Pause, es sei denn es folgen weitere Knocks.
Diese Batch wurde aufgrund der Beispiel sequenz gemacht, dh ihr solltet eure Sequenz entsprechend ändern.
Beispiel:
(Mit 5 anderen Knocking Ports)
Sequenz:
sequence = 345:tcp,6654:udp,6578:tcp,2465:udp,5665:tcpBatch:
@echo off
cls
knock 91.121.152.55 -v 345:tcp
ping 127.0.0.1 -n 1
knock 91.121.152.55 -v 6654:udp
ping 127.0.0.1 -n 1
knock 91.121.152.55 -v 6578:tcp
ping 127.0.0.1 -n 1
knock 91.121.152.55 -v 2465:udp
ping 127.0.0.1 -n 1
knock 91.121.152.55 -v 5665:tcp
Es können beliebig viele Knocks vereinbart werden. ich empfehle MINDESTENS 3 verschiedene. Gut finde ich 4 , aber für paranoide gehen unendlich mehr....
Batch speichern!
6. Testlauf!
Konsole eingeben:
knockd --debug --verbose
Es sollten einige Zeilen mit infos kommen an dessen Ende:
listening on eth0...
steht.
Dann klopft ihr mit euer gerade eben gemachten Batch an indem ihr ebendiese durch einen doppelklick ausführt.
in euer Konsole sollte dann eine Reaktion erfolgen die, bei erfolg die Steps angibt (jedes am richtigen Port angekommene paket ist ein Step) und dann nach den Steps diese Nachricht gibt:
*deineip*: opencloseSSH: OPEN SESAMEDa haben die Entwickler wohl etwas Humor gehabt... nunja XD
Danach wird der befehl den wir vorher in start_command festgelegt haben ausgeführt.
nach cmd_timeout (in sekunden) wird der stop_command ausgeführt.
ersterer fügt der Firewall eine regel hinzu die UNSERER Ip den Zugang zum SSH Port gewährt. Letztere löscht ebendiese Regel nach der Zeit aus cmd_timeout. Wir haben hier 1 Stunde Konfiguriert. Solange kann man arbeiten am SSH bevor man erneut Knocken muss.
7. knockd aktivieren
befehl in der konsole:
/etc/init.d/knockd restart
knockd --debug --verbose
von vorher hat knockd schon aktiviert, allerdings nur im debugmodus, daher ein einfaches restart
8. SSH Port Sperren
Ist dies alles erfolgreich, sperren wir nun den SSH Port komplett.
Das ist wohl das gefährlichste, denn wenn in unserer ganzen vorherigen Konfiguration was falsch ist, heißt das SSH zugang ade. Helfen tut dann nur noch direkt an den Server per Schnittstelle ,Providerseitige Hilfe oder (falls vorhanden) Administrationsoberfläche (Webmin etc.).
Also falls schiss bekommen... lieber jetzt aufhören bevor man viel ärger wegen unfähigkeit hat :P
Befehl der konsole:
iptables -A INPUT -p tcp --dport 22 -j DROP
9. Das wars eigentlich... nun solltet ihr erstmal aus der konsole fliegen.
Wiederverbinden wäre dann per Knocken und dann Verbinden per SSH client für 1 Stunde. Falls ihr etwas an der Konfiguration von knockd ändern wollt könnt ihr das jederzeit tun, müsst änderungen der Sequenz auch wieder auf eure batch übertragen. knockd muss nach Änderungen wieder neugestartet werden.
Als Anhängsel:
Ich habe ca. 5 Knockd Dokus gewälzt und Die Funktion der IPtables lernen müssen bis ich dieses Tut machen konnte und auch dass es auf meinem Server funktionierte. Während ich dies an meinem Server gemacht habe habe ich mich 3 Mal ausgesperrt gehabt... habe aber nun rausgefunden woran es lag und so läuft es nun auch auf meinem Server einwandfrei.
Grüße von mir...
Euer Sol