In diesem Handbuch werden einige verschiedene Möglichkeiten erläutert, wie Sie herausfinden können, welcher Dienst auf einem bestimmten Port in Linux lauscht. Die meisten von Ihnen kennen den Standardport beliebter Dienste oder Prozesse. Beispielsweise ist der Standardport von Apache 80, der FTP-Standardport 21 und der SSH-Standardport 22. Sie finden die Portnamen und -nummern in Linux wie in diesem Handbuch beschrieben . Die Standard-Portnummern können auch in benutzerdefinierte Ports geändert werden, um einen Linux-Server zu sichern. Die folgenden Anleitungen beschreiben beispielsweise, wie Sie den Standardport von Apache, FTP und SSH auf einen anderen Port ändern.
- So ändern Sie den Apache-Standardport in einen benutzerdefinierten Port
- So ändern Sie den FTP-Standardport in einen benutzerdefinierten Port
- So ändern Sie den SSH-Standardport in einen benutzerdefinierten Port
Wenn die Standardportnummer geändert wird, wie würden Sie herausfinden, welcher Dienst welchen Port überwacht? Das werden wir jetzt herausfinden!
Finden Sie heraus, welcher Dienst auf einem bestimmten Port in Linux lauscht
Ich habe unten vier Methoden aufgelistet, um zu überprüfen, welcher Dienst in einer bestimmten Portnummer ausgeführt wird. Ich werde diese Liste ständig aktualisieren, wenn ich in Zukunft auf neue Methoden stoße. Setzen Sie also ein Lesezeichen und überprüfen Sie es ab und zu.
Methode 1 - Verwenden von netstat
Dies ist die am häufigsten verwendete Methode, um herauszufinden, welcher Dienst an welchem Port lauscht. Netstat ist ein Befehlszeilendienstprogramm zum Drucken von Netzwerkverbindungen, Routing-Tabellen, Schnittstellenstatistiken, Masquerade-Verbindungen und Multicast-Mitgliedschaften.
Netstat ist in den Standard-Repositories der meisten Linux-Distributionen verfügbar.
Gehen Sie wie folgt vor, um es unter Arch Linux und seinen Varianten zu installieren:
$ sudo pacman -S net-tools
Unter CentOS, RHEL:
$ sudo yum install net-tools
Auf Fedora:
$ sudo dnf install net-tools
Unter Debian, Ubuntu:
$ sudo apt install net-tools
Führen Sie nach der Installation den folgenden Befehl aus, um herauszufinden, welche Dienste welche Ports überwachen:
$ sudo netstat -tulpn
Beispielausgabe:
Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 665/systemd-resolve tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1026/sshd tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN 2068/python3 tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 1072/mysqld tcp6 0 0 :::22 :::* LISTEN 1026/sshd tcp6 0 0 :::80 :::* LISTEN 1062/apache2 udp 0 0 127.0.0.53:53 0.0.0.0:* 665/systemd-resolve udp 0 0 192.168.225.22:68 0.0.0.0:* 647/systemd-network udp 0 0 192.168.225.53:68 0.0.0.0:* 647/systemd-network udp6 0 0 fe80::a00:27ff:feff:546 :::* 647/systemd-network udp6 0 0 fe80::a00:27ff:fe7e:546 :::* 647/systemd-network
Wie Sie sehen können, ist ein Python-Dienst (simpleHTTPserver in diesem Fall) lauscht auf Portnummer 8000, der mysqld-Dienst lauscht auf Port 3306, der ssh-Dienst läuft auf Portnummer 22, apache2 läuft auf Port 80 und so weiter.
Hier,
-t
Flag zeigt TCP-Verbindungen.-u
Flag zeigt UDP-Verbindungen an.-l
Flag zeigt Listening Sockets an.-p
Flag zeigt die Prozess-ID (PID) und den Prozessnamen dessen an, was diesen Port verwendet.-n
flag zeigt die numerischen Adressen an.
Der obige Befehl listet alle Dienste und die Portnummern auf, auf denen sie lauschen. Was ist, wenn Sie herausfinden möchten, welcher Dienst an einem bestimmten Port lauscht? Hier ist der Befehl grep ist praktisch! Wir können netstat
kombinieren und grep
Befehl, um die Ausgabe nach einem bestimmten Dienst zu filtern, zum Beispiel mysqld , wie unten.
$ sudo netstat -tulpn | grep mysqld [sudo] password for sk: tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 1076/mysqld
Sehen? Der mysqld-Dienst lauscht auf Portnummer 3306.
Wenn Sie die Portnummer bereits kennen, aber nicht wissen, welcher Dienst sie derzeit verwendet, ersetzen Sie einfach den Dienstnamen durch die Portnummer, wie unten gezeigt.
$ sudo netstat -tulpn | grep -w 3306 tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 1076/mysqld
Hier -w
flag zeigt nur die Zeilen an, die Übereinstimmungen enthalten, die ganze Wörter bilden. Mit anderen Worten, -w
Option zeigt die genaue Übereinstimmung der angegebenen Zeichenfolge.
Sie können auch -i
verwenden Groß-/Kleinschreibung ignorieren, damit Zeichen, die sich nur in der Groß-/Kleinschreibung unterscheiden, übereinstimmen
$ sudo netstat -tulpn | grep -i 3306
So einfach ist das.
Weitere Einzelheiten finden Sie in den Manpages.
$ man netstat
Netstat ist größtenteils veraltet. Die Alternative zu netstat ist "ss".
Methode 2 - Verwenden des "ss"-Befehls
ss ist ein Befehlszeilendienstprogramm zum Untersuchen von Sockets. Es ist eine Alternative zu netstat und die Verwendung von "ss" ist fast die gleiche wie "netstat". Es ist auf Ubuntu und seinen Varianten vorinstalliert.
Um herauszufinden, welche Dienste auf welchen Ports lauschen, führen Sie Folgendes aus:
$ sudo ss -tulpn
Beispielausgabe:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port udp UNCONN 0 0 127.0.0.53%lo:53 0.0.0.0:* users:(("systemd-resolve",pid=671,fd=12)) udp UNCONN 0 0 192.168.225.22%enp0s3:68 0.0.0.0:* users:(("systemd-network",pid=653,fd=17)) udp UNCONN 0 0 192.168.225.53%enp0s8:68 0.0.0.0:* users:(("systemd-network",pid=653,fd=25)) udp UNCONN 0 0 [fe80::a00:27ff:fe7e:8a9c]%enp0s8:546 [::]:* users:(("systemd-network",pid=653,fd=24)) udp UNCONN 0 0 [fe80::a00:27ff:feff:d2e0]%enp0s3:546 [::]:* users:(("systemd-network",pid=653,fd=22)) tcp LISTEN 0 80 127.0.0.1:3306 0.0.0.0:* users:(("mysqld",pid=1076,fd=32)) tcp LISTEN 0 128 127.0.0.53%lo:53 0.0.0.0:* users:(("systemd-resolve",pid=671,fd=13)) tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1015,fd=3)) tcp LISTEN 0 128 *:80 *:* users:(("apache2",pid=1094,fd=4),("apache2",pid=1090,fd=4),("apache2",pid=1089,fd=4),("apache2",pid=1088,fd=4),("apache2",pid=1087,fd=4),("apache2",pid=1062,fd=4)) tcp LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=1015,fd=4))
Um die Ausgabe für einen bestimmten Dienst (z. B. mysqld) zu filtern, verwenden Sie:
$ sudo ss -tulpn | grep -w mysqld tcp LISTEN 0 80 127.0.0.1:3306 0.0.0.0:* users:(("mysqld",pid=1076,fd=32))
Weitere Einzelheiten finden Sie in den Manpages.
$ man ss
Methode 3 - Verwendung von lsof
Wie der Name schon sagt, lsof ist ein Befehlszeilendienstprogramm zum Auflisten aller geöffneten Dateien, die zu allen aktiven Prozessen gehören.
Um es unter Linux zu installieren, verwenden Sie je nach verwendetem Distributionstyp die folgenden Befehle.
Unter Arch Linux:
$ sudo pacman -S lsof
Unter Debian, Ubuntu:
$ sudo apt install lsof
Unter CentOS, RHEL:
$ sudo yum install lsof
Auf Fedora:
$ sudo dnf install lsof
Um herauszufinden, welche Prozesse auf welchen Ports laufen, geben Sie einfach die Portnummer wie im folgenden Befehl gezeigt an:
$ sudo lsof -i :80
Beispielausgabe:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME apache2 1062 root 4u IPv6 20452 0t0 TCP *:http (LISTEN) apache2 1087 www-data 4u IPv6 20452 0t0 TCP *:http (LISTEN) apache2 1088 www-data 4u IPv6 20452 0t0 TCP *:http (LISTEN) apache2 1089 www-data 4u IPv6 20452 0t0 TCP *:http (LISTEN) apache2 1090 www-data 4u IPv6 20452 0t0 TCP *:http (LISTEN) apache2 1094 www-data 4u IPv6 20452 0t0 TCP *:http (LISTEN)
Weitere Einzelheiten finden Sie in den Manpages.
$ man lsof
Methode 4 - Fixiererbefehl verwenden
Fixierer ist ein weiteres Befehlszeilenprogramm zum Identifizieren von Prozessen, die Dateien oder Sockets verwenden. Es zeigt die PIDs von Prozessen an, die die angegebenen Dateien oder Dateisysteme verwenden.
Es ist auch in den Standard-Repositories der meisten Linux-Distributionen verfügbar.
Um es unter Arch Linux zu installieren, führen Sie Folgendes aus:
$ sudo pacman -S psmisc
Unter Debian, Ubuntu:
$ sudo apt install psmisc
Unter CentOS, RHEL:
$ sudo yum install psmisc
Auf Fedora:
$ sudo dnf install psmisc
Zuerst müssen wir die PID eines Dienstes oder Prozesses finden, der einen bestimmten Port überwacht. Zum Beispiel werde ich die PID eines Prozesses finden, der auf Port 3306 lauscht, indem ich den Befehl verwende:
$ sudo fuser 3306/tcp
Sie werden eine Ausgabe wie unten sehen.
3306/tcp: 1076
Hier, 1076 ist die PID.
Und dann finden Sie den tatsächlichen Prozess mithilfe der PID mit dem Befehl heraus:
$ ps -p 1076 -o comm= mysqld
Alternativ können Sie -v
verwenden Flag, um die vollständigen Details in einem einzigen Befehl anzuzeigen.
$ sudo fuser -v 3306/tcp USER PID ACCESS COMMAND 3306/tcp: mysql 1076 F.... mysqld
Weitere Einzelheiten finden Sie in den Manpages.
$ man fuser
Sie kennen jetzt vier verschiedene Tools, um herauszufinden, welche Prozesse auf welchen Ports lauschen. Alle vier sind einfach zu bedienen und in den meisten Linux-Distributionen verfügbar. Wenn Sie andere Tools kennen, teilen Sie uns dies im Kommentarbereich unten mit. Ich werde diese Liste entsprechend prüfen und aktualisieren.