Möchten Sie herausfinden, welche Ports auf einem Linux-Rechner geöffnet sind? Zunächst eine wichtige Klarstellung: Ein „offener“ Port auf Serverseite bedeutet oft, dass… vor Ort zuhörenDies beweist noch nicht, dass es aus dem Internet zugänglich ist, noch dass eine Firewall den Durchlass ermöglicht.
In meinem Fall überprüfe ich das immer in zwei Schritten: Zuerst prüfe ich, welche Programme auf dem Server lauschen. ssdann der Dienst oder Prozess, der hinter dem Port steht. netstat Es ist zwar weiterhin bekannt, wird aber auf vielen modernen Distributionen nicht mehr standardmäßig installiert. Es empfiehlt sich, die aktuellen Best Practices anzuwenden.

Der heute zu verwendende Befehl: ss
Unter aktuellem Linux, ss ist der bevorzugte Befehl. Er ist Teil des Stacks. iproute2 und ersetzt sehr oft netstat Netzwerk-Sockets untersuchen.
sudo ss -lntup
Die Optionen sind wichtig:
-Lzeigt die Empfangsports an.-NVermeidet DNS-Auflösung und hält die Portanzahl konstant.-Tbeschränkt auf TCP-Verbindungen.-ufügt UDP hinzu.-PZeigt den zugehörigen Prozess an, sofern Sie über die erforderlichen Berechtigungen verfügen.
Ohne SudoManchmal wird der Port angezeigt, aber nicht immer das zugehörige Programm. Für eine schnelle Überprüfung eines Servers führe ich den Befehl lieber mit Administratorrechten aus und lese die Spalte direkt aus. Verfahren.
Lesen Sie das Ergebnis fehlerfrei ab.
Ein typisches Ergebnis sieht folgendermaßen aus:
Status Empfangs-Q Sende-Q Lokale Adresse:Port Peer-Adresse:Port Prozess
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=812,fd=3))
LISTEN 0 511 127.0.0.1:3306 0.0.0.0:* users:(("mariadbd",pid=1044,fd=21))
Die Spalte, die man sich zuerst ansehen sollte, ist Lokale Adresse:PortWenn Sie sehen 0.0.0.0:22Der Dienst lauscht auf allen IPv4-Schnittstellen. Wenn Sie sehen 127.0.0.1:3306Der Dienst hört nur lokal zu. Das Risiko ist nicht dasselbe.
Für IPv6 können Sie auch Folgendes sehen: Oder Lesen Sie also nicht zu schnell: könnte ein umfassendes Abhören auf IPv6-Seite bedeuten, während bleibt lokal.
Filtern Sie einen bestimmten Port
Wenn Sie nur nach SSH, HTTP oder einer Datenbank suchen, müssen Sie nicht die gesamte Ausgabe durchsuchen. Filtern Sie mit grep oder mit den Filtern von ss.
sudo ss -lntup | grep ':22'
sudo ss -lntup | grep ':80'
sudo ss -lntup | grep ':443'
Für eine stärker auf TCP ausgerichtete Ausgabe können Sie Folgendes verwenden:
sudo ss -ltnp '(sport = :22)'
Ich behalte oft die Version mit grep Wenn ich es eilig habe, weil sie mit jedem redet. Für ein sauberes Skript oder eine Diagnose, die nativen Filter von ss Vermeiden Sie falsch positive Ergebnisse.
Und welche Rolle spielt netstat in diesem Zusammenhang?
netstat Es ist den Administratoren nicht entfallen, aber es stammt aus dem Paket Netz-Tools, was bei Debian, Ubuntu oder Minimalinstallationen oft fehlt. Wenn Sie auf eine Dokumentation stoßen, die danach fragt netstat Und wenn der Befehl fehlt, ist das nicht unbedingt ein Fehler auf Ihrem Server.
netstat -lntup
Die Ausgabe ist konzeptionell ähnlich: Protokolle, lokale Adressen, Ports, PID und Programmname. Wenn Sie jedoch ein Paket installieren müssen, nur um es zu verwenden, … netstatFragen Sie sich zunächst, ob ss Das reicht nicht. Auf einem aktuellen Server lautet meine Antwort fast immer ja.
Die Handbuchseite von ss Die verfügbaren Filter werden detailliert beschrieben. netstat Es bleibt nützlich, solange Sie noch alte Skripte pflegen.
Ermitteln Sie den Prozess hinter einem Hafen
Wenn ein Port unerwartet geschlossen wird, schließen Sie ihn nicht einfach willkürlich. Identifizieren Sie zuerst den Prozess und gegebenenfalls den zugehörigen systemd-Dienst.
sudo ss -lntup
sudo lsof -iTCP -sTCP:LISTEN -P -n
lsof ist nützlich, wenn Sie einen Port, eine Prozess-ID (PID) und eine Binärdatei verknüpfen möchten. -PDie Häfen bleiben in Zahlen. Mit -NDadurch vermeiden Sie DNS-Auflösungen, die das Lesen verlangsamen oder stören.
Wenn Sie eine Prozess-ID (PID) haben, verfolgen Sie diese zurück zum entsprechenden Dienst:
ps -p 812 -o pid,ppid,user,cmd
systemctl status ssh
Für einen Server, der mit systemd läuft, siehe die Anleitung auf der Linux-Dienste und systemctl-Befehle Dieser Schritt wurde erfolgreich abgeschlossen. Ziel ist es festzustellen, ob es sich um einen erwarteten Dienst, einen Container, einen alten, vergessenen Daemon oder einen manuell gestarteten Prozess handelt.
Ein Abhöranschluss bedeutet nicht zwangsläufig einen exponierten Anschluss.
Das ist die klassische Falle. Wenn ss Wenn ein Port als aktiv angezeigt wird, bedeutet das, dass ein Programm auf dem Rechner Verbindungen annimmt. Es ist jedoch noch nicht bekannt, ob dieser Port die lokale Firewall, Cloud-Regeln, NAT oder einen Router passiert.
Um sie zu sortieren, sollten Sie mindestens Folgendes prüfen:
- Die Höradresse:
127.0.0.1,0.0.0.0private IP, öffentliche IP; - die Dienstleistungen hinter dem Hafen;
- die lokale Firewall, zum Beispiel
ufw,nftablesOderiptables; - Sicherheitsregeln auf der Hosting- oder Cloud-Seite;
- Ein Test von einem anderen Gerät, wenn Sie die tatsächliche Belichtung überprüfen müssen.
sudo ufw status verbose
sudo nft list ruleset
sudo iptables -S
Führen Sie diese Befehle nicht in einem automatisierten Bereinigungsskript aus. Lesen Sie die Anleitung vorher. Auf einem Remote-Server kann eine fehlerhafte Firewall-Regel Ihre SSH-Verbindung schneller als erwartet unterbrechen. Wenn SSH bereits nicht reagiert, verwenden Sie stattdessen die oben beschriebene Methode. SSH unter Ubuntu neu installieren und überprüfen.
Mein kurzer Check, bevor ich die Firewall anfasse.
sudo ss -lntupum die lauschenden TCP- und UDP-Ports anzuzeigen.sudo ss -ltnpWenn ich nur TCP möchte.sudo lsof -iTCP -sTCP:LISTEN -P -num den Vorgang zu bestätigen.systemctl status service-nameum den dahinterstehenden Dienst zu überprüfen.journalctl -u service-name -b --no-pagerwenn der Dienst zuhört, obwohl er es nicht sollte.- Ein externer Test erst nach dem Verständnis dessen, was lokal zuhört.
Wenn Sie einen unerwarteten Port entdecken, beenden Sie den Prozess nicht sofort. Notieren Sie sich Port, Prozess-ID (PID) und Dienst und überprüfen Sie anschließend die Protokolle. (Siehe die Anleitung unter…) journalctl beim letzten Start wird Ihnen dabei helfen festzustellen, ob der Dienst automatisch startet oder ob dies auf eine kürzlich erfolgte Aktion zurückzuführen ist.
Einfach ausgedrückt: ss Erstens, netstat nur dann, wenn Sie alte Gewohnheiten beibehalten müssen, und ändern Sie die Firewall niemals, bevor Sie den Dienst hinter dem Port identifiziert haben.