Page suivante Page précédente Table des matières

7. Un exemple sérieux

Cet exemple est extrait du tutorial donné par Michael Neuling et moi-même en mars 1999 lors du LinuxWorld ; ce n'est pas le seul moyen de régler le problème donné, mais c'est probablement le plus simple. J'espère que vous le jugerez informatif.

7.1 L'arrangement

   Réseau externe (MAUVAIS)
           |
           |
       ppp0|
    ---------------
    | 192.84.219.1|             Réseau des serveurs (ZDM)
    |             |eth0
    |             |----------------------------------------------
    |             |192.84.219.250 |             |              |
    |             |               |             |              |
    |192.168.1.250|               |             |              |
    ---------------          --------       -------        -------
           | eth1            | SMTP |       | DNS |        | WWW |
           |                 --------       -------        -------
           |              192.84.219.128  192.84.219.129  192.84.218.130
           |
   Réseau Interne (BON)

7.2 Buts

Sur la machine filtrant les paquets :

PING tout réseau

Très utile si la machine est hors-service.

TRACEROUTE tout réseau

Une fois de plus, utile pour les diagnostics.

Accès au DNS

Pour rendre ping et DNS plus utile.

À l'intérieur de la Zone Démilitarisée :

Serveur mail

Serveur de nom

Serveur web

En interne :

Autorise WWW, ftp, traceroute et ssh vers l'extérieur

Ce sont des services standards à autoriser : on autorise parfois les machines internes à tout faire, mais ici nous serons plus restrictifs.

Autorise le SMTP vers le serveur mail

Bien entendu, nous voulons qu'il leur soit possible d'envoyer du courrier vers l'extérieur.

Autorise le POP3 vers le serveur mail

C'est ainsi qu'ils lisent leur courrier.

Autorise les requêtes DNS vers le serveur de nom

Ils doivent pouvoir rechercher des noms externes pour le web, le ftp, traceroute ou ssh.

Autorise rsync vers le serveur web

C'est ainsi qu'ils synchronisent le serveur web externe avec l'interne.

Autorise les requêtes WWW vers le serveur web

Bien entendu, nous voulons qu'ils puissent se connecteur au serveur web externe.

Autorise le ping vers le filtre de paquets

Il est courtois de l'autoriser ; ils peuvent ainsi tester si le pare-feu est coupé (ainsi nous ne serons pas tenus responsables si un site extérieur est coupé).

7.3 Avant le filtrage des paquets

7.4 Filtrage de paquets pour les paquets traversants

Avec le camouflage, il vaut mieux filtrer la chaîne de retransmission.

Cassez la chaîne de retransmission en plusieurs chaînes utilisateurs dépendant des interfaces sources/destination ; ceci ramène le problème à des problèmes plus gérables.

ipchains -N bon-zdm
ipchains -N mauvais-zdm
ipchains -N bon-mauvais
ipchains -N zdm-bon
ipchains -N zdm-mauvais
ipchains -N mauvais-bon

ACCEPTer les codes standards d'erreur ICMP est un fait classique, nous lui créons donc une chaîne.

ipchains -N icmp-acc

Configurer les sauts de la chaîne de transmission

Malheureusement, nous connaissons seulement (dans la chaîne de transmission) quelle est l'interface externe. Ainsi, pour se représenter de quelle interface vient le paquet, nous utilisons l'adresse source (l'anti-spoofing évite les problèmes liés aux adresses).

Notez que nous enregistrons tout ce qui ne vérifie aucune de ces règles (cependant, ceci ne devrait jamais arriver).

ipchains -A forward -s 192.168.1.0/24 -i eth0 -j bon-zdm
ipchains -A forward -s 192.168.1.0/24 -i ppp0 -j bon-mauvais
ipchains -A forward -s 192.84.219.0/24 -i ppp0 -j zdm-mauvais
ipchains -A forward -s 192.84.219.0/24 -i eth1 -j zdm-bon
ipchains -A forward -i eth0 -j mauvais-zdm
ipchains -A forward -i eth1 -j mauvais-bon
ipchains -A forward -j DENY -l

Définir la chaîne icmp-acc

Les paquets correspondant à l'une des erreurs ICMP sont acceptés, sinon le contrôle les rendra à la chaîne appellante.

ipchains -A icmp-acc -p icmp --icmp-type destination-unreachable -j ACCEPT
ipchains -A icmp-acc -p icmp --icmp-type source-quench -j ACCEPT
ipchains -A icmp-acc -p icmp --icmp-type time-exceeded -j ACCEPT
ipchains -A icmp-acc -p icmp --icmp-type parameter-problem -j ACCEPT

Bon (interne) vers ZDM (serveurs)

Restrictions internes :

On pourrait utiliser le camouflage du réseau interne vers la ZDM, mais ici nous ne le ferons pas. Puisque personne du réseau interne ne devrait tenter de choses démoniaques, nous enregistrons les paquets qui sont interdits.

ipchains -A bon-zdm -p tcp -d 192.84.219.128 smtp -j ACCEPT
ipchains -A bon-zdm -p tcp -d 192.84.219.128 pop-3 -j ACCEPT
ipchains -A bon-zdm -p udp -d 192.84.219.129 domain -j ACCEPT
ipchains -A bon-zdm -p tcp -d 192.84.219.129 domain -j ACCEPT
ipchains -A bon-zdm -p tcp -d 192.84.218.130 www -j ACCEPT
ipchains -A bon-zdm -p tcp -d 192.84.218.130 rsync -j ACCEPT
ipchains -A bon-zdm -p icmp -j icmp-acc
ipchains -A bon-zdm -j DENY -l

Mauvais (extérieur) vers ZDM (serveurs)

Bon (intérieur) vers Mauvais (extérieur).

ZDM vers Bon (intérieur)

ZDM vers Mauvais (extérieur)

Mauvais (extérieur) vers Bon (intérieur)

Filtrage de paquets pour la machine Linux elle-même

Interface Mauvais (extérieur)

Interface ZDM

Interface Bon (intérieur)

7.5 Finalement


Page suivante Page précédente Table des matières