I.d.R. werden Linux Systeme mit SSH Ferngewartet. Doch wenn man mal einen Blick in das auth Logfile wirft wird einem manchmal ganz anders. Da wird teilweise alle x Sekunden versucht sich über SSH anzumelden. Auch ein umlegen des SSH Ports bringt da nicht immer das gewünschte Ergebniss.

    Jeder hat mittlerweile schon was von Portknocking gehört. Das Prinzip das dahinter steckt ist relativ simpel. Der eigentliche Dienst Port wird von der Firewall blockiert. Möchte man nun die Anwendung dahinter erreichen so senden man Pakete eines vorher definierten Typs an vorher fesgelegte Ports. Erkennt das System innerhalb von X Sekunden die entsprechenden Pakte an den definierten Ports, so wird der Zugriff für das absenden System für eine bestimmte Zeit geöffnet. Für SSH reichen wenigen Sekunden, da die Verbindung auch nach blockierung des Ports noch aktiv bleiben kann (bereites initiierte Verbindungen dürfen nicht von der Firewall gekappt werden).

    Nun aber zur Einrichtung des port knocking dameons…. Unter Debian gibt es ein Paket namens knockd das zuerst installiert werden muss…

    apt-get install knockd

    Anschließend muss der Dienst noch aktiviert werden

    /etc/default/knockd
    START_KNOCKD=1

    Nun kommt die Konfiguration des Daemons

    /etc/knockd.conf
    [options]
            logfile = /var/log/knockd.log
    [openSSH]
            sequence        = 1234,5678,9101
            seq_timeout     = 15
            start_command   = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
            tcpflags        = syn
            cmd_timeout     = 30
            stop_command    = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT

    Dieses Beispiel erwartet innerhalb von 15 Sekunden (seq_timeout) syn Pakete (tcpflags) auf den Ports 1234, 4567, 9101 (sequence) und erweitert nach erfolgreicher „Authentifizierung“ die iptables (start_command) um eine Regel die Verbindungen der Quelladresse auf Port 22 zulässt. Anschließend wird nach 30 Sekunden der Port 22 wieder geschlossen (cmd_timeout)

    Um nun eine Verbindung aufzubauen müssen Sie zuerst an den entsprechenden Ports „anklopfen“

    knock 1234 5678 9101
    ssh host

    Links

    2 Kommentare

    1. Kleiner Fehler:

      Habe mich schon gewundert, wenn ich lokal „knock“e

      > knock 1234 5678 9101

      wie soll der Host, der knockd ausführt, wissen, dass ich zu ihm will.

      Richtiger Aufruf laut Hilfe ist:

      > knock host 1234 5678 9101

      Danach ssh und ab geht’s…! 🙂

    Leave A Reply