Le pare-feu ufw parfois une peu compliqué à comprendre

Après vous avoir parlé de iptables et firewalld, il me prend l’envie indicible d’évoquer devant vous le pare-feu Uncomplicated FireWall présent sur Ubuntu. Je dois vous dire que son comportement m’apparaît pour le moins étrange concernant les règles de retour implicite des paquets qui marchent sur les paquets entrants, lorsqu’il s’agit de se connecter à OpenSSH Server. Et la règle de retour ne fonctionne pas lorsqu’il s’agit de sortir sur le tcp/80 ou le tcp/443 avec apt avec les deux règles qui vont bien, quand on a décidé de bloquer la sortie de paquets par défaut. Sauf erreur de ma part, comme il est loin de posséder toutes les fonctionnalités de iptables notamment dans la prévention des attaques de type SYN flood, je ne vous le recommande pas pour vos serveurs.

Le pare-feu ufw parfois une peu compliqué à comprendre

Activation de ufw

Par défaut, le service ufw s’exécute sur Ubuntu Server 22.10 Kinetic, sans qu’il soit actif. Il faut donc faire le choix de l’activer pour qu’il soit effectif.

systemctl status ufw
ufw enable
ufw default deny outgoing
ufw status verbose

Configuration type d’un serveur LAMP avec ufw

Avec le firewall ufw, vous n’aurez pas besoin d’écrire une règle pour le DHCP, présente dans les fichiers /etc/ufw/before.rules pour l’IPv4 et /etc/ufw/before6.rules pour l’IPv6.

Un serveur LAMP écoute en général sur les ports définis par la configuration de OpenSSH Server (tcp/22 par défaut) et par celle du serveur Apache (tcp/80 et tcp/443 par défaut). Tapons d’abord ces règles entrantes à partir de la ligne de commandes, sachant que l’adresse IPv4 publique de la machine est 51.15.6.217 dans l’exemple ci-dessous :

ufw allow in proto tcp from any to 51.15.6.217 port 22
ufw allow in proto tcp from any to 51.15.6.217 port 80
ufw allow in proto tcp from any to 51.15.6.217 port 443

Pour le retour des paquets (a priori inutiles), il suffit de remplacer le in par le out, le to par le from et vice versa. Les règles sont parfaitement symétriques :

ufw allow out proto tcp to any from 51.15.6.217 port 22
ufw allow out proto tcp to any from 51.15.6.217 port 80
ufw allow out proto tcp to any from 51.15.6.217 port 443

En sortie, le serveur doit aussi pouvoir résoudre les noms de domaines vers un ou de serveurs DNS, ceux de la FDN dans l’exemple ci-dessous. Il doit aussi pouvoir effectuer des mises à jour ou tout autre type d’activités vers le http/https.

ufw allow out proto udp from 51.15.6.217 to 80.67.169.12 port 53
ufw allow out proto udp from 51.15.6.217 to 80.67.169.40 port 53
ufw allow out proto tcp from 51.15.6.217 to 0.0.0.0/0 port 80
ufw allow out proto tcp from 51.15.6.217 to 0.0.0.0/0 port 443

Pour le retour des paquets sortant, de manière symétrique là-encore :

ufw allow in proto udp to 51.15.6.217 from 80.67.169.12 port 53
ufw allow in proto udp to 51.15.6.217 from 80.67.169.40 port 53
ufw allow in proto tcp to 51.15.6.217 from 0.0.0.0/0 port 80
ufw allow in proto tcp to 51.15.6.217 from 0.0.0.0/0 port 443

Remarquez que vous pouvez utiliser indifféremment le mot any ou l’adresse de réseau 0.0.0.0/0.

Pour vérifier :

ufw status numbered

Pour supprimer une règle, où num désigne le numéro de la règle issue de la commande précédente :

ufw delete num

Pour couper le pare-feu, il n’y a nul besoin d’arrêter le service.

ufw disable

Fichiers de configuration

Les commandes exécutées avec ufw modifient les fichiers /etc/ufw/user.rules pour l’IPv4 et /etc/ufw/user6.rules pour l’IPv6. En cas de modification de l’un des fichiers /etc/ufw/*.rules, vous devez recharger la configuration du pare-feu avec :

ufw reload

Sécurité /