Port Knocking ist eine Möglichkeit, einen Server durch Schließen von Firewall-Ports zu sichern – auch diejenigen, von denen Sie wissen, dass sie verwendet werden. Diese Ports werden bei Bedarf nur dann geöffnet, wenn die Verbindungsanforderung den geheimen Klopf liefert.

Port Knocking ist ein „geheimer Knock“

In den 1920er Jahren, als Verbot war in vollem Gange, wenn Sie in eine speakeasy, man musste das geheime Klopfen kennen und es richtig herausklopfen, um hineinzukommen.

Portklopfen ist ein modernes Äquivalent. Wenn Sie möchten, dass Benutzer Zugriff auf Dienste auf Ihrem Computer haben, Ihre Firewall jedoch nicht für das Internet öffnen möchten, können Sie Port Knocking verwenden. Sie können die Ports in Ihrer Firewall schließen, die eingehende Verbindungen zulassen, und diese automatisch öffnen, wenn ein vorab festgelegtes Muster von Verbindungsversuchen durchgeführt wird. Die Abfolge der Verbindungsversuche wirkt als geheimes Klopfen. Ein weiteres geheimes Klopfen schließt den Hafen.

Portklopfen ist eine Neuheit, aber es ist wichtig zu wissen, dass es ein Beispiel dafür ist Sicherheit durch Dunkelheit, und dieses Konzept ist grundlegend fehlerhaft. Das Geheimnis des Zugriffs auf ein System ist sicher, da es nur diejenigen in einer bestimmten Gruppe kennen. Aber sobald dieses Geheimnis gelüftet ist – entweder weil es enthüllt, beobachtet, erraten oder ausgearbeitet wurde – ist Ihre Sicherheit ungültig. Sie sollten Ihren Server besser auf andere, stärkere Weise sichern, z. B. indem Sie schlüsselbasierte Anmeldungen für einen SSH-Server benötigen.

Die robustesten Ansätze zur Cybersicherheit sind vielschichtig, daher sollte das Klopfen von Ports möglicherweise eine dieser Schichten sein. Je mehr Schichten, desto besser, oder? Sie könnten jedoch argumentieren, dass das Klopfen von Ports einem ordnungsgemäß gehärteten, sicheren System nicht viel (wenn überhaupt) hinzufügt.

Cybersicherheit ist ein umfangreiches und kompliziertes Thema, aber Sie sollten Port Knocking nicht als Ihre einzige Verteidigungsform verwenden.

Knockd installieren

Um das Klopfen von Ports zu demonstrieren, werden wir es verwenden, um Port 22 zu steuern, der der SSH-Port ist. Wir werden verwenden ein Werkzeug namens knockd. Verwenden Sie 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

Sie haben wahrscheinlich schon die iptables Firewall auf Ihrem System installiert, aber möglicherweise müssen Sie das Paket iptables-persistent installieren. 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 zu akzeptieren

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

Drücken Sie die Leertaste, um die zu akzeptieren

Der folgende Befehl weist iptables an, bestehende und laufende Verbindungen fortzusetzen. Wir werden jetzt einen weiteren Befehl zum Schließen des SSH-Ports ausgeben.

Wenn jemand bei der Ausgabe dieses Befehls über SSH verbunden ist, 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:

-A: Hängen Sie die Regel an die Firewall-Regeltabelle an. Das heißt, fügen Sie es unten hinzu.
EINGABE: Dies ist eine Regel für eingehende Verbindungen.
-m conntrack: Firewall-Regeln wirken auf den Netzwerkverkehr (Pakete), die den Kriterien in der Regel entsprechen. Der Parameter -m bewirkt, dass iptables zusätzliche Paketanpassungsmodule verwendet. In diesem Fall arbeitet das als conntrack bezeichnete Modul mit den Netzwerkverbindungsverfolgungsfunktionen des Kernels.
–Cstate ESTABLISHED, RELATED: Dies gibt die Art der Verbindung an, für die die Regel gilt, nämlich ESTABLISHED und RELATED. Eine hergestellte Verbindung ist eine, die bereits besteht. Eine verwandte Verbindung wird aufgrund einer Aktion von einer hergestellten Verbindung hergestellt. Vielleicht möchte jemand, der verbunden ist, eine Datei herunterladen. Dies kann über eine neue vom Host initiierte Verbindung geschehen.
-j ACCEPT: Wenn der Datenverkehr der Regel entspricht, springen Sie zum ACCEPT-Ziel in der Firewall. Mit anderen Worten, der Datenverkehr wird akzeptiert und darf die Firewall passieren.

Überprüfen Sie dies -  Herunterladen von Ubuntu-Hintergründen unter jedem Linux-Betriebssystem

Jetzt können wir den Befehl zum Schließen des Ports ausgeben:

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

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

-A: Hängen Sie die Regel an die Firewall-Regeltabelle an, dh fügen Sie sie unten hinzu.
EINGABE: Diese Regel bezieht sich auf eingehende Verbindungen.
-p tcp: Diese Regel gilt für Datenverkehr, der das Übertragungssteuerungsprotokoll verwendet.
–Dport 22: Diese Regel gilt speziell für TCP-Verkehr, der auf Port 22 (den SSH-Port) abzielt.
-j REJECT: Wenn der Datenverkehr der Regel entspricht, springen Sie zum REJECT-Ziel in der Firewall. Wenn der Datenverkehr abgelehnt wird, ist er nicht durch die Firewall zulässig.

Wir müssen den Netfilter-persistenten Daemon starten. Wir können dies mit diesem Befehl tun:

sudo systemctl start netfilter-persistent

Wir möchten, dass Netfilter-persistent durchläuft ein Speicher- und Nachladezyklus, Daher werden die iptable-Regeln geladen und gesteuert.

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 eines anderen zu beenden). Jetzt ist es Zeit, das geheime Klopfen zu konfigurieren.

Knockd konfigurieren

Sie bearbeiten zwei Dateien, um knockd zu konfigurieren. Die erste ist die folgende Knockd-Konfigurationsdatei:

sudo gedit /etc/knockd.conf

Der gedit-Editor wird mit der geladenen knockd-Konfigurationsdatei geöffnet.

Die knockd-Konfigurationsdatei im gedit-Editor.

Wir werden diese Datei entsprechend unseren Anforderungen bearbeiten. Die Abschnitte, an denen wir interessiert sind, 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 Port 22 zu öffnen oder zu schließen. Die Standardports sind 7000, 8000 und 9000, um ihn zu öffnen, und 9000, 8000 und 7000, um ihn zu schließen. 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 oder Schließen auszulösen.
Befehl: Der Befehl, der an die iptables-Firewall gesendet wird, wenn die Öffnungs- oder Schließaktion ausgelöst wird. Diese Befehle fügen der Firewall entweder eine Regel hinzu (um den Port zu öffnen) oder entfernen sie (um den Port zu schließen).
tcpflags: Der Pakettyp, den jeder Port in der geheimen Reihenfolge empfangen muss. Ein SYN-Paket (Synchronize) ist das erste in a TCP Verbindungsanforderung, genannt a Drei-Wege-Handschlag.

Überprüfen Sie dies -  5 besten Netzwerküberwachungstools für Linux

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

Der Abschnitt „closeSSH“ kann als „eine TCP-Verbindungsanforderung an die Ports 9000, 8000 und 7000 – in dieser Reihenfolge und innerhalb von 5 Sekunden – gelesen werden, damit der Befehl zum Schließen von Port 22 an die Firewall gesendet wird.“

Die Firewall-Regeln

Die Befehlseinträge in den Abschnitten openSSH und closeSSH bleiben bis auf einen Parameter gleich. So setzen sie sich zusammen:

-A: Hängen Sie die Regel an das Ende der Liste der Firewall-Regeln an (für den Befehl openSSH).
-D: Löschen Sie den Befehl aus der Liste der Firewall-Regeln (für den Befehl closeSSH).
EINGABE: Diese Regel betrifft den 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 unserem Beispiel ist es Port 22.
-j AKZEPTIEREN: Springt zum Akzeptanzziel innerhalb der Firewall. Mit anderen Worten, lassen Sie das Paket durch den Rest der Regeln fallen, ohne darauf zu reagieren.

Die klopfte Konfigurationsdatei wird bearbeitet

Die Änderungen, die wir an der Datei vornehmen, werden unten rot hervorgehoben:

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

Wir verlängern das „seq_timeout“ auf 15 Sekunden. Dies ist großzügig, aber wenn jemand manuell Verbindungsanfragen auslöst, benötigt er möglicherweise so viel Zeit.

Im Abschnitt „openSSH“ ändern wir die Option -A (Anhängen) im Befehl in -I (Einfügen). Dieser Befehl fügt eine neue Firewall-Regel oben in der Liste der Firewall-Regeln ein. Wenn Sie die Option -A belassen, wird die Firewall-Regelliste angehängt und unten angezeigt.

Eingehender Datenverkehr wird von oben nach unten anhand jeder 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 die Regel angezeigt wird, die den Datenverkehr zulässt, wird die Verbindung abgelehnt. Wenn diese neue Regel zuerst angezeigt wird, ist die Verbindung zulässig.

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

Speichern Sie nach diesen Änderungen die Konfigurationsdatei.

Die klopfte Steuerdatei wird bearbeitet

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

ip addr

Das

Die Verbindung, über die dieses Gerät diesen Artikel recherchiert, 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 Knockd-Steuerdatei in gedit.

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

Die Knockd-Steuerdatei in gedit mit den hervorgehobenen Änderungen.

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

Wir haben auch die Hash-Nr. Vom Anfang des Eintrags „KNOCKD_OPTS =“ entfernt und „eth1“ durch den Namen unserer Netzwerkverbindung enp0s3 ersetzt. Wenn Ihre Netzwerkverbindung eth1 ist, werden Sie sie natürlich nicht ändern.

Der Beweis ist im Pudding

Es ist Zeit zu sehen, ob dies funktioniert. Wir starten den knockd-Daemon mit diesem Befehl:

sudo systemctrl start knockd

Jetzt springen wir auf einen anderen Computer und versuchen, eine Verbindung herzustellen. Wir haben das Knockd-Tool auch auf diesem Computer installiert, nicht weil wir das Port-Knocking einrichten möchten, sondern weil das Knockd-Paket ein anderes Tool namens Knock bereitstellt. Wir werden diese Maschine benutzen, um in unserer geheimen Sequenz zu schießen und das Klopfen für uns zu erledigen.

Überprüfen Sie dies -  So verwenden Sie iTunes Music in PowerPoint-Präsentationen

Verwenden Sie den folgenden Befehl, um Ihre geheime Folge von Verbindungsanforderungen mit der IP-Adresse 192.168.4.24 an die Ports des Port-Knocking-Host-Computers zu senden:

knock 192.168.4.24 7000 8000 9000 -d 500

Dies weist knock an, den Computer auf die IP-Adresse 192.168.4.24 zu richten und eine Verbindungsanforderung an die Ports 7000, 8000 und 9000 mit einer Verzögerung von -d (Verzögerung) von 500 Millisekunden zwischen ihnen auszulösen.

Ein Benutzer namens „dave“ sendet 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 wechselt von dave @ nostromo zu dave @ howtogeek. Um sich vom Remotecomputer abzumelden, gibt er Folgendes ein:

exit

Seine Eingabeaufforderung kehrt zu seinem lokalen Computer zurück. Er verwendet erneut Klopfen und dieses Mal zielt es in umgekehrter Reihenfolge auf die Ports ab, um den SSH-Port auf dem Remotecomputer zu schließen.

knock 192.168.4.24 9000 8000 7000 -d 500

Portklopfen und SSH-Verbindungssitzung in einem Terminalfenster.

Zugegeben, dies war keine besonders fruchtbare Remote-Sitzung, aber sie demonstriert das Öffnen und Schließen des Ports durch Port-Klopfen und passt in einen einzelnen Screenshot.

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

tail -f /var/log/syslog

Ein Syslog, das die Port-Klopfereignisse in einem Terminalfenster anzeigt.

Sie sehen drei openSSH-Einträge. Diese werden ausgelöst, wenn jeder Port vom Remote Knock-Dienstprogramm als Ziel ausgewählt wird.
Wenn alle drei Stufen der Triggersequenz erfüllt sind, wird ein Eintrag mit der Aufschrift „SESAM ÖFFNE DICH,”Wird protokolliert
Der Befehl zum Einfügen der Regel in die Liste der iptables-Regeln wird gesendet. Es ermöglicht den Zugriff über SSH auf Port 22 von der spezifischen IP-Adresse des PCs, der das richtige geheime Klopfen ausgelöst hat (192.168.4.23).
Der Benutzer „Dave“ stellt nur für einige Sekunden eine Verbindung her und trennt dann die Verbindung.
Sie sehen drei closeSSH-Einträge. Diese werden ausgelöst, wenn jeder Port vom Remote-Knock-Dienstprogramm als Ziel ausgewählt wird. Es weist den Port-Knocking-Host an, Port 22 zu schließen.
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ß?)

Die einzige Regel in der Liste der iptables-Regeln für Port 22 ist die, die wir zu Beginn eingegeben haben, um diesen Port zu schließen. Port 22 ist jetzt wieder geschlossen.

Schlag es auf den Kopf

Das ist der Salon-Trick von Port Knocking. Behandle es als Ablenkung und mache es nicht in der realen Welt. Oder, wenn Sie müssen, verlassen Sie sich nicht darauf als Ihre einzige Form der Sicherheit.