Table des matières

Filter

La table de filtrage

C'est la table qui va permettre de filtrer tous les paquets qui entrent et sortent de notre machine. Il n'y a ici aucune modification de ces paquets, ils seront comparés à des critères définis dans la table Filter. Dans notre cas, il peut se passer deux choses différentes:

Décision de routage Un paquet entre dans notre machine. Peu importe par quelle interface il entre, il peut venir aussi bien du réseau local que de l'Internet. Il passe d'abord par la fonction de décision de routage. C'est elle qui va déterminer si le paquet est destiné à un processus local de l'hôte ou à un hôte sur un autre réseau.

Une autre façon de représenter graphiquement tout ça serait la suivante :

La table de filtrage

Rappel d'avertissement important :

Pour ceux qui ont travaillé avec IPchains, notez que la démarche est ici différente et ça va peut-être vous poser pas mal de problèmes…

Avec IPChains… Avec IPtables
TOUS les paquets entrants  passaient par les chaînes INPUT  qu'ils soient destinés à un process local où au routage TOUS les paquets sortants passaient par la chaîne OUTPUT, qu'ils soient issus d'un process local ou destinés au routage. SEULS les paquets destinés à un process local traversent la chaîne INPUT SEULS les paquets issus d'un process local traversent la chaîne OUTPUT SEULS les paquets destinés au routage traversent la chaîne FORWARD

L'illustration ci-dessus le montre bien, et ceci va conduire à d'énormes erreurs, si l'on se contente de traduire les anciennes règles IPChains en règles IPTables, sans précautions particulières.

Vous ne me croyez pas ?

Alors, avant d'aller plus loin, faites la manip suivante. Sur votre passerelle Linux 2.6.x :

Initialisation de Netfilter

  iptables -F
  iptables -X
  iptables -t nat -F
  iptables -t nat -X

De cette manière, vous avez toutes vos chaînes vides, avec par défaut la règle ACCEPT

  iptables -L

L'affichage va vous assurer que les trois chaînes INPUT, FORWARD et OUTPUT sont vides et ont bien la règle par défaut ACCEPT

  iptables -t nat -L

L'affichage va vous assurer que les trois chaînes PREROUTING, POSTROUTING et OUTPUT sont vides et ont bien la règle par défaut ACCEPT.

Mise en place de Masquerade

Tapez maintenant les commandes suivantes:

  iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

Où ppp0 représente l'interface connectée à l'Internet. Remplacez éventuellement, si votre configuration est différente. Ceci signifie en gros: Tout ce qui sort du routage (-A POSTROUTING) et qui doit passer vers l'Internet (-o ppp0) doit subir un masquage d'adresse (-j MASQUERADE)

  echo 1 > /proc/sys/net/ipv4/ip_forward

Ceci pour être certain que votre noyau autorise le routage. Vous n'en avez pas besoin, si votre machine est configurée par défaut pour assurer le routage.

Voilà. Votre passerelle entre le réseau privé et l'Internet doit être opérationnelle.

Attention, dans cet état, vous n'avez rigoureusement aucune défense contre d'éventuelles intrusions ! Passez rapidement à la suite.

Et maintenant, la manip décisive...

Pour bien montrer que les chaînes INPUT et OUTPUT n'interviennent pas dans le routage, nous allons tout simplement leur mettre DROP comme règle par défaut. Attention, il faut que vos clients utilisent un DNS situé ailleurs que sur votre passerelle Linux, sinon, ça ne fonctionnera pas à cause du DNS.

Tapez les commandes suivantes:

  iptables -P INPUT DROP
  iptables -P OUTPUT DROP
  iptables -L

(pour vérifier que INPUT et OUTPUT « droppent » bien tout ce qui passe).

Convaincu ? INPUT et OUTPUT n'interviennent absolument pas dans le routage. Toutes les règles que vous pourrez y mettre ne concerneront que la sécurité de la passerelle elle-même, mais pas de votre réseau privé.