Tags:
create new tag
, view all tags

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

Topic revision: r6 - 2010-01-12 - VincentMeslard
 
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2024 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback