Product SiteDocumentation Site

B.4. Configuration d'un pare-feu pont

Ces informations sont fournies par Francois Bayart pour aider les utilisateurs à mettre en place un pare-feu pont avec le noyau 2.4.x et iptables. Des correctifs de noyau ne sont plus nécessaires car le code est maintenant une partie standard de la distribution du noyau Linux.
Pour configurer le noyau avec la prise en charge nécessaire, exécutez make menuconfig ou make xconfig. Dans la section Networking options, activez les options suivantes :
[*] Network packet filtering (replaces ipchains)
[ ]   Network packet filtering debugging (NEW)
<*> 802.1d Ethernet Bridging
[*]   netfilter (firewalling) support (NEW)
Avertissement : vous devez désactiver ceci si vous voulez appliquer des règles de pare-feu ou sinon iptables ne fonctionnera pas :
[ ]   Network packet filtering debugging (NEW)
Ensuite, ajoutez les options correctes dans la section IP: Netfilter Configuration. Puis, compilez et installez le noyau. Si vous désirez le faire à la sauce Debian, installez kernel-package et exécutez make-kpkg pour créer un paquet noyau personnalisé Debian à installer sur le serveur en utilisant dpkg. Une fois le nouveau noyau compilé et installé, installez le paquet bridge-utils.
Une fois ces étapes achevées, vous pouvez terminer la configuration du pont. La section suivante présente deux configurations différentes possibles pour le pont, chacune avec une carte réseau hypothétique et les commandes nécessaires.

B.4.1. Un pont fournissant des fonctionnalités de traduction d'adresse (NAT) et de pare-feu

La première configuration utilise le pont comme un pare-feu avec traduction d'adresse réseau (NAT) qui protège un serveur et les clients du réseau interne. Voici ci-dessous un diagramme de la configuration du réseau :
Internet ---- routeur ---- pont
            (62.3.3.25)  (62.3.3.26 gw 62.3.3.25 / 192.168.0.1)
                            |
                            |
                            |---- serveur web
                            |   (62.3.3.27 gw 62.3.3.25)
                            |
                           réseau ---- Zipowz
                                     (192.168.0.2 gw 192.168.0.1)
Les commandes suivantes présentent une façon de configurer ce pont.
# Créer l'interface br0
/usr/sbin/brctl addbr br0

# Ajouter l'interface Ethernet à utiliser avec le pont
/usr/sbin/brctl addif br0 eth0
/usr/sbin/brctl addif br0 eth1

# Activer l'interface Ethernet
/sbin/ifconfig eth0 0.0.0.0
/sbin/ifconfig eth1 0.0.0.0

# Configurer le pont Ethernet
# Le pont sera correct et invisible (pare-feu transparent).
# Il est invisible à traceroute et la passerelle réelle est
# conservée sur les autres machines. La passerelle pourrait aussi
# être configurée sur le pont et être choisie comme nouvelle
# passerelle pour les autres machines.

/sbin/ifconfig br0 62.3.3.26 netmask 255.255.255.248 broadcast 62.3.3.31

# Cette IP interne est ajoutée pour créer la traduction d'adresse
ip addr add 192.168.0.1/24 dev br0
/sbin/route add default gw 62.3.3.25

B.4.2. Un pont fournissant des fonctionnalités de pare-feu

Une seconde possibilité est un système mis en place comme un pare-feu transparent pour un réseau avec un espace d'adresses IP publiques.
Internet ---- routeur ---- pont
            (62.3.3.25)  (62.3.3.26)
                            |
                            |
                            |---- serveur web
                            |   (62.3.3.28 gw 62.3.3.25)
                            |
                            |---- serveur de courriers
                                (62.3.3.27 gw 62.3.3.25)
Les commandes suivantes présentent une façon de configurer ce pont.
# Créer l'interface br0
/usr/sbin/brctl addbr br0

# Ajouter l'interface Ethernet à utiliser avec le pont
/usr/sbin/brctl addif br0 eth0
/usr/sbin/brctl addif br0 eth1

# Activer l'interface Ethernet
/sbin/ifconfig eth0 0.0.0.0
/sbin/ifconfig eth1 0.0.0.0

# Configurer le pont Ethernet
# Le pont sera correct et invisible (pare-feu transparent).
# Il est invisible à traceroute et la passerelle réelle est
# conservée sur les autres machines. La passerelle pourrait aussi
# être configurée sur le pont et être choisie comme nouvelle
# passerelle pour les autres machines.

/sbin/ifconfig br0 62.3.3.26 netmask 255.255.255.248 broadcast 62.3.3.31
Si vous exécutez un traceroute vers le serveur de courriers Linux, vous ne verrez pas le pont. Si vous voulez accéder au pont avec ssh, vous devez utiliser une passerelle ou d'abord vous connecter sur un autre serveur comme le « serveur de courriers », puis ensuite vous connecter sur le pont par la carte réseau interne.

B.4.3. Règles de base d'iptables

Voici un exemple des règles de base qui pourraient être utilisées pour l'une ou l'autre des configurations.

Exemple B.1. Règles de base d'iptables

iptables -F FORWARD
iptables -P FORWARD DROP
iptables -A FORWARD -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 -m state \
                    --state INVALID -j DROP
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

# Quelques règles amusantes, mais pas pour un iptables classique,
# désolé...
# Limite ICMP 
# iptables -A FORWARD -p icmp -m limit --limit 4/s -j ACCEPT
# Correspond à une chaîne de caractères, une bonne méthode simple pour
# bloquer certains VIRUS très rapidement
# iptables -I FORWARD -j DROP -p tcp -s 0.0.0.0/0 -m string \
                    --string "cmd.exe"

# Bloquer toutes les connexions MySQL simplement pour être sûr
iptables -A FORWARD -p tcp -s 0/0 -d 62.3.3.0/24 --dport 3306 -j DROP

# Règles du serveur de courriers Linux

# Autoriser FTP-DATA (20), FTP (21), SSH (22)
iptables -A FORWARD -p tcp -s 0.0.0.0/0 -d 62.3.3.27/32 --dport 20:22 \
                    -j ACCEPT

# Autoriser le serveur de courriers à se connecter à l'extérieur
# Remarque : ce n'est *pas* nécessaire pour les connexions précédentes
# (rappel : filtrage à état) et peut être supprimé.
iptables -A FORWARD -p tcp -s 62.3.3.27/32 -d 0/0 -j ACCEPT

# Règles pour le serveur WWW

# Autoriser les connexions HTTP (80) avec le serveur web
iptables -A FORWARD -p tcp -s 0.0.0.0/0 -d 62.3.3.28/32 --dport 80 \
                    -j ACCEPT

# Autoriser les connexions HTTPS (443) avec le serveur web
iptables -A FORWARD -p tcp -s 0.0.0.0/0 -d 62.3.3.28/32 --dport 443 \
                    -j ACCEPT

# Autoriser les connexions sortantes du serveur web
# Remarque : ce n'est *pas* nécessaire pour les connexions précédentes
# (rappel : filtrage à état) et peut être supprimé.
iptables -A FORWARD -p tcp -s 62.3.3.28/32 -d 0/0 -j ACCEPT