Les ponts filtrants

Transcription

Les ponts filtrants
Reseau−secu−pont−filtrant
Sommaire
Les ponts filtrants..............................................................................................................................................1
Introduction.............................................................................................................................................1
Pré−requis...............................................................................................................................................1
Configuration du pont lui même.............................................................................................................2
Mise en place du Filtrage........................................................................................................................3
Copyright............................................................................................................................................................5
Autres ressources................................................................................................................................................6
i
Les ponts filtrants
Les ponts filtrants
Tchesmeli serge
Un firewall totalement invisible
Introduction
Un pont est un équipement réseau qui permet de relier deux sous−réseaux de manière totalement transparente.
Pour ceux qui connaissent un peu le modèle OSI, il effectue une interconnexion au niveau 2, c'est−à−dire qu'il
travaille au niveau des trames.
En gros, un pont écoute toute l'activité de chaque sous−réseau auquel il est connecté, les stocke en mémoire et
les redirige vers le (ou les) sous−réseaux concernés.
Il n'a pas besoin d'adresse MAC (donc pas besoin d'adresse IP non plus) pour fonctionner, et est donc
totalement indétectable.
Schématiquement, on peut représenter un pont reliant deux réseaux de cette facon (le pont est la machine
servant de pont, eth0 et eth1 ses deux cartes réseau):
Réseau 1 −−−−−−−| eth0 Pont eth1 |−−−−−−−− Réseau 2
Un pont filtrant, lui, est un pont comme décrit plus haut, mais va en plus appliquer des régles de filtrage
(firewalling) sur les trames qui vont le "traverser". On vas donc obtenir un firewall qui ne posséde pas
d'adresse réseau, donc indétectable. Difficile pour un "pirate" d'attaquer une machine qui n'est pas visible sur
un réseau, et qui ne permet aucune connexion réseau car elle n'as pas d'adresse réseau.
Un pont filtrant a aussi un autre avantage : il s'interconnecte de façon totalement transparente sur votre réseau,
vous n'avez absolument pas besoin de modifier la topologie de votre réseau (routage, passerelle,...) pour
l'ajouter. Il se comporte en gros comme un simple cable réseau intelligent qui filtrerait le traffic qui le
traverse.
Pré−requis
Tout d'abord vous devez avoir un ordinateur avec deux cartes réseaux pour pouvoir interconnecter /filtrer les
deux réseaux. Le support du "pont" est intégré à partir du kernel 2.4. , mais vous devez prendre le dernier
kernel à jour (2.4.19 lors de la rédaction de ce document) pour avoir le meilleur support du pont. Vous devez
aussi appliquer un patch kernel, pour ajouter le support du pont à iptable (pour pouvoir filtrer les paquets qui
vont traverser le pont):
bridge−nf−0.0.7−against−2.4.19.diff
Ceci est le patch pour le kernel 2.4.19. Si lors de la lecture de ce document, le dernier kernel n'est plus le
2.4.19, récupérez alors le patch pour la version du kernel actuelle que vous trouverez ici:
Site officiel "pont filtrant" pour Linux
Appliquez alors le patch à votre kernel, pour le 2.4.19 par exemple, allez dans le répertoire des sources du
kernel et faites un :
patch −p1 < bridge−nf−0.0.7−against−2.4.19.diff
Recompilez alors votre kernel, en activant dans la partie Network Options :
Les ponts filtrants
1
Reseau−secu−pont−filtrant
Network Packet Filtering (remplace ipchains) (em module ou en natif)
Passez en module (ou en natif) toutes les options de :
IP: Netfilter Configuration
et activer aussi le support du pont :
[*] 802.1d Ethernet Bridging
A partir de ce moment, notre machine peut faire office de pont, et filtrer les paquets du pont.
Il vous faut aussi les utilitaires de configuration, c'est à dire les programmes pour configurer le pont
lui−même, que vous téléchargez ici:
bridge−utils−0.9.6.tar.gz
Comme avec n'importe quelle source de programmes, vous "détarballez" et compilez le tout :
tar zxvf bridge−utils−0.9.6.tar.gz
cd bridge−utils
./configure
make
make install
Configuration du pont lui même
Comme nous l'avons dit plus haut, le pont en lui−même n'a pas besoin d'adresse IP (ni même d'adresse MAC)
pour fonctionner. Donc dans un premier temps, nous enlevons toute adresse IP des deux cartes réseaux qui
constituent notre pont, et les passons en mode "promisc" pour qu'elles puissent écouter tout le réseau et donc
transférer les trames réseaux d'un réseau à l'autre.
ATTENTION Si vous etes en telnet ou ssh sur cette machine, la connexion va être coupée, faites donc ces
manipulations en console sur la machine elle−même.
ifconfig eth0 0.0.0.0 promisc
ifconfig eth1 0.0.0.0 promisc
Maitenant nous mettons en place le pont lui−même, c'est−à−dire nous donnons un nom au bridge lui−même
(mon−pont) et déclarons les interface réseaux qui vont servir au pont (eth0 et eth1):
brctl addbr mon−pont
brctl addif mon−pont eth0
brctl addif mon−pont eth1
Pour certains équipement actifs (switch, routeur, etc) le pont doit se "déclarer" pour que tout fonctionne bien.
Si la connexion entre les deux réseaux ne fonctionne pas, essayez ces commandes (mais dans 90% des cas
cela n'est pas nécessaire) :
brctl sethello mon−pont 1
brctl setfd mon−pont 4
Pour vérifier que tout marche, normalement toute machine du réseau1 doit pouvoir pinguer toutes les
machines du réseau2 et inversement. Et si vous faites un "traceroute" d'une machine du réseau1 vers le
réseau2 (ou inversement), vous ne verrez PAS le pont. Il se comporte là comme un simple "fil" reliant les
Configuration du pont lui même
2
Reseau−secu−pont−filtrant
deux réseaux.
Par contre, vous avez peut−être besoin d'accéder en réseau à la machine qui sert de pont (pour faire du ssh ou
autre), il faut donc lui donner une adresse IP. Mais comment faire étant donné que les deux interfaces réseaux
servent au pont ? Il y a deux solutions :
− Soit vous ajoutez une 3éme carte réseau a cette machine, que vous configurez normalement, avec une
adresse IP etc....
− Soit vous configurez le pont lui−même AVEC une adresse Ip. Le pont se comporte donc exactement comme
une interface réseau et pour lui affecter une adresse IP, on le fait de la même manière que pour une interface
"normale", par exemple :
ifconfig mon−pont 192.168.1.50 netmask 255.255.255.0
Et si vous refaites des traceroute, vous ne le verrez toujours PAS sur le résultat du traceroute.
Placez toute ces commandes dans un fichier de démarrage de votre machine bien sur, pour ne pas avoir à tout
retaper à chaque reboot.
Mise en place du Filtrage
Maitenant que notre pont est opérationnel, il ne reste plus qu'à lui appliquer les règles de filtrage que l'on
souhaite. Comme le traffic réseau ne fait QUE le traverser, les règles de filtrage ne sont que des règles de
forwarding bien sûr (pas de INPUT ni OUPUT). On applique les règles comme pour un firewall de type
"gateway" sauf la chaîne "FORWARD".
Je vous donne ici un exemple de filtrage (à vous d'adapter, suivant votre réseau, vos applications − voir la
rubrique iptable pour cela).
Appeler ce fichier rc.firewall par exemple et lancez−le au boot de la machine.
#!/bin/bash
# Script Firewalling exemple
PATH="/usr/sbin:$PATH"
# On vide les chaines
iptables −F
#On efface toute les chaines utilisateurs
iptables −X
#Notre réseau que l'on sécurise:
LANS="192.168.0.0/255.255.255.0"
# Adresse de notre serveur web et ftp
WEB="192.168.0.10"
FTP="192.168.0.20"
#On créé la chaine KEEP_STATE pour suivre l'état des connexions
iptables −N KEEP_STATE
iptables −F KEEP_STATE
#On drop les paquets non valides
iptables −A KEEP_STATE −m state −−state INVALID −j DROP
Mise en place du Filtrage
3
Reseau−secu−pont−filtrant
#On accepte les paquets provenant bien
#d'une connexion et dont l'etat est correct
iptables −A KEEP_STATE −m state −−state RELATED,ESTABLISHED −j ACCEPT
#On drop et log tout paquet dans un état incorect et
#qui permet des scans/Denial of service
iptables −A FORWARD −p tcp −−tcp−flags ALL FIN,URG,PSH \
−m limit −−limit 5/minute \
−j LOG −−log−level notice −−log−prefix "NMAP−XMAS: "
iptables −A FORWARD −p tcp −−tcp−flags ALL FIN,URG,PSH −j DROP
iptables −A FORWARD −p tcp −−tcp−flags SYN,FIN SYN,FIN \
−m limit −−limit 5/minute \
−j LOG −−log−level notice −−log−prefix "SYN/FIN: "
iptables −A FORWARD −p tcp −−tcp−flags SYN,FIN SYN,FIN −j DROP
iptables −A FORWARD −p tcp −−tcp−flags SYN,RST SYN,RST \
−m limit −−limit 5/minute \
−j LOG −−log−level notice −−log−prefix "SYN/RST: "
iptables −A FORWARD −p tcp −−tcp−flags SYN,RST SYN,RST −j DROP
iptables −A FORWARD −p tcp −−tcp−flags RST RST,ACK \
−m limit −−limit 5/minute \
−j LOG −−log−level notice −−log−prefix "RST/ACK: "
iptables −A FORWARD −p tcp −−tcp−flags RST RST,ACK −j DROP
#On passe les paquets valides dans notre chaine KEEP_STATE
iptables −A FORWARD −j KEEP_STATE
#On permet le controle de "time exceeded"
#et de "port not found" sur notre réseau
iptables −A FORWARD −p udp −s $LANS −−dport 11 −j ACCEPT
iptables −A FORWARD −p udp −s $LANS −−dport 3 −j ACCEPT
#On permet le http sur notre serveur web
iptables −A FORWARD −p tcp −d $WEB −−dport 80 −j ACCEPT
#On permet le Ftp sur notre serveur FTP
iptables −A FORWARD −p tcp −d $FTP −−dport 21 −j ACCEPT
# Tout notre réseau a le droit de "sortir" vers l'internet
iptables −A FORWARD −s $LANS −j ACCEPT
# Tout ce qui n'est pas déclaré doit etre bloqué
iptables −A FORWARD −j DROP
Cette page est issue de la documentation 'pré−wiki' de Léa a été convertie avec HTML::WikiConverter. Elle
fut créée par Tchesmeli serge le 01/11/2002.
Mise en place du Filtrage
4
Copyright
Copyright © 01/11/2002, Tchesmeli serge
Vous avez l'autorisation de copier, distribuer et/ou modifier ce document suivant les termes de la Licence
pour documents libres, Version 1.1 publiée par la La Guilde des Doctorants. Pour plus d'informations
consulter la LDL sur le site de La Guilde des Doctorants.
Copyright
5
Autres ressources
• Site officiel "Linux ethernet bridging"
• construction d'un bridge / firewall sous BSD
Autres ressources
6