Connect with us

Wie man

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

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

Photographee.eu/Shutterstock

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 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, die Ports Ihrer Firewall zu schließen, die eingehende Verbindungen zulassen, und sie automatisch öffnen zu lassen, wenn ein vorher festgelegtes Muster von Verbindungsversuchen unternommen wird. Die Abfolge der Verbindungsversuche fungiert als geheimes Klopfen. Ein weiteres geheimes Klopfen schließt den Hafen.

Portklopfen ist etwas Neues, aber es ist wichtig zu wissen, dass es ein Beispiel dafür ist example 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 – entweder weil es enthüllt, beobachtet, erraten oder ausgearbeitet wurde – ist Ihre Sicherheit nicht mehr gegeben. Sie sollten Ihren Server besser auf andere, stärkere Weise sichern, z. B. schlüsselbasierte Anmeldungen für einen SSH-Server erfordern.

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.

Knockd installieren

Um das Port-Klopfen zu demonstrieren, verwenden wir es, um Port 22 zu steuern, den SSH-Port. Wir werden verwenden ein Werkzeug namens Knockd. Benutzen 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

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 von gespeicherten 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 "Jawohl" Option im iptables-persistent IPv4-Bildschirm.

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 "Jawohl" Option im IPv6-Konfigurationsbildschirm.

Der folgende Befehl sagt iptables um die Fortsetzung bestehender und laufender Verbindungen zu ermöglichen. Wir geben nun einen weiteren Befehl aus, um den SSH-Port zu schließen.

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: Firewallregeln wirken sich auf den Netzwerkverkehr (Pakete) aus, der den Kriterien in der Regel entspricht. Das -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 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:

  • -EIN: Hängen 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. Der erste ist der folgende knockd Konfigurationsdatei:

sudo gedit /etc/knockd.conf

Das 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 Abfolge von 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 an die gesendete Befehl iptables Firewall, wenn die Aktion zum Öffnen oder Schließen 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 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 gestellt werden – in dieser Reihenfolge und innerhalb von 5 Sekunden – damit der Befehl zum Schließen von Port 22 an die Firewall gesendet wird.“

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 unserem Beispiel ist es 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 den „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 eine neue Firewall-Regel am Ende der Firewall-Regelliste ein. Wenn du das verlässt -A Option, es die Firewall-Regelliste und legt es an der .

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.

Der Befehl close 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.

Die geklopften Control File Edits

Das 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 # vom 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-Hostcomputer 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 dave@192.168.4.24

Seine Verbindung wird akzeptiert, er gibt sein Passwort ein und seine Remote-Sitzung beginnt. Seine Eingabeaufforderung ändert sich von dave@nostromo zu dave@howtogeek. 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 ab, um den SSH-Port auf dem Remote-Computer zu schließen.

knock 192.168.4.24 9000 8000 7000 -d 500

Zugegeben, das war keine besonders fruchtbare Remote-Session, aber es zeigt 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 Stufen 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-Knock-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ß?)

Jetzt die einzige Regel in der iptables Die Regelliste für Port 22 ist diejenige, die wir am Anfang eingegeben haben, um diesen Port zu schließen. 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 als Ihre einzige Form der Sicherheit.

Continue Reading
Click to comment

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Tendencia