Configurer un pare-feu sur son VPS (nftables ou ufw)
Un pare-feu sur le VPS garantit qu'un service lancé par erreur, ou une base de données mal configurée, ne soit pas joignable depuis l'extérieur. Ce guide met en place un pare-feu simple, avec nftables (inclus dans Debian) ou ufw (plus simple à manier), et explique ce qui est propre aux VPS HebergHub.
Comment le trafic arrive sur votre VPS
Votre VPS n'a pas d'adresse IP publique dédiée. Il est déjà isolé des autres VPS par un pare-feu côté infrastructure, et seul le trafic qui passe par le point d'entrée commun l'atteint :
| Ce qui arrive | Par où | Port reçu par le VPS |
|---|---|---|
| SSH | ssh -p 2222 [email protected] |
22 |
| Votre site | https://nom.vps.heberghub.fr (HTTPS géré par le point d'entrée) |
80 |
Une conséquence :
- Les ports 22 et 80 doivent rester ouverts dans votre pare-feu, sinon vous coupez votre propre accès SSH et votre site.
Le pare-feu du VPS sert donc surtout à fermer tout ce qui n'est pas voulu.
Avant de commencer : le filet de sécurité
Ouvrez la console de votre VPS depuis l'espace client, dans un onglet à part. Elle ne passe pas par le réseau : si une règle vous enferme dehors, c'est par elle que vous corrigerez.
Faites l'inventaire de ce qui écoute :
ss -tulpnNotez les services qui doivent être joints de l'extérieur. Les autres (base de données, cache, interface d'administration) devraient écouter sur 127.0.0.1 de toute façon.
N'utilisez qu'un seul outil : nftables ou ufw, pas les deux.
Option A : nftables
apt install -y nftables
cat > /etc/nftables.conf <<'EOF'
#!/usr/sbin/nft -f
flush ruleset
table inet filtre {
chain entree {
type filter hook input priority 0; policy drop;
ct state established,related accept
ct state invalid drop
iif lo accept
meta l4proto { icmp, ipv6-icmp } accept
tcp dport 22 accept # SSH (via ssh.vps.heberghub.fr)
tcp dport 80 accept # site publié sur nom.vps.heberghub.fr
# tcp dport 25565 accept # exemple : service TCP derrière un port public
# udp dport 51820 accept # exemple : service UDP (WireGuard)
}
}
EOF
systemctl enable nftables
systemctl restart nftables
nft list rulesetUtilisez bien restart : dans un VPS conteneur, nftables peut être déjà actif, et systemctl enable --now ne relit alors pas le fichier. Vérifiez que policy drop apparaît dans nft list ruleset.
Pour ajouter un port plus tard, ajoutez une ligne dans /etc/nftables.conf, puis systemctl restart nftables.
Vérifié sur un VPS conteneur et sur un VPS machine virtuelle Debian 13 : avec ces règles, les ports 22 et 80 répondent, les autres sont fermés ; sur machine virtuelle, la configuration est conservée après un redémarrage.
Option B : ufw
apt install -y ufw
ufw default deny incoming
ufw default allow outgoing
ufw allow 22/tcp
ufw allow 80/tcp
# ufw allow 25565/tcp # exemple : service derrière un port public
# ufw allow 51820/udp # exemple : service UDP
ufw enable
ufw status verboseufw enable demande une confirmation, car la commande peut couper une session SSH : la règle 22/tcp étant déjà en place, votre session continue.
Vérifié sur un VPS conteneur et sur un VPS machine virtuelle Debian 13 : ufw status liste 22/tcp et 80/tcp, le port 8080 d'un service de test reste fermé.
Ouvrir un service au public
Pour un service autre que le site web (serveur de jeu, API, VPN), il faut deux ouvertures :
- dans l'espace client, un port public vers votre VPS ;
- dans le pare-feu du VPS, le port correspondant, avec le bon protocole (TCP ou UDP).
Testez ensuite depuis votre ordinateur, hors du VPS :
nc -vz nom.vps.heberghub.fr PORT # TCPTester sans se couper
- Gardez la session SSH ouverte pendant les changements et testez une nouvelle connexion dans une seconde fenêtre.
- En cas de blocage, depuis la console de l'espace client :
nft flush ruleset # nftables : tout est ouvert jusqu'au prochain redémarrage du service
ufw disable # ufwCorrigez ensuite la règle fautive, puis réactivez.
Docker et le pare-feu
Docker ajoute ses propres règles pour les ports publiés des conteneurs, et ces règles passent avant celles d'ufw : un port publié par Docker reste ouvert même si ufw status ne le montre pas. Avec nftables, flush ruleset efface les règles de Docker au redémarrage du service. Le guide Installer Docker sur un VPS KVM explique comment publier les conteneurs sans surprise.
En sortie
Le pare-feu de ce guide laisse tout sortir, ce qui convient à la plupart des usages. Côté infrastructure, les envois de mail (ports 25, 465 et 587) sont bloqués en sortie, contre le spam : utilisez un service d'envoi par API.
Et fail2ban ?
fail2ban bannit les adresses qui multiplient les échecs de connexion. Derrière le point d'entrée commun, toutes les connexions semblent venir de la même adresse : un bannissement risque de vous bloquer vous-même. Évitez de l'activer sur SSH et préférez l'authentification par clé, qui rend les tentatives par mot de passe inutiles.
Besoin d'aide ?
Bloqué hors de votre VPS ? Ouvrez la console depuis l'espace client et annulez la dernière règle. Sinon, ouvrez un ticket depuis votre espace client avec le nom du VPS et la sortie de nft list ruleset ou ufw status verbose.