Comment configurer un pare-feu avec UFW sur Ubuntu

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 robuste 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 pourrait être le bon choix pour vous.

Cette tutorielle vous montrera comment configurer un pare-feu avec UFW sur Ubuntu v18.04 et supérieur.

Prérequis

Si vous utilisez la version 16.04 d’Ubuntu ou inférieure, nous vous recommandons de mettre à niveau vers 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 :

  • Un serveur fonctionnant sous Ubuntu, accompagné d’un utilisateur non-root avec des privilèges sudo. Pour des conseils sur la mise en place de ces éléments, veuillez choisir votre distribution à partir de cette liste et suivez notre Guide de Mise en Place 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.

Mise en place du pare-feu Ubuntu avec UFW

  1. Activer IPv6
  2. Configurer les Politiques par Défaut
  3. Permettre les connexions SSH
  4. Activer UFW
  5. Autoriser toutes les autres connexions requises
  6. Refuser les connexions
  7. Supprimer les règles du pare-feu
  8. Vérifier l’état et les règles du pare-feu
  9. Comment désactiver ou réinitialiser le pare-feu sur Ubuntu

L’étape 1 – Assurer que l’IPv6 est activé

Dans les dernières versions de Ubuntu, l’IPv6 est activé par défaut. En pratique cela signifie que la plupart des règles de pare-feu ajoutées au serveur incluent une version IPv4 et une version IPv6, la seconde identifiée par « v6 » dans le résultat de la commande de statut de UFW. Pour assurer que IPv6 est activé, vous pouvez vérifier votre configuration du fichier /etc/default/ufw. Ouvrez ce fichier avec nano ou votre éditeur de ligne de commande préféré :

  1. sudo nano /etc/default/ufw

Ensuite, assurez-vous que la valeur de IPV6 soit définie sur yes. Elle devrait ressembler à ceci :

/etc/default/ufw excerpt
  1. IPV6=yes

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

Quand UFW sera actif plus tard dans cette guide, il sera configuré pour écrire des règles de pare-feu pour les deux protocoles IPv4 et IPv6.

Étape 2 – Configuration des politiques par défaut

Si vous commencez juste avec UFW, une bonne première étape consiste à vérifier les politiques par défaut du pare-feu. Ces règles contrôlent comment traiter le trafic qui ne correspond pas 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 quiconque essaie de rejoindre 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 pour autoriser des services et des ports spécifiques sont incluses comme des exceptions à cette politique générale.

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

Pour définir la politique UFW par défaut pour les connexions entrantes sur deny, exécutez :

  1. sudo ufw default deny incoming
Output
Default incoming policy changed to 'deny' (be sure to update your rules accordingly)

Pour définir la politique UFW par défaut pour les connexions sortantes sur allow, exécutez :

  1. sudo ufw default allow outgoing
Output
Default 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 de pare-feu pourraient suffire pour un ordinateur personnel, mais les serveurs ont généralement besoin de répondre aux requêtes entrantes provenant d’utilisateurs extérieurs. Nous allons y regarder à la prochaine étape.

Étape 3 — Autoriser les connexions SSH

Si vous activiez 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 — par exemple, les connexions SSH ou HTTP — si vous voulez que votre serveur réponde à ces types de requêtes. Si vous utilisez un serveur cloud, vous voudrez probablement autoriser les connexions SSH entrantes afin de vous connecter et de gérer votre serveur.

Autorisation du profil d’application OpenSSH UFW

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

  1. sudo ufw app list
Output
Available applications: OpenSSH

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

  1. sudo ufw allow OpenSSH
Output
Rule 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 que le démon SSH écoute par défaut.

Autorisation de SSH par nom de service

Une autre manière de configurer UFW pour autoriser les connexions SSH entrantes est de référencer son nom de service : ssh.

  1. sudo ufw allow ssh
Output
Rule added Rule added (v6)

UFW connaît les ports et protocoles que un service utilise en se basant sur le fichier /etc/services.

Autorisation de SSH par numéro de port

Voici la traduction de l’article en français :

Alternativement, vous pouvez écrire une règle équivalente en spécifiant le port plutôt que le profil d’application ou le nom du service. Par exemple, cette commande fonctionne de la même manière que les exemples précédents:

  1. sudo ufw allow 22
Output
Rule added Rule added (v6)

Si vous avez configuré votre démon de SSH à utiliser un autre port, vous devrez spécifier le port approprié. Par exemple, si votre serveur SSH est en attente sur le port 2222, vous pouvez utiliser cette commande pour permettre des connexions sur ce port:

  1. sudo ufw allow 2222
Output
Rule added Rule added (v6)

Maintenant que votre pare-feu est configuré pour permettre des connexions SSH entrantes, vous pouvez le activer.

Étape 4: Activation de UFW

Votre pare-feu doit maintenant être configuré pour permettre les connexions SSH. Pour confirmer quels règles ont été ajoutées jusqu’à présent, même si le pare-feu est toujours désactivé, vous pouvez utiliser:

  1. sudo ufw show added
Output
Added user rules (see 'ufw status' for running firewall): ufw allow OpenSSH

Après avoir confirmé que vous avez établi une règle qui permet des connexions SSH entrantes, vous pouvez activer le pare-feu avec:

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

Vous recevrez une avertissement disant que la commande peut interrompre les connexions SSH existantes. Vous avez déjà mis en place une règle de pare-feu qui permet les connexions SSH, donc cela devrait être sans problème. Repondez à la prompt avec y et appuyez sur ENTER.

Le pare-feu est maintenant actif. Exédez la commande sudo ufw status verbose pour voir les règles qui sont définies. Les étapes suivantes de ce tutoriel couvrent comment utiliser UFW en plus détail, comme permettre ou interdire différentes sortes de connexions.

Étape 5 — Autoriser les autres connexions

À ce stade, vous devez permettre tous les autres déclencheurs nécessaires pour que votre serveur réponde. Les déclencheurs que vous devez autoriser dépendent des besoins spécifiques. Vous avez déjà appris comment écrire des règles qui autorisent des connexions en fonction d’un profil d’application, du nom du service ou du port; vous l’avez fait avec SSH sur le port 22. Vous pouvez également faire ceci :

  • HTTP sur le port 80, qui est celui qu’utilise les serveurs Web non sécurisés, avec sudo ufw allow http ou sudo ufw allow 80
  • HTTPS sur le port 443, qui est celui qu’utilise les serveurs Web sécurisés, avec sudo ufw allow https ou sudo ufw allow 443
  • Apache avec HTTP et HTTPS, avec sudo ufw allow 'Apache Full'
  • Nginx avec HTTP et HTTPS, avec sudo ufw allow 'Nginx Full'

Ne pas oublier de vérifier les profils d’application disponibles pour votre serveur avec sudo ufw app list.

Il existe plusieurs autres façons de permettre des connexions, à part spécifier un port ou un nom de service connu. Nous verrons certaines de ces méthodes prochaines.

Spécifier des plages de ports

Vous pouvez spécifier des plages de ports avec UFW. Certains applications utilisent plusieurs ports au lieu d’un seul port.

Par exemple, pour permettre les connexions X11, qui utilisent les ports 60006007, utilisez ces commandes:

  1. sudo ufw allow 6000:6007/tcp
  2. 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 avant car omettre le protocole permet automatiquement les deux protocoles, ce qui est acceptable dans la plupart des cas.

Adresses IP spéciales

Quand vous travaillez avec UFW, vous pouvez également spécifier des adresses IP dans vos règles. Par exemple, si vous voulez autoriser les connexions depuis une adresse IP spécifique, comme l’adresse IP de votre entreprise ou de chez vous, 203.0.113.4, vous devez utiliser le paramètre from, en fournissant ensuite l’adresse IP que vous souhaitez autoriser:

  1. sudo ufw allow from 203.0.113.4
Output
Rule added

Vous pouvez également spécifier un port que l’adresse IP est autorisée à connecter en ajoutant à tout port suivi du numéro de port. Par exemple, si vous voulez permettre 203.0.113.4 de se connecter au port 22 (SSH), utilisez cette commande:

  1. sudo ufw allow from 203.0.113.4 to any port 22
Output
Rule added

Sous-réseaux

Si vous voulez autoriser une sous-masse de adresses IP, vous pouvez le faire en utilisant la notation CIDR pour spécifier une masque de réseau. Par exemple, si vous voulez permettre tous les adresses IP qui se trouvent entre 203.0.113.1 et 203.0.113.254, vous pouvez utiliser cette commande :

  1. sudo ufw allow from 203.0.113.0/24
Output
Rule added

De même, vous pouvez également spécifier le port de destination auquel la sous-masse 203.0.113.0/24 est autorisée à se connecter. Ensuite, nous utilisons toujours le port 22 (SSH) comme exemple :

  1. sudo ufw allow from 203.0.113.0/24 to any port 22
Output
Rule added

Connexions vers une Interface de Réseau Spéciale

Si vous souhaitez créer une règle de pare-feu qui s’applique uniquement à une interface de réseau spécifique, vous pouvez le faire en spécifiant « allow in on » suivie du nom de l’interface de réseau.

Vous devriez peut-être consulter votre liste des interfaces de réseau avant de continuer. Pour cela, utilisez cette commande :

  1. ip addr
Output 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 . . .

L’output souligné indique les noms des interfaces de réseau. Ils sont généralement nommés quelque chose comme eth0 ou enp3s2.

Donc, si votre serveur a une interface publique appelée eth0, vous pouvez autoriser le traficHTTP (port 80) avec cette commande :

  1. sudo ufw allow in on eth0 to any port 80
Output
Rule added Rule added (v6)

En faisant ainsi, vous permetterez à votre serveur d’accéder aux requêtes HTTP provenant de l’internet public.

Pour 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 la commande suivante :

  1. sudo ufw allow in on eth1 to any port 3306
Output
Rule added Rule added (v6)

Cela permettra aux autres serveurs de votre réseau privé de se connecter à votre base de données MySQL.

Étape 6 — Interdire les connexions

Si vous n’avez pas modifié la politique par défaut pour les connexions entrantes, UFW est configuré pour interdire toutes les connexions entrantes. Généralement, cela simplifie le processus de création d’une politique de pare-feu sûre en vous requérant de créer des règles qui autorisent explicitement les ports et les adresses IP spécifiques.

Cependant, il arrive que vous souhaitiez interdire des connexions spécifiques en fonction de l’adresse IP ou du sous-réseau de provenance, peut-être parce que vous savez que votre serveur est attaqué depuis là. De plus, si vous voulez modifier votre politique de connexions entrantes par défaut en autoriser (ce qui n’est pas recommandé), vous devrez créer des règles interdire pour tous les services ou les adresses IP que vous ne voulez pas autoriser à la connexion.

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

Par exemple, pour interdire les connexions HTTP, vous pourriez utiliser la commande suivante :

  1. sudo ufw deny http
Output
Rule added Rule added (v6)

Ou si vous voulez interdire toutes les connexions provenant de 203.0.113.4, vous pourriez utiliser la commande suivante :

  1. sudo ufw deny from 203.0.113.4
Output
Rule added

Dans certains cas, vous pouvez également vouloir bloquer les connexions sortantes du serveur. Pour refuser toutes les connexions sortantes du serveur sur un port spécifique, comme le port 25 pour la trafic SMTP, vous pouvez utiliser deny out suivi du numéro de port :

  1. sudo ufw deny out 25
Output
Rule added Rule added (v6)

Cela bloquera toute la trafic SMTP sortant sur le serveur.

Étape 7 : Suppression des règles

Connaître comment supprimer des règles est aussi important que savoir comment les créer. Il existe deux façons différentes de spécifier quelles règles supprimer : par numéro ou par dénomination humaine (similaire à la manière dont les règles ont été spécifiées lorsqu’elles ont été créées).

Suppression d’une Règle de UFW Par Numéro

Pour supprimer une règle de UFW par son numéro, vous devrez d’abord obtenir une liste numérotée de toutes les règles de votre pare-feu. La commande de statut UFW fournit une option pour afficher des numéros après chaque règle, comme montré ici:

  1. 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 n° 2, celle qui permet les connexions sur le port 80 (HTTP), vous pouvez spécifier cette règle dans une commande UFW delete comme ceci:

  1. sudo ufw delete 2
Output
Deleting: allow 80 Proceed with operation (y|n)? y Rule deleted

Cela vous demandera une confirmation puis supprimera la règle 2, qui permet les connexions HTTP. Noter que si vous avez activé l’IPv6, vous devriez également supprimer la règle correspondante IPv6.
<|observation|>

Supprimer 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 son appellation lisible par l’humain, 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 pour cette règle, ou le nom du profil d’application s’il a été utilisé. Par exemple, si vous souhaitez supprimer une règle allow pour un profil d’application appelé Apache Full qui a été activé précédemment, vous pouvez utiliser :

  1. sudo ufw delete allow "Apache Full"
Output
Rule deleted Rule deleted (v6)

La commande delete fonctionne de la même manière pour les règles créées en référençant un service par son nom ou son numéro de 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 cette règle :

  1. sudo ufw delete allow http
Output
Rule deleted Rule deleted (v6)

Comme 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 sous la forme allow 80, au lieu de allow http :

  1. sudo ufw delete allow 80
Output
Rule 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 le statut de UFW avec cette commande :

  1. sudo ufw status verbose

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

Output
Status: inactive

Si UFW est actif, ce qui devrait être le cas si vous avez suivi l’étape 3, la sortie indiquera que il est actif et elle affichera les règles qui sont établies. Par exemple, si le pare-feu est configuré pour permettre des connexions SSH (port 22) provenant de tout endroit, la sortie peut ressembler ainsi:

Output
Status: 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 voulez vérifier comment UFW a configuré le pare-feu.

Étape 9 — Désactiver ou Réinitialiser le Pare-Feu

Si vous décidez que vous ne voulez pas utiliser le pare-feu UFW, vous pouvez le désactiver avec cette commande:

  1. sudo ufw disable
Output
Firewall stopped and disabled on system startup

Toutes les règles créées avec UFW ne seront plus actives. Vous pouvez toujours exécuter sudo ufw enable si vous souhaitez activer plus tard.

Si vous avez déjà des règles configurées avec UFW mais décidez que vous voulez commencer à nouveau, vous pouvez utiliser la commande reset:

  1. sudo ufw reset
Output
Resetting 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édentement définies. Cela devrait vous donner un départ frais avec UFW. Veillez à savoir que les politiques par défaut ne changeront pas à leur état original, si vous les avez modifiées à tout moment.

Déployez votre application frontend depuis GitHub en utilisant DigitalOcean App Platform. Laissez DigitalOcean se concentrer sur la mise en échelle de votre application.

Conclusion

Votre pare-feu est maintenant configuré pour permettre (au moins) les connexions SSH. Assurez-vous d’autoriser toute autre connexion entrante 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 de pare-feu courantes.

Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-20-04