Comment configurer un pare-feu avec UFW sur un serveur Ubuntu 22.04

Sur un serveur Ubuntu 22.04, vous pouvez gérer le trafic réseau entrant et sortant en utilisant UFW (Uncomplicated Firewall). Pour les serveurs distants, assurez-vous d'autoriser le port SSH que vous utilisez actuellement avant d'activer le pare-feu, et confirmez que vous pouvez récupérer l'accès en utilisant un autre terminal ou console.

Choses à vérifier avant de commencer

UFW est un outil pour gérer les pare-feu Linux. Même si un port est autorisé dans le pare-feu, une connexion ne peut être établie que si le service est installé, en cours d'exécution et à l'écoute sur l'adresse et le port corrects. S'il existe des groupes de sécurité cloud ou des pare-feu externes, vérifiez également leurs règles séparément.

Ne modifiez pas arbitrairement les politiques existantes sur un serveur en fonctionnement. Vérifiez d'abord l'état actuel du pare-feu, les règles enregistrées, les services nécessaires et les ports d'accès, et préparez une méthode d'accès qui peut être utilisée même si SSH est déconnecté, comme via une console cloud ou une console de gestion du serveur. Les commandes nécessitent des privilèges administratifs.

sudo ufw status verbose
sudo ufw show added
sudo ss -lntup

status verbose affiche les politiques et règles UFW actives. Si UFW est inactif, vous ne pouvez pas vérifier toutes les règles enregistrées avec cet écran seul, consultez donc également show added. ss aide à identifier les sockets en écoute, mais ne détermine pas si un service est accessible depuis l'extérieur.

Activez après avoir autorisé SSH

Voici un exemple d'un nouveau serveur exécutant SSH sur le port TCP par défaut 22. Si le port est différent, changez-le pour le port réel. Cette règle permet ce port sans le restreindre à une IP spécifique, donc considérez que la plage d'accès est large. Sur les serveurs déjà actifs, examinez d'abord les règles et priorités existantes.

sudo ufw allow 22/tcp

Vérifiez les autres règles de service requises et la politique par défaut, puis activez le pare-feu. Lorsque vous activez UFW, les connexions SSH existantes peuvent être interrompues lorsque les règles sont réappliquées. Testez une nouvelle connexion SSH depuis un terminal séparé tout en conservant la session actuelle et, si elle échoue, accédez à la console préparée pour modifier les règles.

sudo ufw enable
sudo ufw status verbose

Vérifiez que le statut est active et que la règle SSH prévue est affichée. Ensuite, testez les connexions depuis les réseaux autorisés et non autorisés pour les services réellement nécessaires. Cette procédure et ses exceptions peuvent également être consultées dans la section de gestion à distance de la documentation Ubuntu 22.04 UFW.

Politiques de base et règles de ports

Les paramètres par défaut d'une installation nouvellement installée de UFW refusent généralement les connexions entrantes et autorisent les connexions sortantes, mais cela peut varier selon le serveur. Vérifiez les politiques réelles avec status verbose. Par exemple, pour refuser les connexions entrantes par défaut sur un nouveau serveur où tous les services requis ont été vérifiés, vous pouvez utiliser la commande suivante. Sur un serveur déjà en fonctionnement, examinez d'abord comment les modifications de politique affecteront les services et les connexions existants.

sudo ufw default deny incoming

Si vous devez fournir un serveur web à l'extérieur, autorisez les ports et protocoles réellement utilisés. Voici des exemples de ports TCP pour HTTP et HTTPS, et il n'est pas nécessaire de les appliquer universellement aux serveurs qui n'exécutent pas de services web.

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

Si le serveur fournit des services DNS, vous pouvez autoriser UDP et TCP sur le port 53 selon les besoins. N'ouvrez pas de ports sur des serveurs qui ne fournissent pas de services DNS simplement parce qu'il s'agit d'un exemple.

sudo ufw allow 53/udp
sudo ufw allow 53/tcp

allow ajoute des règles d'autorisation, et deny ajoute des règles de refus. Les règles de port sans protocole spécifié peuvent s'appliquer à la fois à TCP et UDP, il est donc plus clair de spécifier le protocole requis. L'ordre des règles est important, et la première règle correspondante peut être appliquée, donc ajouter une règle de refus lorsque des règles d'autorisation existent déjà ne bloque pas nécessairement l'accès.

Autoriser l'accès uniquement à partir d'IP spécifiques

Ce qui suit est un exemple de permission de connexions uniquement sur le port TCP 22 depuis une seule adresse IPv4. 192.0.2.10 est une adresse fictive à des fins d'explication, remplacez-la donc par l'adresse IP réelle d'accès administrateur, et si l'IP peut être modifiée, préparez d'abord une méthode de récupération.

sudo ufw allow from 192.0.2.10 to any port 22 proto tcp

Même si vous ajoutez cette règle, l'accès peut ne pas être restreint si une règle autorisant le port 22 depuis toutes les adresses reste active. Vérifiez les règles existantes et leur ordre à l'aide de la liste numérotée, et conservez uniquement les règles réellement nécessaires. Si le serveur a IPv6 activé, ne supposez pas qu'une règle uniquement IPv4 restreint l'accès IPv6 ; vérifiez également les politiques et règles IPv6.

sudo ufw status numbered

Suppression des règles et désactivation du pare-feu

Pour supprimer une règle que vous avez ajoutée avec le contenu exact, utilisez delete dans la commande originale. Par exemple, la commande ci-dessous supprime une règle autorisant le port UDP 53, tandis que les règles TCP sont séparées.

sudo ufw delete allow 53/udp

Vous pouvez également supprimer par numéro, mais si vous supprimez une règle, les numéros changent. Vérifiez toujours à nouveau le numéro actuel et le contenu avec sudo ufw status numbered. La suppression par numéro ne supprime qu'une seule règle IPv4 ou IPv6 affichée, donc vérifiez également la règle correspondante pour l'autre version IP. Après la suppression, vérifiez à nouveau le statut et testez la connexion réelle.

Pour désactiver le pare-feu, utilisez la commande suivante. Lorsqu'il est désactivé, la protection fournie par UFW est supprimée, donc ne supposez pas qu'il est sécurisé simplement parce qu'un autre pare-feu existe ; vérifiez d'abord l'étendue de l'impact.

sudo ufw disable

Lorsque qu'une règle ne se comporte pas comme prévu

Vérifiez si le service fonctionne, si le port et le protocole corrects sont autorisés, l'ordre des règles et les politiques par défaut. Passez également en revue les règles du pare-feu cloud, du routeur et du réseau en amont, ainsi que les adresses IPv4 ou IPv6 utilisées pour se connecter. En raison des conteneurs ou des règles réseau gérées séparément, il peut être difficile de juger le comportement global en utilisant uniquement la liste de l'état UFW.

Avant de modifier réellement une règle, vous pouvez prévisualiser les changements en utilisant --dry-run. Par exemple, la commande suivante montre les modifications d'une règle d'autorisation TCP 80 sans les appliquer.

sudo ufw --dry-run allow 80/tcp

L'écran de statut de l'UFW affiche principalement les règles gérées par les commandes UFW et ne représente pas tous les paramètres du pare-feu sur le système. Pour des explications supplémentaires et les formats de commandes, consultez Documentation du pare-feu du serveur Ubuntu.