• 20 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 24/08/2021

Auditez les ports ouverts du serveur et les processus associés

Vous savez déjà comment auditer le processus de démarrage, le système et les services. Dans ce chapitre, je vous propose désormais d'auditer les accès réseau ouverts sur le serveur, ainsi que les programmes et services qui ouvrent les ports associés.

Auditez les ports ouverts du serveur et les processus associés

En fonction de la cible fonctionnelle du serveur et des flux de requête qui lui sont destinés, ces accès réseau doivent être particulièrement surveillés et maîtrisés. Par exemple, ils sont critiques sur un serveur Web accessible au public. Ils sont probablement moins critiques, mais restent sensibles sur une base de données protégée dans le bastion de l'architecture réseau interne d'une entreprise.

Pour lister les ports ouverts sur le serveur, Linux propose plusieurs outils. Parmi ces outils, on trouve la traditionnelle commande netstat, qui n'est plus installée par défaut mais est accessible depuis le package net-tools. Cette commande est désormais remplacée par la commande ss, qui reprend toutes les options de netstat. Je vous propose de voir comment auditer ces ports ouverts en vidéo !Vous pouvez également suivre pas à pas avec la version texte ci-dessous, qui comporte notamment les commandes que vous pouvez copier. 

Lancez la commande suivante :

[root@fichesproduits ~]# ss -lptun
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
udp UNCONN 0 0 127.0.0.1:323 *:* users:(("chronyd",pid=573,fd=1))
udp UNCONN 0 0 *:68 *:* users:(("dhclient",pid=2467,fd=6))
udp UNCONN 0 0 ::1:323 :::* users:(("chronyd",pid=573,fd=2))
tcp LISTEN 0 0 *:3306 *:* users:(("mysqld",pid=1209,fd=13))
tcp LISTEN 0 0 *:22 *:* users:(("sshd",pid=818,fd=3))
tcp LISTEN 0 0 127.0.0.1:25 *:* users:(("master",pid=1253,fd=13))
tcp LISTEN 0 0 :::80 :::* users:(("httpd",pid=2004,fd=4),("httpd",pid=2003,fd=4),("httpd",pid=2002,fd=4),("httpd",pid=2001,fd=4),("httpd",pid=2000,fd=4),("httpd",pid=817,fd=4))
tcp LISTEN 0 0 :::21 :::* users:(("proftpd",pid=860,fd=0))
tcp LISTEN 0 0 :::22 :::* users:(("sshd",pid=818,fd=4))
tcp LISTEN 0 0 ::1:25 :::* users:(("master",pid=1253,fd=14))

Les options passées à cette commande correspondent aux fonctionnalités suivantes :

Option

Description

l

Affiche toutes les sockets en écoute

p

Affiche le processus utilisant la socket

t

Affiche les sockets de protocole TCP

u

Affiche les sockets de protocole UDP

n

Affiche les ports ouverts en mode numérique

Vous pouvez remarquer que cette commande nous indique l'adresse IP associée au port, par exemple :

  • 127.0.0.1 : la loopback locale IPv4 (le port est accessible uniquement depuis ce serveur) ;

  • * : toutes les adresses IPv4 du serveur ;

  • :: : toutes les adresses IPv6 du serveur ;

  • ::1 : la loopback locale IPv6 du serveur.

Par exemple ici, vous pourriez tout à fait nettoyer cette liste en fermant les ports suivants :

Option

Processus/Service

127.0.0.1:323 et ::1:323

Chronyd est un serveur de temps qui n'est pas indispensable et est seulement utilisé quand vous avez besoin d'une horloge commune pour vos applications 

*:68

Pas besoin d'un client DHCP sur une adresse IP publique

127.0.0.1:25 et ::1:25

Serveur postfix interne est installé uniquement si vos applications envoient des mails 

Les ports ouverts par les trois processus cités dans ce tableau dépendent de services réseau, lancés automatiquement lors du démarrage de la machine, ou lancés manuellement. Lorsque les informations du service ne sont pas affichées sur la commande ss, il est possible de les retrouver avec la commande lsof :

[root@fichesproduits ~]# lsof -i :323
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
chronyd 573 chrony 1u IPv4 14211 0t0 UDP localhost:323
chronyd 573 chrony 2u IPv6 14212 0t0 UDP localhost:323

Dans notre cas, pour couper ces services, il faudrait lancer les commandes suivantes :

systemctl stop chronyd postfix
systemctl disable chronyd postfix

Le service dhclient est directement géré par le processus de gestion de la carte réseau. Il ne démarre pas lorsque l'adresse est fixée en statique.

Autre remarque importante : concernant le port d'écoute du service de base de données, vous pouvez voir la ligne suivante :

tcp LISTEN 0 0 *:3306 *:* users:(("mysqld",pid=1209,fd=13))

Cette ligne indique que le service est en écoute sur l'adresse IPv4 du serveur et sur le port 3306. Cette configuration ne convient pas, car il est très peu probable qu’il soit possible d'accéder au service de base de données directement depuis l'environnement externe du serveur. Nous pouvons même dire qu'une connexion interne en provenance des codes sources de l'application fiches produits sera largement suffisante.

Pour vérifier cela et ouvrir le port en écoute uniquement sur la loopback IPv4, modifiez le fichier de configuration du service /etc/my.cnf et ajoutez-y la ligne suivante :

bind-address = 127.0.0.1

Par ailleurs, et dans la mesure du possible, si les services associés ne sont pas publics, il est fortement recommandé de changer les ports d'accès par défaut à ces services, car ce sont des cibles pour les attaquants.

Dans notre cas, l'application Web des fiches produits n'est pas publique et nous pourrions tout à fait envisager de changer le port par défaut dans le fichier /etc/httpd/conf/httpd.conf en modifiant la ligne concernée :

 # Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, instead of the default. See also the <VirtualHost>
# directive.
#
# Change this to Listen on specific IP addresses as shown below to
# prevent Apache from glomming onto all bound IP addresses.
#
#Listen 12.34.56.78:80
#Listen 80
Listen 8282

En résumé

L'analyse des services et processus ouvrant des accès réseau vous permet ici de recommander trois actions spécifiques pour renforcer la sécurité du serveur. Dans le chapitre suivant, je vous propose d'auditer les processus de filtrage réseau et la configuration du noyau pour les fonctionnalités réseau.

Exemple de certificat de réussite
Exemple de certificat de réussite