Comment configurer un pare-feu avec UFW sur Ubuntu 18.04

De Get Docs
Aller à :navigation, rechercher

Introduction

UFW, ou Uncomplicated Firewall, est une interface vers 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 cherchez à commencer à sécuriser votre réseau et que vous ne savez pas quel outil utiliser, UFW peut être le bon choix pour vous.

Ce tutoriel vous montrera comment configurer un pare-feu avec UFW sur Ubuntu 18.04.

Conditions préalables

Pour suivre ce tutoriel, vous aurez besoin de :

UFW est installé par défaut sur Ubuntu. S'il a été désinstallé pour une raison quelconque, vous pouvez l'installer avec sudo apt install ufw.

Étape 1 - S'assurer que IPv6 est activé

Dans les versions récentes d'Ubuntu, IPv6 est activé par défaut. En pratique, cela signifie que la plupart des règles de pare-feu ajoutées au serveur incluront à la fois une version IPv4 et une version IPv6, cette dernière identifiée par v6 dans la sortie de la commande d'état d'UFW. Pour vous assurer que IPv6 est activé, vous pouvez vérifier votre fichier de configuration UFW sur /etc/default/ufw. Ouvrez ce fichier à l'aide de nano ou de votre éditeur de ligne de commande préféré :

sudo nano /etc/default/ufw

Assurez-vous ensuite que la valeur de IPV6 est définie sur yes. Ça devrait ressembler à ça:

extrait de /etc/default/ufw

IPV6=yes

Enregistrez et fermez le fichier. Si vous utilisez nano, vous pouvez le faire en tapant CTRL+X, puis Y et ENTER pour confirmer.

Lorsque UFW est activé dans une étape ultérieure de ce guide, il sera configuré pour écrire des règles de pare-feu IPv4 et IPv6.

Étape 2 - Configuration des politiques par défaut

Si vous débutez avec UFW, une bonne première étape consiste à vérifier vos politiques de pare-feu 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 ne pourra pas se connecter, tandis que toute application au sein du serveur pourra atteindre le monde extérieur. Des règles supplémentaires pour autoriser des services et des ports spécifiques sont incluses en tant qu'exceptions à cette politique générale.

Pour vous assurer que vous pourrez suivre le reste de ce didacticiel, vous allez maintenant configurer vos politiques UFW par défaut pour le trafic entrant et sortant.

Pour définir la stratégie entrante UFW par défaut sur deny, exécutez :

sudo ufw default deny incoming
OutputDefault incoming policy changed to 'deny'
(be sure to update your rules accordingly)

Pour définir la stratégie sortante UFW par défaut sur allow, exécutez :

sudo ufw default allow outgoing
OutputDefault outgoing policy changed to 'allow'
(be sure to update your rules accordingly)

Ces 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 peuvent suffire à eux seuls pour un ordinateur personnel, mais les serveurs doivent généralement répondre aux demandes entrantes d'utilisateurs extérieurs. Nous examinerons cela ensuite.

Étape 3 - Autoriser les connexions SSH

Si vous deviez activer votre pare-feu UFW maintenant, il refuserait toutes les connexions entrantes. Cela signifie que vous devrez créer des règles qui autorisent explicitement les connexions entrantes légitimes (connexions SSH ou HTTP, par exemple) si vous souhaitez que votre serveur réponde à ces types de requêtes. Si vous utilisez un serveur cloud, vous souhaiterez probablement autoriser les connexions SSH entrantes afin de pouvoir vous connecter et gérer votre serveur.

Autorisation du profil d'application OpenSSH UFW

Lors de l'installation, la plupart des applications qui reposent sur des connexions réseau enregistrent un profil d'application dans UFW, ce qui permet aux utilisateurs d'autoriser ou de refuser rapidement l'accès externe à un service. Vous pouvez vérifier quels profils sont actuellement enregistrés dans UFW avec :

sudo ufw app list
OutputAvailable applications:
  OpenSSH

Pour activer le profil d'application OpenSSH, exécutez :

sudo ufw allow OpenSSH
OutputRule added
Rule added (v6)

Cela créera des règles de pare-feu pour autoriser toutes les connexions sur le port 22, qui est le port sur lequel le démon SSH écoute par défaut.

Autoriser SSH par nom de service

Une autre façon de configurer UFW pour autoriser les connexions SSH entrantes consiste à faire référence à son nom de service : ssh.

sudo ufw allow ssh
OutputRule added
Rule added (v6)

UFW sait quels ports et protocoles un service utilise en fonction du fichier /etc/services.

Autoriser SSH par numéro de port

Vous pouvez également écrire la règle équivalente en spécifiant le port au lieu du profil d'application ou du nom de service. Par exemple, cette commande fonctionne de la même manière que les exemples précédents :

sudo ufw allow 22
OutputRule added
Rule added (v6)

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 2222
OutputRule added
Rule added (v6)

Maintenant que votre pare-feu est configuré pour autoriser les connexions SSH entrantes, vous pouvez l'activer.

Étape 4 - Activer UFW

Votre pare-feu devrait maintenant être configuré pour autoriser les connexions SSH. Pour vérifier quelles règles ont été ajoutées jusqu'à présent, même lorsque le pare-feu est toujours désactivé, vous pouvez utiliser :

sudo ufw show added
OutputAdded user rules (see 'ufw status' for running firewall):
ufw allow OpenSSH

Après avoir confirmé que vous disposez d'une règle pour autoriser les connexions SSH entrantes, vous pouvez activer le pare-feu avec :

sudo ufw enable
OutputCommand may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

Vous recevrez un avertissement indiquant que la commande peut perturber les connexions SSH existantes. Vous avez déjà configuré une règle de pare-feu qui autorise les connexions SSH, vous devriez donc pouvoir continuer. Répondez à l'invite avec y et appuyez sur ENTER.

Le pare-feu est maintenant actif. Exécutez la commande sudo ufw status verbose pour voir les règles définies. Le reste de ce didacticiel explique comment utiliser UFW plus en détail, comme autoriser ou refuser différents types de connexions.

Étape 5 - Autoriser d'autres connexions

À ce stade, vous devez autoriser toutes les autres connexions auxquelles votre serveur doit répondre. Les connexions que vous devez autoriser dépendent de vos besoins spécifiques. Vous savez déjà écrire des règles qui autorisent les connexions en fonction d'un profil d'application, d'un nom de service ou d'un port ; vous l'avez déjà fait pour SSH sur le port 22. Vous pouvez également le faire pour :

  • HTTP sur le port 80, qui est utilisé par les serveurs Web non chiffrés, en utilisant sudo ufw allow http ou sudo ufw allow 80
  • HTTPS sur le port 443, qui est utilisé par les serveurs Web chiffrés, en utilisant sudo ufw allow https ou sudo ufw allow 443
  • Apache avec HTTP et HTTPS, en utilisant sudo ufw allow ‘Apache Full’
  • Nginx avec HTTP et HTTPS, en utilisant sudo ufw allow ‘Nginx Full’

N'oubliez pas de vérifier quels profils d'application sont disponibles pour votre serveur avec sudo ufw app list.

Il existe plusieurs autres façons d'autoriser les connexions, en plus de spécifier un port ou un nom de service connu. Nous en verrons quelques-uns ensuite.

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.

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/udp

Lorsque vous spécifiez des plages de ports avec UFW, vous devez spécifier 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 autorise automatiquement les deux protocoles, ce qui est OK dans la plupart des cas.

Adresses IP spécifiques

Lorsque vous travaillez avec UFW, vous pouvez également spécifier des adresses IP dans vos règles. Par exemple, si vous souhaitez autoriser les connexions à partir d'une adresse IP spécifique, telle qu'une adresse IP professionnelle ou personnelle de 203.0.113.4, vous devez utiliser le paramètre from, en fournissant alors l'adresse IP que vous souhaitez autoriser :

sudo ufw allow from 203.0.113.4
OutputRule added

Vous pouvez également spécifier un port auquel l'adresse IP est autorisée à se connecter en ajoutant to any port suivi du numéro de port. Par exemple, si vous souhaitez autoriser 203.0.113.4 à se connecter au port 22 (SSH), utilisez cette commande :

sudo ufw allow from 203.0.113.4 to any port 22
OutputRule added

Sous-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 203.0.113.1 à 203.0.113.254, vous pouvez utiliser cette commande :

sudo ufw allow from 203.0.113.0/24
OutputRule added

De même, vous pouvez également spécifier le port de destination auquel le sous-réseau 203.0.113.0/24 est autorisé à se connecter. Encore une fois, nous utiliserons le port 22 (SSH) comme exemple :

sudo ufw allow from 203.0.113.0/24 to any port 22
OutputRule added

Connexions à une interface réseau spécifique

Si vous souhaitez 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 voudrez peut-être rechercher vos interfaces réseau avant de continuer. Pour ce faire, utilisez cette commande :

ip addr
Output Excerpt2: 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 d'interface réseau. Ils sont généralement nommés quelque chose comme eth0 ou enp3s2.

Ainsi, si votre serveur dispose d'une interface réseau publique appelée eth0, vous pouvez autoriser le trafic HTTP (port 80) avec cette commande :

sudo ufw allow in on eth0 to any port 80
OutputRule added
Rule added (v6)

Cela permettrait à votre serveur de recevoir des requêtes HTTP de l'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é eth1, par exemple, vous pouvez utiliser cette commande :

sudo ufw allow in on eth1 to any port 3306
OutputRule added
Rule added (v6)

Cela permettrait à d'autres serveurs de votre réseau privé de se connecter à votre base de données MySQL.

Étape 6 - Refuser les connexions

Si vous n'avez pas modifié la stratégie par défaut pour les connexions entrantes, UFW est configuré pour refuser toutes les connexions entrantes. Généralement, cela simplifie le processus de création d'une stratégie de pare-feu sécurisé en vous obligeant à créer des règles qui autorisent explicitement le passage de ports et d'adresses IP spécifiques.

Cependant, vous souhaiterez parfois refuser des connexions spécifiques en fonction de l'adresse IP source ou du sous-réseau, peut-être parce que vous savez que votre serveur est attaqué à partir de là. De plus, si vous souhaitez modifier votre politique entrante par défaut en allow (ce qui n'est pas recommandé), vous devrez créer des règles deny pour tous les services ou adresses IP que vous n'avez pas souhaitez autoriser les connexions pour.

Pour écrire des règles deny, vous pouvez utiliser les commandes décrites précédemment, en remplaçant allow par deny.

Par exemple, pour refuser les connexions HTTP, vous pouvez utiliser cette commande :

sudo ufw deny http
OutputRule added
Rule added (v6)

Ou si vous souhaitez refuser toutes les connexions de 203.0.113.4, vous pouvez utiliser cette commande :

sudo ufw deny from 203.0.113.4
OutputRule added

Dans certains cas, vous pouvez également bloquer les connexions sortantes du serveur. Pour empêcher tous les utilisateurs d'utiliser un port sur le serveur, tel que le port 25 pour le trafic SMTP, vous pouvez utiliser deny out suivi du numéro de port :

sudo ufw deny out 25
OutputRule added
Rule added (v6)

Cela bloquera tout le trafic SMTP sortant sur le serveur.

Étape 7 - Suppression de 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 les règles à supprimer : par numéro de règle ou par sa dénomination lisible par l'homme (similaire à la façon dont les règles ont été spécifiées lors de leur création).

Suppression d'une règle UFW par numéro

Pour supprimer une règle UFW par son numéro, vous devez d'abord obtenir une liste numérotée de toutes vos règles de pare-feu. La commande d'état UFW a une option pour afficher des nombres à côté de chaque règle, comme illustré ici :

sudo ufw status numbered
Numbered Output:Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 22                         ALLOW IN    15.15.15.0/24
[ 2] 80                         ALLOW IN    Anywhere

Si vous décidez de supprimer la règle numéro 2, celle qui autorise les connexions au port 80 (HTTP), vous pouvez le spécifier dans une commande de suppression UFW comme celle-ci :

sudo ufw delete 2
OutputDeleting:
 allow 80
Proceed with operation (y|n)? y
Rule deleted

Cela vous demandera une confirmation puis supprimera la règle 2, qui autorise les connexions HTTP. Notez que si vous avez activé IPv6, vous souhaiterez également supprimer la règle IPv6 correspondante.

Suppression d'une règle UFW par nom

Au lieu d'utiliser des numéros de règle, vous pouvez également faire référence à une règle par sa dénomination lisible par l'homme, qui est basée sur le type de règle (généralement allow ou deny) et le nom du service ou le numéro de port qui était la cible de cette règle, ou le nom du profil d'application dans le cas où il a été utilisé. Par exemple, si vous souhaitez supprimer une règle allow pour un profil d'application appelé Apache Full qui était précédemment activé, vous pouvez utiliser :

sudo ufw delete allow "Apache Full"
OutputRule deleted
Rule deleted (v6)

La commande delete fonctionne de la même manière pour les règles qui ont été créées en référençant un service par son nom ou son port. Par exemple, si vous avez précédemment défini une règle pour autoriser les connexions HTTP avec sudo ufw allow http, voici comment vous pouvez supprimer ladite règle :

sudo ufw delete allow http
OutputRule deleted
Rule deleted (v6)

Étant donné que les noms de service sont interchangeables avec les numéros de port lors de la spécification des règles, vous pouvez également vous référer à la même règle que allow 80, au lieu de allow http :

sudo ufw delete allow 80
OutputRule deleted
Rule deleted (v6)

Lors de la suppression de règles UFW par nom, les règles IPv4 et IPv6 sont supprimées si elles existent.

Étape 8 - Vérification du statut et des règles UFW

À tout moment, vous pouvez vérifier l'état d'UFW avec cette commande :

sudo ufw status verbose

Si UFW est désactivé, ce qui est le cas par défaut, vous verrez quelque chose comme ceci :

OutputStatus: inactive

Si UFW est actif, ce qui devrait être le cas si vous avez suivi l'étape 3, la sortie indique qu'il est actif et répertorie toutes les règles définies. Par exemple, si le pare-feu est configuré pour autoriser les connexions SSH (port 22) depuis n'importe où, la sortie peut ressembler à ceci :

OutputStatus: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW IN    Anywhere

Utilisez la commande status si vous souhaitez vérifier comment UFW a configuré le pare-feu.

Étape 9 - Désactiver ou réinitialiser UFW (facultatif)

Si vous décidez de ne pas utiliser UFW, vous pouvez le désactiver avec cette commande :

sudo ufw disable
OutputFirewall stopped and disabled on system startup

Toutes 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 reset
OutputResetting all rules to installed defaults. This may disrupt existing ssh
connections. Proceed with operation (y|n)? y
Backing up 'user.rules' to '/etc/ufw/user.rules.20210729_170353'
Backing up 'before.rules' to '/etc/ufw/before.rules.20210729_170353'
Backing up 'after.rules' to '/etc/ufw/after.rules.20210729_170353'
Backing up 'user6.rules' to '/etc/ufw/user6.rules.20210729_170353'
Backing up 'before6.rules' to '/etc/ufw/before6.rules.20210729_170353'
Backing up 'after6.rules' to '/etc/ufw/after6.rules.20210729_170353'

Cela désactivera UFW et supprimera toutes les règles précédemment définies. Cela devrait vous donner un nouveau départ avec UFW. Gardez à l'esprit que les politiques par défaut ne seront pas remplacées par leurs paramètres d'origine si vous les avez modifiées à tout moment.

Conclusion

Votre pare-feu est maintenant configuré pour autoriser (au moins) les connexions SSH. Assurez-vous d'autoriser toutes les autres connexions entrantes requises par votre serveur, tout en limitant les connexions inutiles, afin que votre serveur soit fonctionnel et sécurisé.

Pour en savoir plus sur les configurations UFW les plus courantes, consultez le didacticiel UFW Essentials : Common Firewall Rules and Commands.