Introduction
UFW, ou Uncomplicated Firewall, est une interface pour iptables
qui vise à simplifier le processus de configuration d’un pare-feu. Alors que iptables
est 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 quel outil utiliser, UFW peut être le bon choix pour vous.
Ce tutoriel vous montrera comment configurer un pare-feu avec UFW sur Ubuntu v18.04 et ultérieur.
Prérequis
Si vous utilisez une version d’Ubuntu antérieure à la 16.04, nous vous recommandons de passer à une version plus récente car Ubuntu ne fournit plus de support pour ces versions. Cette collection de guides vous aidera à mettre à niveau votre version d’Ubuntu.
Pour suivre ce tutoriel, vous aurez besoin de :
-
Un serveur exécutant Ubuntu, ainsi qu’un utilisateur non root avec des privilèges
sudo
. Pour des conseils sur la façon de les configurer, veuillez choisir votre distribution dans cette liste et suivre notre guide de configuration initiale du serveur. -
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
.
Configurer le pare-feu Ubuntu avec UFW
- Activer IPv6
- Définir les politiques par défaut
- Autoriser les connexions SSH
- Activation de UFW
- Autoriser toute autre connexion requise
- Refuser les connexions
- Suppression des règles de pare-feu
- Vérifier l’état et les règles de l’UFW
- Comment désactiver ou réinitialiser le pare-feu sur Ubuntu
Étape 1 — Vérifier si 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 étant identifiée par v6
dans la sortie de la commande de statut de l’UFW. Pour vous assurer qu’IPv6 est activé, vous pouvez vérifier le fichier de configuration de votre UFW à l’emplacement /etc/default/ufw
. Ouvrez ce fichier à l’aide de nano
ou de votre éditeur de ligne de commande préféré :
Ensuite, assurez-vous que la valeur de IPV6
est définie sur yes
. Elle devrait ressembler à ceci :
Enregistrez et fermez le fichier. Si vous utilisez nano
, vous pouvez le faire en tapant CTRL+X
, puis Y
et ENTRÉE
pour confirmer.
Lorsque l’UFW est activé dans une étape ultérieure de ce guide, il sera configuré pour écrire à la fois des règles de pare-feu IPv4 et IPv6.
Étape 2 — Configuration des Politiques par Défaut
Si vous débutez avec UFW, une première étape consiste à vérifier vos politiques de pare-feu par défaut. Ces règles contrôlent la manière de gérer le trafic qui ne correspond pas explicitement à d’autres règles.
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’accéder à votre serveur ne pourra pas se connecter, tandis que toute application à l’intérieur du serveur pourra atteindre le monde extérieur. Des règles supplémentaires permettant d’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 tutoriel, vous allez maintenant configurer vos politiques par défaut pour le trafic entrant et sortant de UFW.
Pour définir la politique entrante par défaut de UFW sur deny
, exécutez :
OutputDefault incoming policy changed to 'deny'
(be sure to update your rules accordingly)
Pour définir la politique sortante par défaut de UFW sur allow
, exécutez :
OutputDefault outgoing policy changed to 'allow'
(be sure to update your rules accordingly)
Ces commandes définissent les valeurs par défaut sur refuser les connexions entrantes et autoriser les connexions sortantes. Ces paramètres par défaut du pare-feu pourraient suffire seuls pour un ordinateur personnel, mais les serveurs ont généralement besoin de répondre à des demandes entrantes d’utilisateurs externes. Nous verrons cela dans la prochaine étape.
Étape 3 — Autoriser les connexions SSH
Si vous activiez maintenant votre pare-feu UFW, il refuserait toutes les connexions entrantes. Cela signifie que vous devrez créer des règles qui permettent explicitement les connexions entrantes légitimes — par exemple, les connexions SSH ou HTTP — si vous souhaitez que votre serveur réponde à ces types de demandes. Si vous utilisez un serveur cloud, vous voudrez probablement autoriser les connexions SSH entrantes afin de pouvoir vous connecter à et gérer votre serveur.
Autoriser le profil d’application OpenSSH UFW
À l’installation, la plupart des applications qui dépendent de connexions réseau enregistreront 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 :
OutputAvailable applications:
OpenSSH
Pour activer le profil d’application OpenSSH, exécutez :
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 est en référençant son nom de service : ssh
.
OutputRule added
Rule added (v6)
UFW sait quels ports et protocoles un service utilise en se basant sur le fichier /etc/services
.
Autoriser SSH par numéro de port
Alternativement, vous pouvez é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 :
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 :
OutputRule added
Rule added (v6)
Maintenant que votre pare-feu est configuré pour autoriser les connexions SSH entrantes, vous pouvez l’activer.
Étape 4 — Activation de UFW
Votre pare-feu doit 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 :
OutputAdded user rules (see 'ufw status' for running firewall):
ufw allow OpenSSH
Après avoir confirmé que vous avez une règle pour autoriser les connexions SSH entrantes, vous pouvez activer le pare-feu avec :
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, donc cela devrait être bon pour continuer. Répondez à l’invite avec y
et appuyez sur ENTRÉE
.
Le pare-feu est maintenant actif. Exécutez la commande sudo ufw status verbose
pour voir les règles qui sont définies. Le reste de ce tutoriel couvre 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 devriez 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à comment é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 avez déjà fait cela pour SSH sur le port 22
. Vous pouvez également le faire pour :
- HTTP sur le port 80, qui est ce que les serveurs web non cryptés utilisent, en utilisant
sudo ufw allow http
ousudo ufw allow 80
- HTTPS sur le port 443, utilisé par les serveurs web chiffrés, en utilisant
sudo ufw allow https
ousudo ufw allow 443
. - Apache avec à la fois HTTP et HTTPS, en utilisant
sudo ufw allow 'Apache Full'
. - Nginx avec à la fois 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 de permettre les connexions, en dehors de spécifier un port ou un nom de service connu. Nous verrons certains de ces prochains.
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:
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 permet 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 depuis une adresse IP spécifique, telle qu’une adresse IP de travail ou de domicile de 203.0.113.4
, vous devez utiliser le paramètre from
, en fournissant ensuite l’adresse IP que vous souhaitez autoriser :
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 voulez autoriser 203.0.113.4
à se connecter au port 22
(SSH), utilisez cette commande :
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 voulez autoriser toutes les adresses IP allant de 203.0.113.1
à 203.0.113.254
, vous pourriez utiliser cette commande :
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 :
OutputRule added
Connexions à une interface réseau spécifique
Si vous souhaitez créer une règle de pare-feu qui s’applique uniquement à une interface réseau spécifique, vous pouvez le faire en spécifiant « autoriser l’entrée sur » 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 :
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 des interfaces réseau. Elles sont généralement nommées quelque chose comme eth0
ou enp3s2
.
Ainsi, si votre serveur dispose d’une interface réseau publique appelée eth0
, vous pourriez autoriser le trafic HTTP (port 80
) vers celle-ci avec cette commande :
OutputRule added
Rule added (v6)
Cela permettrait à votre serveur de recevoir des requêtes HTTP de l’internet public.
Ou, si vous voulez 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 pourriez utiliser cette commande :
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 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 autorisent explicitement des ports et des adresses IP spécifiques.
Cependant, parfois vous voudrez 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 changer votre politique entrante par défaut pour autoriser (ce qui n’est pas recommandé), vous devriez 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 de refus, vous pouvez utiliser les commandes décrites précédemment, en remplaçant autoriser par refuser.
Par exemple, pour refuser les connexions HTTP, vous pourriez utiliser cette commande:
OutputRule added
Rule added (v6)
Ou si vous souhaitez refuser toutes les connexions provenant de 203.0.113.4
, vous pourriez utiliser cette commande:
OutputRule added
Dans certains cas, vous voudrez peut-être également bloquer les connexions sortantes du serveur. Pour refuser à tous les utilisateurs l’utilisation d’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:
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 de savoir les créer. Il existe deux façons différentes de spécifier quelles 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 voudrez d’abord obtenir une liste numérotée de toutes vos règles de pare-feu. La commande de statut UFW a une option pour afficher les numéros à côté de chaque règle, comme le montre ici:
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 permet les connexions sur le port 80 (HTTP), vous pouvez le spécifier dans une commande de suppression UFW comme ceci:
OutputDeleting:
allow 80
Proceed with operation (y|n)? y
Rule deleted
Cela demandera une confirmation puis supprimera la règle 2, qui autorise les connexions HTTP. Notez que si vous avez IPv6 activé, vous voudrez également supprimer la règle IPv6 correspondante.
Suppression d’une règle UFW par nom
Au lieu d’utiliser les numéros de règle, vous pouvez également vous référer à une règle par sa dénomination lisible par l’homme, qui est basée sur le type de règle (typiquement 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 s’il a été utilisé. Par exemple, si vous voulez supprimer une règle allow
pour un profil d’application appelé Apache Full
qui était précédemment activé, vous pouvez utiliser:
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 pourriez supprimer ladite règle :
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 pourriez également vous référer à la même règle comme allow 80
, au lieu de allow http
:
OutputRule deleted
Rule deleted (v6)
Lors de la suppression des règles UFW par nom, les règles IPv4 et IPv6 sont supprimées si elles existent.
Étape 8 — Vérification de l’état et des règles UFW
À tout moment, vous pouvez vérifier l’état de UFW avec cette commande :
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 indiquera qu’il est actif et listera les règles établies. Par exemple, si le pare-feu est configuré pour autoriser les connexions SSH (port 22
) depuis n’importe où, la sortie pourrait 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 le Pare-feu
Si vous décidez de ne pas utiliser le pare-feu UFW, vous pouvez le désactiver avec cette commande :
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 devez l’activer ultérieurement.
Si vous avez déjà configuré des règles UFW mais que vous décidez de recommencer à zéro, vous pouvez utiliser la commande de réinitialisation :
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 qui ont été 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 changeront pas pour revenir à leurs paramètres originaux, si vous les avez modifiés à un moment donné.
Déployez vos applications frontales depuis GitHub en utilisant la Plateforme d’Applications DigitalOcean. Laissez DigitalOcean se concentrer sur le dimensionnement de votre application.
Conclusion
Votre pare-feu est maintenant configuré pour autoriser (au moins) les connexions SSH. Assurez-vous d’autoriser toutes les autres connexions entrantes nécessaires à votre serveur, tout en limitant toutes les connexions inutiles, afin que votre serveur soit fonctionnel et sécurisé.
Pour en savoir plus sur les configurations UFW courantes, consultez le tutoriel UFW Essentials: Règles et commandes de pare-feu courantes.
Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu