So verwenden Sie Port Knocking unter Linux (und warum Sie es nicht tun sollten)

Port Knocking ist eine Möglichkeit, einen Server zu sichern, indem Firewall-Ports geschlossen werden – sogar die, von denen Sie wissen, dass sie verwendet werden. Diese Ports werden bei Bedarf geöffnet, wenn – und nur wenn – die Verbindungsanfrage das geheime Klopfen liefert.

Port Knocking ist ein „geheimes Klopfen“

In den 1920er Jahren, als Verbot war in vollem Gange, wenn man in eine einsteigen wollte Speakeasy, Sie mussten das geheime Klopfen kennen und richtig ausklopfen, um hineinzukommen.

Portklopfen ist ein modernes Äquivalent. Wenn Sie möchten, dass Benutzer Zugriff auf Dienste auf Ihrem Computer haben, aber Ihre Firewall nicht für das Internet öffnen möchten, können Sie Port-Klopfen verwenden. Es ermöglicht Ihnen, close die Ports Ihrer Firewall, die eingehende Verbindungen zulassen und automatisch öffnen, wenn ein vorher festgelegtes Muster von Verbindungsversuchen unternommen wird. Die Abfolge der Verbindungsversuche fungiert als das geheime Klopfen. Ein weiteres heimliches Klopfen schließt den Hafen.

Das Klopfen von Ports ist so etwas wie ein Novum, aber es ist wichtig zu wissen, dass es ein example von Sicherheit durch Dunkelheit, und dieses Konzept ist grundlegend fehlerhaft. Das Geheimnis, wie man auf ein System zugreift, ist sicher, weil es nur diejenigen in einer bestimmten Gruppe kennen. Aber sobald dieses Geheimnis gelüftet ist – sei es, weil es enthüllt, beobachtet, erraten oder herausgearbeitet wurde – ist Ihre Sicherheit hinfällig. Es ist besser, Ihren Server auf andere, stärkere Weise zu sichern, z. B. durch schlüsselbasierte Anmeldungen für einen SSH-Server.


Die robustesten Ansätze für die Cybersicherheit sind vielschichtig, daher sollte Port Knocking vielleicht eine dieser Schichten sein. Je mehr Schichten, desto besser, oder? Sie könnten jedoch argumentieren, dass Port-Klopfen nicht viel (wenn überhaupt) zu einem ordnungsgemäß gehärteten, sicheren System beiträgt.

Cybersicherheit ist ein umfangreiches und kompliziertes Thema, aber Sie sollten Port-Klopfen nicht als einzige Verteidigungsmaßnahme verwenden.

So erstellen und installieren Sie SSH-Schlüssel aus der Linux-Shell

Knockd installieren

Um das Port-Klopfen zu demonstrieren, verwenden wir es, um Port 22 zu steuern, den SSH-Port. Wir verwenden ein Werkzeug namens Knockd. Verwenden apt-get um dieses Paket auf Ihrem System zu installieren, wenn Sie Ubuntu oder eine andere Debian-basierte Distribution verwenden. Verwenden Sie bei anderen Linux-Distributionen stattdessen das Paketverwaltungstool Ihrer Linux-Distribution.

Geben Sie Folgendes ein:

sudo apt-get install knockd

Das hast du wahrscheinlich schon iptables-Firewall auf Ihrem System installiert, aber Sie müssen möglicherweise die iptables-persistent Paket. Es übernimmt das automatische Laden gespeicherter iptable Regeln.

Geben Sie Folgendes ein, um es zu installieren:

sudo apt-get install iptables-persistent

Wenn der IPv4-Konfigurationsbildschirm angezeigt wird, drücken Sie die Leertaste, um die Option „Ja“ zu akzeptieren.

Drücken Sie die Leertaste, um die Option

Drücken Sie im IPv6-Konfigurationsbildschirm erneut die Leertaste, um die Option „Ja“ zu akzeptieren und fortzufahren.

Drücken Sie die Leertaste, um die Option


Der folgende Befehl sagt iptables um die Fortsetzung bestehender und laufender Verbindungen zu ermöglichen. Wir geben jetzt einen weiteren Befehl an close den SSH-Port.

Wenn jemand per SSH verbunden ist, wenn wir diesen Befehl ausgeben, möchten wir nicht, dass er abgeschnitten wird:

sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Dieser Befehl fügt der Firewall eine Regel hinzu, die besagt:

  • -EIN: Hängen Sie die Regel an die Firewall-Regeltabelle an. Das heißt, fügen Sie es unten hinzu.
  • EINGANG: Dies ist eine Regel für eingehende Verbindungen.
  • -m conntrack: Firewall-Regeln wirken sich auf den Netzwerkverkehr (Pakete) aus, der den Kriterien in der Regel entspricht. Die -m Parameter Ursachen iptables zusätzliche Module zum Abgleichen von Paketen zu verwenden – in diesem Fall das mit dem Namen conntrack arbeitet mit den Netzwerkverbindungs-Tracking-Funktionen des Kernels.
  • –cstate ETABLISHED,RELATED: Dies gibt den Verbindungstyp an, für den die Regel gilt, nämlich ESTABLISHED- und RELATED-Verbindungen. Eine hergestellte Verbindung ist eine Verbindung, die bereits im Gange ist. Eine verwandte Verbindung ist eine Verbindung, die aufgrund einer Aktion einer hergestellten Verbindung hergestellt wird. Vielleicht möchte jemand, der verbunden ist, eine Datei herunterladen; Dies kann über eine neue Verbindung geschehen, die vom Host initiiert wurde.
  • -j AKZEPTIEREN: Wenn der Datenverkehr der Regel entspricht, springen Sie zum ACCEPT-Ziel in der Firewall. Mit anderen Worten, der Verkehr wird akzeptiert und darf die Firewall passieren.

Jetzt können wir den Befehl an ausgeben close der Hafen:

sudo iptables -A INPUT -p tcp --dport 22 -j REJECT

Dieser Befehl fügt der Firewall eine Regel hinzu, die besagt:

  • -EIN: Fügen Sie die Regel an die Firewall-Regeltabelle an, dh fügen Sie sie unten hinzu.
  • EINGANG: Diese Regel betrifft eingehende Verbindungen.
  • -p tcp: Diese Regel gilt für Datenverkehr, der das Transmission Control Protocol verwendet.
  • –dport 22: Diese Regel gilt speziell für TCP-Datenverkehr, der auf Port 22 (den SSH-Port) abzielt.
  • -j ABLEHNEN: Wenn der Datenverkehr der Regel entspricht, springen Sie zum REJECT-Ziel in der Firewall. Wenn der Datenverkehr also abgelehnt wird, wird er nicht durch die Firewall zugelassen.

Wir müssen die beginnen netfilter-persistent Dämon. Wir können dies mit diesem Befehl tun:

sudo systemctl start netfilter-persistent

Wir wollen netfilter-persistent durchgehen ein Speicher- und Ladezyklus, so lädt und steuert es die iptable Regeln.

Geben Sie die folgenden Befehle ein:

sudo netfilter-persistent save

sudo netfilter-persistent reload


Sie haben jetzt die Dienstprogramme installiert und der SSH-Port ist geschlossen (hoffentlich ohne die Verbindung zu beenden). Jetzt ist es an der Zeit, das geheime Klopfen zu konfigurieren.

Knockd . konfigurieren

Es gibt zwei Dateien, die Sie bearbeiten müssen, um sie zu konfigurieren knockd. Das erste ist das Folgende knockd Konfigurationsdatei:

sudo gedit /etc/knockd.conf

Die gedit Editor öffnet mit dem knockd Konfigurationsdatei geladen.

Die geklopfte Konfigurationsdatei im gedit-Editor.

Wir werden diese Datei entsprechend unseren Anforderungen bearbeiten. Die Abschnitte, die uns interessieren, sind „openSSH“ und „closeSSH“. Die folgenden vier Einträge befinden sich in jedem Abschnitt:

  • Reihenfolge: Die Reihenfolge der Ports, auf die jemand zugreifen muss, um zu öffnen oder close Port 22. Die Standardports sind 7000, 8000 und 9000 zum Öffnen und 9000, 8000 und 7000 zum Öffnen close es. Sie können diese ändern oder der Liste weitere Ports hinzufügen. Für unsere Zwecke bleiben wir bei den Standardeinstellungen.
  • seq_timeout: Der Zeitraum, innerhalb dessen jemand auf die Ports zugreifen muss, um das Öffnen auszulösen oder close.
  • Befehl: Der an die . gesendete Befehl iptables Firewall beim Öffnen oder close Aktion ausgelöst wird. Diese Befehle fügen der Firewall entweder eine Regel hinzu (um den Port zu öffnen) oder entfernen sie (um close der Hafen).
  • tcpflags: Der Pakettyp, den jeder Port in der geheimen Sequenz empfangen muss. Ein SYN (Synchronize) Paket ist das erste in a TCP Verbindungsanfrage, genannt a Drei-Wege-Handshake.

Der Abschnitt „openSSH“ kann gelesen werden als „eine TCP-Verbindungsanfrage muss an die Ports 7000, 8000 und 9000 erfolgen – in dieser Reihenfolge und innerhalb von 5 Sekunden – damit der Befehl zum Öffnen von Port 22 an die Firewall gesendet wird.“


Der Abschnitt „closeSSH“ kann gelesen werden als „eine TCP-Verbindungsanfrage muss an die Ports 9000, 8000 und 7000 erfolgen – in dieser Reihenfolge und innerhalb von 5 Sekunden – damit der Befehl an close Port 22 an die Firewall zu senden.“

Die Firewall-Regeln

Die „command“-Einträge in den Abschnitten openSSH und closeSSH bleiben bis auf einen Parameter gleich. So setzen sie sich zusammen:

  • -EIN: Hängen Sie die Regel an das Ende der Firewall-Regelliste an (für den Befehl openSSH).
  • -D: Löschen Sie den Befehl aus der Firewall-Regelliste (für den Befehl closeSSH).
  • EINGANG: Diese Regel betrifft eingehenden Netzwerkverkehr.
  • -s %IP%: Die IP-Adresse des Geräts, das eine Verbindung anfordert.
  • -P: Netzwerkprotokoll; in diesem Fall ist es TCP.
  • –dport: Der Zielport; in unserer example, es ist Port 22.
  • -j AKZEPTIEREN: Springt zum Akzeptanzziel innerhalb der Firewall. Mit anderen Worten, lassen Sie das Paket die restlichen Regeln durchlaufen, ohne darauf zu reagieren.

Die geklopften Konfigurationsdatei-Bearbeitungen

Die Änderungen, die wir an der Datei vornehmen, sind unten rot markiert:

Die geklopfte Konfigurationsdatei im gedit-Editor mit den hervorgehobenen Änderungen.

Wir verlängern das „seq_timeout“ auf 15 Sekunden. Das ist großzügig, aber wenn jemand Verbindungsanfragen manuell abfeuert, braucht er möglicherweise so viel Zeit.

Im Abschnitt „openSSH“ ändern wir die -A (anhängen) Option im Befehl an -I (Einfügung). Dieser Befehl fügt oben in der Liste der Firewall-Regeln eine neue Firewall-Regel ein. Wenn du das verlässt -A Option wird die Firewall-Regelliste angehängt und ganz unten platziert.

Eingehender Datenverkehr wird von oben nach unten gegen jede Firewall-Regel in der Liste getestet. Wir haben bereits eine Regel, die Port 22 schließt. Wenn also eingehender Datenverkehr anhand dieser Regel getestet wird, bevor er die Regel sieht, die den Datenverkehr zulässt, wird die Verbindung abgelehnt; Wenn es diese neue Regel zuerst sieht, wird die Verbindung zugelassen.

Die close -Befehl entfernt die von openSSH hinzugefügte Regel aus den Firewall-Regeln. Der SSH-Verkehr wird wieder von der bereits bestehenden Regel „Port 22 ist geschlossen“ abgewickelt.

Nachdem Sie diese Änderungen vorgenommen haben, speichern Sie die Konfigurationsdatei.

So bearbeiten Sie Textdateien unter Linux grafisch mit gedit

Die geklopften Control File Edits

Die knockd Steuerdatei ist insgesamt einfacher. Bevor wir jedoch eintauchen und das bearbeiten, müssen wir den internen Namen unserer Netzwerkverbindung kennen; Um es zu finden, geben Sie diesen Befehl ein:

ip addr


Die Verbindung, die dieses Gerät verwendet, um diesen Artikel zu recherchieren, heißt enp0s3. Notieren Sie sich den Namen Ihrer Verbindung.

Der folgende Befehl bearbeitet die knockd Steuerdatei:

sudo gedit /etc/default/knockd

Hier ist die knockd Datei in gedit.

Die geklopfte Steuerdatei in gedit.

Die wenigen Änderungen, die wir vornehmen müssen, sind rot hervorgehoben:

Die geklopfte Steuerdatei in gedit mit den hervorgehobenen Bearbeitungen.

Wir haben den Eintrag „START_KNOCKD=“ von 0 auf 1 geändert.

Wir haben auch den Hash entfernt # am Anfang des Eintrags „KNOCKD_OPTS=“ und ersetzt „eth1“ durch den Namen unserer Netzwerkverbindung, enp0s3. Natürlich, wenn Ihre Netzwerkverbindung eth1, du wirst es nicht ändern.

Der Beweis liegt im Pudding

Es ist Zeit zu sehen, ob das funktioniert. Wir starten die knockd Dämon mit diesem Befehl:

sudo systemctrl start knockd


Jetzt springen wir auf einen anderen Computer und versuchen, eine Verbindung herzustellen. Wir haben die installiert knockd auch auf diesem Computer, nicht weil wir Port-Klopfen einrichten wollen, sondern weil die knockd Paket bietet ein weiteres Tool namens knock. Wir werden diese Maschine benutzen, um in unserer geheimen Sequenz zu schießen und das Klopfen für uns zu erledigen.

Verwenden Sie den folgenden Befehl, um Ihre geheime Folge von Verbindungsanfragen an die Ports auf dem Port-Knocking-Host-Computer mit der IP-Adresse 192.168.4.24 zu senden:

knock 192.168.4.24 7000 8000 9000 -d 500

Das sagt knock um den Computer mit der IP-Adresse 192.168.4.24 anzusprechen und eine Verbindungsanfrage an die Ports 7000, 8000 und 9000 abzufeuern, der Reihe nach mit a -d (Verzögerung) von 500 Millisekunden dazwischen.

Ein Benutzer namens „dave“ stellt dann eine SSH-Anfrage an 192.168.4.24:

ssh [email protected]

Seine Verbindung wird akzeptiert, er gibt sein Passwort ein und seine Remote-Sitzung beginnt. Seine Eingabeaufforderung ändert sich von [email protected] zu [email protected]. Um sich vom Remote-Computer abzumelden, gibt er Folgendes ein:

exit

Seine Eingabeaufforderung kehrt zu seinem lokalen Computer zurück. Er benutzt knock noch einmal, und diesmal zielt es auf die Ports in umgekehrter Reihenfolge zu close den SSH-Port auf dem Remote-Computer.

knock 192.168.4.24 9000 8000 7000 -d 500


Zugegeben, das war keine besonders fruchtbare Remote-Session, aber es demonstriert das Öffnen und Schließen des Ports per Port-Klopfen und passt in einen einzigen Screenshot.

Also, wie sah das von der anderen Seite aus? Der Systemadministrator auf dem Port-Knocking-Host verwendet den folgenden Befehl, um neue Einträge anzuzeigen, die im Systemprotokoll eingehen:

tail -f /var/log/syslog

  • Sie sehen drei openSSH-Einträge. Diese werden ausgelöst, wenn jeder Port vom Remote-Knock-Dienstprogramm angesteuert wird.
  • Wenn alle drei Phasen der Triggersequenz erfüllt sind, wird ein Eintrag mit der Aufschrift „SESAM ÖFFNE DICH,” ist protokolliert
  • Der Befehl zum Einfügen der Regel in das iptables Regelliste wird gesendet. Es erlaubt den Zugriff über SSH auf Port 22 von der spezifischen IP-Adresse des PCs, der den richtigen geheimen Klopf gegeben hat (192.168.4.33).
  • Der Benutzer „dave“ verbindet sich nur für wenige Sekunden und trennt dann die Verbindung.
  • Sie sehen drei closeSSH-Einträge. Diese werden ausgelöst, wenn jeder Port vom Remote-Knock-Dienstprogramm angesteuert wird – es weist den Port-Knocking-Host an, close Hafen 22.
  • Nachdem alle drei Stufen ausgelöst wurden, erhalten wir erneut die Meldung „OPEN SESAME“. Der Befehl wird an die Firewall gesendet, um die Regel zu entfernen. (Warum nicht „SESAME SCHLIESSEN“, wenn der Hafen geschlossen wird? Wer weiß?)

Jetzt die einzige Regel in der iptables Die Regelliste für Port 22 ist diejenige, die wir am Anfang eingegeben haben close dieser Hafen. Port 22 ist nun wieder geschlossen.

Schlag es auf den Kopf

Das ist der Salontrick von Port Knocking. Betrachten Sie es als Ablenkung und tun Sie es nicht in der realen Welt. Oder, wenn es sein muss, verlassen Sie sich nicht darauf, dass es Ihre einzige Form der Sicherheit ist.

Related Posts