Cet article explique comment vérifier les ports ouverts à l'aide des commandes netstat, lsof et nmap pour savoir quels services écoutent sur quels ports.
Lors du dépannage de problèmes de connectivité réseau ou de problèmes spécifiques à une application, l'une des premières choses à vérifier doit être quels ports sont réellement utilisés sur votre système et quelle application écoute sur un port spécifique.
Le port réseau est identifié par son numéro, l'adresse IP associée et le type de protocole de communication, tel que TCP ou UDP. Avant tout, un port ouvert est un port réseau sur lequel une application ou un processus écoute, agissant comme point de terminaison de communication.
Chaque port d'écoute peut être ouvert ou fermé (filtré) à l'aide d'un pare-feu. En termes généraux, un port ouvert est un port réseau qui accepte les paquets entrants provenant d'emplacements distants.
Vérifier les ports ouverts avec netstat
netstat
(statistiques du réseau ) est un outil en ligne de commande pour surveiller les connexions réseau entrantes et sortantes ainsi que pour afficher les tables de routage, les statistiques d'interface, etc. Cet outil est très important et très utile pour les administrateurs réseau Linux ainsi que les administrateurs système pour surveiller et dépanner leur réseau -problèmes liés et déterminer les performances du trafic réseau.
Pour répertorier tous les ports TCP ou UDP en cours d'écoute, y compris les services utilisant les ports et l'état du socket, utilisez la commande suivante :
$ sudo netstat -tulnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:10024 0.0.0.0:* LISTEN 24919/amavisd
tcp 0 0 0.0.0.0:587 0.0.0.0:* LISTEN 967/master
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 800/tinyproxy
tcp 0 0 0.0.0.0:465 0.0.0.0:* LISTEN 967/master
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 844/pure-ftpd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 768/sshd
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 967/master
tcp 0 0 0.0.0.0:993 0.0.0.0:* LISTEN 1001/dovecot
tcp6 0 0 :::3306 :::* LISTEN 823/mysqld
tcp6 0 0 ::1:783 :::* LISTEN 24911/spamd.pid -d
tcp6 0 0 :::80 :::* LISTEN 781/httpd
tcp6 0 0 :::21 :::* LISTEN 844/pure-ftpd
tcp6 0 0 :::22 :::* LISTEN 768/sshd
tcp6 0 0 :::25 :::* LISTEN 967/master
tcp6 0 0 :::993 :::* LISTEN 1001/dovecot
tcp6 0 0 :::995 :::* LISTEN 1001/dovecot
udp 0 0 0.0.0.0:47967 0.0.0.0:* 460/avahi-daemon: r
udp 0 0 127.0.0.1:123 0.0.0.0:* 472/ntpd
udp 0 0 0.0.0.0:123 0.0.0.0:* 472/ntpd
udp6 0 0 :::123 :::* 472/ntpd
Les options utilisées dans cette commande ont la signification suivante :
-t
:Afficher les ports TCP.-u
:Afficher les ports UDP.-l
:Afficher uniquement les ports d'écoute.-n
:Afficher les adresses numériques au lieu de résoudre les hôtes.-p
:Affiche le PID et le nom du processus de l'écouteur. Ces informations s'affichent uniquement si vous exécutez la commande en tant qu'utilisateur root ou sudo.
Les colonnes importantes dans notre cas sont :
- Proto :protocole utilisé par le socket.
- Adresse locale :l'adresse IP et le numéro de port sur lesquels le processus écoute.
- PID/Nom du programme :le PID et le nom du processus.
De plus, si vous voulez filtrer les résultats, utilisez le grep
commande. Par exemple, pour trouver quel processus écoute sur le port TCP 22, vous tapez :
$ sudo netstat -tulnp | grep :22
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 768/sshd
tcp6 0 0 :::22 :::* LISTEN 768/sshd
Si la sortie est vide, cela signifie que rien n'écoute sur le port.
Pour en savoir plus sur netstat
commande sous Linux, consultez sa page de manuel.
Vérifier les ports ouverts avec lsof
lsof
signifiant "LiSt Open Files" est utilisé pour savoir quels fichiers sont ouverts par quel processus. Sous Linux, tout est un fichier. Vous pouvez considérer un socket comme un fichier qui écrit sur le réseau.
Pour obtenir une liste de tous les ports TCP en écoute avec le type lsof :
$ sudo lsof -nP -iTCP -sTCP:LISTEN
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 768 root 3u IPv4 16112 0t0 TCP *:22 (LISTEN)
sshd 768 root 4u IPv6 16114 0t0 TCP *:22 (LISTEN)
httpd 781 root 4u IPv6 16328 0t0 TCP *:80 (LISTEN)
httpd 781 root 6u IPv6 16336 0t0 TCP *:443 (LISTEN)
tinyproxy 800 tinyproxy 0u IPv4 16750 0t0 TCP *:8080 (LISTEN)
tinyproxy 805 tinyproxy 0u IPv4 16750 0t0 TCP *:8080 (LISTEN)
mysqld 823 mysql 20u IPv6 17479 0t0 TCP *:3306 (LISTEN)
pure-ftpd 844 root 4u IPv4 16289 0t0 TCP *:21 (LISTEN)
pure-ftpd 844 root 5u IPv6 16290 0t0 TCP *:21 (LISTEN)
master 967 root 13u IPv4 17225 0t0 TCP *:25 (LISTEN)
master 967 root 103u IPv4 17319 0t0 TCP 127.0.0.1:10025 (LISTEN)
dovecot 1001 root 24u IPv4 18600 0t0 TCP *:995 (LISTEN)
dovecot 1001 root 37u IPv6 18623 0t0 TCP *:993 (LISTEN)
httpd 24344 apache 4u IPv6 16328 0t0 TCP *:80 (LISTEN)
httpd 24344 apache 6u IPv6 16336 0t0 TCP *:443 (LISTEN)
/usr/bin/ 24911 root 5u IPv4 25208447 0t0 TCP 127.0.0.1:783 (LISTEN)
/usr/bin/ 24911 root 6u IPv6 25208449 0t0 TCP [::1]:783 (LISTEN)
spamd 24913 root 5u IPv4 25208447 0t0 TCP 127.0.0.1:783 (LISTEN)
spamd 24913 root 6u IPv6 25208449 0t0 TCP [::1]:783 (LISTEN)
/usr/sbin 24919 amavis 5u IPv4 25208583 0t0 TCP 127.0.0.1:10024 (LISTEN)
/usr/sbin 24919 amavis 6u IPv6 25208584 0t0 TCP [::1]:10024 (LISTEN)
smtpd 28403 postfix 6u IPv4 17225 0t0 TCP *:25 (LISTEN)
smtpd 28403 postfix 7u IPv6 17226 0t0 TCP *:25 (LISTEN)
Les options utilisées sont les suivantes :
-n
:Ne convertissez pas les numéros de port en noms de port.-P
:Ne résolvez pas les noms d'hôte, affichez les adresses numériques.-iTCP -sTCP:LISTEN
:Afficher uniquement les fichiers réseau avec l'état TCP ÉCOUTER.
Pour trouver quel processus écoute sur un port particulier, par exemple, le port 3306, vous utiliseriez :
$ sudo lsof -nP -iTCP:3306 -sTCP:LISTEN
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 823 mysql 20u IPv6 17479 0t0 TCP *:3306 (LISTEN)
La sortie montre que le serveur MySQL utilise le port 3306.
Pour en savoir plus sur lsof
commande sous Linux, consultez sa page de manuel.
Vérifier les ports ouverts avec nmap
nmap
, ou mappeur de réseau , est un outil de ligne de commande Linux open source pour l'exploration du réseau et l'audit de sécurité. Avec nmap, les administrateurs de serveur peuvent rapidement révéler les hôtes et les services, rechercher les problèmes de sécurité et rechercher les ports ouverts.
nmap
Les commandes peuvent être utilisées pour vérifier qu'un seul port ou une série de ports sont ouverts.
Voici comment analyser le port 80 sur le système cible :
$ sudo nmap -p 80 192.168.0.1
Nmap scan report for 192.168.0.1
Host is up (0.000073s latency).
PORT STATE SERVICE
80/tcp open http
Nmap done: 1 IP address (1 host up) scanned in 0.26 seconds
Analysez les ports 1 à 200 sur le système cible :
$ sudo nmap -p 1-200 192.168.0.1
Starting Nmap 6.40 ( http://nmap.org ) at 2020-08-21 16:42 EEST
Nmap scan report for 192.168.0.1
Host is up (0.0000080s latency).
Not shown: 196 closed ports
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
25/tcp open smtp
80/tcp open http
Nmap done: 1 IP address (1 host up) scanned in 1.45 seconds
Analysez (rapidement) les ports les plus courants :
$ sudo nmap -F 192.168.0.1
Starting Nmap 6.40 ( http://nmap.org ) at 2020-08-21 16:44 EEST
Nmap scan report for 192.168.0.1
Host is up (0.000014s latency).
Not shown: 89 closed ports
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
25/tcp open smtp
80/tcp open http
443/tcp open https
465/tcp open smtps
587/tcp open submission
993/tcp open imaps
995/tcp open pop3s
3306/tcp open mysql
8080/tcp open http-proxy
Nmap done: 1 IP address (1 host up) scanned in 1.46 seconds
Conclusion
En conclusion, vérifier quels ports sont ouverts et quelles informations peuvent être obtenues des services acceptant les connexions sur ces ports vous donne les informations dont vous avez besoin pour verrouiller votre serveur.
Par exemple, toute information superflue qui s'échappe de votre machine peut être utilisée par un utilisateur malveillant pour tenter d'exploiter des vulnérabilités connues ou d'en développer de nouvelles. Moins ils peuvent comprendre, mieux c'est.