Shorewall
Shorewall : the Shoreline Firewall. C'est une interface pour
netfilter/iptables. Ici pas d'interface graphique mais seulement quelques fichiers textes pour décrire la configuration et une commande pour checker la conf, la tester, la mettre en place, l'inhiber...
A partir de ces fichiers texte, la conf
iptables est générée en incluant plein de "petits trucs" auxquels seuls des gurus de
netfilter (ou presque) auraient pu penser.
Shorewall n'est pas un projet neuf. Sa première version publique remonte à début 2001. Après un petit passage à vide, l'arrivée de la communauté dans son développement il y a quelques années lui a redonné l'élan qu'il avait perdu. Deux versions (au moins) sont disponibles et maintenues en permanence permettant de choisir entre une stabilité à toute épreuve ou des fonctionnalités toujours à la pointe (sans négliger la sécurité pour autant).
Les commandes de base
Quelques commandes de base :
-
shorewall start
: démarre shorewall,
-
shorewall stop
: arrête shorewall,
-
shorewall restart
: redémarre shorewall,
-
shorewall safe-start
: démarre shorewall avec un timer qui revient à l'état précédent si l'on n'accepte pas explicitement les changements dans la minute suivante,
-
shorewall safe-restart
: redémarre shorewall comme avec safe-start
.
Les différents fichiers
Fichiers principaux :
-
zones
: décrit les différentes zones logiques de notre réseau.
-
interfaces
: fait correspondre aux zones les interfaces physiques ou virtuelles de notre firewall.
-
policy
: décrit les politiques par défaut (Que fait-on des paquets qui essaient de passer ?).
-
rules
: décrit les exceptions aux politiques précédentes (Mais heu... j'veux quand même laisser passer ça...).
Fichier supplémentaire nécessaire à notre exemple :
-
masq
: définit notre nat.
Un exemple de configuration
Pour notre exemple nous prendrons une machine (le firewall) possédant deux interfaces réseau. La première vers l'extérieur (le réseau local + le net) et la seconde vers "notre" réseau local en
nat (en pratique ça peut très bien être un vrai réseau même si pour nous ce sont des machines virtuelles sur une interface virtuelle également).
Nous voulons :
- isoler le plus possible notre réseau " natté ",
- permettre l'administration du firewall via ssh,
- qu'une machine (virtuelle) du réseau " natté " héberge un serveur Web en répondant à l'ip du firewall,
- permettre l'envoie de mail depuis cette même machine.
Le fichier zones
###############################################################################
#ZONE TYPE OPTIONS IN OUT
# OPTIONS OPTIONS
fw firewall
net ipv4
loc ipv4
Nous définissons ainsi trois zones : le firewall (la présente machine)
fw, le monde extérieur
net et notre réseau local "
natté "
loc.
Le fichier interfaces
###############################################################################
#ZONE INTERFACE BROADCAST OPTIONS
net eth0 detect tcpflags,routefilter,nosmurfs,logmartians
loc virbr0 detect tcpflags,nosmurfs
Ainsi, nous faisons correspondre les entrées/sorties sur l'interface
eth0
à la zone
net et celles sur l'interface virtuelle
virbr0
à la zone
loc. Nous demandons également à
shorewall
de détecter automatiquement l'adresse de broadcast et les différentes options permettent entre autres de filtrer les paquets aux "
flags " impossibles (ou invalides).
Le fichier policy
###############################################################################
#SOURCE DEST POLICY LOG LEVEL LIMIT:BURST
loc net REJECT
loc $FW REJECT info
loc all REJECT info
$FW net REJECT info
$FW loc REJECT info
$FW all REJECT info
net $FW DROP info
net loc DROP info
net all DROP info
all all REJECT info
Nous définissons ici la politique par défaut du firewall. Donc, par défaut, tout est interdit. Soit "DROPpé" pour ce qui provient de la zone
net, soit rejeté pour le reste. Nous demandons également au firewall de logger à titre informatif tous les paquets qui lui arrivent à l'exception de ceux provenant du réseau local.
Le fichier rules
#############################################################################################################
#ACTION SOURCE DEST PROTO DEST SOURCE ORIGINAL RATE USER/ MARK
# PORT PORT(S) DEST LIMIT GROUP
Ping/DROP net $FW
SSH/ACCEPT net $FW
SMPT/ACCEPT loc:192.168.122.10 net
Web/ACCEPT net $FW
DNAT net loc:192.168.122.10 tcp www
A la politique par défaut viennent s'ajouter les règles (ou exceptions) pour permettre aux paquets qui sont utiles de passer :
- on interdit le ping sur le firewall depuis le net. Même si c'est déjà le cas, on empêche ainsi le log de ceux-ci,
- on autorise le ssh depuis le net vers le firewall,
- on accepte l'envoi de mail depuis la machine de notre réseau local dont l'ip est
192.168.122.10
vers le net,
- on accepte les requêtes " Web " du net vers le firewall par contre on redirige celles-ci vers la machine
192.168.122.10
de notre réseau local.
Le fichier masq
###############################################################################
#INTERFACE SOURCE ADDRESS PROTO PORT(S) IPSEC MARK
eth0 virbr0
Pour le
nat, on indique que l'on "
natte " l'interface
virbr0
sur
eth0
.
--
VincentMeslard - 18 Nov 2009