iptables permet de gérer les tables de règles de filtrage des paquets IP, tables utilisées par le noyau Linux. Le système de filtrage proprement dit s'appelle netfilter. Autrement dit, iptables permet de gérer netfilter.

Documentation

Il est inutile de vouloir utiliser iptables ou de poser des questions aux collègues si vous n'avez pas lu ces documentations ;)

Exemple

Un petit exemple de script totalement non abouti pour mettre en place un petit parefeu :

IF_NET=eth0
IP_NET=216.34.27.3

IF_LAN=eth1
IP_LAN=192.168.1.1
NW_LAN=192.168.1.0/24

# on met à zéro les tables
iptables -t filter -F
iptables -t nat -F
iptables -t mangle -F

# on ferme tout par défaut
iptables -t filter -P FORWARD DROP
iptables -t filter -P INPUT DROP
iptables -t filter -P OUTPUT DROP

# on autorise les paquets faisant partie de connexions déjà en cours
iptables -t filter -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t filter -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# SNAT pour toutes les IP du réseau interne qui peuvent sortir
iptables -t nat -A POSTROUTING -o $IF_NET -s $NW_LAN -j SNAT --to-source $IP_NET

# on permet les demandes de ping (dans tous les sens et en entrée du parefeu)
iptables -t filter -A FORWARD -p icmp --icmp-type echo-request -j ACCEPT
iptables -t filter -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -t filter -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT

# on permet les services locaux
iptables -t filter -A INPUT -i lo -j ACCEPT
iptables -t filter -A OUTPUT -o lo -j ACCEPT

# on autorise la naviguer sur le web : DNS, http et https
# utilisation de DNS
iptables -t filter -A FORWARD -o $IF_NET -p udp --dport domain -j ACCEPT
iptables -t filter -A FORWARD -o $IF_NET -p tcp --dport domain -j ACCEPT
# le web (80 et 443 = http et https)
iptables -t filter -A FORWARD -o $IF_NET -p tcp --dport http -j ACCEPT
iptables -t filter -A FORWARD -o $IF_NET -p tcp --dport https -j ACCEPT

... etc ...

Mise en place au démarrage

Une fois le script écrit et testé, il faut enregistrer la configuration afin qu'elle soit mise en place à chaque démarrage de la machine. Une technique simple est de sauvegarder la configuration avec iptables-save et de la restaurer avec iptables-restore lors de la mise en place des interfaces réseaux.

Pour cela :

# iptables-save > /etc/network/firewall

# ... extrait de /etc/network/interfaces ...

auto eth0
iface eth0 inet static
    address 219.45.33.182
    network 255.255.255.240
    gateway 219.45.33.181
    # configuration du pare-feu
    pre-up /sbin/iptables-restore < /etc/network/firewall

Note : il faut également mettre en place le forwarding des paquets entre les différentes interfaces de la machine. Pour cela :

IpTables (dernière édition le 2008-03-30 18:14:16 par MatthieuSchneider)