Eine TCP/IP-Netzwerkverbindung kann entweder blockiert, getrennt, geöffnet oder gefiltert werden. Diese Aktionen werden im Allgemeinen von der IPtables-Firewall gesteuert, die das System verwendet, und sind unabhängig von Prozessen oder Programmen, die möglicherweise an einem Netzwerkport lauschen. Jenseits der Firewall kann ein Programm oder Prozess (ein Server oder Daemon) an einem Port lauschen oder nicht lauschen. Dies kann mit den Programmen netstat oder ss überprüft werden. Es ist nicht einfach zu überprüfen, ob ein Port an der Firewall offen, blockiert, gelöscht oder gefiltert ist. Dafür gibt es zwei Möglichkeiten:
- Port extern testen
- Listen Sie die Firewall-Konfiguration auf und untersuchen Sie die Ausgabe
1. Verwenden von netstat zum Anzeigen der lauschenden Prozesse
Um zu sehen, ob ein Programm oder Prozess auf einem Port lauscht und bereit ist, ein Paket anzunehmen, verwenden Sie den Befehl netstat.
# netstat -tulnp
Die Argumente für den netstat-Befehl sind unten aufgeführt:
t – TCP
u anzeigen – UDP
l anzeigen – Nur zuhörende Prozesse anzeigen (netstat kann sowohl zuhörende als auch alle aufgebauten Verbindungen anzeigen, also auch als Client)
n – Keine Netzwerk-IP-Adressnamen oder Portnummern auflösen
p – Zeigen Sie den Prozessnamen an, der auf dem Port lauscht
Zum Beispiel:
# netstat -tulnp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1254/rpcbind tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1484/sshd tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1355/cupsd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1562/master tcp 0 0 0.0.0.0:44349 0.0.0.0:* LISTEN 1274/rpc.statd udp 0 0 0.0.0.0:111 0.0.0.0:* 1254/rpcbind udp 0 0 0.0.0.0:631 0.0.0.0:* 1355/cupsd udp 0 0 0.0.0.0:44165 0.0.0.0:* 1274/rpc.statd udp 0 0 0.0.0.0:602 0.0.0.0:* 1274/rpc.statd udp 0 0 0.0.0.0:1001 0.0.0.0:* 1254/rpcbind
2. Verwenden von ss, um die lauschenden Prozesse zu sehen
Um zu sehen, ob ein Programm oder Prozess auf einem Port lauscht und bereit ist, ein Paket anzunehmen, verwenden Sie das Programm ss.
# ss -nutlp
Die Argumente für das ss-Programm sind unten aufgelistet:
t – TCP-Sockets anzeigen.u – UDP-Sockets anzeigen.
l – Abhörsteckdosen
n anzeigen – Versuchen Sie jetzt, Namen aufzulösen
p – Prozess mit Socket anzeigen
Zum Beispiel:
# ss -nutlp Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port udp UNCONN 0 0 *:111 *:* users:(("rpcbind",1254,6)) udp UNCONN 0 0 *:631 *:* users:(("cupsd",1355,9)) udp UNCONN 0 0 *:44165 *:* users:(("rpc.statd",1274,8)) udp UNCONN 0 0 *:602 *:* users:(("rpc.statd",1274,5)) udp UNCONN 0 0 *:1001 *:* users:(("rpcbind",1254,7)) tcp LISTEN 0 128 *:111 *:* users:(("rpcbind",1254,8)) tcp LISTEN 0 128 *:22 *:* users:(("sshd",1484,3)) tcp LISTEN 0 128 127.0.0.1:631 *:* users:(("cupsd",1355,7)) tcp LISTEN 0 100 127.0.0.1:25 *:* users:(("master",1562,12)) tcp LISTEN 0 128 *:44349 *:* users:(("rpc.statd",1274,9))
3. mit lsof nach offenen Ports suchen
Um alle offenen Ports auf einem System aufzulisten, verwenden Sie den folgenden Befehl, um den Namen und die Nummer des Prozesses aufzulisten, der die Ports geöffnet hat.
# lsof -i
Hier ist eine Beispielausgabe:
# lsof -i COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME rpcbind 1254 rpc 6u IPv4 12592 0t0 UDP *:sunrpc rpcbind 1254 rpc 7u IPv4 12596 0t0 UDP *:1001 rpcbind 1254 rpc 8u IPv4 12597 0t0 TCP *:sunrpc (LISTEN) rpc.statd 1274 rpcuser 5r IPv4 12784 0t0 UDP *:xmlrpc-beep rpc.statd 1274 rpcuser 8u IPv4 12788 0t0 UDP *:44165 rpc.statd 1274 rpcuser 9u IPv4 12792 0t0 TCP *:44349 (LISTEN) cupsd 1355 root 7u IPv4 13147 0t0 TCP localhost:ipp (LISTEN) cupsd 1355 root 9u IPv4 13150 0t0 UDP *:ipp sshd 1484 root 3u IPv4 13707 0t0 TCP *:ssh (LISTEN) master 1562 root 12u IPv4 13923 0t0 TCP localhost:smtp (LISTEN) sshd 1657 root 3r IPv4 14745 0t0 TCP 192.168.1.50:ssh->192.168.1.101:49549 (ESTABLISHED)
Externes Testen eines Ports
Die Telnet-Anwendung kann zum Testen einfacher Netzwerk-Socket-Verbindungen verwendet werden, aber nur für TCP-Verbindungen, nicht für UDP. Wenn ich beispielsweise sehen möchte, ob TCP-Port 80 auf einem System bereit ist, eine Verbindung anzunehmen, gebe ich die IP-Adresse und den Port für Telnet an:
# telnet 192.168.1.55 80 Trying 192.168.1.55... Connected to example.redhat.com (192.168.1.55). Escape character is '^]'.
Wenn der Server nicht zuhört, ist die Antwort anders:
# telnet 10.0.0.25 80 Trying 10.0.0.25... telnet: connect to address 10.0.0.25: Connection refused telnet: Unable to connect to remote host: Connection refused
- Dies zeigt an, dass die Verbindung aktiv abgelehnt wurde. Das TCP-Subsystem empfing das Paket, untersuchte es und stellte fest, dass es sich um eine Anfrage zum Öffnen eines Sockets an Port 80 handelte, stellte fest, dass kein Prozess bereit war, die Verbindung anzunehmen, und antwortete mit einer Verweigerung.
- Wenn die Firewall so konfiguriert war, dass sie die Verbindung blockiert oder filtert, würde Telnet etwas sehr Ähnliches wie oben anzeigen, selbst wenn ein Prozess bereit war, die Verbindung zu akzeptieren.
- Wenn die Firewall so konfiguriert war, dass sie die Verbindungen unterbricht, würden wir überhaupt keine Antwort sehen und stattdessen würde Telnet eine Zeitüberschreitung aufweisen:
# telnet 10.0.0.25 80 Trying 10.0.0.25... telnet: connect to address 10.0.0.25: Connection timed out
Auflisten der Firewall-Regeln
In Red Hat Enterprise Linux können Firewall-Regeln mithilfe des Dienstbefehls aufgelistet werden:
# service iptables status
Oder mit dem iptables-Befehl:
# iptables -xvn -L