Bloquer le trafic sortant vers les réseaux privés avec UFW

3 min
Hébergement VPS/VDS

Quand un script compromis ou une application mal configurée se met à sonder des adresses en 10.x ou 192.168.x, le trafic quitte votre serveur et déclenche souvent des signalements d'abus de la part du réseau. Bloquer les connexions sortantes vers les plages privées est une protection simple sur tout VPS Linux Infrawire. Ce guide montre comment le faire avec UFW sans casser le DNS ni votre propre connectivité.

📋 Prérequis

  • Un VPS avec accès root en SSH, sous Ubuntu 24.04 ou Debian 12 (UFW est disponible sur les deux).
  • Des notions de base d'UFW. S'il n'est pas encore installé :
Bash
sudo apt update && sudo apt install -y ufw
  • Une seconde session SSH gardée ouverte pendant que vous modifiez le pare-feu.

🧭 Quelles plages bloquer

PlageUsage
10.0.0.0/8Privé RFC1918
172.16.0.0/12Privé RFC1918
192.168.0.0/16Privé RFC1918
100.64.0.0/10NAT de niveau opérateur (RFC6598)
169.254.0.0/16Link-local IPv4
192.0.0.0/24Attributions de protocoles IETF
198.18.0.0/15Tests de performance
fc00::/7Adresses IPv6 locales uniques

Ne bloquez pas fe80::/10 : IPv6 utilise les adresses link-local pour la découverte de voisins et souvent pour la passerelle par défaut ; les bloquer coupe entièrement l'IPv6.

🔍 Vérifier d'abord ce dont votre VPS a besoin

Si votre passerelle ou votre résolveur DNS se trouve dans une plage privée, un blocage général coupera votre réseau. Examinez votre configuration avant d'ajouter la moindre règle :

Bash
ip route ip -6 route cat /etc/resolv.conf resolvectl status | grep -E 'DNS Servers|Link'

Si un résolveur ou un service dont vous dépendez a une adresse privée (PRIVATE_DNS_IP), autorisez-le explicitement et placez cette règle en premier, comme indiqué plus bas. Si tout ce que vous utilisez est public, vous pouvez ignorer cette étape.

🧱 Méthode 1 : ufw deny out

Assurez-vous que SSH reste joignable, puis définissez les politiques par défaut. Les réponses entrantes à vos sessions SSH ne sont pas touchées par des règles sortantes sur les plages privées.

Bash
sudo ufw allow 22/tcp sudo ufw default deny incoming sudo ufw default allow outgoing

Si vous avez besoin d'une exception, insérez-la en position 1 pour qu'elle soit évaluée avant les interdictions :

Bash
sudo ufw insert 1 allow out to PRIVATE_DNS_IP port 53

Ajoutez maintenant les interdictions, une par plage (les règles UFW sont évaluées dans l'ordre, la première qui correspond l'emporte) :

Bash
sudo ufw deny out to 10.0.0.0/8 sudo ufw deny out to 172.16.0.0/12 sudo ufw deny out to 192.168.0.0/16 sudo ufw deny out to 100.64.0.0/10 sudo ufw deny out to 169.254.0.0/16 sudo ufw deny out to 192.0.0.0/24 sudo ufw deny out to 198.18.0.0/15 sudo ufw deny out to fc00::/7 sudo ufw enable

ufw enable peut avertir que l'opération risque de couper les connexions SSH ; comme le port 22 est autorisé, répondez y. Contrôlez l'ordre avec :

Bash
sudo ufw status numbered

📄 Méthode 2 : before.rules

Si vous préférez un bloc de règles unique appliqué avant les règles utilisateur, modifiez /etc/ufw/before.rules. Faites d'abord une sauvegarde :

Bash
sudo cp /etc/ufw/before.rules /etc/ufw/before.rules.bak sudo nano /etc/ufw/before.rules

Dans la section *filter, après les lignes qui acceptent le loopback et les connexions établies, ajoutez :

TEXT
1# Block outbound traffic to private networks 2-A ufw-before-output -d 10.0.0.0/8 -j REJECT 3-A ufw-before-output -d 172.16.0.0/12 -j REJECT 4-A ufw-before-output -d 192.168.0.0/16 -j REJECT 5-A ufw-before-output -d 100.64.0.0/10 -j REJECT 6-A ufw-before-output -d 169.254.0.0/16 -j REJECT

IPv6 a son propre fichier, /etc/ufw/before6.rules, avec la chaîne ufw-before-output :

TEXT
-A ufw-before-output -d fc00::/7 -j REJECT

Placez une exception pour PRIVATE_DNS_IP juste au-dessus de ces lignes avec -A ufw-before-output -d PRIVATE_DNS_IP -j ACCEPT. Rechargez :

Bash
sudo ufw reload

REJECT répond immédiatement par une erreur : les applications échouent vite au lieu d'attendre un délai d'expiration. Utilisez -j DROP si vous préférez le silence.

✅ Vérifier

Les règles doivent être chargées et les destinations bloquées doivent échouer, tandis que les publiques continuent de fonctionner :

Bash
sudo ufw status verbose ping -c 1 10.0.0.1 # doit échouer ping -c 1 192.168.1.1 # doit échouer curl -m 5 http://10.0.0.1 # doit échouer ping -c 2 1.1.1.1 # doit réussir dig +short example.com # doit se résoudre curl -I https://www.debian.org

Avec ufw deny out, le ping qui échoue indique en général Operation not permitted. Les compteurs de paquets confirment les correspondances :

Bash
sudo iptables -L ufw-user-output -n -v sudo iptables -L ufw-before-output -n -v

🛠️ Dépannage

Le DNS ne fonctionne plus. Votre résolveur est dans une plage privée. Corrigez l'ordre avec sudo ufw status numbered, puis ajoutez sudo ufw insert 1 allow out to PRIVATE_DNS_IP port 53. Vous pouvez aussi passer à un résolveur public dans votre configuration réseau.

L'IPv6 est cassée après la modification. Vous avez sans doute bloqué fe80::/10 ou une passerelle dans fc00::/7. Supprimez la règle avec sudo ufw delete deny out to fc00::/7 et ne recréez que le nécessaire.

Vous n'accédez plus à un service d'un réseau privé (VPN, API interne). Ajoutez une règle d'autorisation pour cette adresse précise avec ufw insert 1 allow out to PRIVATE_IP. Si c'est SSH lui-même qui est bloqué, utilisez n'importe quel accès console au serveur et lancez sudo ufw disable.


🔒 Votre VPS ne peut plus scanner des réseaux privés par accident : les signalements d'abus de ce type devraient cesser.

Restez à jour avec les dernières offres, réductions et promotions spéciales.

Voir les promotions

Nous utilisons des cookies

Nous utilisons des cookies analytiques pour améliorer votre expérience sur notre site. Aucune donnée n'est revendue à des tiers. En savoir plus dans notre politique de confidentialité.