iptables

Structure

Les tables

Table Chaîne Description
filter INPUT, FORWARD, OUTPUT Filtre les requêtes
nat PREROUTING, POSTROUTING Nouvelles connexions
mangle INPUT, FORWARD, OUTPUT, PREROUTING, POSTROUTING Modification des paquets

Résumé

Architecture d’iptables

Commandes

Les paramètres

  • -P : policies. ACCEPT, DROP et REJECT ;
  • -m : matches ;
  • -t : table ;
  • -p : protocole ;
  • -j : décision (exemple : ACCEPT, DROP, REJECT) ;

Extensions de correspondance

Filtrage sur… Exemple
l’interface d’entrée ou de sortie -i eth0 -o eth1
l’addresse IP source/destination -s 192.168.1.10/24 -d 10.1.2.3
le port TCP/UDP -p tcp --dport 20 --sport 21
les messages ICMP -p icmp
l’état de la connexion -m state --state RELATED,ESTABLISHED
l’état de la connexion (information supplémentaires) -m conntrack --ctstate DNAT

NAT

Activation du NAT overload pour le réseau 10.0.0.0/8 :

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE

Plus complet lorsque le routeur ne sert pas que de passerelle :

iptables -t nat -A POSTROUTING -o ppp0 -s ${LOCAL_LAN} -j SNAT --to-source ${IP_EXT}
iptables -t nat -A POSTROUTING -s ${LOCAL_LAN} -m conntrack --ctorigdst ${IP_EXT} --ctstate DNAT -j SNAT --to-source ${IP_EXT}

Translater un port vers une machine :

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.1.10:80

NAT statique :

iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.1.11 -j SNAT --to-source 1.2.3.4
iptables -t nat -A PREROUTING -d 1.2.3.4 -j DNAT --to-destination 192.168.1.11

Actions courantes

Changer la règle/politique par défaut :

iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT DROP

Ne pas casser les connections TCP en cours :

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

Autoriser une connexion TCP entrante :

iptables -t filter -A INPUT -p tcp --dport 25 -j ACCEPT

Activer les logs pour les paquets bloqués :

iptables -N LOGGING
iptables -F LOGGING
iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables-Dropped: " --log-level 4
iptables -A LOGGING -j DROP
iptables -A INPUT -j LOGGING

Script de base

#!/bin/sh

# Vider les tables actuelles
iptables -t filter -F

# Vider les regles personnelles
iptables -t filter -X

# Interdire toute connexion entrante et sortante
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT DROP

# Ne pas casser les connexions etablies
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# Autoriser loopback
iptables -t filter -A INPUT -i lo -j ACCEPT
iptables -t filter -A OUTPUT -o lo -j ACCEPT

# Autoriser le protocole ICMP
iptables -t filter -A INPUT -p icmp -j ACCEPT
iptables -t filter -A OUTPUT -p icmp -j ACCEPT

Sources