Comment configurer un pare-feu avec UFW sur Ubuntu 16.04
Vous n'utilisez pas Ubuntu 16.04 ?Choisissez une autre version ou distribution.
Introduction
UFW, ou Uncomplicated Firewall, est une interface pour iptables qui vise à simplifier le processus de configuration d'un pare-feu. Bien que iptables soit un outil solide et flexible, il peut être difficile pour les débutants d'apprendre à l'utiliser pour configurer correctement un pare-feu. Si vous souhaitez commencer à sécuriser votre réseau et que vous n'êtes pas sûr de l'outil à utiliser, UFW peut être le bon choix pour vous.
Ce tutoriel vous montrera comment configurer un pare-feu avec UFW sur Ubuntu 16.04.
Prérequis
Pour suivre ce tutoriel, vous aurez besoin de :
- Un serveur Ubuntu 16.04 avec un utilisateur non root disposant des privilèges sudo, que vous pouvez configurer en suivant les étapes 1 à 3 du tutoriel Configuration initiale du serveur avec Ubuntu 16.04.
UFW est installé par défaut sur Ubuntu. Si, pour une raison quelconque, il a été désinstallé, vous pouvez l'installer avec sudo apt-get install ufw.
Étape 1 — Utiliser IPv6 avec UFW (Optionnel)
Ce tutoriel est rédigé en pensant à IPv4, mais il fonctionnera également pour IPv6 tant que vous l'activez. Si votre serveur Ubuntu a IPv6 activé, assurez-vous que UFW est configuré pour prendre en charge IPv6 afin qu'il gère les règles du pare-feu pour IPv6 en plus de IPv4. Pour ce faire, ouvrez la configuration de UFW avec nano ou votre éditeur préféré.
sudo nano /etc/default/ufwAssurez-vous ensuite que la valeur de IPV6 est yes. Cela devrait ressembler à ceci :
...
IPV6=yes
...Enregistrez et fermez le fichier. Maintenant, lorsque UFW est activé, il sera configuré pour écrire à la fois les règles de pare-feu IPv4 et IPv6. Cependant, avant d'activer UFW, nous voudrons nous assurer que votre pare-feu est configuré pour vous permettre de vous connecter via SSH. Commençons par définir les politiques par défaut.
Étape 2 — Configuration des politiques par défaut
Si vous commencez tout juste avec votre pare-feu, les premières règles à définir sont vos politiques par défaut. Ces règles contrôlent la façon de gérer le trafic qui ne correspond explicitement à aucune autre règle. Par défaut, UFW est configuré pour refuser toutes les connexions entrantes et autoriser toutes les connexions sortantes. Cela signifie que toute personne essayant d’atteindre votre serveur cloud ne pourra pas se connecter, tandis que toute application sur le serveur pourra atteindre le monde extérieur.
Réinitialisons vos règles UFW aux valeurs par défaut afin que nous puissions être sûrs que vous pourrez suivre ce tutoriel. Pour définir les valeurs par défaut utilisées par UFW, utilisez ces commandes :
sudo ufw default deny incoming
sudo ufw default allow outgoingCes commandes définissent les valeurs par défaut pour refuser les connexions entrantes et autoriser les connexions sortantes. Ces paramètres par défaut du pare-feu pourraient suffire pour un ordinateur personnel, mais les serveurs ont généralement besoin de répondre aux requêtes entrantes des utilisateurs externes. Nous examinerons cela ensuite.
Étape 3 — Autoriser les connexions SSH
Si nous activions notre pare-feu UFW maintenant, il refuserait toutes les connexions entrantes. Cela signifie que nous devrons créer des règles qui permettent explicitement les connexions entrantes légitimes — les connexions SSH ou HTTP, par exemple — si nous voulons que notre serveur réponde à ce type de requêtes. Si vous utilisez un serveur cloud, vous voudrez probablement autoriser les connexions SSH entrantes afin de pouvoir vous connecter à votre serveur et le gérer.
Pour configurer votre serveur afin de permettre les connexions SSH entrantes, vous pouvez utiliser cette commande :
sudo ufw allow sshCela créera des règles de pare-feu qui permettront toutes les connexions sur le port 22, qui est le port sur lequel le démon SSH écoute par défaut. UFW sait ce que signifient SSH et un certain nombre d'autres noms de services car ils sont répertoriés comme services dans le fichier /etc/services.
Cependant, nous pouvons en fait écrire la règle équivalente en spécifiant le port au lieu du nom du service. Par exemple, cette commande fonctionne de la même manière que celle ci-dessus :
sudo ufw allow 22
Si vous avez configuré votre démon SSH pour utiliser un port différent, vous devrez spécifier le port approprié. Par exemple, si votre serveur SSH écoute sur le port 2222, vous pouvez utiliser cette commande pour autoriser les connexions sur ce port :
sudo ufw allow 2222Maintenant que votre pare-feu est configuré pour autoriser les connexions SSH entrantes, nous pouvons l'activer.
Étape 4 — Activation de UFW
Pour activer UFW, utilisez cette commande :
sudo ufw enableVous recevrez un avertissement indiquant que la commande peut perturber les connexions SSH existantes. Nous avons déjà configuré une règle de pare-feu qui permet les connexions SSH, donc il devrait être sûr de continuer. Répondez à l'invite avec y.
Le pare-feu est maintenant actif. N'hésitez pas à exécuter la commande sudo ufw status verbose pour voir les règles qui sont définies. Le reste de ce tutoriel explique en détail comment utiliser UFW, comme autoriser ou refuser différents types de connexions.
Étape 5 — Autoriser d'autres connexions
À ce stade, vous devriez autoriser toutes les autres connexions dont votre serveur a besoin pour répondre. Les connexions que vous devez autoriser dépendent de vos besoins spécifiques. Heureusement, vous savez déjà comment rédiger des règles qui autorisent les connexions en fonction d'un nom de service ou d'un port ; nous l'avons déjà fait pour SSH sur le port 22. Vous pouvez également faire cela pour :
- HTTP sur le port 80, qui est utilisé par les serveurs web non chiffrés, en utilisant
sudo ufw allow httpousudo ufw allow 80 - HTTPS sur le port 443, qui est utilisé par les serveurs web chiffrés, en utilisant
sudo ufw allow httpsousudo ufw allow 443 - FTP sur le port 21, qui est utilisé pour les transferts de fichiers non chiffrés (que vous ne devriez probablement pas utiliser de toute façon), en utilisant
sudo ufw allow ftpousudo ufw allow 21/tcp
Il existe plusieurs autres façons de permettre d'autres connexions, en dehors de la spécification d'un port ou d'un service connu.
Plages de ports spécifiques
Vous pouvez spécifier des plages de ports avec UFW. Certaines applications utilisent plusieurs ports, au lieu d'un seul port.
Par exemple, pour autoriser les connexions X11, qui utilisent les ports 6000-6007, utilisez ces commandes :
sudo ufw allow 6000:6007/tcp
sudo ufw allow 6000:6007/udpLors de la spécification des plages de ports avec UFW, vous devez indiquer le protocole (tcp ou udp) auquel les règles doivent s'appliquer. Nous n'avons pas mentionné cela auparavant car ne pas spécifier le protocole permet simplement les deux protocoles, ce qui est acceptable dans la plupart des cas.
Adresses IP spécifiques
Lors de l'utilisation de UFW, vous pouvez également spécifier des adresses IP. Par exemple, si vous souhaitez autoriser les connexions à partir d'une adresse IP spécifique, telle qu'une adresse IP de travail ou de domicile de 15.15.15.51, vous devez spécifier from, puis l'adresse IP :
sudo ufw allow from 15.15.15.51Vous pouvez également spécifier un port spécifique auquel l'adresse IP est autorisée à se connecter en ajoutant to any port suivi du numéro de port. Par exemple, si vous voulez autoriser 15.15.15.51 à se connecter au port 22 (SSH), utilisez cette commande :
sudo ufw allow from 15.15.15.51 to any port 22Sous-réseaux
Si vous souhaitez autoriser un sous-réseau d'adresses IP, vous pouvez le faire en utilisant la notation CIDR pour spécifier un masque de réseau. Par exemple, si vous souhaitez autoriser toutes les adresses IP allant de 15.15.15.1 à 15.15.15.254, vous pourriez utiliser cette commande :
sudo ufw allow from 15.15.15.0/24De même, vous pouvez également spécifier le port de destination auquel le sous-réseau 15.15.15.0/24 est autorisé à se connecter. Encore une fois, nous utiliserons le port 22 (SSH) comme exemple :
sudo ufw allow from 15.15.15.0/24 to any port 22Connexions à une interface réseau spécifique
Si vous voulez créer une règle de pare-feu qui ne s'applique qu'à une interface réseau spécifique, vous pouvez le faire en spécifiant « allow in on » suivi du nom de l'interface réseau.
Vous pourriez vouloir vérifier vos interfaces réseau avant de continuer. Pour ce faire, utilisez cette commande :
ip addrOutput Excerpt:...
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state
...
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default
...La sortie en surbrillance indique les noms des interfaces réseau. Ils sont généralement nommés quelque chose comme eth0 ou eth1.
Donc, si votre serveur dispose d'une interface réseau publique appelée eth0, vous pouvez autoriser le trafic HTTP (port 80) vers celle-ci avec cette commande :
sudo ufw allow in on eth0 to any port 80Cela permettrait à votre serveur de recevoir des requêtes HTTP depuis Internet public.
Ou, si vous souhaitez que votre serveur de base de données MySQL (port 3306) écoute les connexions sur l'interface réseau privée eth1, par exemple, vous pouvez utiliser cette commande :
sudo ufw allow in on eth1 to any port 3306Cela permettrait à d'autres serveurs de votre réseau privé de se connecter à votre base de données MySQL.
Étape 6 — Nier les connexions
Si vous n’avez pas modifié la politique par défaut pour les connexions entrantes, UFW est configuré pour refuser toutes les connexions entrantes. En général, cela simplifie le processus de création d’une politique de pare-feu sécurisée en vous obligeant à créer des règles qui permettent explicitement certains ports et adresses IP.
Cependant, parfois vous voudrez refuser certaines connexions en fonction de l'adresse IP ou du sous-réseau source, peut-être parce que vous savez que votre serveur est attaqué depuis cet endroit. De plus, si vous souhaitez changer votre politique d'entrée par défaut en autoriser (ce qui n'est pas recommandé pour des raisons de sécurité), vous devrez créer des règles de refus pour tous les services ou adresses IP pour lesquels vous ne souhaitez pas autoriser les connexions.
Pour écrire des règles deny, vous pouvez utiliser les commandes décrites ci-dessus, en remplaçant allow par deny.
Par exemple, pour refuser les connexions HTTP, vous pourriez utiliser cette commande :
sudo ufw deny httpOu si vous voulez refuser toutes les connexions depuis 15.15.15.51, vous pourriez utiliser cette commande :
sudo ufw deny from 15.15.15.51Maintenant, voyons comment supprimer des règles.
Étape 7 — Suppression des règles
Savoir comment supprimer des règles de pare-feu est tout aussi important que savoir comment les créer. Il existe deux manières différentes de spécifier quelles règles supprimer : par numéro de règle ou par la règle elle-même (similaire à la manière dont les règles ont été spécifiées lors de leur création). Nous commencerons par la méthode supprimer par numéro de règle car elle est plus facile, par rapport à l’écriture des règles réelles à supprimer, si vous êtes nouveau dans UFW.
Par numéro de règle
Si vous utilisez le numéro de règle pour supprimer des règles de pare-feu, la première chose que vous voudrez faire est d'obtenir une liste de vos règles de pare-feu. La commande UFW status a une option pour afficher des numéros à côté de chaque règle, comme démontré ici :
sudo ufw status numberedNumbered Output:Status: active
To Action From
-- ------ ----
[ 1] 22 ALLOW IN 15.15.15.0/24
[ 2] 80 ALLOW IN AnywhereSi nous décidons que nous voulons supprimer la règle 2, celle qui permet les connexions sur le port 80 (HTTP), nous pouvons la spécifier dans une commande UFW delete comme ceci :
sudo ufw delete 2Cela afficherait une invite de confirmation puis supprimerait la règle 2, qui permet les connexions HTTP. Notez que si vous avez IPv6 activé, vous voudriez également supprimer la règle IPv6 correspondante.
Selon la règle actuelle
L'alternative aux numéros de règles est de spécifier la règle réelle à supprimer. Par exemple, si vous souhaitez supprimer la règle allow http, vous pourriez l'écrire ainsi :
sudo ufw delete allow httpVous pouvez également spécifier la règle par allow 80, au lieu de par le nom du service :
sudo ufw delete allow 80Cette méthode supprimera à la fois les règles IPv4 et IPv6, si elles existent.
Étape 8 — Vérification du statut et des règles de UFW
À tout moment, vous pouvez vérifier l'état de UFW avec cette commande :
sudo ufw status verboseSi UFW est désactivé, comme c'est le cas par défaut, vous verrez quelque chose comme ceci :
Status: inactiveSi UFW est actif, ce qu’il devrait être si vous avez suivi l’étape 3, la sortie indiquera qu’il est actif et listera toutes les règles qui sont définies. Par exemple, si le pare-feu est configuré pour autoriser les connexions SSH (port 22) depuis n’importe où, la sortie pourrait ressembler à ceci :
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
22/tcp ALLOW IN AnywhereUtilisez la commande status si vous voulez vérifier comment UFW a configuré le pare-feu.
Étape 9 — Désactivation ou réinitialisation de UFW (facultatif)
Si vous décidez que vous ne voulez pas utiliser UFW, vous pouvez le désactiver avec cette commande :
sudo ufw disableToutes les règles que vous avez créées avec UFW ne seront plus actives. Vous pouvez toujours exécuter sudo ufw enable si vous avez besoin de l'activer plus tard.
Si vous avez déjà configuré des règles UFW mais que vous décidez de recommencer, vous pouvez utiliser la commande reset :
sudo ufw resetCela désactivera UFW et supprimera toutes les règles qui avaient été définies précédemment. Gardez à l'esprit que les politiques par défaut ne reviendront pas à leurs paramètres d'origine si vous les avez modifiées à un moment donné. Cela devrait vous donner un nouveau départ avec UFW.
Conclusion
Votre pare-feu devrait maintenant être configuré pour permettre (au moins) les connexions SSH. Assurez-vous de permettre toutes les autres connexions entrantes dont votre serveur a besoin, tout en limitant les connexions inutiles, afin que votre serveur soit fonctionnel et sécurisé.
Pour en savoir plus sur les configurations courantes de UFW, consultez le tutoriel UFW Essentials : règles et commandes courantes du pare-feu.
