Überprüfen Sie, ob der Port auf einem Linux-Server offen oder geschlossen ist.

209

Wie kann ich überprüfen, ob ein Port auf einem Linux-Server empfangsbereit ist?

James Anderson
quelle
2
Es ist nicht ganz klar, was Sie fragen. Was meinst du mit "offen"? Meinen Sie, dass ein Server diesen Port überwacht? Oder meinst du, es ist von der System-Firewall erlaubt? Oder was?
David Schwartz
Ich denke, ein Port wird auf meinem Server blockiert und möchte ihn wieder entsperren / öffnen.
James Anderson
14
netstat -an | grep PORTNUMBER | grep -i listenWenn die Ausgabe leer ist, wird der Port nicht verwendet.
Automatix

Antworten:

187

Mit können Sie überprüfen, ob ein Prozess einen TCP- oder UDP-Port überwacht netstat -tuplen.

Um zu überprüfen, ob einige Ports von außen zugänglich sind (dies ist wahrscheinlich das, was Sie wollen), können Sie einen Port-Scanner wie Nmap von einem anderen System verwenden. Das Ausführen von Nmap auf demselben Host, den Sie überprüfen möchten, ist für Ihren Zweck völlig nutzlos.

joschi
quelle
54
GNU netstat kennt die Parameter -t, -u, -p, -l, -e, und -n. Dank der Optionen Parser kann es ausgedrückt werden als -tuplen. linux.die.net/man/8/netstat
joschi
3
Außerdem unterstützt der telnetBefehl normalerweise nur TCP, sodass Sie kein Glück haben, wenn der zu überprüfende Dienst auf einem anderen Protokoll ausgeführt wird.
Josefi
1
Ja, ich habe Windows benutzt, daher die Verwirrung.
Dexter
2
nc ist eine (bessere) alternative zu telnet. Es unterstützt auch UDP.
Tsvetomir Dimitrov
1
Verwenden Sie es mit sudo: sudo netstat -tuplen. Dadurch erhalten Sie Prozesse, die nicht nur Ihnen, sondern auch anderen gehören, und es werden zusätzliche Details (wie PID / Programmname) gedruckt, wenn diese nicht bereits als Benutzer ohne Rootberechtigung angezeigt werden.
John Red
102

Der schnellste Weg, um zu testen, ob ein TCP-Port offen ist (einschließlich eventuell vorhandener Hardware-Firewalls), besteht darin, von einem entfernten Computer (z. B. Ihrem Desktop) Folgendes einzugeben:

telnet myserver.com 80

Welches wird versuchen, eine Verbindung zu Port 80 auf diesem Server zu öffnen. Wenn Sie eine Auszeit bekommen oder ablehnen, ist der Port nicht offen :)

Adrian Macneil
quelle
1
sagt, dass es "Telnet" nicht als Befehl erkennt ...
James Anderson
6
"yum install telnet", um das Telnet-Client-Paket zu installieren.
cjc
8
Oben geschrieben:if you get a time out or deny, the port is not open
Industrial
2
Was ist, wenn Sie keine Berechtigung zum Installieren von Telnet haben? Gibt es ein anderes Standardwerkzeug?
KC Baltz
3
Ich habe versucht, "telnet myhost 22" und eine Auszeit zu bekommen. Aber ich kann in diese Maschine hinein ssh. ?!
Torsten Bronger
30

OK, zusammenfassend haben Sie einen Server, auf dem Sie sich anmelden können. Sie möchten sehen, ob an einem Port etwas zuhört. Führen Sie als root Folgendes aus:

netstat -nlp

Daraufhin wird eine Liste der Prozesse angezeigt, die TCP- und UDP-Ports überwachen. Sie können es nach dem gewünschten Prozess und / oder den erwarteten Portnummern durchsuchen (oder durchsuchen).

Wenn der erwartete Prozess nicht vorhanden ist, sollten Sie diesen Prozess starten und netstat erneut überprüfen. Wenn der Prozess vorhanden ist, aber eine Schnittstelle und einen Port überwacht, die Sie nicht erwartet haben, liegt ein Konfigurationsproblem vor (z. B. könnte er nur die Loopback-Schnittstelle überwachen, sodass 127.0.0.1:3306 und 127.0.0.1:3306 angezeigt werden keine weiteren Zeilen für Port 3306 (bei der Standardkonfiguration für MySQL).

Wenn der Vorgang abgeschlossen ist und der erwartete Port abgehört wird, können Sie versuchen, von Ihrem Macbook in Ihrem Büro / Zuhause aus ein "Telnet" für diesen Port auszuführen, z.

 telnet xxxxxxxxxxxx.co.uk 443

Damit wird geprüft, ob (unter der Annahme von Standardports) ein Webserver für SSL konfiguriert ist. Beachten Sie, dass dieser Test mit Telnet nur funktioniert, wenn der Prozess einen TCP-Port überwacht. Wenn es sich um einen UDP-Port handelt, können Sie auch versuchen, mit einem beliebigen Client eine Verbindung herzustellen. (Ich sehe, dass Sie Port 224 verwendet haben. Dies ist masqdialer, und ich habe keine Ahnung, was das ist).

Wenn der Dienst vorhanden ist, Sie ihn jedoch nicht extern erreichen können, blockiert eine Firewall Sie. Führen Sie in diesem Fall Folgendes aus:

 iptables -L -n

Daraufhin werden alle Firewall-Regeln angezeigt, die auf Ihrem System definiert sind. Sie können das posten, aber wenn Sie nicht alles in der INPUT-Kette zulassen, müssen Sie wahrscheinlich explizit den Datenverkehr auf dem fraglichen Port zulassen:

 iptables -I INPUT -p tcp --dport 224 -j ACCEPT

oder etwas in diese Richtung. Führen Sie Ihre Firewall-Befehle nicht blind aus, basierend auf dem, was Ihnen ein Fremder im Internet gesagt hat. Überlegen Sie, was Sie tun.

Wenn Ihre Firewall auf der Box den von Ihnen gewünschten Datenverkehr zulässt, führt Ihr Hosting-Unternehmen möglicherweise eine Firewall aus (z. B. werden nur SSH (22 / TCP), HTTP (80 / TCP) und HTTPS (443 / TCP) zugelassen. und alle anderen eingehenden Verkehr zu verweigern). In diesem Fall müssen Sie ein Helpdesk-Ticket mit ihnen öffnen, um dieses Problem zu beheben. Möglicherweise befindet sich jedoch etwas in Ihrem cPanel, das dies zulässt.

cjc
quelle
Könnten Sie bitte hinzufügen, wie der Befehl iptables -I rückgängig gemacht werden kann? Vielen Dank!!
Evgeny
1
"iptables -D" gefolgt von allem, was Sie nach dem "-I" im ursprünglichen Befehl hatten. Schlagen Sie grundsätzlich in der Dokumentation nach.
cjc
11

Ich benutze die Kombination von netstatund lsof:

netstat -an | grep <portnumber>
lsof -i:<portnumber>

Um zu sehen, ob der Port benutzt wird und was ihn benutzt.

Labyrinth
quelle
nichts fordert mit oder ohne sudo
Dheeraj Thedijje
1
@DheerajThedijje - dann ist dieser Hafen nicht geöffnet
warren
Ja, das war es nicht.
Dheeraj Thedijje
7

Wenn Sie mit dem System verbunden sind und einen Befehl als root ausführen können, können Sie die Ausgabe von iptables überprüfen

iptables -L -vn

Daraufhin werden die Firewall-Regeln und die offenen ACCEPTund explizit geschlossenen Ports aufgelistet REJECT.

user619714
quelle
Und wenn Sie eine Firewall haben, ist dies einfacher firewall-cmd --query-port=port/protocol, z firewall-cmd --query-port=80/tcp.
Agostino
6

lsof -i :ssh listet alle Prozesse auf, bei denen der SSH-Port geöffnet ist, sowohl empfangende als auch aktive Verbindungen.

pgs
quelle
Präfix, sudowenn keine Ausgabe zurückgegeben wird.
Elijah Lynn