Les HOWTO Linux...
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
- Un réseau interne camouflé (sous divers systèmes d'exploitation), que nous appellerons "BON" ;
- des serveurs exposés dans un réseau séparé (nommé "ZDM" pour Zone Démilitarisée) ;
- une connexion PPP à l'Internet (nommé "MAUVAIS").
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
- SMTP vers l'extérieur
- Accepte le SMTP de l'intérieur et de l'extérieur
- Accepte le POP3 de l'intérieur
Serveur de nom
- Envoi de requêtes DNS vers l'extérieur
- Accepte les requêtes DNS de l'intérieur, l'extérieur, et du filtre de paquets
Serveur web
- Accepte les requêtes HTTP de l'intérieur et de l'extérieur
- Accès rsync de l'intérieur
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
- Protection anti-spoofing
Puisque nous n'avons pas de routage asymétrique, nous pouvons simplement mettre en marche l'anti-spoofing pour toutes les interfaces.
# for f in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 1> $f; done #
- Mettre en place des règles de filtrage en interdiction (DENY) totale :
Nous autorisons tout de même le traffic local, mais nous interdisons tout le reste.
# ipchains -A input -i ! lo -j DENY # ipchains -A output -i ! lo -j DENY # ipchains -A forward -j DENY #
- Configurer les interfaces
Ceci est généralement réalisé par les scripts de lancement. Faîtes bien attention à ce que les règles ci-dessus soient insérées avant que les interfaces ne soient configurées, afin de prévenir le passage de paquets avant l'insertion des règles.
- Insertion des modules de camouflage par protocole
Nous devons insérer le module de camouflage du FTP, ainsi le ftp passif et actif fonctionnera `uniquement' du réseau interne.
# insmod ip_masq_ftp #
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 :
- Autorise WWW, ftp, traceroute, ssh vers l'extérieur
- Autorise le SMTP vers le serveur mail
- Autorise le POP3 vers le serveur mail
- Autorise les requêtes DNS vers le serveur de nom
- Autorise le rsync vers le serveur web
- Autorise le WWW vers le serveur web
- Autorise le ping vers le filtre de paquets
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)
- Restrictions de la ZDM :
- Serveur mail :
- SMTP vers l'extérieur
- Accepte le SMTP venant de l'intérieur et extérieur
- Accepte le POP3 de l'intérieur
- Serveur de noms :
- Envoi de requêtes DNS vers l'extérieur
- Accepte le DNS venant de l'intérieur, extérieur et du filtre de paquets
- Serveur web :
- Accepte les requêtes HTTP venant de l'intérieur et de l'extérieur
- Accès rsync de l'intérieur
- Serveur mail :
- Les trucs à autoriser du réseau extérieur vers la ZDM
- N'enregistre pas les violations, elles peuvent arriver.
ipchains -A mauvais-zdm -p tcp -d 192.84.219.128 smtp -j ACCEPT ipchains -A mauvais-zdm -p udp -d 192.84.219.129 domain -j ACCEPT ipchains -A mauvais-zdm -p tcp -d 192.84.219.129 domain -j ACCEPT ipchains -A mauvais-zdm -p tcp -d 192.84.218.130 www -j ACCEPT ipchains -A mauvais-zdm -p icmp -j icmp-acc ipchains -A mauvais-zdm -j DENY
Bon (intérieur) vers Mauvais (extérieur).
- Restrictions internes :
- Autorise le WWW, ftp, traceroute, ssh vers l'extérieur
- Autorise SMTP vers le serveur mail
- Autorise POP-3 vers le serveur mail
- Autorise DNS vers le serveur de nom
- Autorise rsync vers le serveur web
- Autorise WWW vers le serveur web
- Autorise ping vers le filtre de paquets
- Un grand nombre de gens autorisent tout venant de l'intérieur vers les
réseaux extérieurs, puis ajoutent des restrictions. Nous sommes fascistes.
- Enregistre les violations.
- Le ftp passif est géré par le module de camouflage.
ipchains -A bon-mauvais -p tcp --dport www -j MASQ ipchains -A bon-mauvais -p tcp --dport ssh -j MASQ ipchains -A bon-mauvais -p udp --dport 33434:33500 -j MASQ ipchains -A bon-mauvais -p tcp --dport ftp --j MASQ ipchains -A bon-mauvais -p icmp --icmp-type ping -j MASQ ipchains -A bon-mauvais -j REJECT -l
ZDM vers Bon (intérieur)
- Restrictions internes :
- Autorise WWW, ftp, traceroute, ssh vers l'extérieur
- Autorise SMTP vers le serveur mail
- Autorise POP3 vers le serveur mail
- Autorise DNS vers le serveur de noms
- Autorise rsync vers le serveur web
- Autorise WWW vers le serveur web
- Autorise ping vers le filtre de paquets
- Si nous camouflions le réseau intérieur de la ZDM, nous refuserions
simplement les paquets venant d'un autre moyen. Tel quel, il autorise
uniquement les paquets qui peuvent provenir d'une connexion pré-établie.
ipchains -A zdm-bon -p tcp ! -y -s 192.84.219.128 smtp -j ACCEPT ipchains -A zdm-bon -p udp -s 192.84.219.129 domain -j ACCEPT ipchains -A zdm-bon -p tcp ! -y -s 192.84.219.129 domain -j ACCEPT ipchains -A zdm-bon -p tcp ! -y -s 192.84.218.130 www -j ACCEPT ipchains -A zdm-bon -p tcp ! -y -s 192.84.218.130 rsync -j ACCEPT ipchains -A zdm-bon -p icmp -j icmp-acc ipchains -A zdm-mauvais -j DENY -l
ZDM vers Mauvais (extérieur)
- Restrictions de la ZDM :
- Serveur mail
- SMTP vers l'extérieur
- Accepte SMTP venant de l'intérieur et de l'extérieur
- Accepte POP3 venant de l'intérieur
- Serveur de noms
- Envoi de requêtes DNS vers l'extérieur
- Accepte le DNS de l'intérieur, l'extérieur et du filtre de paquets
- Serveur web
- Accepte HTTP venant de l'intérieur et de l'extérieur
- Accès rsync de l'intérieur
- Serveur mail
ipchains -A zdm-mauvais -p tcp -s 192.84.219.128 smtp -j ACCEPT ipchains -A zdm-mauvais -p udp -s 192.84.219.129 domain -j ACCEPT ipchains -A zdm-mauvais -p tcp -s 192.84.219.129 domain -j ACCEPT ipchains -A zdm-mauvais -p tcp ! -y -s 192.84.218.130 www -j ACCEPT ipchains -A zdm-mauvais -p icmp -j icmp-acc ipchains -A zdm-mauvais -j DENY -l
Mauvais (extérieur) vers Bon (intérieur)
- Nous n'autorisons rien (de non camouflé) à passer du réseau extérieur vers
le réseau intérieur.
ipchains -A mauvais-bon -j REJECT
Filtrage de paquets pour la machine Linux elle-même
- Si nous désirons utiliser le filtrage de paquets sur les paquets
arrivant sur la machine elle-même, nous devons filtrer la chaîne d'entrée.
Nous créons une chaîne pour chaque interface de destination :
ipchains -N mauvais-if ipchains -N zdm-if ipchains -N bon-if
- Créons les sauts vers elles :
ipchains -A input -d 192.84.219.1 -j mauvais-if ipchains -A input -d 192.84.219.250 -j zdm-if ipchains -A input -d 192.168.1.250 -j bon-if
Interface Mauvais (extérieur)
- Machine de filtrage des paquets :
- PING tous les réseaux
- TRACEROUTE tous les réseaux
- Accès DNS
- L'interface extérieure reçoit aussi des réponses aux paquets camouflés,
les erreurs ICMP leur correspondant et les réponses PING.
ipchains -A mauvais-if -i ! ppp0 -j DENY -l ipchains -A mauvais-if -p TCP --dport 61000:65096 -j ACCEPT ipchains -A mauvais-if -p UDP --dport 61000:65096 -j ACCEPT ipchains -A mauvais-if -p ICMP --icmp-type pong -j ACCEPT ipchains -A mauvais-if -j icmp-acc ipchains -A mauvais-if -j DENY
Interface ZDM
- Restrictions du filtre de paquets :
- PING tous les réseaux
- TRACEROUTE tous les réseaux
- Accès DNS
- L'interface ZDM reçoit les réponses DNS, ping et les erreurs ICMP
ipchains -A zdm-if -i ! eth0 -j DENY ipchains -A zdm-if -p TCP ! -y -s 192.84.219.129 53 -j ACCEPT ipchains -A zdm-if -p UDP -s 192.84.219.129 53 -j ACCEPT ipchains -A zdm-if -p ICMP --icmp-type pong -j ACCEPT ipchains -A zdm-if -j icmp-acc ipchains -A zdm-if -j DENY -l
Interface Bon (intérieur)
- Restrictions du filtre de paquets
- PING tous les réseaux
- TRACEROUTE tous les réseaux
- Accès DNS
- Restrictions intérieures :
- Autorise WWW, ftp, traceroute, ssh vers l'extérieur
- Autorise SMTP vers le serveur mail
- Autorise POP3 vers le serveur mail
- Autorise DNS vers le serveur de noms
- Autorise rsync vers le serveur web
- Autorise WWW vers le serveur web
- Autorise ping vers le filtre de paquets
- L'interface intérieure reçoit les pings, les réponses ping et les erreurs
ICMP.
ipchains -A bon-if -i ! eth1 -j DENY ipchains -A bon-if -p ICMP --icmp-type ping -j ACCEPT ipchains -A bon-if -p ICMP --icmp-type pong -j ACCEPT ipchains -A bon-if -j icmp-acc ipchains -A bon-if -j DENY -l
7.5 Finalement
- Supprime les règles de bloquage :
ipchains -D input 1 ipchains -D forward 1 ipchains -D output 1
Page suivante - Page précédente - Table des matières