Table des matières

Filtrage réseau avec Iptables


Iptables sert à gérer les requêtes clientes qui dialogue avec la machine. Le projet est disponible à chez Netfilter.

Documentation

Les fichiers de configuration se situe dans :

/proc/sys/net/

N'oublions pas les bonnes méthodes de sauvegarde :

iptables-save > backup.txt
iptables-restaure < backup.txt
Iptable n'a pas de fichier de configuration car tout est chargé est mémoire. De ce fait, n'oubliez pas de faire une sauvegarde régulière de la configuration au risque de la perdre lors d'un reboot.

Le pare-feu est couramment en amont d'un réseau privé dont-il contient de nombreuses règles. Pour éviter de se perdre, il est recommandé de ce concevoir un tableau à double dimensions répertoriant tous les flux de communications entre les serveurs sans oublier les voies de retour.

Syntaxe de base

iptables <commande> <chaîne> <type> <critères> <action>

Commandes :

Chaînes :

Type :

Critères :

Action :

Autoriser le dialogue client-server

Les commandes ci-dessous sont courante sur un routeur. On prend l'exemple pour une connexion à un serveur SSH:

iptables -A FORWARD --m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -p tcp -s <ip_source> -d <ip_destination> --dport 22 --syn -m state --state NEW -j ACCEPT

ou :

iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT

On n'oublie pas d'activer le routage :

echo 1 > /proc/sys/net/ipv4/ip_forward

Les commandes ci-dessous sont utilisé lors d'une communication directe au serveur:

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -s <ip_source> -d <ip_destination> --dport 22 --syn -m state --state NEW -j ACCEPT

Bloquer un port

iptables -D INPUT -i eth0 -p tcp --dport 80 -j DROP

On utilise ici -D car par défaut on bloque toutes les requêtes.

Bloquer une IP ou un range d'IPs

iptables -A INPUT -s 192.168.0.1 -j DROP
iptables -A INPUT --src-range 192.168.1.90-192.168.1.101 -j DROP

Bloquer un protocole

iptables -D INPUT -i eth1 -p icmp -j DROP

On utilise ici -D car par défaut on bloque toutes les requêtes.

Équilibrage de charge

iptables -t nat -A PREROUTING -p tcp --dport 80 -i <interface_local?> -j DNAT --to 192.168.2.2 192.168.2.3

Exemple de configuration de base

iptables -P FORWARD DROP
iptables -P OUTPUT DROP
iptables -P INPUT DROP
iptables -A FORWARD -m state --state ESTABLISHED, RELATED -j ACCEPT
iptables -A FORWARD -m tcp -p tcp -s 192.168.1.0/24 -d 10.0.0.5 --dport 25 -m state --state NEW --syn -j ACCEPT
iptables -t nat -A PREROUTING -d 192.168.10.1 -m tcp -p tcp --dport 25 -j DNAT --to-destination 10.0.0.5

Sinon :

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Exemple de configuration de base 2

sudo iptables -A INPUT ­-m state ­­ESTABLISHED ­-j ACCEPT
sudo iptables ­-A INPUT ­-p tcp ­-i eth0 ­­--dport ssh ­-j ACCEPT
sudo iptables ­-A INPUT -j LOG ­­log­prefix "iptables denied: " ­­log­level 7
sudo iptables ­-P INPUT DROP

Liste de diverses commandes

# pour autoriser local->destination:143
iptables -A INPUT -p tcp --sport 143 -j ACCEPT

Bloquer des IPs par pays

1. Télécharger la plage d'IPs au format CIDR : https://www.ip2location.com/free/visitor-blocker

2. L'envoyer sur le serveur en excluant les commentaires et en mettant au format iptable:

for i in $( cat firewall-pays1.txt |grep -v "#" ) ; do echo "-A INPUT -s $i -j DROP "; done >> /root/iptable.save
for i in $( cat firewall-pays2.txt |grep -v "#" ) ; do echo "-A INPUT -s $i -j DROP "; done >> /root/iptable.save

3. Déplacer les argupments COMMIT au bon endroit dans le fichier puis charger la configuration :

iptables-restore < /root/iptable.save

Analyser les logs

Pour cela, il faut utiliser ce paquet : fwlogwatch