Aller au contenu

Pare-feu : UFW, écrire des règles

Syntaxe et exemples de règles. Adresses génériques : 10.0.0.0/24 (réseau interne), 203.0.113.10 (poste d’administration).

ufw [insert N] allow|deny|reject|limit [in|out] [on INTERFACE] [from ADRESSE [port PORT]] [to ADRESSE [port PORT]] [proto tcp|udp] [comment 'texte']
Action Effet
allow Accepte
deny Ignore silencieusement
reject Refuse avec une réponse d’erreur
limit Accepte, mais refuse une adresse qui ouvre 6 connexions ou plus en 30 secondes
Fenêtre de terminal
sudo ufw allow 22/tcp
sudo ufw allow 53 # TCP et UDP
sudo ufw allow 80,443/tcp # plusieurs ports : protocole obligatoire
sudo ufw allow 6000:6010/tcp # plage
sudo ufw allow http # par nom de service
sudo ufw allow 443/udp # HTTP/3 (QUIC)
Fenêtre de terminal
sudo ufw allow from 203.0.113.10 to any port 22 proto tcp
sudo ufw allow from 10.0.0.0/24 to any port 5432 proto tcp comment 'PostgreSQL réseau interne'
sudo ufw deny from 198.51.100.0/24
sudo ufw allow from 2001:db8::/32 to any port 22 proto tcp

C’est la bonne méthode pour ouvrir une base de données à un autre serveur : ne jamais ouvrir MySQL, MariaDB, PostgreSQL, Redis ou MongoDB à tout Internet.

Fenêtre de terminal
sudo ufw limit 22/tcp # remplace « allow 22/tcp »

limit compte les connexions, pas les échecs d’authentification : un script légitime qui ouvre beaucoup de connexions SSH rapides peut être bloqué. Fail2ban est plus fin (voir Fail2ban).

Fenêtre de terminal
sudo ufw allow in on eth1 to any port 3306 # base seulement sur l'interface privée
sudo ufw allow in on wg0 # tout le trafic du VPN WireGuard
sudo ufw deny in on eth0 to any port 3306
Fenêtre de terminal
sudo ufw app list
sudo ufw app info OpenSSH
sudo ufw allow 'Nginx Full' # nom avec espace : guillemets

Profil personnalisé, /etc/ufw/applications.d/monapp :

[MonApp]
title=Application monapp
description=Application web sur le port 3000
ports=3000/tcp
Fenêtre de terminal
sudo ufw app update MonApp
sudo ufw allow MonApp

Plusieurs groupes de protocoles : ports=80,443/tcp|53/udp.

Fenêtre de terminal
sudo ufw status numbered
sudo ufw delete 2 # par numéro
sudo ufw delete allow 80,443/tcp # par règle (retire aussi la jumelle IPv6)
sudo ufw show added # règles saisies, sous forme de commandes

La première règle qui correspond s’applique. Pour qu’une règle précise passe avant une règle générale :

Fenêtre de terminal
sudo ufw insert 1 deny from 198.51.100.7

Pour bloquer une adresse au sein d’un réseau autorisé, la règle deny doit précéder la règle allow du réseau.

Fenêtre de terminal
sudo ufw route allow in on eth0 out on lxdbr0

Les règles route concernent le trafic transféré entre interfaces (pont LXD, VPN). Voir LXD : réseau et UFW et Docker.

Fenêtre de terminal
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw limit OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 443/udp
sudo ufw enable
Fenêtre de terminal
sudo ufw default deny incoming
sudo ufw allow from 203.0.113.10 to any port 22 proto tcp comment 'Administration'
sudo ufw allow from 10.0.0.0/24 to any port 5432 proto tcp comment 'PostgreSQL : serveurs applicatifs'
sudo ufw enable
Fenêtre de terminal
sudo cp -a /etc/ufw /root/ufw-sauvegarde
sudo ufw show added > ufw-regles.txt
Symptôme Piste
Wrong number of arguments Plusieurs ports : ajouter proto tcp
Skipping adding existing rule La règle existe déjà
allow from sans effet L’adresse vue par le serveur diffère (NAT, proxy)
deny sans effet Une règle allow générale la précède : ufw insert 1 deny …
Could not find a profile ufw app list ; guillemets pour les noms avec espace

Ubuntu 24.04 et 26.04 : différences à connaître

Section intitulée « Ubuntu 24.04 et 26.04 : différences à connaître »

Syntaxe et comportement identiques (UFW 0.36.2 sur les deux versions).