Transparent firewall

De The Linux Craftsman
Aller à la navigation Aller à la recherche

Introduction

Le proxy transparent permet de mettre en pratique la stratégie par goulet d’étranglement abordée dans le cours sur les implémentations concrètes de la sécurité.

Transparent proxy.png

L'objectif est de constituer un point de passage obligatoire pour tout le trafic ce qui peut, par exemple, être intéressant pour filtrer le trafic d'une DMZ publique, construire des statistique sur le trafic sur un LAN, etc...

Pré-requis

Je vous laisse mettre en place la machine grâce au TP sur les bridges

Configuration réseau

Les machines sont sur le LAN 10.0.0.0/16 et le bridge est configuré comme suit:

# ip a sh
1: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether de:b4:49:a5:3a:07 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::dcb4:49ff:fea5:3a07/64 scope link
       valid_lft forever preferred_lft forever
2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 2e:f9:02:e5:f2:5c brd ff:ff:ff:ff:ff:ff
    inet6 fe80::2cf9:2ff:fee5:f25c/64 scope link
       valid_lft forever preferred_lft forever
3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN
    link/ether 2e:f9:02:e5:f2:5c brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.20/16 brd 10.0.255.255 scope global br0
    inet6 fe80::2cf9:2ff:fee5:f25c/64 scope link
       valid_lft forever preferred_lft forever

Notre bridge est donc accessible à l'adresse 10.0.0.20 et nos serveurs le seront aux adresses 10.0.0.21, 10.0.0.22, ...

De la sorte, il n'y a aucune translation d'adresse, ce qui peut être intéressant pour certain protocoles (eg. IPSec, AH, ...) et, on peut également filtrer les accès à ces machines sans appliquer aucune ligne de commande sur ces dernières.


Embrayes Iptables !

Les puristes diront tout de suite: impossible d'activer Iptables (IP → niveau 3 OSI) sur un bridge (MAC → niveau 2 OSI)...

Eh ben si !

Comme tout paramètre en relation avec le noyau, éditons le fichier /etc/sysctl.conf et passons le paramètre net.bridge.bridge-nf-call-iptables de 0 à 1

# vi /etc/sysctl.conf

...
# Disable netfilter on bridges.
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-arptables = 0
...

On n’oublie pas de recharger les paramètres du noyau

# sysctl -p

C'est fini !! Enfin presque, il ne reste plus qu'à configurer les règles de filtrage dans la chaine FORWARD

On peut s'en rendre compte grâce au compteur de la chaîne FORWARD qui ne fait qu'augmenter:

# iptables -nvL FORWARD
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination      

   5   215 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0

Exemple de configuration