Logo
tportknockd

DeutschEnglish

tportknockd - tiny port knocking daemon - ist ein kleiner und schneller portknocking Daemon. tportknockd ist auf keine zusätzlichen Bibliotheken wie beispielsweise libpcap angewiesen. Es wird direkt die PACKET_MMAP Schnittstelle des Linux PACKET socket interface verwendet. Deshalb ist der tportknockd schnell und klein (ca. 30kByte).

Es ist nicht nur das klassische portknocking möglich. tportknockd unterstützt auch knock-Sequenzen mit verschiedenen TCP-Flag Kombinationen. Damit kann auch auf nur einem Port mit den TCP-Flags "angeklopft" werden (flag-knocking).

Inhalt

Download

Beschreibung

Konfiguration

Installation

Bugs Melden

Download

Source: tportknockd-0.1.0.tar.gz (ca. 12kByte)

Beschreibung

Parameter

-c <config> Konfigurationsdatei mit den knock-Sequenzen.
-C <config> Überprüfe die angegebene Konfigurationsdatei mit den knock-Sequenzen. Fehler in der Konfigurationsdatei und die verwendeten knock-Sequenzen werden angezeigt.
-i <device> Interface das überwacht wird.
-r <sec> tportknockd schaut in jedes eingehende Datenpaket und prüft , ob es an das Device adressiert ist , das überwacht wird. Ändert sich die Adresse während des Betriebs , werden die eingehenden Frames nicht richtig erkannt. Mit der Option -r wird aller <sec> Sekunden die Adresse aktualisiert , so dass die korrekte Funktion sicher gestellt ist. Diese Option ist sinnvoll , wenn sich die Adresse regelmäßig ändert. Beispielsweise durch die 24h-Zwangstrennung vieler Internetprovider.
-l es werden alle verfügbaren Netzwerkgeräte aufgelistet
-d Debug
-D Daemon mode
-h Hilfe

Konfiguration

Die Konfiguration der knock-Sequenzen wird in einer Konfigurationsdatei festgehalten. Die Konfiguration kann mehrere knock-Sequenzen enthalten, die unterschiedliche Aktionen auslösen.

Für jedes Ereignis gibt es einen eigenen Konfigurationsblock. Dieser wird mit <EVENT_NAME> eingeleitet und mit </EVENT_NAME> abgeschlossen. Jedes Ereignis erhält einen eindeutigen Namen.

Für jedes Ereignis muss die knock-Sequenz, eine Zeitspanne (timeout) in der die Sequenz beendet werden muss und ein Kommando (start_command) enthalten, das ausgeführt wird, nachdem das knock-Ereignis ausgelöst wurde. Optional kann noch ein zweites Kommando (stop_command) angegeben werden, das nach einer angegeben Verzögerung (command_delay) ausgeführt wird.

 <EVENT_NAME>                    # Definition des knock event namens "EVENT_NAME"
   sequence = {frame}*           # port knocking Sequenz
   timeout  = {in seconds}       # timeout der knock Sequenz
   start_command = {command}     # Kommando das nach der richtigen Sequenz ausgeführt wird
   stop_command  = {command}     # (optional) ein zweites Kommando mit einer kurzen Verzögerung
   command_delay = {in seconds}  # (optional) Verzögerung für das zweite Kommando
 </EVENT_NAME>                   # Ende des events "EVENT_NAME"

Die knock-Sequenz besteht aus einer mit Leerzeichen separierten Liste mit Frames, mit der die Sequenz beschrieben wird. Für jedes Frame der Sequenz muss das verwendet Protokoll (TCP oder UDP) und der Port angegeben werden. Für TCP können auch Flags bzw. Flag-Kombinationen angegeben werden. Protokoll, Port und Flags werden mit einem Doppelpunkt (:) voneinander getrennt.

 frame     ::= protocol:port[:{tcp flags}*]
 protocol  ::= tcp|udp
 port      ::= 1..65535
 tcp flags ::= fsrpauxni

Für die TCP-Flags sind folgende Angaben möglich:

 tcp flags description:  f - Fin flag
                         s - Syn flag
                         r - Reset flag
                         p - Push flag
                         a - Ack flag
                         u - Urgent flag
                         x - X-mas (alle Flags sind gesetzt)
                         n - None (kein Flag ist gesetzt)
                         i - Ignore (alle Flags werden ignoriert)

Die Flags können auch kombiniert werden. Werden keine Flags angegeben, wird n (None) impliziert.

Ist im start_command oder stop_command ein "%IP%" enthalten, wird dies durch die IP-Adresse des Hosts ersetzt, der das knock-Ereignis ausgelöst hat.

Aus Gründen der Performance sollten alle knock-Sequenzen mit Ports und Flag Kombinationen beginnen, die nicht durch die "normale" Kommunikation ausgelöst werden.

Die Konfigurationsdatei sollte mit der Option -C auf Fehler überprüft werden!

 tportknockd -C knock.conf

Beispiel

Das folgende knock-Ereignis wird ausgelöst, wenn die Sequenz aus UDP- und TCP-Frames innerhalb von 10 Sekunden durchlaufen wird. Danach können TCP-Frames die an den Port 22 (typischerweise SSH) gerichtet sind, vom Host der das knock-Ereignis auslöste, die Firewall passieren. Die Firewall wird nach 30 Sekunden wieder geschlossen. Bei einer statefull Firewall bleiben aber Verbindungen, die zuvor etabliert wurden, bestehen.

<SSH>
 sequence      = udp:1234 tcp:543 tcp:543:i tcp:123:frap tcp:434:x tcp:2345:n
 timeout       = 10
 start_command = /usr/sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
 stop_command  = /usr/sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
 command_delay = 30
</SSH>

Das folgende Beispiel zeigt, dass nach dem knock-Ereignis der OpenVPN Client gestartet wird und zum OpenVPN Server mit der IP %IP% (also dem Host der das knock-Ereignis auslöste) eine Verbindung aufbaut.

<OpenVPN>
 sequence      = tcp:12430:a tcp:2711:i tcp:123:i tcp:8375:n tcp:1155:n
 timeout       = 10
 start_command = /bin/openvpn --remote %IP% --config /opt/openvpn/client.conf
</OpenVPN>

Ist der Datenverkehr zum Beispiel durch eine (Firmen-)Firewall auf wenige Ports beschränkt, kann das "anklopfen" auch mit verschiedenen TCP-Flag Kombinationen realisiert werden (flag-knocking).

<SSH2>
 sequence      = tcp:110:x tcp:110:up tcp:110:up tcp:110:n tcp:110:i
 timeout       = 10
 start_command = /usr/sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
 stop_command  = /usr/sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
 command_delay = 30
</SSH2>

Installation

Voraussetzung

Im Linux-Kernel muss die Option CONFIG_PACKET_MMAP aktiviert sein/werden. Die PACKET_MMAP Schnittstelle ist in Linux 2.4 und 2.6 integriert. Wenn der verwendete Netzwerk-Geräte-Treiber NAPI-Support bietet, sollte auch dies aktiviert werden. Damit kann die Performance verbessert werden.

Bauen und Installieren

Der tportknockd kann mit make und make install einfach aus dem Quellcode gebaut und installiert werden:

 make
 make install

Für big-endian-Architekturen muss im Makefile die Option -DBIG_ENDIAN einkommentiert werden.

 CFLAGS += -DBIG_ENDIAN

Bugs Melden

Berichten Sie Fehler an <fibu at users.sourceforge.net>.

Copyright

Copyright © 2008 Michael Finsterbusch

Dies ist freie Software; die Kopierbedingungen stehen in den Quellen. Es gibt keine Garantie; auch nicht für VERKAUFBARKEIT oder FÜR SPEZIELLE ZWECKE.