port knocking, knockd und die Firewall

ptweety

Neuer User
Mitglied seit
3 Apr 2006
Beiträge
138
Punkte für Reaktionen
0
Punkte
0
Ich lese hier in der Sektion Sicherheit, dass eine gewissen Nachfrage nach port knocking auf der FritzBox besteht.

Dafür den knockd zu compilieren, sollte eigentlich nicht das Problem darstellen. Wie sieht es aber mit der zugehörigen Firewall aus? IMO gibt es zwei Möglichkeiten, wie per knockd Ports freigegeben werden können:

  1. Eine bestehende Portfreigabe aus dem Webinterface wird an/aus geschaltet
  2. Wenn iptables installiert sind, können Regeln entsprechend gesetzt werden

Die 2. Möglichkeit würde immer auch die Firewall des ds-mod voraussetzen und das ist mir eigentlich zu kompliziert. Da die Portfreigaben ja so schön per Webinterface zu konfigurieren sind daher eine Frage zu 1.: Kann man eine vorhandene Portfreigabe per Skript an/ausschalten?

EDIT: ein paar IMO interessante Threads habe ich mal zusammengesucht:


MFG pTweety
 
Zuletzt bearbeitet:
Ok, server und client sind mal compiliert. Jetzt hapert es leider noch in der Anwendung auf der FritzBox. Ich kann über lo und lan erfolgreich knocks empfangen:

Code:
knock -v localhost 123 456 789
hitting tcp 127.0.0.1:123
hitting tcp 127.0.0.1:456
hitting tcp 127.0.0.1:789
ergibt also z.B.:

Code:
ethernet interface detected
Local IP: 127.0.0.1
listening on lo...
2006-05-22 08:03:51: tcp: 127.0.0.1:1114 -> 127.0.0.1:123 74 bytes
127.0.0.1: myTest: Stage 1
2006-05-22 08:03:51: tcp: 127.0.0.1:1115 -> 127.0.0.1:456 74 bytes
127.0.0.1: myTest: Stage 2
2006-05-22 08:03:51: tcp: 127.0.0.1:1116 -> 127.0.0.1:789 74 bytes
127.0.0.1: myTest: Stage 3
127.0.0.1: myTest: OPEN SESAME
myTest: running command: echo sesam open
sesam open
127.0.0.1: myTest: command timeout
myTest: running command: echo sesam closed
sesam closed

Nur scheitert das gleiche, wenn ich es aus dem Internet am Interface dsl versuche:

Code:
knockd -i dsl -c ./root/mod/etc/knockd.conf -D -v
config: new section: 'options'
config: log file: /var/log/knockd.log
config: new section: 'openSSH'
config: openSSH: sequence: 7000:tcp,8000:tcp,9000:tcp
config: openSSH: seq_timeout: 5
config: openSSH: start_command: echo on
config: tcp flag: SYN
config: new section: 'closeSSH'
config: closeSSH: sequence: 9000:tcp,8000:tcp,7000:tcp
config: closeSSH: seq_timeout: 5
config: closeSSH: start_command: echo off
config: tcp flag: SYN
config: new section: 'myTest'
config: myTest: sequence: 123:tcp,456:tcp,789:tcp
config: myTest: seq_timeout: 15
config: tcp flag: SYN
config: myTest: start_command: echo sesam open
config: myTest: cmd_timeout: 5
config: myTest: stop_command: echo sesam closed
ppp interface detected (linux "cooked" encapsulation)
Local IP: 192.168.179.1
listening on dsl...

Wenn mir dabei jemand helfen würde, wäre ein Paket wohl schnell fertig gestellt.

EDIT: Anhänge erneuert.

MFG pTweety
 

Anhänge

  • knock-0.5-dsmod-0.1.tar.bz2
    76.6 KB · Aufrufe: 18
  • knock-mk.tar.bz2
    2.8 KB · Aufrufe: 16
Zuletzt bearbeitet:
ptweety schrieb:
Nur scheitert das gleiche, wenn ich es aus dem Internet am Interface dsl versuche

in einem anderen zusammenhang habe ich auch schon so meine probleme mit dem dsl interface gehabt. offensichtlich handelt es sich um eine art virtuelles device oder eine zweite bridge, jedenfalls kann man die tatsächliche externe ip nicht über ein "handelsübliches" device binden. einen ausweg habe ich leider auch noch keinen :noidea:
wenn ich das richtig sehe, ist der dazugehörige sourcecode nicht (öffentlich) verfügbar :mad:
 
knox schrieb:
offensichtlich handelt es sich um eine art virtuelles device oder eine zweite bridge, jedenfalls kann man die tatsächliche externe ip nicht über ein "handelsübliches" device binden. einen ausweg habe ich leider auch noch keinen :noidea:
Ok, ich hab's dann zumindest mal hinbekommen. Es geht über udp und tcp; allerdings braucht man eine forwardrule in der ar7.cfg die etwa so aussieht:

Code:
"tcp 0.0.0.0:7000 0.0.0.0:7000 0 # Port knocking",
"tcp 0.0.0.0:8000 0.0.0.0:8000 0 # Port knocking",
"tcp 0.0.0.0:9000 0.0.0.0:9000 0 # Port knocking",

oder man verwendet z.B. die voreingestellten:

Code:
"udp 0.0.0.0:70xx 0.0.0.0:70xx",

BTW: ob diese Pakete von der Firmenfirewall durchgelassen werden, dass steht auf einem ganz anderen Blatt ;)

MFG pTweety
 
Hi ptweety,
in deinen knock.mk wird ja libpcap-precompiled aufgerufen, aber in meinem ds-mod existiert das nicht und hier im Forum kann ich lediglich ein fertig kompiliertes finden, ich möchte aber das ganze über libpcap-precompiled laufen lassen.

Ich war gerade dabei libpcap-precompiled selbst zu erstellen, scheitere aber schon seit 2 Stunden irgendwo in der libpcap.mk Datei. Kannst du mir in diesem Thread weiterhelfen?
 
Zuletzt bearbeitet:
Komplettpaket libpcap+knockd

So, lange hats gedauert aber hier ist nun nach langem testen alles komplett:

Ich habe zum einen ein libpcap-Paket inclusive benötigter Patches erstellt, dieses wird von ptweetys knockd-Paket benötigt, war aber leider nicht enthalten.
(ptweety: das worauf du mich verwiesen hast lief bei mir leider nicht).

Da ptweetys Knockd-Paket aber nicht auf dem aktuellsten Stand war habe ich es auch gerade geupdatet
(ich hoffe ptweety hat nichts dagegen :p).

Die Änderungen im Detail:
  • Webadresse in knock.mk ausgetauscht
  • Eingabefeld für Interface im knock.cgi vergrößert auf 8 Zeichen, damit es z.B. auch mit "eth0:1" (>5 Zeichen) funktioniert
  • Mit meiner Beispielkonfiguration ist möglich den betroffenen Knockd-Port (hier: 22) nach außen hin unsichtbar zu machen.
  • Während des Anklopfens auf den 3 definierten Ports hat man einen Zeitrahmen von 5 Sekunden.
  • Sobald die richtige Kombination eingegeben wurde wird der Port 22 nur für die anklopfende IP 10 Sekunden lang geöffnet bzw. sichtbar.
  • Findet keine Kommunikation statt so wird auch nach Ablauf dieser Zeit der Port wieder automatisch geschlossen
Auf einer anderen Box habe ich es auch geschaft die 3 offenen Knock-Ports mithilfe der iptables und einer Kombination aus den Firewall-Regeln im Webmenü "unsichtbar" zu machen, im Moment werden sie als "geschlossen" angezeigt. Nur weiß ich leider nicht mehr wie ich das geschaft habe. Weiß da einer Rat?

Im Anhang in der "Install-knock-libpcap.txt" habe ich eine ausführliche Installationsanleitung geschrieben, ich wollte diese aufgrund der länge nicht direkt hier reinschreiben.

Zum kompilieren reichen die Dateien:
knock-0.5-dsmod-0.1-mk.tar.bz2 und libpcap-0.9.5-dsmod-0.1-mk.tar.bz2.
Getestet habe ich es auf 7050 und 7170. Bei 7050 hatte ich kleine Probleme weil noch bestimmte iptable Module fehlten und die SharedLibrary glibc_c.so nicht im make menuconfig ausgewählt wurde, was sich aber leicht beheben lies.
 

Anhänge

  • Install-knock-libpcap.txt
    4.1 KB · Aufrufe: 163
  • knock-0.5-dsmod-0.1.tar.bz2
    15.8 KB · Aufrufe: 53
  • knock-0.5-dsmod-0.1-mk.tar.bz2
    2.7 KB · Aufrufe: 45
  • libpcap-0.9.5-dsmod-0.1-mk.tar.bz2
    2.2 KB · Aufrufe: 64
Zuletzt bearbeitet:
Sehr schön. Danke dafür.
 
Ich sach nur WAU!

Das wollte ich schon lange mal auf meinen Rechner testen. Hier wird aber auch alles wahr!

Da bleibt nur Links sammeln und mal später umsetzen!

[Edit Novize: unsinnigen Link gelöscht]
 
I integrated knockd into my fritz 7140, and i can access it through the dsmod-26 interface, but the problem is how to config it to enable some port-forwarding rules?

I want to make a way so that when i knock with a sequence, to open/enable a port on the fritz to allow me access services behind the ftitz firewall.

i saw some websites about knockd conf but they use "iptables", do i have iptables on the default fritz busybox? from ssh calling iptables returns command not found.

any help will be appreciated, thanks.
 
@ramik: You could select iptables with menuconfig
 
@ramik: You could select iptables with menuconfig

the question is, i could or i should? is there another way to open ports? what is the method used by the original web interface of the fritz?
 
Ist es eigentlich mittlerweile möglich, knockd ohne iptables auf der Fritte zu nutzen (also z.B. über die AVM Firewall)? Hat das gar schon jemand am Laufen, und kann mal posten, wie das geht? Ich finde knockd eine interessante Sache - möchte mir das aber nicht mit ständigen Reboots erkaufen ;)
 
Klar kannst du knock ohne iptables nutzen - du kann dann nur keine Ports freigeben ^^
Dir ist schon klar, dass nach einem Ändern der AVM-Firewall ein Reboot nötig ist??
Und das Thema iptables ist doch geklärt, verbreite das Halbwissen doch nicht
 
Klar kannst du knock ohne iptables nutzen - du kann dann nur keine Ports freigeben ^^

Du meinst sowas wie ein Alster/Radler ohne Bier? Was bringt mir knockd dann noch, wenn ich keine Ports damit aktivieren kann? Achso, ja: Sorry, ich könnte damit z.B. Dropbear starten oder sowas...

Dir ist schon klar, dass nach einem Ändern der AVM-Firewall ein Reboot nötig ist??
Und das Thema iptables ist doch geklärt, verbreite das Halbwissen doch nicht

Sorry - wollte jetzt hier kein "Halbwissen" verbreiten - nur findet sich zu diesem Thema offensichtlich im Forum nicht viel anderes :confused: Ein klarer Fall für einen Wiki-Artikel ;) Vielleicht könntest Du diesen hier ja entsprechend ergänzen? Dann hat man auch eine klare Stelle, auf die man verweisen kann.

Am besten wäre es, dort noch eine kurze Beschreibung anhand eines "klassischen" Beispiels einzuhängen: Anklopfen mit knockd - und ein Port von außen zu einem Rechner innen wird geöffnet...
 
Wiki ist nicht so mein Fall. Ich hab knock wie hier beschrieben eingerichtet.
Auch beachten: klick
 
Danke - werd ich mir mal anschauen und gucken, ob das übertragbar ist.

Aber um nochmal auf die "Halbwahrheiten" zu sprechen zu kommen: Für das Eintragen eines Port-Forwardings ist auch bei der AVM Firewall kein Reboot fällig (geht ja auch über das AVM WebIF ohne Reboot). Soweit ich mich an das erinnere, was ich gestern gelesen habe, muss man da zwei Bereiche unterscheiden: Änderungen im "lower" (?) Bereich gehen ohne Reboot (und hier gehören die Port-Forwards hin - die ja auch von AVM zur Laufzeit vorgesehen sind) - Änderungen im "upper" (?) Bereich führen "in 8 von 10 Fällen" zu einem Reboot (weil hier von AVM gar keine Änderungen zur Laufzeit vorgesehen waren).

Ergo cetero censo: Es muss auch ohne IPTables möglich sein, den knockd bei einer vorgegebenen Klopf-Signatur einen Forward von z.B. Port 22 auf DSL-Seite zu Port 22 eines Rechners am "inneren Netz" einrichten zu lassen, ohne dass die Box rebootet (und das Ganze damit sinnlos macht, weil man ja anschließend eine neue IP bekäme).
 
Ich meinte damit eigentlich deine Aussage über iptables die nicht so ganz passt, aber 1000x hier im Forum wiederholt wird
Diese Firewall mit dem upper&lower kenn ich nicht, wie gesagt läuft iptables prima

PS: Nicht jeder bekommt eine neue IP, nur weil man die Box neu bootet!
 
Ich meinte damit eigentlich deine Aussage über iptables die nicht so ganz passt, aber 1000x hier im Forum wiederholt wird

War mir schon klar. Ich wollte Dich nur darauf aufmerksam machen, wie leicht eine neue Halbwahrheit entstehen kann - auch bei der AVM Firewall kommt es nämlich darauf an, was geändert wird - und auch hier führt nicht jede Änderung zu einem Reboot.

Diese Firewall mit dem upper&lower kenn ich nicht, wie gesagt läuft iptables prima

Das habe ich auch verstanden. Aber Du kennst doch die nette Fehlermeldung "Filesystem too large"? Die AVM Firewall ist immer im Image drin - IPTables muss jeweils ergänzt werden. Wenn wir also auf etwas bereits vorhandenes aufsetzen können, ist das sicher für einige mehr als nur eben "interessant".

@alle: Daher wiederhole ich meine Frage nochmal: Könnte man per knockd und ohne IPTables, dafür mit der internen Firewall, Forward Regeln definieren (und verwerfen) lassen? Also quasi das, was man sonst manuell im AVM WebIF tut, um von außen auf einen Rechner innen zugreifen zu können - nur dass man das "Loch" halt nur kurzfristig per knockd aufmacht.

PS: Nicht jeder bekommt eine neue IP, nur weil man die Box neu bootet!

Und die meisten bekommen eine neue IP, auch wenn sie die Box nicht booten - ja, ich weiß. Die Aussage ist ein wenig wie "jeder benutzt Windows" - stimmt auch nur fast ;)
 
Iptables ist fest im Kernel drin, nur die Userspace Programme zum konfigurieren brauchst du noch. Bei mir sind das weniger als 100kb unkomprimiert. Ansonsten empfehl ich dir bei Platzproblemen external ;-)
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.