Image

Base de connaissances → Limiter et contrôler le trafic sortant sous Linux via iptables

[Serveurs virtuels]
Date de publication: 21.07.2025

Limiter et contrôler le trafic sortant peut être utile dans de nombreux cas, par exemple :

  • Protection contre les attaques - lorsque les services sur le serveur génèrent des réponses
  • Protection des données - rendant plus difficile l'extraction d'informations du serveur
  • Protection contre les scripts à code fermé qui peuvent collecter et transmettre des informations à votre insu

Dans notre exemple, nous allons créer une machine virtuelle et supposer que nous devons tester un logiciel concernant la transmission de données. Ainsi, nous bloquerons tout sauf une adresse IP à partir de laquelle nous testerons le logiciel.

1. Ajout de règles à iptables

# Supprimer les règles actuelles (attention si connecté via SSH)
iptables -F OUTPUT

# Autoriser loopback (localhost)
iptables -A OUTPUT -o lo -j ACCEPT

# Autoriser les requêtes DNS (si nécessaire, facultatif)
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT

# Autoriser toutes les connexions sortantes vers l'IP 111.222.111.222
iptables -A OUTPUT -d 111.222.111.222 -j ACCEPT

# Bloquer toutes les autres connexions sortantes
iptables -A OUTPUT -j REJECT

Où 111.222.111.222 est l'adresse IP à partir de laquelle nous testerons, enverrons et recevrons des données.

2. Vérification des règles, vérification via SSH depuis le serveur lui-même

2.1 Vérification du ping

ping 8.8.8.8

PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
From 79.174.xx.xxx icmp_seq=1 Destination Port Unreachable
ping: sendmsg: Opération non autorisée
From 79.174.xx.xxx icmp_seq=2 Destination Port Unreachable
ping: sendmsg: Opération non autorisée
From 79.174.xx.xxx icmp_seq=3 Destination Port Unreachable
ping: sendmsg: Opération non autorisée

2.2 Vérification de telnet

telnet google.com 443
Trying 209.85.233.101...
Connection failed: Connexion refusée
Trying 209.85.233.113...
Connection failed: Connexion refusée
Trying 209.85.233.139...
Connection failed: Connexion refusée
Trying 209.85.233.100...

Comme nous pouvons le voir, les règles fonctionnent, et lorsque des scripts ou services tentent de se connecter, aucune donnée ne sera transmise sur Internet.

3. Surveillance du trafic et des tentatives de connexion

3.1 Cet exemple mettra à jour les données de connexion pour PHP toutes les secondes

watch -n 1 'lsof -i -nP | grep php'

php-fpm8.  445 www-data   11u  IPv4 2405976614      0t0  TCP 127.0.0.1:9000 (LISTEN)
php-fpm8.  448 www-data   12u  IPv4 2405976614      0t0  TCP 127.0.0.1:9000 (LISTEN)
php-fpm8.  449 www-data   14u  IPv4 2405976614      0t0  TCP 127.0.0.1:9000 (LISTEN)
php-fpm8.  453 www-data   16u  IPv4 2405976614      0t0  TCP 127.0.0.1:9000 (LISTEN)

S'il y a des tentatives de connexion à un nœud externe, la connexion sera visible, y compris le port et l'adresse IP.

Lors de la surveillance des scripts PHP, il existe également des modules supplémentaires, comme xdebug. Ne le laissez pas activé en mode production ; utilisez-le uniquement pour le débogage.

De cette manière, vous pouvez rapidement créer un environnement sandbox sur un serveur virtuel pour les scripts nécessaires et surveiller l'activité réseau sans risquer l'exposition des données.





Aucun commentaire pour l'instant