Port scanning
Lorsque nous avons approvisionné notre base de données, nous avons délibérément ouvert le port 7100 pour pouvoir l'administrer à distance.
L'ouverture d'un port expose notre serveur à des vecteurs d'attaque. Des bogues ou des faiblesses de type "zero day" peuvent être exploités par des pirates informatiques s'ils détectent qu'un service X est à l'écoute sur un port.
Des Port Scanners existent en ligne et peuvent être téléchargés gratuitement, par exemple :
Lancez une analyse de votre serveur. Y a-t-il des ports ouverts inattendus ?
Fermeture des ports : iptables et UFW
Il arrive qu'un port doive être ouvert pour un certain service, mais que nous souhaitions régler avec précision qui y a accès, et d'où (comme nous l'avons fait avec le port exposé pour MariaDB).
Les pare-feu commerciaux sont chargés de cette tâche et permettent de créer des règles pour le trafic entrant et sortant.
Chaque machine Linux dispose aussi de son propre tableau associatif d'adresses IP et ports, qui permet de définir comment accepter et router des paquets.
iptables --listNous pourrions par la suite configurer ce tableau pour rediriger les paquets comme on veut selon plusieurs critères :
la carte réseau impliquée (loopback, carte ethernet, cart wifi, etc)
le port
le protocole
l'adresse IP source
l'adresse IP destination
...
Cet outil est puissant, mais difficile à configurer.
Une application enveloppe existe qui s'appelle UFW (Uncomplicated FireWall) qui permet de créer un pare-feu simple, basé sur iptables. Via des règles/expressions simples, nous allons préciser quels paquets accepter ou rejeter. UFW ajoute ensuite des lignes au iptables.
Pour tester ufw, nous allons d'abord installer un serveur nginx sur une instance Ubuntu 22.04.
Normalement, on pourrait faire une requête à notre serveur dans un navigateur pour avoir la page défaut de nginx.
Avant d'activer UFW, pour ne pas perdre la connexion à notre serveur, on va activer les connexions SSH :
D'abord, on va préciser les règles de base :
Ensuite, important, activer les règles pour SSH, sinon on perdra toute connexion avec notre serveur !
Maintenant activez UFW :
Essayez de nouveau de charger la page web servie par nginx. On ne peut pas !
Analysons les règles de UFW :
Regardons maintenant IPTables :
Vous remarquerez plus de règles !
Créons des règles qui permettent l'accès du monde extérieur pour nginx :
Notre page fonctionne de nouveau !
Il y a d'autres scénarios de sécurisation d'un serveur :
Accepter des connexions SSH d'une adresse IP fixe :
allow from 203.0.113.88 to any port 22Accepter des connexions SSH d'une adresse IP fixe à MySQL :
allow from 203.0.113.88 to any port 3306Désactiver des connexions HTTP (port 80) :
ufw deny http
... et bien plus. Par exemple, on peut aussi désactiver des paquets sortants, pour empêcher du malware à envoyer des secrets vers l'extérieur. En pratique, c'est difficile, surtout si notre serveur doit se mettre à jour tout seul !
Pour enlever une règle :
Pour désactiver UFW (et donc enlever toutes les règles de iptables) :
UFW ne remplace pas des pare-feux plus avancés qui vont réellement regarder les contenus des paquets, utiliser les algorithmes type IA afin de gérer les flux, etc.
En revanche, c'est une première couche de sécurisation !
Mis à jour