Logo GufwUne des premières chose à faire pour sécuriser son serveur est d’empêcher les méchants pirates d’y accéder à distance par des portes grandes ouvertes. On va donc installer un pare-feu.

Par défaut, aucun pare-feu n’est activé sur notre serveur (on peut par exemple vérifier que iptables est désactivé en listant les règles actives : iptables -L pour IPv4, et ip6tables -L pour IPv6). Il est important de fermer tous les ports entrants, et de n’ouvrir que ceux strictement nécessaires.

Le choix du logiciel

Pour mon serveur, j’ai choisi d’utiliser le bien nommé ufw (Uncomplicated FireWall), après avoir eu quelques déconvenues dans l’utilisation de iptables, que je trouve très compliqué à prendre en main. Tout comme ce dernier, ufw est désactivé par défaut, mais Une fois activé, il se lancera à chaque redémarrage du serveur en réactivant les règles existantes. Pas besoin de gérer manuellement des scripts d’activation/désactivation au démarrage des interfaces réseau, ou de maintenir deux versions, pour IPv4 et IPv6. ufw est plus ou moins une surcouche à iptables qui permet d’automatiser tout cela.

De plus, pour une utilisation “simple” du pare-feu (une seule interface réseau, simplement bloquée en INPUT par défaut, etc.), je n’atteindrai jamais les limites de ufw par rapport à iptables.

Comme je me connecte à mon serveur en SSH, la première chose à faire avant d’activer ufw est d’autoriser le protocole en question. La syntaxe est assez souple et complète, et peut se montrer complexe (mais pas autant que celle de iptables), mais dans le cas présent, c’est plutôt simple.

Il est possible d’utiliser au choix une des commandes suivantes :

sudo ufw allow 22/tcp # choix totalement manuel du port 22 et du protocole tcp

sudo ufw allow ssh/tcp # utilisation du fichier /etc/services et du protocole tcp

sudo ufw allow app OpenSSH # utilisation du profil d'application de ufw

Ensuite, il ne reste plus qu’à activer ufw :

sudo ufw enable

La documentation la plus complète que j’ai trouvée en dehors du manuel officiel, est celle du wiki communautaire Ubuntu. Je vous en conseille la lecture.

Introduction aux “applications”

J’ai fait le choix d’utiliser principalement les “app”, parce que celles-ci peuvent configurer plusieurs ports, sur différents protocoles, pour un seul service et que ça ne génère qu’une seule entrée dans la liste de statut de ufw, avec le nom du service, et non le port dont on ne se souvient pas toujours de l’utilité. C’est donc beaucoup plus clair.

Quelques commandes utiles concernant les profils d’applications

Lister les profils disponibles (pour information, il n’y a par défaut quasiment aucun profil, ceux-ci s’ajoutent à l’installation des service concernés via apt) :

sudo ufw app list

Voir les détails d’un profil (ici avec OpenSSH) :

sudo ufw app info OpenSSH

Utiliser le profil dans une règle

sudo ufw allow app OpenSSH # (Autoriser SSH pour tout le monde)
sudo ufw allow app OpenSSH from 192.168.0.0/24 # (Autoriser SSH pour le réseau local)

Il ne vous reste plus qu’à autoriser tous les services qui le nécessitent.

Il faut noter qu’il est possible de créer soi-même de nouveaux profils. C’est ce qu’a fait ce bloggeur par exemple.

Dans le billet qui traitera de fail2ban, on reparlera de ufw.

Quelques conseils complémentaires

L’ordre des règles ufw a son importance. Les règles sont numérotées (utiliser sudo ufw status numbered pour voir ces numéros). Il est possible d’insérer une règle à l’endroit voulu en utilisant l’option insert # au début de la commande : sudo ufw insert 3 allow 44.

ufw étant une surcouche à iptables, il permet de faire tout ce que ce dernier permet, soit avec des commandes, soit en modifiant divers fichiers de configuration.