Base

iptables --help

man iptables

FILES

  • Modules (.ko) sur Fedora Core 5: /lib/modules/`uname -r`/kernel/net/ipv4/netfilter/
  • Configuration (FC5) loading/unloading: /etc/sysconfig/iptables-config
  • Configuration (FC5) règles: /etc/sysconfig/iptables
  • Script de démarrage: /etc/init.d/iptables {start stop restart condrestart status panic save} ou service iptables {options}

Table

  • filter : défaut, filtrage des paquets reçu, envoyé à d'autres ou envoyé à l'extérieur (INPUT, OUTPUT, FORWARD)
  • nat : traduction d'adresse basée sur l'ip (réseau) ou le port (chaîne: PREROUTING, OUTPUT, POSTROUTING)
  • mangle : modification avancées des paquets (chaîne: PREROUTING, OUTPUT)
  • raw: ???

On doit utiliser le paramètre -t parametre ou --table=parametre

# afficher les règles de la table par défaut (-t filter est optionnel puisqu'il s'agit de la table par défaut)
# voir iptables --help | grep "t table"
iptables -L -n -t filter

# afficher les règles de la table nat:
itpables -L -n -t nat

# afficher les règles de la table nat:
itpables -L -n -t mangle

CHAINS

Les chaînes sont des évènements / state du paquet

  • INPUT : un paquet entre sur une interface réseau
  • OUTPUT : un paquet sort sur une interface réseau
  • FORWARD : un paquet est transféré (??)
  • PREROUTING (-t nat): redirige ou modifie un paquet entrant
  • POSTROUTING (-t nat): redirige ou modifie un paquet sortant

cible : target ou actions

Pour une chaîne, on peut effectuer des actions cibles (target) sur les paquets.

  • ACCEPT : laisser passer le paquet
  • DROP : supprimer le paquet
  • REJECT : DROP et retourne un paquet erreur (valide pour INPUT/FORWARD/OUTPUT et chaînes définies par l'usager). On peut spécifier le type de paquet icmp envoyé en cas d'erreur (--reject-with type).
  • QUEUE : envoyer le paquet dans l'espace usager (userspace)
  • RETURN : envoit le paquet à la fin de la chaîne, et laisse la cible/target par défaut le traîter
  • AUTRE-CHAINE: indique qu'il faut l'envoyer à une autre chaîne

Opérations (Ajout | Suppression)

# Ajout (à la suite)
iptables -A {chain}

# Suppressions:
iptables -D {chain}

# Insertion (en premier, ou à un numéro spécifique)
iptables -I {chain} [numero-regle]

# Remplacer
iptables -R {chain} {numero-regle} 

Manipulation pour la chaine (lister, renommer, effacer, nouveau, suppression)
iptables -L [chain]
iptables -E [chain]
iptables -F [chain]
iptables -N [chain]
iptables -X [chain]
iptables -P {chain} {target} (changer la policy d'une chaine non définie par l'usager, le target par défaut)


Paramètre d'une règle:
cible(target): -j target (DROP, ACCEPT, ...)
cible(target): -j target [port] (pour une redirection)
source:        -s ip
               -s ip/mask (avec masque)
port source:   --sport port ou port:port
destination:   -d ip (les mêmes règles s'applique que pour le -s)
port dest. :   --dport port ou port:port
protocol   :   -p (TCP, UDP, ICMP, ALL)
type icmp  :   -icmp-type type
Interface in : -i interface d'entrée   ou  -i interface+  (wildcard pour n'import quoi après) (règle INPUT)
               Exemple 1: -i eth0
               Exemple 2: -i eth+   (eth0, eth1, eth11, etc...)
Interface out: -o interface sortie   ou -o interface+ (règles FORWARD et OUTPUT)

On peut souvent utilisé ! pour indiquer le contraire de l'adresse ip, du port, etc...

DNAT/SNAT:
--to-source ipaddr:port (SNAT: réécrit les paquets avec une nouvelle IP source)
--to-destination ipaddr:port (DNAT: réécrit les paquets avec une nouvelle IP destination)

Manipulation dynamique

Si un client est connecté sur un serveur (nc -l par exemple) et qu'on supprime une règle qui permet la connexion, les paquets pourront quand même passé tant que la connexion n'est pas coupée par l'application. Lorsque le client tentera de se reconnecter, alors les paquets ne passeront pas.