NetVision-Technik

NetVision-Technik (http://www.netvision-technik.de/forum/index.php)
-   Security (http://www.netvision-technik.de/forum/forumdisplay.php?f=32)
-   -   Knockd Installation (http://www.netvision-technik.de/forum/showthread.php?t=4585)

Solstice 22.12.2009 11:04

Knockd Installation
 
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:
Code:

apt-get install knockd
2. knockd konfigurieren:
Datei: /etc/default/knockd
Klicke hier, um den gesamten Text zu sehen

################################################
#
# 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
Klicke hier, um den gesamten Text zu sehen

[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
(Windows Xp/Vista: Cygwin/Win32 Knock Client )
Den Ordner schiebt ihr dorthin wohin ihr ihn haben wollt, ist völlig egal.

4. Neue Batch Datei runterladen (Anhang)
Klicke hier, um den gesamten Text zu sehen
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:
Zitat:

@echo off
ist damit die Ausgabe unterdrückt wird
Zitat:

cls
ist damit der Konsolenschirm gesäubert wird

Dann der Befehl:
Zitat:

knock *ip-server* -v 2222:tcp, 3333:tcp, 4444:tcp, 5555:udp
So 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
Zitat:

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
Zitat:

knock *ip-server* -v 2222:tcp
Pause
Zitat:

ping 127.0.0.1 -n 1
2. Knock
Zitat:

knock *ip-server* -v 3333:tcp
Pause
Zitat:

ping 127.0.0.1 -n 1
3. Knock
Zitat:

knock *ip-server* -v 4444:tcp
Pause
Zitat:

ping 127.0.0.1 -n 1
4. Knock
Zitat:

knock *ip-server* -v 5555:udp
Nach 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:
Klicke hier, um den gesamten Text zu sehen

(Mit 5 anderen Knocking Ports)

Sequenz:
Zitat:

sequence = 345:tcp,6654:udp,6578:tcp,2465:udp,5665:tcp
Batch:
Zitat:

@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:
Zitat:

*deineip*: opencloseSSH: OPEN SESAME
Da 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
Klicke hier, um den gesamten Text zu sehen
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

Zero111 22.12.2009 13:19

nette anleitung ;)

ich verwende seit einiger zeit knock mit einer firewall die alle ports außer port 80 abdichtet

diese firewall wird dann über den knock abgeschaltet und nach dem timeout wieder angeschaltet

bisher ohne probleme und man fühlt sich besser *g*

gotthummer 22.12.2009 13:30

hatte ich das nicht schon einmal irgendwo gepostet ?

Zero111 22.12.2009 13:32

jup im glossar ist noch ne anleitung :D aber doppelt hält besser :D

Solstice 22.12.2009 13:35

im glossar steht noch ne knockd anleitung... aber etwas abgespeckter... von DarkEvil...
von dir ist mir das jetzt nicht bekannt GH.

Zero... hast du das proble auch dass bei normalaufruf der client schneller sendet als der server empfangen kann und deshalb die reihenfolge der sequenz durchnanderkommt?
ich hab hier zwar nen workaround rein aber nett find ich das nich...

gotthummer 22.12.2009 13:40

Irgendwo hatte ich das hier mal gepostet mit nem link und dark hat dann die anleitung nochmal ins Glossar gesetzt als der link nicht mehr ging so war das glaube ich

Zero111 22.12.2009 14:27

Solstice dieses Problem hab ich net... meine Batchdatei besteht nur ein einer Zeile :D nach klick hab ich sofort zugriff

rodi 22.12.2009 14:41

müssen es bei der sequenz immer die selben zahlen sein:
Code:

sequence      = 2222:tcp,3333:tcp,4444:tcp,5555:udp
oder kann ich hier warlos mischen?
z.b.
Code:

sequence      = 2754:tcp,8976:tcp,2445:tcp,0044:udp

Solstice 22.12.2009 15:03

du kannst wahllos mischen... mit 0 sollten sie jedoch nicht beginnen... beachte auch dass der höchste port 65535 ist. alle darüber sind ungültig.

Ich hab nur ein beispiel gemacht... bzw zwei wenn du dir den beispielspoiler auch anschaust.

Edit:
@Zero
Hier so wie es bei mir mit einem Befehl läuft ohne Zeitverzögerung:
Auf Client:
http://www.info-panel.net/test/uploa...2909client.png

Auf dem Server kommt das aber so an:
http://www.info-panel.net/test/uploa...2842server.png

Also der erste ist dann noch richtig udn die anderen durcheinandergewürfelt...

Edit2:
Weils mir grad so spass macht hab ich noch n paar gemacht... hähä
Meine Sequences hab ich rausgelöscht XD
Klicke hier, um den gesamten Text zu sehen

[closeServer]
sequence =
seq_timeout = 20
tcpflags = syn
command = iptables -A INPUT -p tcp --dport ! 80 -j DROP

[openServer]
sequence =
seq_timeout = 20
tcpflags = syn
command = iptables -D INPUT -p tcp --dport ! 80 -j DROP

[closeServer_http]
sequence =
seq_timeout = 20
tcpflags = syn
command = iptables -A INPUT -p tcp --dport 80 -j DROP

[openServer_http]
sequence =
seq_timeout = 20
tcpflags = syn
command = iptables -D INPUT -p tcp --dport 80 -j DROP

Feudas 22.12.2009 17:42

man leute die einzelnen packete haben einfach unterschiedlichelaufzeiten.
würde der knock client inteliegenter alles in einen frame werfen wäre das egal aber so ist jedes anklopfen ein packet und kann unterschiedlich schnell geroutet werden.
das ist standart bei tcp :D


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:48 Uhr.

Powered by vBulletin® Version 3.8.9 (Deutsch)
Copyright ©2000 - 2024, vBulletin Solutions, Inc.