IPTABLE2

4.Utilisation de Iptables

4.1.Les differentes tables de filtrages

Netfilter est composé de trois tables

  • filter: une table de filtrage de paquets contient les règles
    • INPUT
    • OUTPUT
    • FORWARD
  • nat: une table de translation d'adresse suivant les règles
    • PREROUTING et OUTPUT pour la modifications des paquets avant filtrages permettant de modifier la destination des paquets avant le paquet soit filtré
    • POSTROUTING pour la modification de la source avant d'envoyer les paquets.
  • mangle pour altérer les paquets sortants

La première étape a faire est d'effacer les règles de firewall existantes des trois tables et ceci avec :.

    iptables -F
    iptables -t nat -F
    iptables -t mangle -F

La table utilisée par défaut est filter. Pour ajouter ou supprimer une règles dans ses tables on a recours aux commandes de iptables. A la réception d'un paquet, les trois tables sont consultées MANGLE, NAT et Filtre et ceci pour savoir si le paquet est pour un Forward ou pour être traiter dans le réseau. Si ce paquet est destiné au pare-feu donc les données seront traitées suivant les règles de la table de filter.

4.2.Cibles du Filtrage

Chaque paquet reçu est inspectée par les règles du pare-feu pour identifier le type d’opération à effectuer soit:

  • ACCEPT le filtrage s’arrête et le paquet à le droit de passer
  • DROP le filtrage s’arrête et le paquet sera bloqué
  • LOG une information sur le paquet sera enregistrer dans syslog. iptables continue le traitement pour vérifier les règles suivantes. Si on écrit dans syslog et on doit bloquer le paquet il faut écrire deux règles dans la table filter l'une pour le LOG file et l'autre pour le blocage.
  • REJECT a le même rôle que DROP mais elle retourne un message à l’émetteur pour indiquer la cause du blocage.
  • DNAT pour la traduction de l'adresse destination. Permet de modifier l'adresse IP et/ou le port de destination, donc faire la redirection de port.
  • SNAT pour la traduction de l'adresse source, donc preciser l'adresse IP de sortie.
  • MASQUARDE pour la traduction d'adresse, donc l'adresse source sera le même que du pare-feu.

4.3. Opérations sur IpTables

Dans iptables les trois chaînes pré-définies sont INPUT, OUTPUT et FORWARD qu'on ne peut pas effacer. Les opérations pour administrer ces chaînes sont :

  1. Créer une nouvelle chaîne (-N).
  2. Effacer une chaîne vide (-X).
  3. Changer la règle par défaut pour une chaîne pré-définie (-P).
  4. Lister les règles d'une chaîne (-L).
  5. Retirer les règles d'une chaîne (-F).
  6. Mettre à zéro les compteurs de bits et de paquets d'une chaîne (-Z).

Pour manipuler une règle à l'intérieur d'une chaîne :

  1. Ajouter une nouvelle règle à la chaîne (-A).
  2. Insérer une nouvelle règle à une position précise dans la chaîne (-I).
  3. Remplacer une règle à une position précise dans la chaîne (-R).
  4. Supprimer une règle à une position précise dans la chaîne ou la première qui concorde (-D).

exemple:

  iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT 
  iptables -A INPUT  -p icmp --icmp-type echo-reply   -j ACCEPT 

iptables est configuré pour autoriser le pare-feu pour envoyer des requêtes ICMP echorequests (pings) et en retour, accepter les réponses (ICMP echo-reply).

4.4. Exemple d’opération sur une chaîne

La manipulation des règles facilite le filtrage. Les commandes -A pour ajouter ou -D pour effacer une chaîne. Chaque règle implique un ensemble de conditions qu'un paquet doit subir. Soit l'exemple de détruire tous le paquets ICMP arrivant de l'adresse loopback127.0.0.1 donc on doit utiliser le cible DROP sur le protocole ICMP de l'adresse source 127.0.0.1

pour cela une commande 'ping' envoie un ICMP de type 8(echo request) et la réponse doit être de type 0 (echo reply) pour le test:

  # ping -c 1 127.0.0.1
 PING 127.0.0.1 (127.0.0.1): 56 data bytes
 64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.2 ms
 --- 127.0.0.1 ping statistics ---
 1 packets transmitted, 1 packets received, 0% packet loss
 round-trip min/avg/max = 0.2/0.2/0.2 ms

Pour ajouter la chaîne a iptables

 # iptables -A INPUT -s 127.0.0.1 -p icmp -j DROP

Tester de nouveau la commande ping

 # ping -c 1 127.0.0.1
 PING 127.0.0.1 (127.0.0.1): 56 data bytes
 --- 127.0.0.1 ping statistics ---
 1 packets transmitted, 0 packets received, 100% packet loss

résultat le paquet est perdu

Pour effacer cette chaîne deux façons:

  • Nous pouvons effacer suivant le numéro de la chaîne dans ce cas la chaîne numéro 1 dans la table INPUT:
  # iptables -D INPUT 1
        
  • Répéter la même chaîne mais avec l'option -D pour effacer avec tous les options inséré dans la chaîne de création :
 # iptables -D INPUT -s 127.0.0.1 -p icmp -j DROP

4.5. Les règles de filtrages

  • Consulter les règles par défaut
  iptables -L
  • Effacer tous les règles par defaut
 iptables -t filter -F 
 iptables -t filter -X
  • Bloquer par défaut tout le trafic
 iptables -t filter -P INPUT DROP 
 iptables -t filter -P FORWARD DROP 
 iptables -t filter -P OUTPUT DROP
  • Garder les connexions déjà établies
 iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
 iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
  • Autoriser le loopback
 iptables -t filter -A INPUT -i lo -j ACCEPT 
 iptables -t filter -A OUTPUT -o lo -j ACCEPT
  • Ouvrir les ports en utilisant la syntaxe simple de iptables
 iptables -t filter -A INPUT/OUTPUT -p protocole --dport port_a_ouvrir -j ACCEPT

exemple d'un serveur web sur le port 80

 iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT 
 iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
Comments