Configurer rapidement un firewall sous Debian avec ufw

Dans le cadre de l’auto‑hébergement, j’ai tout un tas de services qui tournent sur mon petit serveur à la maison. A priori, je n’ai pas besoin de firewall (pare‑feu) car ce serveur se trouve derrière mon modem-routeur internet qui fait office de pare‑feu.

Cependant, je me suis rendu compte qu’un firewall peut tout de même être utile pour les raisons suivantes:

  1. avec la multiplication des règles d’ouverture de ports (aka « port forwarding »), il peut être plus simple de configurer mon serveur comme « DMZ » sur le modem-routeur, ce qui court-circuite de fait le firewall intégré du routeur.
  2. J’utilise apache comme « reverse proxy » pour certains services HTTP(s), comme par exemple domoticz (domotique), calibre (bibliothèque d’ebook) ou Gitlab. Pour certains, l’authentification est configurée dans apache. Je ne veux pas que quelqu’un contourne le reverse proxy pour accéder aux services sans authentification, même sur le réseau local (ex: Wifi des invités). Je dois donc bloquer tous les ports « natifs » de ces services.
  3. Enfin, le firewall du modem-routeur n’est pas configurable et je ne le maîtrise pas. Je préfère mon propre firewall supplémentaire en cas de défaillance du pare-feu du modem.

Je souhaite donc un firewall simple à installer et configurer, fiable. En gros, je voudrais la puissance d’iptables sans la complexité de sa configuration!

La solution: ufw pour « uncomplicated firewall »!

Installation de ufw

L’installation est on ne peut plus simple:

sudo apt-get install ufw

Pour tester son fonctionnement, il faut l’activer mais attention! Si vous êtes connectés en SSH, cela risque de couper votre session. Voici donc comment j’ai testé, le tout dans une console screen:

# ufw allow ssh
# ufw enable; sleep 60; ufw disable

J’autorise explicitement le SSH, j’active le firewall pendant une minute, puis je le désactive. Pendant cette minute, je teste si l’accès SSH est toujours bien autorisé. Si oui: tout va bien et je peux passer à l’étape suivante.

Configuration de ufw

L’avantage d’ufw est sa simplicité de configuration. Il suffit d’activer des règles en ligne de commande, et ufw se chargera de modifier les fichiers de configuration en conséquence. Voici ce que j’ai configuré sur mon serveur:

# ufw allow ssh
# ufw allow "WWW Full"
# ufw allow SMTP
# ufw allow "Mail submission"
# ufw allow IMAP
# ufw allow IMAPS
# ufw allow proto tcp from 192.168.1.0/24 to any port 6060 comment "Domoticz HTTP interface"

Les règles sont assez simples. Pour le serveur web (ligne 2) et le service mail (lignes 3 à 6), la configuration se base sur des règles prédéfinies par les services eux-mêmes dans des fichiers spécifiques du répertoire /etc/ufw/applications.d/. C’est toujours bien d’aller jeter un œil dans ce répertoire pour voir ce qui est disponible.

La dernière règle permet d’autoriser l’accès à un port particulier à partir du réseau local uniquement.

Activation du firewall

Une fois tout configuré, il suffit d’activer le firewall et demander à systemd son lancement automatique au redémarrage:

# ufw enable
# systemctl ufw enable

Pour vérifier que tout est configuré correctement, ufw permet d’afficher ses règles installées:

# ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip

To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
80,443/tcp (WWW Full) ALLOW IN Anywhere
25/tcp (SMTP) ALLOW IN Anywhere
587/tcp (Mail submission) ALLOW IN Anywhere
143/tcp (IMAP) ALLOW IN Anywhere
993/tcp (IMAPS) ALLOW IN Anywhere
6060/tcp ALLOW IN 192.168.1.0/24 # Domoticz HTTP interface
22/tcp (v6) ALLOW IN Anywhere (v6)
80,443/tcp (WWW Full (v6)) ALLOW IN Anywhere (v6)
25/tcp (SMTP (v6)) ALLOW IN Anywhere (v6)
587/tcp (Mail submission (v6)) ALLOW IN Anywhere (v6)
143/tcp (IMAP (v6)) ALLOW IN Anywhere (v6)
993/tcp (IMAPS (v6)) ALLOW IN Anywhere (v6)

ufw est donc une solution simple, efficace et rapide pour mettre en place un firewall simple sur une machine Linux. 🙂

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *