GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

So verwenden Sie Port Knocking unter Ubuntu, um den SSH-Port zu verbergen

Kennt ihr alle diese alten Gangsterfilme, in denen ein Typ eine Klopfsequenz an einer Tür benutzt, um reinzukommen? Port Knocking ist genau das, nur für Ihren Server. Das Ändern Ihres Standard-SSH-Ports garantiert nicht, dass Sie nicht gehackt werden. Hacker verwenden häufig Tools, um automatisierte Scans nach offenen Ports durchzuführen, bevor sie einen Server angreifen. Port Knocking ist eine Möglichkeit, sich gegen Port-Scanner zu wehren. Es verweigert den Zugriff auf einen geschützten Port, bis ein Client im Voraus auf eine Reihe anderer Ports in der richtigen Reihenfolge zugreift.

Die Installation von Port-Knocking auf Ubuntu ist einfach. In diesem Artikel zeige ich Ihnen, wie Sie Port-Knocking installieren und einrichten. Die Schritte aus diesem Tutorial sollten auch für Debian 8 funktionieren.

Schritt 1:Stellen Sie sicher, dass alle erforderlichen Pakete installiert sind

Alle folgenden Befehle müssen nicht als Root-Benutzer ausgeführt werden. Ich möchte sudo nicht allen Befehlen voranstellen, also verwende ich:

sudo su

Root-Benutzer zu werden. Der allererste Schritt besteht darin, die Ubuntu-Paketlisten zu aktualisieren:

apt-get update

Installieren Sie dann den SSH-Server (falls Sie ihn noch nicht installiert haben).

apt-get install openssh-server

Installieren Sie nun die Knockd-Software, das ist der Daemon, der das Port-Knocking steuert.

apt-get install knockd
Get:1 http://security.debian.org wheezy/updates Release.gpg [1,554 B]
Get:2 http://security.debian.org wheezy/updates Release [102 kB]
Get:3 http://security.debian.org wheezy/updates/main amd64 Packages [336 kB]
Hit http://mirrors.digitalocean.com wheezy Release.gpg
Hit http://mirrors.digitalocean.com wheezy Release
Get:4 http://security.debian.org wheezy/updates/main Translation-en [195 kB]
Hit http://mirrors.digitalocean.com wheezy/main amd64 Packages
Hit http://mirrors.digitalocean.com wheezy/main Translation-en
Fetched 635 kB in 1s (358 kB/s)
Reading package lists... Done
[email protected]:~#
[email protected]:~# apt-get install openssh-server
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
openssh-client
Suggested packages:
ssh-askpass libpam-ssh keychain monkeysphere rssh molly-guard ufw
The following packages will be upgraded:
openssh-client openssh-server
2 upgraded, 0 newly installed, 0 to remove and 32 not upgraded.
Need to get 1,364 kB of archives.
After this operation, 0 B of additional disk space will be used.
Do you want to continue [Y/n]? 

Drücken Sie Y und dann die Eingabetaste, um fortzufahren.

Nach der Installation des Pakets müssen Sie die Kernel-Firewall iptables installieren. Ausführen:

apt-get install iptables

Schritt 2:Regeln zu iptables hinzufügen

Zuerst löschen wir bestehende Firewall-Regeln und stellen sicher, dass ausgehende Verbindungen nicht unterbrochen werden.

iptables --flush
iptables -t nat --flush
iptables -t mangle --flush
iptables --policy OUTPUT ACCEPT

Wir möchten sicherstellen, dass alle hergestellten Verbindungen und laufenden Sitzungen durch die Firewall zugelassen werden, andernfalls würde die Firewall die aktuelle SSH-Sitzung blockieren:

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

Hinweis : Die obige Regel hat keine Leerzeichen auf beiden Seiten des Kommas in STABLISHED,RELATED.

Verwenden Sie dann die folgende Regel, um den eingehenden Port 22 (SSH) zu blockieren:

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

Sobald Sie Ihre iptables-Regeln eingerichtet haben, können Sie den Wiederherstellungsprozess beim Neustart mit iptables-persistent automatisieren. Wir können dies aus dem Standard-Repository von Ubuntu herunterladen:

apt-get install iptables-persistent
Current iptables rules can be saved to the configuration file ?
? /etc/iptables/rules.v4. These rules will then be loaded automatically ?
? during system startup. ?
? ?
? Rules are only saved automatically during package installation. See the ?
? manual page of iptables-save(8) for instructions on keeping the rules ?
? file up-to-date. ?
? ?
? Save current IPv4 rules?
Current iptables rules can be saved to the configuration file ?
? /etc/iptables/rules.v6. These rules will then be loaded automatically ?
? during system startup. ?
? ?
? Rules are only saved automatically during package installation. See the ?
? manual page of ip6tables-save(8) for instructions on keeping the rules ?
? file up-to-date. ?
? ?
? Save current IPv6 rules?

Während der Installation fordert Sie das Programm auf, die aktuellen iptables-Regeln (ipV4 und ipV6) zu speichern, wählen Sie einfach Ja für beide.

Speichern Sie den aktuellen Regelsatz mit dem Befehl iptables-save in einer Datei. Diese Datei kann später von iptables-restore verwendet werden, um dasselbe iptables-Setup wiederherzustellen:

iptables-save
 # Generated by iptables-save v1.4.14 on Tue Feb 23 04:59:28 2016
*filter
:INPUT ACCEPT [1:40]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [17:1976]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j DROP
COMMIT
# Completed on Tue Feb 23 04:59:28 2016

Jetzt bleiben Sie mit Ihrer bestehenden Verbindung verbunden, während andere Verbindungen auf dem SSH-Port blockiert werden.

Als Nächstes müssen wir knockd konfigurieren.

Um den Dienst zu konfigurieren, müssen wir die Konfigurationsdatei /etc/knockd.conf bearbeiten. Öffnen Sie die Datei mit nano:

nano /etc/knockd.conf

Sie werden die Abschnitte sehen, die so aussehen werden.

[options]
UseSyslog

[openSSH]
sequence = 7000,8000,9000
seq_timeout = 5
command = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags = syn

[closeSSH]
sequence = 9000,8000,7000
seq_timeout = 5
command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags = syn
  • Im Abschnitt „Optionen“ sehen wir einen Direktivennamen UseSyslog . Logdatei ist ziemlich offensichtlich – es protokolliert alle Klopfversuche
  • Darunter haben wir zwei Abschnitte: openSSH und closeSSH. Der erste erlaubt dem Knocker den Zugriff auf Port 22 (SSH) und der zweite schließt den Port, wenn der Knocker abgeschlossen ist.
  • knockd ersetzt %IP% automatisch durch die IP-Adresse des Clients, der den Knock gesendet hat, sodass Sie den Port nur für den autorisierten Client öffnen können.
sequence = 9000,8000,7000

Das bedeutet, dass dieser Satz von Regeln zutrifft, wenn dieselbe IP eine Verbindung auf Port 7000 anfordert, direkt gefolgt von Port 8000, gefolgt von Port 9000. Es wird dringend empfohlen, die Standardports und ihre Reihenfolge zu ändern, da die Standardreihenfolge gut ist auch Angreifern bekannt.

seq_timeout = 5

Die Option "seq_timeout" definiert in Sekunden, wie lange Sie Zeit haben, alle Zahlen für das Klopfen bereitzustellen. Dieser Standardwert sollte in Ordnung sein und stellt kein Problem dar, wenn Sie Ihre Klopfzeichen automatisch generieren.

command = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT

Geben Sie den Befehl an, der ausgeführt werden soll, wenn ein Client den richtigen Port-Knock macht. Alle Instanzen von %IP% werden durch die IP-Adresse des Klopfers ersetzt.

tcpflags = syn

Achten Sie auf Pakete, die zum Setzen dieses Flags verwendet werden müssen, in diesem Fall syn-Pakete. Wenn TCP-Flags verwendet werden, IGNORIERT knockd TCP-Pakete, die nicht mit den Flags übereinstimmen.

Aktivieren Sie nun den Knockd. Bearbeiten Sie die Datei /etc/default/knockd mit nano:

nano /etc/default/knockd

und ändern:

START_KNOCKD=0

zu

START_KNOCKD=1

Danach speichern und beenden. Wenn Sie mehrere Netzwerkadapter haben oder Probleme damit haben, dass Knockd beim Systemstart nicht automatisch startet, können Sie die zu überwachende Netzwerkschnittstelle manuell angeben, indem Sie das Kommentarzeichen entfernen und die zweite Zeile KNOCKD_OPTS ergänzen.

Starten Sie dann knockd manuell:

service knockd start

Dadurch wird der Daemon gestartet und Sie können die iptables-Regelsätze ändern, indem Sie auf die Sequenzen der Ports klopfen.

Sie haben die erforderlichen Pakete installiert, wenn Sie von Ihrem Server getrennt werden, müssen Sie die von Ihnen definierten Ports in der richtigen Reihenfolge klopfen, um eine SSH-Verbindung herzustellen.

Schritt 3:Greifen Sie auf den Server zu, wenn knockd ausgeführt wird

Wenn Sie die obigen Schritte befolgt haben, können Sie ohne Port-Knocking keine direkte Verbindung mehr zum SSH-Server herstellen.

Sie sollten keine Antwort vom Server erhalten und der SSH-Client sollte eine Zeitüberschreitung aufweisen. Dies liegt daran, dass unser SSH-Daemon derzeit von iptables blockiert wird. Geben Sie Strg-C ein, um den SSH-Versuch zu beenden, wenn er nicht automatisch abläuft.

Klopfen mit einem Telnet-Client testen

Für Linux-Benutzer:Installieren Sie das Telnet-Paket mit apt.

Für Windows-Benutzer:Sie können den Telnet-Client installieren, indem Sie auf den Abschnitt „Programme“ zugreifen, nach „Windows-Funktionen ein- oder ausschalten“ suchen und dort den Telnet-Client aktivieren.

Geben Sie den folgenden Befehl in Ihre Eingabeaufforderung ein (ersetzen Sie die Port-Sequenz durch Ihre benutzerdefinierte Sequenz):

telnet youripaddress 7000
telnet youripaddress 8000
telnet youripaddress 9000

All dies müssen Sie in 5 Sekunden erledigen, da dies das Zeitlimit für die Konfiguration ist. Versuchen Sie nun, sich über SSH mit Ihrem Server zu verbinden. Sie können auf die Verbindung zugreifen.

Führen Sie die obigen Befehle in umgekehrter Reihenfolge aus, um den SSH-Server zu schließen.

telnet youripaddress 9000
telnet youripaddress 8000
telnet youripaddress 7000

Das Beste am Port-Knocking ist, dass Sie es zusammen mit der Private-Key-Authentifizierung konfigurieren können. Wenn Sie beide konfigurieren, besteht praktisch keine Chance, dass jemand Zugang erhält oder eine Verbindung herstellt, solange er nicht sowohl die Ports als auch den privaten Schlüssel kennt.


Ubuntu
  1. So verwenden Sie den tail-Befehl in Ubuntu Linux

  2. So verwenden Sie den String-Befehl in Ubuntu

  3. Verwendung des netplan-Befehls unter Ubuntu

  4. Wie man einen Task-Manager in Ubuntu verwendet, um das System zu überwachen

  5. Wie lässt man iptables-Regeln ablaufen?

So installieren und verwenden Sie den Exa-Befehl unter Ubuntu 20.04

So installieren Sie den OpenSSH-Server auf Ubuntu 20.04 LTS

So ändern Sie den SSH-Port in Ubuntu

So verwenden Sie Port Knocking zum Sichern des SSH-Dienstes unter Linux

So ändern Sie den SSH-Port in CentOS

Wie ändere ich den SSH-Port auf Ubuntu?