GNU/Linux >> LINUX-Kenntnisse >  >> Debian

So verschleiern Sie Netzwerkports mit einer Port-Knocking-Sequenz unter Debian 10

Port-Knocking ist eine Methode zum dynamischen Öffnen von Netzwerkports durch "Knocking" (d. h. Verbinden) einer vordefinierten Sequenz von Ports. Dies ist besonders nützlich, um einen offenen Netzwerkport vor dem Port-Scannen zu verbergen, da der betreffende Port geschlossen wird, wenn die Port-Knocking-Sequenz nicht ausgeführt wird. Eine ausreichend lange Port-Knocking-Sequenz ist mit Brute Force praktisch unmöglich:Um beispielsweise (durch Brute Force) eine Kombination von 3 TCP-Ports erfolgreich zu erraten, müsste ein Angreifer versuchen, jede der 281 Billionen möglichen Kombinationen anzuklopfen und danach zu scannen offene Ports nach jeder Port-Knocking-Sequenz. Wie Sie sich wahrscheinlich vorstellen können, würde dies sehr, sehr lange dauern.

Diese Anleitung hilft Ihnen bei der Installation von knockd, einem flexiblen Port-Knocking-Daemon, unter Debian 10. Zu Demonstrationszwecken werden wir ihn so konfigurieren, dass er den SSH-Port verschleiert, obwohl jeder andere Port/Dienst mit diesem Ansatz geschützt werden kann.

Anforderungen

  • Ein Server mit Debian 10.
  • Root-Zugriff auf Ihren Server.
  • Die Umgebungsvariable $EDITOR sollte gesetzt werden.
  • Ein zweites System zum Testen.

HINWEIS:Wenn Sie beabsichtigen, Port Knocking zu verwenden, um den SSH-Port zu verschleiern, stellen Sie sicher, dass Sie über eine alternative Zugriffsmethode verfügen (z. B. über die Konsole), die sich als nützlich erweist, wenn Sie sich versehentlich aussperren.

Überprüfen Sie vor der Installation von knockd den Namen der öffentlichen Netzwerkschnittstelle Ihres Systems mit dem folgenden Befehl:

ip link show | grep -v lo
2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000

Notieren Sie sich den Schnittstellennamen (in diesem Fall ens18). Es wird später benötigt.

Schritt 1:Knockd installieren

knockd ist ein Port-Knocking-Daemon, der auf Verbindungen lauscht und Ports entsprechend öffnet. Wir werden knockd mit iptables-Regeln verwenden, um Port-Knocking zu implementieren. Installieren Sie die erforderlichen Pakete wie folgt:

apt update
apt install knockd iptables-persistent

Schritt 2:Knockd-Konfiguration

Knockd verwendet eine einzige Konfigurationsdatei, /etc/knockd.conf, um Klopfsequenzen und andere Parameter zu definieren. Es gibt zwei praktische Betriebsarten. Der erste erfordert eine einzelne Klopfsequenz, um den vordefinierten Port zu öffnen und zu schließen, während der andere separate Öffnungs- und Schließsequenzen verwendet. Wir werden Ersteres verwenden, da es weniger Benutzerinteraktion erfordert.

Sichern Sie zuerst die vorhandene Konfigurationsdatei:

mv /etc/knockd.conf /etc/knockd.conf.bak

Zweitens öffnen Sie die Konfigurationsdatei in Ihrem Texteditor:

$EDITOR /etc/knockd.conf

Und geben Sie die unten gezeigte Konfiguration ein:

(Ersetzen Sie ens18 durch den Namen Ihrer Netzwerkschnittstelle.)

[options]
        UseSyslog
	Interface = ens18
[SSH]
        sequence = 1000,2000,3000
        seq_timeout = 15
        tcpflags = syn
        start_command = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
        stop_command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
        cmd_timeout = 20

Dadurch wird knockd angewiesen, den Datenverkehr zu Port 22 nach Erhalt der korrekten Klopfsequenz (in diesem Fall 1000,2000,3000) zu aktivieren und den Datenverkehr nach einer Verzögerung von 20 Sekunden wieder zu deaktivieren. SSH-Verbindungen werden daher nur während dieses 20-Sekunden-Fensters akzeptiert.

Als nächstes aktivieren Sie knockd, indem Sie die Datei /etc/default/knockd:

bearbeiten
$EDITOR /etc/default/knockd

Und setze START_KNOCKD auf 1:

START_KNOCKD=1

Speichern Sie die Datei und beenden Sie sie. Wir werden auch die systemd-Unit für knockd modifizieren. Erstellen Sie dazu eine neue Unit-Datei, um die Standardeinstellung zu überschreiben:

$EDITOR /etc/systemd/system/knockd.service

Und fügen Sie Folgendes ein:

[Unit]
Description=Port-Knock Daemon
After=network.target
Requires=network.target
Documentation=man:knockd(1)
[Service]
EnvironmentFile=-/etc/default/knockd
ExecStartPre=/usr/bin/sleep 1
ExecStart=/usr/sbin/knockd $KNOCKD_OPTS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=mixed
Restart=always
SuccessExitStatus=0 2 15
ProtectSystem=full
CapabilityBoundingSet=CAP_NET_RAW CAP_NET_ADMIN
[Install]
WantedBy=multi-user.target

Verwenden Sie dann den folgenden Befehl, um die neue Unit zu laden und zu aktivieren:

systemctl daemon-reload
systemctl enable --now knockd.service

Schritt 3:Firewall-Regeln

An diesem Punkt ist Knockd bereit, aber der gesamte Datenverkehr wird standardmäßig durch die Firewall ermöglicht. Wir werden Firewall-Regeln erstellen, um den Zugriff auf Port 22/tcp zu verweigern.

Die folgenden Befehle sorgen dafür, dass bestehende Verbindungen nicht unterbrochen werden.

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Das Folgende sind Regeln zum Beenden von Verbindungen zu Port 22/tcp:

iptables -A INPUT -p tcp --destination-port 22 -j DROP
ip6tables -A INPUT -p tcp --destination-port 22 -j DROP

Speichern Sie dann die aktuellen Regelketten für die Persistenz über Neustarts hinweg:

iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6

Schritt 4:Testen

Versuchen Sie von einem anderen System aus, eine neue SSH-Sitzung zu Ihrem Server zu starten. Sie sollten keine Verbindung herstellen können. Um die Klopfsequenz auszuführen, können verschiedene Tools verwendet werden, obwohl wir mit Knock demonstrieren werden, dem Klopf-Client, der in Knockd enthalten ist. Installieren Sie das knockd-Paket wie in Schritt 1 gezeigt auf einem anderen System und führen Sie dann die Befehle aus:

knock server_ip_address 1000 2000 3000
ssh [email protected]_ip_address

Die SSH-Verbindung sollte nun erfolgreich sein.

Alternative Konfiguration

Knockd kann alternativ so konfiguriert werden, dass zwei unterschiedliche Sequenzen zum Öffnen und Schließen von Netzwerkports erforderlich sind. Dies ist nützlich, wenn Sie Ports für längere Zeit offen halten möchten. Um Knockd auf diese Weise zu konfigurieren, öffnen Sie seine Konfigurationsdatei:

$EDITOR /etc/knockd.conf

Und ersetzen Sie die vorhandene Konfiguration durch Folgendes:

[options]
        UseSyslog
        Interface = your_interface
[openSSH]
        sequence = 1000,2000,3000
        seq_timeout = 15
        tcpflags = syn
        start_command = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
[closeSSH]
        sequence = 3000,2000,1000
        seq_timeout = 15
        tcpflags = syn
        start_command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT

Starten Sie dann den Dienst neu, um die neue Konfiguration zu laden:

systemctl restart knockd.service

Schlussfolgerung

Knockd kann eine effektive Lösung für Brute-Force-Angriffe sein, die bei SSH und anderen Diensten sehr häufig vorkommen. Auch wenn systemd Knockd neu startet, wenn es fehlschlägt, sollten Sie immer eine Sicherungsmethode für den Zugriff auf Ihren Server haben, wenn Sie Port-Knocking verwenden, um den SSH-Port zu verbergen.


Debian
  1. So richten Sie eine statische IP-Adresse unter Debian Linux ein

  2. So konvertieren Sie HTML in PDF mit HTMLDoc unter Debian 10

  3. So verschleiern Sie Netzwerkports mit einer Port-Knocking-Sequenz unter Debian 10

  4. So installieren Sie WonderCMS mit Nginx unter Debian 11

  5. So sichern Sie den SSH-Dienst mit Port Knocking

So installieren Sie Gitea mit PostgreSQL unter Debian 11

So installieren Sie Debian 11 (Bullseye) mit Screenshots

So konfigurieren Sie LAMP mit Debian 11

So konfigurieren Sie Samba Server mit Debian 11

So installieren Sie Itch mit Debian 11

So installieren Sie phpMyAdmin mit Nginx unter Debian 11