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.