Tutoriel Linux

Offene Ports unter Linux: netstat, ss und die Befehle, die Sie heute verwenden sollten

Débutant5 min de lecture
À retenirLinux n'est pas réservé aux experts. Le bon point de départ : une distribution accessible, une sauvegarde propre et quelques commandes comprises.

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.

Tux untersucht die offenen Netzwerkports eines Linux-Servers.

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:

  • -L zeigt die Empfangsports an.
  • -N Vermeidet DNS-Auflösung und hält die Portanzahl konstant.
  • -T beschränkt auf TCP-Verbindungen.
  • -u fügt UDP hinzu.
  • -P Zeigt 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, nftables Oder iptables ;
  • 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 -lntup um die lauschenden TCP- und UDP-Ports anzuzeigen.
  • sudo ss -ltnp Wenn ich nur TCP möchte.
  • sudo lsof -iTCP -sTCP:LISTEN -P -n um den Vorgang zu bestätigen.
  • systemctl status service-name um den dahinterstehenden Dienst zu überprüfen.
  • journalctl -u service-name -b --no-pager wenn 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.

sudo apt update && sudo apt upgrade