Verifica se la porta è aperta o chiusa su un server Linux?


209

Come posso verificare se una porta è in ascolto su un server Linux?


2
Non è abbastanza chiaro cosa stai chiedendo. Cosa intendi con "aperto"? Vuoi dire che qualche server è in ascolto su quella porta? O vuoi dire che è consentito dal firewall di sistema? O cosa?
David Schwartz,

Penso che una porta sia bloccata sul mio server e voglio sbloccarla / riaprirla.
James Anderson,

14
netstat -an | grep PORTNUMBER | grep -i listenSe l'output è vuoto, la porta non è in uso.
automatix,

Risposte:


187

È possibile verificare se un processo è in ascolto su una porta TCP o UDP con netstat -tuplen.

Per verificare se alcune porte sono accessibili dall'esterno (questo è probabilmente quello che vuoi) puoi usare uno scanner di porte come Nmap da un altro sistema. L'esecuzione di Nmap sullo stesso host che si desidera verificare è abbastanza inutile per il proprio scopo.


54
GNU netstat conosce i parametri -t, -u, -p, -l, -e, e -n. Grazie al parser delle opzioni può essere espresso come -tuplen. linux.die.net/man/8/netstat
joschi il

3
Inoltre, il telnetcomando di solito supporta solo TCP, quindi sei sfortunato se il servizio che desideri controllare viene eseguito su un altro protocollo.
joschi,

1
sì, stavo usando Windows da qui la confusione.
Dexter,

2
nc è (migliore) alternativa a telnet. Supporta anche UDP.
Tsvetomir Dimitrov,

1
Usatelo con sudo: sudo netstat -tuplen. Questo ti darà processi di proprietà non solo di te, ma anche di altri, e stamperà ulteriori dettagli (come PID / Nome del programma) se non sono già visualizzati come utenti non root.
John Red,

102

Il modo più rapido per verificare se una porta TCP è aperta (compresi eventuali firewall hardware che potresti avere), è digitare, da un computer remoto (ad esempio il desktop):

telnet myserver.com 80

Che tenterà di aprire una connessione alla porta 80 su quel server. Se hai una pausa o neghi, la porta non è aperta :)


1
dice che non riconosce "telnet" come comando ...
James Anderson,

6
"yum install telnet" per installare il pacchetto client telnet.
cjc,

8
Scritto sopra:if you get a time out or deny, the port is not open
Industriale

2
Cosa succede se non si dispone di permessi per installare telnet? Esiste un altro strumento standard?
KC Baltz,

3
Ho provato "telnet myhost 22" e ho ottenuto un timeout. Ma posso entrare in quella macchina. ?!
Torsten Bronger,

30

OK, in sintesi, hai un server a cui puoi accedere. Vuoi vedere se qualcosa è in ascolto su qualche porta. Come root, esegui:

netstat -nlp

questo mostrerà un elenco di processi in ascolto su porte TCP e UDP. Puoi scansionarlo (o grep) per il processo che ti interessa e / o per i numeri di porta che ti aspetti di vedere.

Se il processo che ti aspetti non è presente, dovresti avviarlo e controllare di nuovo netstat. Se il processo è lì, ma è in ascolto su un'interfaccia e una porta che non ti aspettavi, allora c'è un problema di configurazione (ad esempio, potrebbe essere in ascolto, ma solo sull'interfaccia di loopback, quindi vedresti 127.0.0.1:3306 e nessun'altra linea per la porta 3306, nel caso della configurazione predefinita per MySQL).

Se il processo è attivo e sta ascoltando sulla porta che ti aspetti, puoi provare a eseguire un "telnet" su quella porta dal tuo Macbook nel tuo ufficio / casa, ad es.

 telnet xxxxxxxxxxxx.co.uk 443

Ciò verificherà se (presupponendo porte standard) che sia presente un server Web configurato per SSL. Si noti che questo test che utilizza telnet funzionerà solo se il processo è in ascolto su una porta TCP. Se è una porta UDP, puoi anche provare con qualsiasi client che avresti usato per connetterti ad essa. (Vedo che hai usato la porta 224. Questo è masqdialer e non ho idea di cosa sia).

Se il servizio è lì, ma non riesci ad accedervi esternamente, allora c'è un firewall che ti blocca. In tal caso, eseguire:

 iptables -L -n

Questo mostrerà tutte le regole del firewall come definite sul tuo sistema. Puoi pubblicarlo, ma, in generale, se non stai consentendo tutto sulla catena INPUT, probabilmente dovrai consentire esplicitamente il traffico sulla porta in questione:

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

o qualcosa del genere. Non eseguire i comandi del firewall alla cieca in base a ciò che un estraneo ti ha detto su Internet. Considera cosa stai facendo.

Se il firewall sulla casella consente il traffico desiderato, è possibile che la società di hosting stia eseguendo un firewall (ad esempio, consentono solo SSH (22 / tcp), HTTP (80 / tcp) e HTTPS (443 / tcp) e negando tutto il resto del traffico in entrata). In questo caso, dovrai aprire un ticket di helpdesk con loro per risolvere questo problema, anche se suppongo che potrebbe esserci qualcosa nel tuo cPanel che potrebbe consentirlo.


Potresti aggiungere come annullare il comando iptables -I? Grazie!!
Evgeny,

1
"iptables -D" seguito da qualsiasi altra cosa tu abbia avuto dopo "-I" nel comando originale. Fondamentalmente, consulta la documentazione.
cjc,

11

Uso la combinazione di netstate lsof:

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

Per vedere se la porta viene utilizzata e cosa la sta usando.


nulla chiede con o senza sudo
Dheeraj Thedijje il

1
@DheerajThedijje - quindi quel porto non è aperto
warren

Sì no, capito.
Dheeraj Thedijje,

7

Se si è connessi al sistema e si può eseguire un comando come root, è possibile controllare l'output di iptables

iptables -L -vn

questo elencherà le regole del firewall e quali porte sono target aperto ACCEPTe qualsiasi target di porte esplicitamente chiuso REJECT.


E se hai firewalld, è più semplice firewall-cmd --query-port=port/protocol, ad es firewall-cmd --query-port=80/tcp.
Agostino,

6

lsof -i :ssh elencherà tutti i processi con la porta ssh aperta, sia in ascolto che in connessioni attive.


Prefisso sudose non restituisce alcun output.
Elijah Lynn,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.