Vérifiez si le port est ouvert ou fermé sur un serveur Linux?


209

Comment puis-je vérifier si un port écoute sur un serveur Linux?


2
Ce que vous demandez n'est pas tout à fait clair. Qu'entendez-vous par "ouvert"? Voulez-vous dire qu'un serveur écoute sur ce port? Ou voulez-vous dire que cela est autorisé par le pare-feu du système? Ou quoi?
David Schwartz

Je pense qu'un port est bloqué sur mon serveur et je veux le débloquer / l'ouvrir à nouveau.
James Anderson

14
netstat -an | grep PORTNUMBER | grep -i listenSi la sortie est vide, le port n'est pas utilisé.
automatix le

Réponses:


187

Vous pouvez vérifier si un processus écoute sur un port TCP ou UDP avec netstat -tuplen.

Pour vérifier si certains ports sont accessibles de l'extérieur (c'est probablement ce que vous voulez), vous pouvez utiliser un scanner de ports comme Nmap depuis un autre système. Exécuter Nmap sur le même hôte que vous voulez vérifier est tout à fait inutile.


54
GNU netstat connaît les paramètres -t, -u, -p, -l, -eet -n. Grâce à l’analyseur d’options, il peut être exprimé par -tuplen. linux.die.net/man/8/netstat
joschi le

3
En outre, la telnetcommande ne prend généralement en charge que le protocole TCP. Vous n'avez donc pas de chance si le service que vous souhaitez vérifier s'exécute sur un autre protocole.
joschi

1
oui, j'utilisais des fenêtres d'où la confusion.
Dexter

2
nc est (mieux) une alternative à telnet. Il supporte aussi UDP.
Tsvetomir Dimitrov

1
Utilisez - le avec sudo: sudo netstat -tuplen. Cela vous donnera des processus appartenant non seulement à vous, mais aussi à d'autres, et imprimera des détails supplémentaires (tels que PID / nom du programme) s'ils ne sont pas déjà affichés en tant qu'utilisateur non root.
John Red

102

Le moyen le plus rapide de vérifier si un port TCP est ouvert (y compris les pare-feu matériels que vous pourriez avoir) consiste à taper, à partir d'un ordinateur distant (par exemple, votre bureau):

telnet myserver.com 80

Qui va essayer d'ouvrir une connexion au port 80 sur ce serveur. Si vous obtenez une pause ou si vous refusez, le port n'est pas ouvert :)


1
dit qu'il ne reconnaît pas "telnet" comme une commande ...
James Anderson

6
"yum install telnet" pour installer le package du client telnet.
cjc

8
Ecrit ci-dessus:if you get a time out or deny, the port is not open
Industriel

2
Que faire si vous n'avez pas de permanente pour installer telnet? Existe-t-il un autre outil standard?
KC Baltz

3
J'ai essayé "telnet myhost 22" et j'ai un timeout. Mais je peux ssh dans cette machine. ?!
Torsten Bronger

30

OK, en résumé, vous avez un serveur auquel vous pouvez vous connecter. Vous voulez voir si quelque chose écoute sur un port. En tant que root, lancez:

netstat -nlp

Cela affichera une liste des processus d'écoute sur les ports TCP et UDP. Vous pouvez scanner (ou grep) le processus qui vous intéresse et / ou les numéros de port que vous souhaitez voir.

Si le processus auquel vous vous attendez n'existe pas, vous devez le démarrer et vérifier à nouveau netstat. Si le processus est en place, mais qu'il écoute sur une interface et un port auxquels vous ne vous attendiez pas, il y a un problème de configuration pas d'autres lignes pour le port 3306, dans le cas de la configuration par défaut pour MySQL).

Si le processus est terminé et qu'il écoute sur le port que vous attendez, vous pouvez essayer d'exécuter un "telnet" sur ce port depuis votre Macbook dans votre bureau / domicile, par exemple,

 telnet xxxxxxxxxxxx.co.uk 443

Cela vérifiera si (en supposant les ports standard) s’il existe un serveur Web configuré pour SSL. Notez que ce test utilisant telnet ne fonctionnera que si le processus écoute sur un port TCP. Si c'est un port UDP, vous pouvez aussi essayer avec n'importe quel client que vous alliez utiliser pour vous y connecter. (Je vois que vous avez utilisé le port 224. Ceci est masqdialer, et je n'ai aucune idée de ce que c'est).

Si le service existe, mais que vous ne pouvez pas y accéder de l'extérieur, un pare-feu vous bloque. Dans ce cas, lancez:

 iptables -L -n

Cela affichera toutes les règles de pare-feu telles que définies sur votre système. Vous pouvez poster cela, mais généralement, si vous n'autorisez pas tout sur la chaîne INPUT, vous devrez probablement autoriser explicitement le trafic sur le port en question:

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

Ou quelque chose de ce genre. N'exécutez pas vos commandes de pare-feu à l'aveuglette en vous basant sur ce qu'un étranger vous a dit sur Internet. Considérez ce que vous faites.

Si votre pare-feu sur le boîtier autorise le trafic que vous souhaitez, votre hébergeur utilise peut-être un pare-feu (par exemple, ils ne permettent que SSH (22 / tcp), HTTP (80 / tcp) et HTTPS (443 / tcp) et refuser tout autre trafic entrant). Dans ce cas, vous devrez ouvrir un ticket de service d'assistance avec eux pour résoudre ce problème, bien que je suppose qu'il se peut que quelque chose dans votre cPanel le permette.


Pourriez-vous svp ajouter comment annuler la commande iptables -I? Merci!!
Evgeny

1
"iptables -D" suivi de tout ce que vous avez après le "-I" dans la commande d'origine. Fondamentalement, recherchez la documentation.
cjc

11

J'utilise le combo de netstatet lsof:

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

Pour voir si le port est utilisé et ce qui l’utilise.


rien ne les invite avec ou sans sudo
Dheeraj Thedijje

1
@DheerajThedijje - alors ce port n'est pas ouvert
Warren

Oui ce n'était pas, compris.
Dheeraj Thedijje

7

Si vous êtes connecté au système et pouvez exécuter une commande en tant que root, vous pouvez vérifier la sortie de iptables.

iptables -L -vn

Cela listera les règles de pare-feu et les ports cibles ouverts ACCEPTainsi que les ports de ports explicitement fermés REJECT.


Et si vous avez un pare-feu, c'est plus simple firewall-cmd --query-port=port/protocol, par exemple firewall-cmd --query-port=80/tcp.
Agostino

6

lsof -i :ssh listera tous les processus avec le port ssh ouvert, les connexions à l'écoute et actives.


Préfixe sudos'il ne renvoie aucune sortie.
Elijah Lynn
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.