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


Wie kann ich überprüfen, ob ein Port auf einem Linux-Server abhört?


170
2017-09-07 17:24


Ursprung


Es ist nicht ganz klar, was Sie fragen. Was meinst du mit "offen"? Meinst du, 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
netstat -an | grep PORTNUMBER | grep -i listen Wenn die Ausgabe leer ist, wird der Port nicht verwendet. - automatix


Antworten:


Sie können überprüfen, ob ein Prozess mit einem TCP- oder UDP-Port abhört 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 Portscanner wie Nmap von Ein weiterer System. Das Ausführen von Nmap auf demselben Host, den Sie überprüfen möchten, ist für Ihren Zweck ziemlich nutzlos.


158
2017-09-07 17:31



GNU netstat kennt die Parameter -t, -u, -p, -l, -e, und -n. Dank des Optionen-Parsers kann es als ausgedrückt werden -tuplen. linux.die.net/man/8/netstat - joschi
Auch die telnet Der Befehl unterstützt normalerweise nur TCP. Sie haben also kein Glück, wenn der zu überprüfende Dienst auf einem anderen Protokoll ausgeführt wird. - joschi
Ja, ich benutzte Windows, daher die Verwirrung. - Dexter
nc ist (bessere) Alternative zu Telnet. Es unterstützt auch UDP. - Tsvetomir Dimitrov
Benutze es mit Sudo: sudo netstat -tuplen. Dadurch erhalten Sie Prozesse, die nicht nur Ihnen gehören, sondern auch anderen, und es werden zusätzliche Details (wie PID / Programmname) gedruckt, wenn sie nicht bereits als Nicht-Root-Benutzer angezeigt werden. - John Red


Der schnellste Weg, um zu testen, ob ein TCP-Port offen ist (einschließlich aller Hardwarefirewalls, die Sie möglicherweise haben), besteht darin, von einem entfernten Computer (z. B. Ihrem Desktop) aus einzugeben:

telnet myserver.com 80

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


83
2017-09-07 17:33



sagt, dass es "telnet" nicht als Befehl erkennt ... - James Anderson
"yum install telnet", um das Telnet-Client-Paket zu installieren. - cjc
Sagt: Telnet: Verbindung zur Adresse 82.165.148.224: Verbindung abgelehnt - James Anderson
Oben geschrieben: if you get a time out or deny, the port is not open - Industrial
Was ist, wenn Sie perm kein Telnet installieren müssen? Gibt es ein anderes Standardwerkzeug? - KC Baltz


OK, zusammenfassend haben Sie einen Server, auf dem Sie sich anmelden können. Sie möchten sehen, ob etwas an einem Port abgehört wird. Als root:

netstat -nlp

Dies zeigt eine Liste der Prozesse, die auf TCP- und UDP-Ports abhören. Sie können den Prozess, an dem Sie interessiert sind, und / oder die Portnummern, die Sie erwarten, scannen (oder grepen).

Wenn der Prozess, den Sie erwarten, nicht vorhanden ist, sollten Sie diesen Prozess starten und netstat erneut überprüfen. Wenn der Prozess vorhanden ist, aber auf einer Schnittstelle und einem Port wartet, die Sie nicht erwartet haben, gibt es ein Konfigurationsproblem (z. B. könnte es zuhören, aber nur auf der Loopback-Schnittstelle, so dass Sie 127.0.0.1:3306 und keine anderen Zeilen für Port 3306, im Fall der Standardkonfiguration für MySQL).

Wenn der Prozess läuft, und es auf dem Port wartet, den Sie erwarten, können Sie versuchen, ein "Telnet" zu diesem Anschluss von Ihrem Macbook in Ihrem Büro / Zuhause auszuführen, z.

 telnet xxxxxxxxxxxx.co.uk 443

Dadurch wird getestet, ob (unter der Annahme von Standardports) ein Webserver für SSL konfiguriert ist. Beachten Sie, dass dieser Test unter Verwendung von Telnet nur funktioniert, wenn der Prozess auf einem TCP-Port abhört. Wenn es sich um einen UDP-Port handelt, können Sie es auch mit dem Client versuchen, mit dem Sie sich verbinden wollten. (Ich sehe, dass Sie Port 224 verwendet haben. Das ist masqdialer, und ich habe keine Ahnung, was das ist).

Wenn der Dienst da ist, aber extern nicht erreichbar ist, blockiert eine Firewall Sie. In diesem Fall führen Sie Folgendes aus:

 iptables -L -n

Dies zeigt alle Firewall-Regeln an, 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 den Datenverkehr auf dem fraglichen Port explizit zulassen:

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

oder etwas in dieser Richtung. Führen Sie Ihre Firewall-Befehle nicht blind basierend auf dem aus, was Ihnen ein Fremder im Internet mitgeteilt hat. Überlege, was du tust.

Wenn Ihre Firewall auf der Box den gewünschten Datenverkehr zulässt, kann Ihr Hosting-Unternehmen eine Firewall ausführen (z. B. nur SSH (22 / tcp), HTTP (80 / tcp) und HTTPS (443 / tcp)). und allen anderen eingehenden Datenverkehr zu verweigern). In diesem Fall müssen Sie ein Helpdesk-Ticket mit ihnen öffnen, um dieses Problem zu beheben, auch wenn es in Ihrem cPanel möglicherweise etwas gibt, das dies zulässt.


23
2017-09-07 20:01



Könnten Sie bitte hinzufügen, wie Sie den iptables -I Befehl rückgängig machen? Vielen Dank!! - Evgeny
"iptables -D" gefolgt von dem, was Sie nach dem "-I" im ursprünglichen Befehl noch hatten. Im Grunde, schauen Sie sich die Dokumentation an. - cjc


Ich benutze die Kombination von netstatund lsof:

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

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


8
2018-03-28 19:32



Nichts wird mit oder ohne Sudo angezeigt - Dheeraj Thedijje
@DheerajThedijje - dann ist dieser Hafen nicht offen - warren
Ja, war es nicht, verstanden. - Dheeraj Thedijje


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

Dies listet die Firewall-Regeln auf und welche Ports sind offen ACCEPT und alle explizit geschlossenen Ports Ziel REJECT.


7
2017-09-07 17:57



Und wenn Sie firewalld haben, ist es einfacher firewall-cmd --query-port=port/protocol, z.B. firewall-cmd --query-port=80/tcp. - Agostino


lsof -i :ssh listet alle Prozesse auf, bei denen der SSH-Port offen ist, sowohl die aktiven als auch die aktiven Verbindungen.


5
2018-01-25 21:45



Präfix sudo wenn es keine Ausgabe zurückgibt. - Elijah Lynn