firewalld est le gestionnaire de pare-feu par défaut d'AlmaLinux 9 et de Rocky Linux 9. Sur votre VPS Linux Infrawire, il permet de n'ouvrir que les services nécessaires, de limiter SSH à votre propre IP et de rediriger des ports, sans toucher aux règles nftables brutes.
Le principal risque est de couper votre propre session SSH. Ce guide est construit autour de ce point : chaque changement risqué est d'abord testé en configuration runtime, puis rendu permanent.
📋 Prérequis
- Un VPS sous AlmaLinux 9 ou Rocky Linux 9
- Un accès SSH root (l'IP et le mot de passe root sont disponibles dans votre espace client)
- Une seconde session SSH gardée ouverte pendant la modification des règles
1. Installer et démarrer firewalld
Bashdnf install -y firewalld systemctl enable --now firewalld firewall-cmd --state
La dernière commande doit afficher running. La zone par défaut est public : elle autorise déjà SSH, Cockpit et le client DHCPv6, et rejette le reste des connexions entrantes.
2. Comprendre zones, services et ports
Une zone est un ensemble de règles appliqué à une interface. Un service est un groupe de ports nommé (ssh correspond à 22/tcp, http à 80/tcp, https à 443/tcp).
Bashfirewall-cmd --get-default-zone firewall-cmd --get-active-zones firewall-cmd --list-all firewall-cmd --get-services | tr ' ' '\n' | head -20
Il existe deux configurations. La configuration runtime s'applique tout de suite et disparaît au rechargement ou au redémarrage. La configuration permanente (--permanent) est enregistrée sur disque mais n'est active qu'après firewall-cmd --reload.
3. Ouvrir des services et des ports
Bash# Services firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https # Un port personnalisé firewall-cmd --permanent --add-port=8080/tcp # Une plage de ports firewall-cmd --permanent --add-port=30000-30100/udp # Appliquer la configuration permanente firewall-cmd --reload
Pour fermer quelque chose, utilisez l'option --remove-service ou --remove-port correspondante. Retirez le service cockpit si vous n'utilisez pas la console web : firewall-cmd --permanent --remove-service=cockpit.
4. Autoriser SSH uniquement depuis votre IP avec une rich rule
Les rich rules expriment des conditions comme l'adresse source. Ne supprimez jamais la règle SSH générique avant d'avoir prouvé que la règle restreinte fonctionne.
Bash# 1. Ajouter la règle en runtime uniquement (remplacez par VOTRE IP publique) firewall-cmd --add-rich-rule='rule family="ipv4" source address="YOUR_IP/32" service name="ssh" accept' # 2. Ouvrez un NOUVEAU terminal et vérifiez que SSH fonctionne depuis YOUR_IP # 3. La rendre permanente, puis retirer le service SSH ouvert à tous firewall-cmd --runtime-to-permanent firewall-cmd --permanent --remove-service=ssh firewall-cmd --reload
Si votre IP change, vous perdez l'accès : gardez la console du VPS accessible depuis votre espace client comme voie de secours. Pour une adresse IPv6, écrivez family="ipv6" et l'adresse IPv6 à la place.
5. Rediriger un port
Pour envoyer le trafic entrant du port 80 vers une application qui écoute sur le 8080 du même serveur :
Bashfirewall-cmd --permanent --add-forward-port=port=80:proto=tcp:toport=8080 firewall-cmd --reload
Pour rediriger vers une autre machine, ajoutez toaddr=TARGET_IP à l'option forward-port et activez le masquerading avec firewall-cmd --permanent --add-masquerade. Le noyau doit aussi autoriser le routage, ce que firewalld gère pour le masquerading.
6. Vérifier la configuration
Bashfirewall-cmd --list-all firewall-cmd --list-rich-rules firewall-cmd --permanent --list-all ss -tlnp
Comparez les listes runtime et permanente : elles doivent concorder après un rechargement. Depuis une autre machine, testez un port avec nc -zv VPS_IP 80. Un service à l'écoute (ss -tlnp) n'est joignable que si le pare-feu autorise son port.
🛠️ Dépannage
FirewallD is not running : démarrez-le avec systemctl enable --now firewalld, puis consultez journalctl -u firewalld pour les erreurs.
Une nouvelle règle n'a aucun effet : vous avez utilisé --permanent sans recharger. Lancez firewall-cmd --reload.
INVALID_SERVICE ou INVALID_ZONE : faute de frappe dans le nom. Listez les noms valides avec firewall-cmd --get-services et --get-zones.
SSH sur un port personnalisé est refusé alors que le port est ouvert : SELinux doit connaître le port. Lancez semanage port -a -t ssh_port_t -p tcp 2222 (installez d'abord policycoreutils-python-utils), ouvrez le port dans firewalld, puis redémarrez sshd.
Accès perdu : utilisez la console du VPS depuis votre espace client, puis lancez firewall-cmd --permanent --add-service=ssh et firewall-cmd --reload. Évitez firewall-cmd --panic-on, qui bloque tout le trafic, y compris votre session.
🔒 Votre VPS n'expose plus que ce que vous choisissez, et SSH reste à portée de main !