Shorewall Setup Guide
Tom
Eastep
Fabien
Demassieux
2004-04-03
2001-2004
Thomas M. Eastep
Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation License, Version
1.2 or any later version published by the Free Software Foundation; with
no Invariant Sections, with no Front-Cover, and with no Back-Cover
Texts. A copy of the license is included in the section entitled
GNU Free Documentation
License
.
Notes du traducteur : J'espère
vous faciliter l'accès et la prise en main d'un firewall performant,
efficace, adaptable et facile d'utilisation. Donc félicitations pour la
qualité du travail et la disponibilité offerte par Thomas M. Eastep. Si
vous trouvez des erreurs ou des améliorations à apporter vous pouvez me
contacter Fabien
Demassieux
Introduction
Ce guide est destiné aux utilisateurs qui configurent Shorewall dans
un environnement ou un ensemble d'adresses IP publiques doivent être
prises en compte ou à ceux qui souhaitent en savoir plus à propos de
Shorewall que ce que contient le guide pour une utilisation avec une
adresse ID unique.
Parce que le champ d'utilisation est si important, le guide vous donnera
les indications générales à suivre et vous renseignera sur d'autres
ressources si nécessaire.
Si vous utilisez LEAF Bering, votre configuration Shorewall n'est
PAS ce que je publie -- Je suggère de prendre en considération
l'installation de Shorewall LPR disponible sur le site de shorewall.net
avant de poursuivre.
Pré-requis
Shorewall a besoin que le package
iproute/iproute2 soit installé
(avec la distribution RedHat, le package
s'appelle iproute). Vous pouvez vérifier si le
package est installé par la présence du programme ip
sur votre firewall. En tant que root, vous pouvez utiliser la commande
which pour cela:
[root@gateway root]# which ip
/sbin/ip
[root@gateway root]#
Avant de commencer
Je recommande en premier la lecture complète du guide afin de se
familiariser avec les tenants et aboutissants puis de revenir sur les
modifications de votre configuration adapté à votre système.
Si vous éditez vos fichiers de configuration sur un système
Windows, vous devez les sauver comme des
fichiers Unix si votre éditeur supporte cette
option sinon vous devez les convertir avec dos2unix
avant d'essayer de les utiliser. De la même manière, si vous copiez un
fichier de configuration depuis votre disque dur
Windows vers une disquette, vous devez lancer
dos2unix sur la copie avant de l'utiliser avec
Shorewall.
Windows
Version of dos2unix
Linux
Version of dos2unix
Les Concepts de Shorewall
Les fichiers de configuration de Shorewall se trouvent dans le
répertoire /etc/shorewall -- pour
la plus par des paramétrages, vous avez juste besoin de quelques-uns
d'entre eux comme cela est décrit dans le manuel. Des squelettes de
fichiers sont créés durant la procédure
d'installation de Shorewall.
Comme chaque fichier est abordé, je vous suggère de regarder celui
de votre système -- chaque fichier contient des instructions détaillées de
configuration et d'autres des entrées par défaut.
Shorewall voit le réseau où il fonctionne, comme un ensemble de
zones. Dans la configuration par défaut, les noms des zones suivantes sont
utilisés:
Zones
Name
Description
net
L'internet
loc
Votre Réseau local
dmz
Zone Démilitarisée
Les Zones sont définies dans le fichier /etc/shorewall/zones.
Shorewall reconnaît aussi le système firewall comme sa propre zone -
par défaut, le firewall lui-même est connu sous le nom fw, mais cela peut être modifié dans le fichier
/etc/shorewall/shorewall.conf.
Dans ce guide, le nom par défaut (fw)
sera utilisé.
Mise à par fw, Shorewall n'attache
aucune importance au nom des zones. Les Zones sont entièrement ce que VOUS
en faites. Cela veut dire que vous ne devez pas vous attendre à ce que
Shorewall fasse quelque chose de spécial car il s'agit de la zone
Internet
ou car c'est la zone DMZ
.
Éditez le fichier /etc/shorewall/zones file et faites tous
changements qui s'imposent.
Les Règles qui concernent le trafic à autoriser ou à refuser sous
exprimés en terme de Zones.
Vous désignez les politiques par défaut entre une zone et une
autre dans le fichier /etc/shorewall/policy.
Vous définissez les exceptions à ces politiques par défaut dans
le fichier /etc/shorewall/rules.
Shorewall est construit sur les possibilités du noyau (kernel)
Netfilter. Netfilter
implémente une fonction
de tracking qui autorise ce qui est souvent désigné comme une
inspection déclarée de paquets. Les propriétés de déclaration permettent
au firewall d'être définie en terme de connexions plutôt qu'en terme de
paquet. Avec Shorewall, vous:
Identifiez la zone source.
Identifiez la zone destination.
Si la politique de la zone client vers la zone destination est
ce que vous souhaitez pour cette paire client/serveur, vous n'avez
besoin de rien de plus.
Si la politique n'est pas ce que vous souhaitez, alors vous
devez ajouter une règle. Cette règle est exprimé en terme de zone
client et de zone serveur.
Si les connexions d'un certain type sont autorisés de la zone A au
firewall et sont aussi autorisés du firewall à la zone B cela NE VEUT PAS dire que ces connections sont autorisés de la zone
A à la zone B. Cela veut plutôt dire que vous avez un proxy qui
tourne sur le firewall qui accepte les connections de la zone A et qui
ensuite établit ces propres connections du firewall à la zone B.
Pour chaque requête de connexion sur le firewall, la requête est
d'abord évalué à travers le fichier
/etc/shorewall/rules. Si aucune règle dans ce fichier
ne correspond, la connexion interroge ensuite la première politique dans
/etc/shorewall/policy qui correspond à la requête et
l'applique. Si cette politique est REJECT ou DROP, la requête est a
nouveau évaluée à travers les règles du fichier
/etc/shorewall/common.def.
Le fichier de défaut /etc/shorewall/policy a
les politiques suivantes:
#SOURCE ZONE DESTINATION ZONE POLICY LOG LIMIT:BURST
# LEVEL
fw net ACCEPT
net all DROP info
all all REJECT info
La politique précédente:
Permet toutes les connexions de votre réseau local vers
Internet
Drop (ignore) toutes les connexions d'Internet vers le firewall
ou votre réseau local et génère un message au niveau info (ici se
trouve la description des niveaux de log).
Reject (rejette) toutes les autres connexions et génère un
message au niveau info. Quant la requête est rejeté, le firewall
retourne un RST (si le protocole est TCP) ou un ICMP port-unreachable
paquet pour les autres protocoles.
Maintenant, éditez votre /etc/shorewall/policy
et apportez tous les changements que vous souhaitez.
Interfaces Réseau
Pour le reste de ce guide, nous utiliserons le schéma ci-dessous.
Bien qu'il ne puisse correspondre à votre propre réseau, il peut être
utilisé pour illustrer les aspects importants de la configuration de
Shorewall.
Sur ce schéma:
La zone DMZ est composée des systèmes DMZ 1 et DMZ 2. Une DMZ
est utilisée pour isoler vos serveurs accessibles depuis Internet de
vos systèmes locaux. Ainsi si un de ces serveurs est compromis, vous
avez encore votre firewall entre le système compromis et vos systèmes
locaux.
La zone Local est composée des systèmes Local 1, Local 2 et
Local 3.
Tous les systèmes du FAI vers l'extérieur et qui englobe la Zone
Internet.
La façon la plus simple pour définir les zones est d'associer le nom
de la zone (définie précédemment dans /etc/shorewall/zones) avec une
interface réseau. C'est fait dans le fichier /etc/shorewall/interfaces. Le
firewall illustré ci-dessus à trois interfaces. Si la connexion se fait à
travers un câble ou un DSL Modem
, l'Interface
Externe sera l'adaptateur qui est branché au
Modem
(e.g., eth0)
tant que vous ne vous n'utilisez pas le Point-to-Point Protocol over
Ethernet (PPPoE) ou le Point-to-Point Tunneling Protocol(PPTP) dans ce cas
l'Interface Externe sera de type ppp (e.g., ppp0). Si vous utilisez un modem classique,
votre Interface externe sera également ppp0. Si vous utilisez ISDN, votre Interface
Externe sera ippp0.
Si votre Interface Externe est ppp0 ou ippp0 alors vous pouvez fixer CLAMPMSS=yes
dans /etc/shorewall/shorewall.conf.
Votre Interface Locale sera un adaptateur
Ethernet (eth0,
eth1 or eth2)
et doit être connecté à un hub ou un switch. Vos ordinateurs locaux
doivent être connectés au même switch (note: Si vous avez une machine
unique, vous pouvez connecter le firewall directement à l'ordinateur en
utilisant un câble croisé).
Votre Interface DMZ sera aussi être un
adaptateur Ethernet (eth0,
eth1 ou eth2) et doit être connecté à un hub ou un
switch. Vos ordinateurs DMZ doivent être connectés au même switch (note:
Si vous avez une machine DMZ unique, vous pouvez connecter le firewall
directement à l'ordinateur en utilisant un câble croisé).
Ne connectez pas l'interface interne et externe sur le même hub ou
switch, sauf pour tester avec une version postérieure à Shorewall 1.4.7.
Quand vous utilisez ces versions récentes, vous pouvez tester ce type de
configuration si vous spécifiez l'option arp_filter
dans le fichier /etc/shorewall/interfaces
pour toutes les interfaces connectées au hub/switch commun. Utiliser une
telle configuration avec un firewall en production est fortement
déconseillé.
Pour le besoin de ce Guide, nous décidons que:
L'interface externe est eth0.
L'interface locale est eth1.
L'interface DMZ est eth2.
La configuration par défaut de Shorewall ne définit pas le contenu
de chaque zone. Pour définir la précédente configuration en utilisant le
fichier /etc/shorewall/interfaces, ce
fichier doit contenir:
#ZONE INTERFACE BROADCAST OPTIONS
net eth0 detect rfc1918
loc eth1 detect
dmz eth2 detect
Éditer le fichier /etc/shorewall/interfaces et
définissez les interfaces du réseau sur votre firewall et associez chaque
interface avec une zone. Si vous avez une zone qui est interfacée avec
plus d'une interface, incluez simplement une entrée pour chaque interface
et répéter le nom de zone autant de fois que nécessaire.
Multiple Interfaces associé une Zone
#ZONE INTERFACE BROADCAST OPTIONS
net eth0 detect rfc1918
loc eth1 detect
loc eth2 detect
Vous pouvez définir des zones plus compliquées en utilisant le
fichier /etc/shorewall/hosts mais
dans la plus part des cas, ce n'est pas nécessaire.
Adressage, Sous-réseaux et Routage
Normalement, votre FAI vous assigne des adresses Publiques. Vous
pouvez configurer l'interface externe du firewall en utilisant l'une de
ces adresses permanentes et vous pouvez décider comment utiliser le reste
de vos adresses.
Si vous êtes déjà familier avec l'adressage IP et le routage, vous
pouvez aller à la prochaine section.
La présentation précédente ne fait que d'effleurer la question des
sous réseaux et du routage. Si vous êtes intéressé pour apprendre plus sur
l'adressage IP et le routage, je recommande IP
Fundamentals: What Everyone Needs to Know about Addressing &
Routing
, Thomas A. Maufer, Prentice-Hall, 1999, ISBN 0-13-975483-0
(link).
Adressage IP
L'adressage IP version 4 (IPv4) est codé sur 32-bit. La notation
w.x.y.z se réfère à une adresse dont le byte d'ordre supérieur est
w
, le suivant à pour valeur x
, etc. Si
nous prenons l'adresse 192.0.2.14 et l'exprimons en hexadécimal, nous
obtenons:
C0.00.02.0Eou l'exprimons comme
un entier de 32-bit
C000020E
Sous-réseaux
Vous entendrez toujours les termes Class A network
,
Class B network
et Class C network
. Au
début de l'existence de l'IP, les réseaux ne comportaient que trois
tailles (il y avait aussi le réseau de Class D mais il était utilisé
différemment):
Class A - netmask 255.0.0.0, size = 2 ** 24
Class B - netmask 255.255.0.0, size = 2 ** 16
Class C - netmask 255.255.255.0, size = 256
La taille d'un réseau était uniquement déterminée par la valeur du
byte de l'ordre supérieur, ainsi vous pouviez regarder une adresse IP et
déterminer immédiatement le masque réseau. Le masque réseau est un
nombre qui se termine logiquement avec une adresse qui isole le
numéro de réseau; le reste de l'adresse est le
numéro d'hôte. Par exemple, dans la Classe C
l'adresse 192.0.2.14, le numéro hexadécimal du réseau est C00002 et le
numéro hexadécimal d'hôte est 0E.
Comme l'Internet se développait, il semblait clair que la
classification en adressage 32-bit allait devenir très limité
(rapidement, les grandes sociétés et les universités s'étaient assigné
leur propre réseau de classe A!). Après quelques faux départs, la
technique courante du sous-adressage de ces réseaux en plus petits
sous-réseaux évolua; cette technique est consignée par le
Classless InterDomain Routing (CIDR). Aujourd'hui,
tous les systèmes avec lesquels vous travaillerez comprennent
probablement la notation CIDR. Le réseau basé sur les Classes est du
domaine du passé.
Un sous-reseau (aussi appelé
subnet ou subnetwork) est un
ensemble d'adresses IP tel que:
Le nombre d'adresses dans le jeu est un multiple de 2;
et
La première adresse dans le jeu est un multiple de la taille
du jeu.
La première adresse du sous-réseau est réservée et se réfère à
l'adresse du sous-réseau.
La dernière adresse du sous-réseau est réservée comme
adresse broadcast du sous-réseau.
Comme vous pouvez le constater par cette définition, dans chaque
sous-réseau de taille n il y a (n - 2) adresses utilisables (adresses
qui peuvent être assignés à une hôte). La première et la dernière
adresse du sous-réseau sont utilisées respectivement pour identifier
l'adresse sous-réseau et l'adresse broadcast du sous-réseau. En
conséquence, de petits sous-réseaux sont plus gourmands en adresses IP
que de plus étendus.
Comme n est une puissance de deux, nous pouvons aisément calculer
le Logarithme Naturel (log2) de n. Pour les plus
communs des sous-réseaux, la taille et leur logarithme naturel sont
donnés par la table suivante:
Logarithme Naturel
n
log2 n
(32 - log2 n)
8
3
29
16
4
28
32
5
27
64
6
26
128
7
25
256
8
24
512
9
23
1024
10
22
2048
11
21
4096
12
20
8192
13
19
16384
14
18
32768
15
17
65536
16
16
Vous pourrez voir que la table ci-dessus contient aussi une
colonne (32 - log2 n). Ce nombre est la
Variable de Longueur du Masque de Sous-réseau (VLSM
Variable Length Subnet Mask) pour un réseau de taille n. De la table
ci-dessus, nous pouvons dériver celle-ci, ce qui est plus facile à
utiliser.
VLSM
Subnet Size
VLSM
Subnet Mask
8
/29
255.255.255.248
16
/28
255.255.255.240
32
/27
255.255.255.224
64
/26
255.255.255.192
128
/25
255.255.255.128
256
/24
255.255.255.0
512
/23
255.255.254.0
1024
/22
255.255.252.0
2048
/21
255.255.248.0
4096
/20
255.255.240.0
8192
/19
255.255.224.0
16384
/18
255.255.192.0
32768
/17
255.255.128.0
65536
/16
255.255.0.0
2 ** 24
/8
255.0.0.0
Notez que le VLSM est écrit avec un slash (/
) --
vous pouvez souvent entendre un sous-réseau de taille 64 qui fait
référence à un sous-réseau slash 26
et un de taille 8
faisant référence à un slash 29
.
Le masque de sous-réseau (aussi référencé par son
netmask) est simplement un nombre de 32-bit avec le
premier bit VLSM
à un et les autres à zéro. Par exemple,
pour un sous-réseau de taille 64, le masque de sous-réseau débute par 26
bits à un:
11111111111111111111111111000000 = FFFFFFC0 = FF.FF.FF.C0 = 255.255.255.192Le
masque de sous-réseau a la propriété suivante: si vous terminez
logiquement le masque de sous-réseau avec une adresse dans le
sous-réseau, le résultat est l'adresse du sous-réseau. Attention, si
vous terminez logiquement le masque de sous-réseau avec une adresse en
dehors du sous-réseau, le résultat n'est PAS l'adresse du
sous-réseau.
Comme nous l'avons vu précédemment, la propriété du masque de
sous-réseau est très importante dans le routage.
Pour un sous-réseau dont l'adresse est a.b.c.d et dont la VLSM est /v, nous notons le sous-réseau a.b.c.d/v
en utilisant la
notation CIDR.
Un exemple de sous-réseau (sub-network) :
Subnet:
10.10.10.0 - 10.10.10.127
Subnet Size:
128
Subnet Address:
10.10.10.0
Broadcast
Address:
10.10.10.127
CIDR Notation:
10.10.10.0/25
Il y a deux sous-réseaux dérivés qui doivent être mentionnés; A
savoir, le sous-réseau avec un membre et le sous-réseau avec 2 ** 32
membres.
/32 and /0
Subnet Size
VLSM Length
Subnet Mask
CIDR Notation
1
32
255.255.255.255
a.b.c.d/32
32
0
0.0.0.0
0.0.0.0/0
Ainsi, chaque adresse a.b.c.d
peut aussi être écrite a.b.c.d/32 et
l'ensemble des adresses possibles est écrit 0.0.0.0/0.
Plus loin dans ce manuel, vous verrez la notation a.b.c.d/v utilisé pour décrire la configuration
IP d'une interface réseau (l'utilitaire 'ip' utilise aussi cette
syntaxe). cela veut simplement dire que l'interface est configuré avec
une adresse ip a.b.c.d et avec le
masque de réseau qui correspond à la variable VLSM /v.
192.0.2.65/29
L'interface est configuré avec l'adresse IP 192.0.2.65 et le
netmask 255.255.255.248.
Depuis Shorewall 1.4.6, /sbin/shorewall supporte une command
ipcalc qui calcule automatiquement l'information sur le
[sous]réseau.
En utilisant la commande ipcalc.
shorewall ipcalc 10.10.10.0/25
CIDR=10.10.10.0/25
NETMASK=255.255.255.128
NETWORK=10.10.10.0
BROADCAST=10.10.10.127
En utilisant la commande ipcalc.
shorewall ipcalc 10.10.10.0 255.255.255.128
CIDR=10.10.10.0/25
NETMASK=255.255.255.128
NETWORK=10.10.10.0
BROADCAST=10.10.10.127
Routage
L'un des buts des sous-réseaux est la base du routage. Ci-dessous
se trouve la table de routage de mon firewall (compressé pour du
PDF):
[root@gateway root]# netstat -nr
Kernel IP routing table
Destination Gateway Genmask Flgs MSS Win irtt Iface
192.168.9.1 0.0.0.0 255.255.255.255 UH 40 0 0 texas
206.124.146.177 0.0.0.0 255.255.255.255 UH 40 0 0 eth1
206.124.146.180 0.0.0.0 255.255.255.255 UH 40 0 0 eth3
192.168.3.0 0.0.0.0 255.255.255.0 U 40 0 0 eth3
192.168.2.0 0.0.0.0 255.255.255.0 U 40 0 0 eth1
192.168.1.0 0.0.0.0 255.255.255.0 U 40 0 0 eth2
206.124.146.0 0.0.0.0 255.255.255.0 U 40 0 0 eth0
192.168.9.0 192.0.2.223 255.255.255.0 UG 40 0 0 texas
127.0.0.0 0.0.0.0 255.0.0.0 U 40 0 0 lo
0.0.0.0 206.124.146.254 0.0.0.0 UG 40 0 0 eth0
[root@gateway root]#
Le périphérique texas est le tunnel GRE vers
un site peer à Dallas, la zone Texas.
Les trois premières routes sont des host
routes puisqu'elles indiquent comment aller vers un hôte
unique. Dans la sortie de netstat
cela peut-être vu par
le Genmask
(Masque sous-réseau) de 255.255.255.255 et le
H
dans la colonne Flags
. Les autres sont
des routes net
routes car elles
indiquent au noyau comment router des paquets à un sous-réseau. La
dernière route est la route par défaut
correspondant à la passerelle (gateway) mentionnée aussi appelé
passerelle par défaut (default gateway).
Quant le noyau essaye d'envoyer un paquet à une adresse IP
A, il commence au début de la table de
routage et:
A est logiquement terminé
avec la valeur du Genmask
dans l'entrée de la
table.
Le résultat est comparé avec la valeur de la
Destination
dans l'entrée de la table.
Si le résultat et la valeur de la Destination
sont identiques, alors:
Si la colonne Gateway
n'est pas nulle, le
paquet est envoyé au gateway à travers l'interface nommée dans
la colonne Iface
.
Sinon, le paquet est directement envoyé à A à travers l'interface nommée dans la
colonne iface
.
Autrement, les étapes précédentes sont répétées sur l'entrée
suivante de la table.
Puisque la route par défaut correspond à toutes les adresses IP
(A donne 0.0.0.0 = 0.0.0.0), les
paquets qui ne correspondent à aucune des autres entrées de la table de
routage sont envoyés au gateway par défaut qui généralement est un
routeur vers le FAI.
Voici un exemple. Supposez que vous souhaitez router un paquet à
192.168.1.5. Cette adresse ne correspond à aucune route d'hôte dans la
table mais si nous terminons logiquement cette adresse avec
255.255.255.0, le résultat est 192.168.1.0 qui correspond à la l'entrée
dans la table:
192.168.1.0 0.0.0.0 255.255.255.0 U 40 0 0 eth2
Donc le paquet vers 192.168.1.5 est directement envoyé à travers
eth2.
Un des points qui doit être souligné -- tous les paquets sont
envoyés en utilisant la table de routage et les réponses ne sont pas
exclues de ce principe. Il semble y avoir une idée fausse chez ceux qui
croient que les paquets réponses sont comme les saumons et contiennent
un code génétique qui leur permet de suivre la route emprunté par les
paquets envoyés. Ce n'est pas le cas; La réponse peut prendre un chemin
totalement différent de celui de la requête du client -- les routes
requête/réponse sont totalement indépendantes.
Protocole de Résolution d'Adresse (ARP)
Quant on envoie des paquets à travers Ethernet, les adresses IP ne
sont pas utilisées. Bien que l'adressage Ethernet soit basé sur les
adresses Media Access Control (MAC). Chaque
périphérique Ethernet à sa propre adresse MAC qui est contenu dans une
PROM lors de la fabrication. Vous pouvez obtenir l'adresse MAC grâce à
l'utilitaire ip
:
[root@gateway root]# ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc htb qlen 100
link/ether 02:00:08:e3:fa:55 brd ff:ff:ff:ff:ff:ff
inet 206.124.146.176/24 brd 206.124.146.255 scope global eth0
inet 206.124.146.178/24 brd 206.124.146.255 scope global secondary eth0
inet 206.124.146.179/24 brd 206.124.146.255 scope global secondary eth0
[root@gateway root]#
Comme vous pouvez le constater ci-dessus, l'adresse MAC codé sur 6
bytes (48 bits). L'adresse MAC est généralement aussi imprimée sur la
carte elle-même.
Comme IP utilise les adresses IP et Ethernet les adresses MAC, un
mécanisme est nécessaire pour transcrire une adresse IP en adresse MAC;
C'est ce dont est chargé le protocole de résolution d'adresse
Address Resolution Protocol (ARP). Voici ARP en
action:
[root@gateway root]# tcpdump -nei eth2 arp
tcpdump: listening on eth2
09:56:49.766757 2:0:8:e3:4c:48 0:6:25:aa:8a:f0 arp 42:
arp who-has 192.168.1.19 tell 192.168.1.254
09:56:49.769372 0:6:25:aa:8a:f0 2:0:8:e3:4c:48 arp 60:
arp reply 192.168.1.19 is-at 0:6:25:aa:8a:f0
2 packets received by filter
0 packets dropped by kernel
[root@gateway root]#
Dans cet échange , 192.168.1.254 (MAC 2:0:8:e3:4c:48) veut
connaître l'adresse MAC du périphérique avec l'adresse IP 192.168.1.19.
Le système ayant cette adresse IP répond que l'adresse MAC du
périphérique avec l'adresse IP 192.168.1.19 est 0:6:25:aa:8a:f0.
Afin de rendre disponible les informations d'échange ARP chaque
fois qu'un paquet est envoyé, le système maintient un cache
ARP of IP<->MAC correspondances. Vous pouvez voir le
cache ARP sur votre système (également sur les systèmes
Windows) en utilisant la commande
arp
:
[root@gateway root]# arp -na
? (206.124.146.177) at 00:A0:C9:15:39:78 [ether] on eth1
? (192.168.1.3) at 00:A0:CC:63:66:89 [ether] on eth2
? (192.168.1.5) at 00:A0:CC:DB:31:C4 [ether] on eth2
? (206.124.146.254) at 00:03:6C:8A:18:38 [ether] on eth0
? (192.168.1.19) at 00:06:25:AA:8A:F0 [ether] on eth2
Les détails de réponse sont le résultat de l'utilisation de
l'option n
(Windows
arp
n'accepte pas cette option) qui force le programme
arp
à la translation de résolution de noms IP->DNS. Si
je n'utilise pas cette option, le point d'interrogation sera remplacé
par le noms correspondant à chaque adresse IP. Notez que la dernière
information dans la table d'enregistrement est celle que nous voyons en
utilisant précédemment tcpdump.
RFC 1918
Les adresses IP sont allouées par l'autorité Internet Assigned Number Authority
(IANA) qui délégue des allocations géographiques basées sur le Regional
Internet Registries (RIR). Par exemple, les allocations pour les
Etats-Unis sont déléguées à American
Registry for Internet Numbers (ARIN). Ces RIR peuvent déléguer à
des bureaux nationaux. La plus part d'entre nous ne traite pas avec
autorités mais obtienne plutôt leur adresse IP par leur FAI.
Dans la réalité, généralement on ne peut se permettre autant
d'adresses IP Publiques que de périphériques à assigner si bien que nous
utiliseront des adresses IP Privées. RFC 1918 réserve plusieurs plages
d'adresse IP à cet usage:
10.0.0.0 - 10.255.255.255
172.16.0.0 - 172.31.255.255
192.168.0.0 - 192.168.255.255
Les adresses réservées par la RFC 1918 sont parfois appelées
non-routable car le routeur passerelle Internet ne renvoi pas les
paquets qui ont une adresse de destination RFC-1918. Cela est
compréhensible car tout le monde peut choisir ces adresses pour un usage
privé.
Quant on choisit des adresses de ces plages, il y a deux choses à
garder en mémoire:
Comme l'espace des adresses IPv4 s'épuise, de plus en plus
d'organisation (comprenant les FAI) commencent à utiliser les
adresses RFC 1918 dans leur infrastructures.
Vous ne voulez pas utiliser des adresses IP qui sont utilisés
par votre FAI ou une autre organisation avec laquelle vous souhaiter
établir une liaison VPN
C'est pourquoi c'est une bonne idée de vérifier avec votre FAI
s'il n'utilise pas (ou ne prévoie pas d'utiliser) des adresses privées
avant de décider les adresses que vous allez utiliser.
Dans ce document, les adresses IP externes
réels
du type 192.0.2.x. 192.0.2.0/24 sont réservées
par RFC 3330 pour l'utilisation d'adresses IP publiques. Ces adresses
ne doivent pas être confondues avec les adresses 192.168.0.0/16; comme
décrit ci-dessus, celles-ci sont réservées par RFC 1918 pour une
utilisation privée.
Configurer votre Réseau
Le choix de configuration de votre réseau dépend d'abord du nombre
d'adresses Public IP dont vous avez besoin, c'est à dire du nombre
d'entités adressables que vous avez sur votre réseau. En fonction du
nombre d'adresses que vous avez, votre FAI peut servir ce jeu d'adresses
de deux manières:
Routed - Le trafic vers chacune
de vos adresses sera routé à travers une unique adresse passerelle.
Cela sera généralement fait si votre FAI vous assigne un sous-réseau
complet (/29 ou plus). Dans ce cas, vous assignerez l'adresse
passerelle comme adresse IP de l'interface externe de votre
firewall/router.
Non-routed - Votre FAI vous
donnera directement le trafic de chaque adresse directement.
Dans les paragraphes qui suivent, nous étudierons chaque cas
séparément.
Avant de commencer, il y a une chose que vous devez vérifier:
Si vous utilisez le package Debian, vérifier svp votre fichier
shorewall.conf afin de contrôler les paramètres suivants; si ce n'est pas
juste, appliquer les changements nécessaires:
NAT_ENABLED=Yes (Shorewall versions antérieures à 1.4.6)
IP_FORWARDING=On
Routage
Supposons que votre fournisseur d'accès FAI vous a assigné le
sous-réseau 192.0.2.64/28 routé à travers 192.0.2.65. Cela veut dire que
vous avez les adresses IP 192.0.2.64 - 192.0.2.79 et que l'adresse
externe de votre firewall est 192.0.2.65. Votre FAI vous a aussi dit que
vous pouvez utiliser le masque de réseau 255.255.255.0 (ainsi votre /28
est une partie de /24). Avec ces adresses IP, vous pouvez scinder votre
réseau /28 en deux /29 et configurer votre réseau comme l'indique le
diagramme suivant.
Ici, la zone démilitarisé DMZ comprend le sous-réseau
192.0.2.64/29 et le réseau Local 192.0.2.72/29. La passerelle par défaut
pour les hôtes dans la DMZ pourra être configuré à 192.0.2.66 et la
passerelle par défaut pour les hôtes du réseau local pourra être
192.0.2.73.
Notez que cet arrangement est plus gourmand en adresses publiques
puisqu'il utilise 192.0.2.64 et 192.0.2.72 pour les adresses du
sous-réseau, 192.0.2.71 et 192.0.2.79 pour les adresses broadcast du
réseau, de même que 192.0.2.66 et 168.0.2.73 pour les adresses internes
que le firewall/routeur. Néanmoins, cela montre comment nous pouvons
faire avec un réseau /24 plutôt qu'un /28, l'utilisation de 6 adresses
IP parmi les 256 peut être justifié par la simplicité du
paramétrage.
Le lecteur astucieux aura remarqué que l'interface externe du
firewall/Routeur est actuellement incluse dans le sous-réseau DMZ
(192.0.2.64/29). Que se passe-t-il si DMZ 1 (192.0.2.67) essaye de
communiquer avec 192.0.2.65? La table de routage sur DMZ 1 peut
ressembler à cela:
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
192.0.2.64 0.0.0.0 255.255.255.248 U 40 0 0 eth0
0.0.0.0 192.0.2.66 0.0.0.0 UG 40 0 0 eth0
Cela indique que DMZ 1 enverra une requête ARP "qui a 192.0.2.65"
et aucune interface sur le segment Ethernet DMZ à cette adresse IP.
Assez bizarrement, le firewall répondra à la requête avec l'adresse MAC
de sa propre DMZ Interface!! DMZ 1
peut alors envoyer des trames Ethernet adressées à cette adresse MAC et
les trames seront reçues (correctement) par le firewall/routeur.
C'est plutôt une possibilité inattendue d'ARP sur la partie du
Noyau Linux qui pousse cet avertissement très tôt dans ce manuel à
propos de la connexion de plusieurs interfaces firewall/routeur au même
hub ou switch. Quant une requête ARP destinée à une des adresses
firewall/routeur est envoyée par un autre système connecté au
hub/switch, toutes les interfaces du firewall qui se connectent au
hub/switch peuvent répondre! C'est alors une course à la réponse qui
"est-là" qui atteindra en premier l'émetteur.
Non-routé
Avec la situation précédente mais non-routé, vous pouvez
configurer votre réseau exactement comme décrit ci-dessus avec une
condition supplémentaire; spécifiez simplement l'option
proxyarp
sur les trois interfaces du firewall dans le
fichier /etc/shorewall/interfaces file.
La plus part d'entre nous n'ont pas le luxe d'avoir assez
d'adresses publiques IP pour configurer notre réseau comme montré dans
le précédent exemple (même si la configuration est routée).
Pour le besoin de cette section, admettons
que notre FAI nous a assigné les adresses IP 192.0.2.176-180 et nous a
dit d'utiliser le masque de réseau 255.255.255.0 et la passerelle par
défaut 192.0.2.254.
Clairement, ce jeu d'adresses ne comprend pas de sous-réseau et
n'a pas suffisamment d'adresses pour toutes les interfaces de notre
réseau. Il y a quatre possibilités qui peuvent être utilisées pour
régler ce problème.
Source Network Address Translation
(SNAT).
Destination Network Address Translation
(DNAT) aussi nommé Port Forwarding.
Proxy ARP.
Network Address Translation (NAT) aussi
appelé One-to-one NAT.
Souvent une combinaison de ces techniques est utilisée. Chacune
d'entre elle sera détaillée dans la section suivante.
SNAT
Avec SNAT, un segment interne LAN est configuré en utilisant les
adresses RFC 1918. Quant un hôte A
sur ce segment interne initialise une connexion vers un hôte B sur Internet, le firewall/routeur réécrit les
entêtes IP dans la requête pour utiliser une de vos adresses publiques
IP en tant qu'adresse source. Quant B
répond et que la réponse est reçu par le firewall, le firewall change
l'adresse destination par celle RFC 1918 de A et renvoi la réponse à A.
Supposons que vous décidiez d'utiliser SNAT sur votre zone
locale et utilisiez l'adresse publique 192.0.2.176 à la fois comme
adresse externe du firewall et l'adresse source des requêtes Internet
envoyées depuis cette zone.
La zone locale a été assigné au sous-réseau 192.168.201.0/29
(netmask 255.255.255.248).
Le système dans la zone locale pourra être configuré avec la
passerelle par défaut 192.168.201.1 (L'adresse IP de l'interface
local du firewall).
SNAT est configuré dans Shorewall avec le fichier
/etc/shorewall/masq.
#INTERFACE SUBNET ADDRESS
eth0 192.168.201.0/29 192.0.2.176
Cet exemple utilise la technique normale pour assigner la même
adresse publique IP pour l'interface externe du firewall et pour SNAT.
Si vous souhaitez utiliser une adresse IP différente, vous pouvez soit
utiliser les outils de configuration réseau de votre distribution pour
ajouter cette adresse IP ou vous pouvez mettre la variable
ADD_SNAT_ALIASES=Yes dans /etc/shorewall/shorewall.conf si bien que
Shorewall ajoutera l'adresse pour vous.
DNAT
Quant SNAT est utilisé, il est impossible pour les hôtes sur
Internet d'initialiser une connexion avec un des systèmes puisque ces
systèmes n'ont pas d'adresses publiques IP. DNAT fournit une méthode
pour autoriser des connexions sélectionnés depuis Internet.
Supposons que votre fille souhaite héberger un serveur Web sur
son système "Local 3". Vous pouvez autoriser les connexions d'Internet
à son serveur en ajoutant l'entrée suivante dans le fichier
/etc/shorewall/rules:
#ACTION SOURCE DEST PROTO DEST SOURCE ORIGINAL
# PORT(S) PORT(S) DEST
DNAT net loc:192.168.201.4 tcp www
Si une des amies de votre fille avec une adresse A veut accéder au serveur de votre fille, elle
peut se connecter à l'adresse http://192.0.2.176 (l'adresse IP externe
de votre firewall) et le firewall réécrira l'adresse IP à
192.168.201.4 (le système de votre fille) et enverra la requête. Quant
le serveur de votre fille répond, le firewall réécrira la source de
réponse avec 192.0.2.176 et retournera la réponse à A.
Cet exemple l'adresse externe IP du firewall pour DNAT. Vous
pouvez utiliser une autre de vos adresses IP publiques, mais Shorewall
n'ajoutera pas pour vous cette adresse à l'interface externe du
firewall.
Proxy ARP
Le principe du proxy ARP est:
Un hôte H derrière votre
firewall est assigné à une de vos adresses publiques (A), a le même masque de réseau (M) que l'interface externe du
firewall.
Le firewall répond à ARP "qui a" demandé A.
Quant H délivre une requête
ARP "qui a" pour une adresse du sous-réseau définit par A et M, le
firewall répondra (avec l'adresse MAC si le firewall s'interface à
H).
Supposons que nous décidons d'utiliser Proxy ARP sur DMZ de
notre exemple réseau.
Ici, nous avons assigné les adresses IP 192.0.2.177 au système
DMZ 1 et 192.0.2.178 à DMZ 2. Notez que nous avons juste assigné une
adresse arbitraire RFC 1918 et un masque de sous-réseau à l'interface
DMZ de notre firewall. Cette adresse et le masque ne sont pas
pertinentes - vérifiez juste que celle-ci n'écrase pas un autre
sous-réseau déjà défini.
La configuration de Proxy ARP est faite dans le fichier /etc/shorewall/proxyarp.
#ADDRESS EXTERNAL INTERFACE HAVE ROUTE
192.0.2.177 eth2 eth0 No
192.0.2.178 eth2 eth0 No
Parce que la variable HAVE ROUTE contient No, Shorewall ajoutera
les routes d'hôte à travers eth2 à 192.0.2.177 et 192.0.2.178. Les
interfaces ethernet de DMZ 1 et DMZ 2 pourront être configurées pour
avoir les adresses IP apparentes mais devront avoir la même passerelle
par défaut que le firewall lui-même -- nommé 192.0.2.254. En d'autres
termes, elles pourront être configurées juste comme elles devraient
être si elles étaient parallèles au firewall plutôt que derrière
lui.
Ne pas ajouter le(s) adresse(s) ARP
(192.0.2.177 et 192.0.2.178 dans l'exemple ci-dessus) à l'interface
externe (eth0 dans cet exemple) du firewall.
Un mot de mise en garde à sa place ici. Les FAI configure(nt)
typiquement leur routeur avec un timeout de cache ARP élevé. Si vous
déplacer un système parallèle à votre firewall derrière le Proxy ARP
du firewall, cela peut mettre des HEURES avant que le système puisse
communiquer avec Internet. Il y a deux choses que vous pouvez essayer
de faire:
(Courtoisement de Bradey Honsinger) Une lecture de Stevens'
TCP/IP Illustrated, Vol 1 révèle qu'un paquet ARP
gratuitous
peut entraîner le routeur de votre FAI à
rafraîchir son cache(section 4.7). Une "gratuitous" ARP est
simplement une requête d'un hôte demandant l'adresse MAC de sa
propre adresse IP; éventuellement pour vérifier que l'adresse IP
n'est pas dupliquée,...
Si l'hôte envoyant la commande gratuitous
ARP
vient juste de changer son adresse IP..., ce paquet entraîne tous
les autres hôtes...qui ont une entrée dans son cache pour
l'ancienne adresse matériel de mettre à jour également ses caches
ARP.
Ce qui est exactement, bien sûr, ce que vous souhaitez faire
lorsque vous basculez un hôte vulnérable à Internet derrière
Shorewall utilisant proxy ARP (ou one-to-one NAT). Heureusement,
des packages récents (Redhat) iputils
incluent "arping", avec l'option "-U" qui fait cela:
arping -U -I <net if> <newly proxied IP>
arping -U -I eth0 66.58.99.83 # for exampleStevens
continue en mentionnant que tous les systèmes répondent
correctement au gratuitous ARPs,et googling
pour
arping -U
semble aller dans ce sens.
Vous pouvez appeler votre FAI et dire de purger l'ancienne
entrée du cache ARP mais la plupart ne veulent ou ne peuvent le
faire.
Vous pouvez vérifier si le cache ARP de votre FAI est ancien en
utilisant ping et tcpdump. Supposez que vous pensez que la passerelle
routeur a une ancienne entrée ARP pour 192.0.2.177. Sur le firewall,
lancez tcpdump de cette façon:
tcpdump -nei eth0 icmp
Maintenant depuis 192.0.2.177, utilisez ping vers la passerelle
du FAI (que nous supposons être 192.0.2.254):
ping 192.0.2.254
Nous pouvons maintenant observer le résultat de tcpdump:
13:35:12.159321 0:4:e2:20:20:33 0:0:77:95:dd:19 ip 98:
192.0.2.177 > 192.0.2.254: icmp: echo request (DF)
13:35:12.207615 0:0:77:95:dd:19 0:c0:a8:50:b2:57 ip 98:
192.0.2.254 > 192.0.2.177 : icmp: echo replyNotez
que l'adresse source MAC dans la requête echo est différente de
l'adresse de destination dans la réponse echo!! Dans le cas ou
0:4:e2:20:20:33 était l'adresse MAC de l'interface NIC eth0 du
firewall tandis que 0:c0:a8:50:b2:57 était l'adresse MAC de DMZ 1. En
d'autre termes, le cache ARP de la passerelle associe encore
192.0.2.177 avec la NIC de DMZ 1 plutôt qu'avec eth0 du firewall.
One-to-one NAT
Avec one-to-one NAT, vous assignez les adresses systèmes RFC
1918 puis établissez une à une l'assignation entre ces adresses et les
adresses publiques. Pour les occurrences des connexions sortantes SNAT
(Source Network Address Translation) et pour les occurrences des
connexions entrantes DNAT (Destination Network Address Translation).
Voyons avec l'exemple précédent du serveur web de votre fille tournant
sur le système Local 3.
Rappel du paramétrage, le réseau local utilise SNAT et partage
l'IP externe du firewall (192.0.2.176) pour les connexions sortantes.
Cela est obtenu avec l'entrée suivante dans le fichier
/etc/shorewall/masq:
#INTERFACE SUBNET ADDRESS
eth0 192.168.201.0/29 192.0.2.176
Supposons maintenant que vous avez décidé d'allouer à votre
fille sa propre adresse IP (192.0.2.179) pour l'ensemble des
connexions entrantes et sortantes. Vous devrez faire cela en ajoutant
une entrée dans le fichier
/etc/shorewall/nat.
#EXTERNAL INTERFACE INTERNAL ALL INTERFACES LOCAL
192.0.2.179 eth0 192.168.201.4 No No
Avec cette entrée active, votre fille a sa propre adresse IP et
les deux autres systèmes locaux partagent l'adresse IP du
firewall.
Une fois que la relation entre 192.0.2.179 et192.168.201.4 est
établie par l'entrée ci-dessus, ce n'est pas nécessaire d'utiliser une
règle DNAT pour le serveur Web de votre fille -- vous devez simplement
utiliser une règle ACCEPT:
#ACTION SOURCE DEST PROTO DEST SOURCE ORIGINAL
# PORT(S) PORT(S) DEST
ACCEPT net loc:192.168.201.4 tcp www
Un mot de mise en garde à sa place ici. Les FAI configure(nt)
typiquement leur routeur avec un timeout de cache ARP élevé. Si vous
déplacer un système parallèle à votre firewall derrière le One-on-one
NAT du firewall, cela peut mettre des HEURES avant que le système
puisse communiquer avec Internet. Il y a deux choses que vous pouvez
essayer de faire:
(Courtoisement de Bradey Honsinger) Une lecture de Stevens'
TCP/IP Illustrated, Vol 1 révèle qu'un paquet ARP
gratuitous
peut entraîner le routeur de votre FAI à
rafraîchir son cache(section 4.7). Une "gratuitous" ARP est
simplement une requête d'un hôte demandant l'adresse MAC de sa
propre adresse IP; éventuellement pour vérifier que l'adresse IP
n'est pas dupliquée,...
Si l'hôte envoyant la commande gratuitous
ARP
vient juste de changer son adresse IP..., ce paquet entraîne tous
les autres hôtes...qui ont une entrée dans son cache pour
l'ancienne adresse matériel de mettre à jour également ses caches
ARP.
Ce qui est exactement, bien sûr, ce que vous souhaitez faire
lorsque vous basculez un hôte vulnérable à Internet derrière
Shorewall utilisant proxy ARP (ou one-to-one NAT). Heureusement,
des packages récents (Redhat) iputils
incluent "arping", avec l'option "-U" qui fait cela:
arping -U -I <net if> <newly proxied IP>
arping -U -I eth0 66.58.99.83 # for exampleStevens
continue en mentionnant que tous les systèmes répondent
correctement au gratuitous ARPs,et googling
pour
arping -U
semble aller dans ce sens.
Vous pouvez appeler votre FAI et dire de purger l'ancienne
entrée du cache ARP mais la plupart ne veulent ou ne peuvent le
faire.
Vous pouvez vérifier si le cache ARP de votre FAI est ancien en
utilisant ping et tcpdump. Supposez que vous pensez que la passerelle
routeur a une ancienne entrée ARP pour 192.0.2.177. Sur le firewall,
lancez tcpdump de cette façon::
tcpdump -nei eth0 icmp
Maintenant depuis 192.0.2.177, utilisez ping vers la passerelle
du FAI (que nous supposons être 192.0.2.254):
ping 192.0.2.254
Nous pouvons maintenant observer le résultat de tcpdump:
13:35:12.159321 0:4:e2:20:20:33 0:0:77:95:dd:19 ip 98:
192.0.2.177 > 192.0.2.254: icmp: echo request (DF)
13:35:12.207615 0:0:77:95:dd:19 0:c0:a8:50:b2:57 ip 98:
192.0.2.254 > 192.0.2.177 : icmp: echo replyNotez
que l'adresse source MAC dans la requête echo est différente de
l'adresse de destination dans la réponse echo!! Dans le cas ou
0:4:e2:20:20:33 était l'adresse MAC de l'interface NIC eth0 du
firewall tandis que 0:c0:a8:50:b2:57 était l'adresse MAC de DMZ 1. En
d'autre termes, le cache ARP de la passerelle associe encore
192.0.2.177 avec la NIC de DMZ 1 plutôt qu'avec eth0 du firewall.
Règles
Avec les politiques par défaut, vos systèmes locaux (Local 1-3)
peuvent accéder à tous les serveurs sur Internet et la DMZ ne peut
accéder à aucun autre hôte (incluant le firewall). Avec les exceptions
des règles règles NAT qui entraînent la translation d'adresses et permet
aux requêtes de connexion translatées de passer à travers le firewall,
la façon d'autoriser des requêtes à travers le firewall est d'utiliser
des règles ACCEPT.
Puisque les colonnes SOURCE PORT et ORIG. DEST. ne sont pas
utilisées dans cette section, elle ne sont pas affichées.
Vous souhaiter certainement autoriser ping entre vos zones:
#ACTION SOURCE DEST PROTO DEST
# PORT(S)
ACCEPT net dmz icmp echo-request
ACCEPT net loc icmp echo-request
ACCEPT dmz loc icmp echo-request
ACCEPT loc dmz icmp echo-request
En supposant que vous avez des serveurs mail et pop3 actifs sur
DMZ 2 et un serveur Web sur DMZ 1. Les règles dont vous avez besoin
sont:
#ACTION SOURCE DEST PROTO DEST COMMENTS
# PORT(S)
ACCEPT net dmz:192.0.2.178 tcp smtp #Mail from
#Internet
ACCEPT net dmz:192.0.2.178 tcp pop3 #Pop3 from
#Internet
ACCEPT loc dmz:192.0.2.178 tcp smtp #Mail from local
#Network
ACCEPT loc dmz:192.0.2.178 tcp pop3 #Pop3 from local
#Network
ACCEPT fw dmz:192.0.2.178 tcp smtp #Mail from the
#Firewall
ACCEPT dmz:192.0.2.178 net tcp smtp #Mail to the
#Internet
ACCEPT net dmz:192.0.2.177 tcp http #WWW from
#Internet
ACCEPT net dmz:192.0.2.177 tcp https #Secure WWW
#from Internet
ACCEPT loc dmz:192.0.2.177 tcp https #Secure WWW
#from local
#Network
Si vous utilisez un serveur DNS publique sur 192.0.2.177, vous
devez ajouter les règles suivantes:
#ACTION SOURCE DEST PROTO DEST COMMENTS
# PORT(S)
ACCEPT net dmz:192.0.2.177 udp domain #UDP DNS from
#Internet
ACCEPT net dmz:192.0.2.177 tcp domain #TCP DNS from
#Internet
ACCEPT loc dmz:192.0.2.177 udp domain #UDP DNS from
#Local Network
ACCEPT loc dmz:192.0.2.177 tcp domain #TCP DNS from
#Local Network
ACCEPT fw dmz:192.0.2.177 udp domain #UDP DNS from
#the Firewall
ACCEPT fw dmz:192.0.2.177 tcp domain #TCP DNS from
#the Firewall
ACCEPT dmz:192.0.2.177 net udp domain #UDP DNS to
#the Internet
ACCEPT dmz:192.0.2.177 net tcp domain #TCPP DNS to
#the Internet
Vous souhaitez probablement communiquer entre votre firewall et
les systèmes DMZ depuis le réseau local -- Je recommande SSH qui, grâce
à son utilitaire scp peut aussi faire de la diffusion et de la mise à
jour de logiciels.
#ACTION SOURCE DEST PROTO DEST COMMENTS
# PORT(S)
ACCEPT loc dmz tcp ssh #SSH to the DMZ
ACCEPT net fw tcp ssh #SSH to the
#Firewall
D'autres petites choses
La discussion précédente reflète ma préférence personnelle pour
l'utilisation de Proxy ARP associé à mes serveurs de la DMZ et SNAT/NAT
pour mes systèmes locaux. Je préfère utiliser NAT seulement dans le cas
ou un système qui fait partie d'un sous-réseau RFC 1918 à besoin d'avoir
sa propre adresse IP.
Si vous ne l'avez pas fait, ce peut-être une bonne idée de
parcourir le fichier /etc/shorewall/shorewall.conf
afin de voir si autre chose pourrait être intéressant. Vous pouvez aussi
regarder aux autres fichiers de configuration que vous n'avez pas touché
pour un aperçu des autres possibilités de Shorewall.
Dans le cas ou vous n'auriez pas validé les étapes, ci-dessous se
trouve un jeu final des fichiers de configuration pour notre réseau
exemple. Uniquement ceux modifiés de la configuration originale sont
montrés.
/etc/shorewall/interfaces (Les "options"
seront spécifiques aux sites).
#ZONE INTERFACE BROADCAST OPTIONS
net eth0 detect rfc1918,routefilter
loc eth1 detect
dmz eth2 detect
La configuration décrite nécessite que votre réseau soit démarré
avant que Shorewall puisse se lancer. Cela ouvre un lapse de temps
durant lequel vous n'avez pas de protection firewall.
Si vous remplacez detect
par les valeurs des
adresses broadcoast dans les entrées suivantes, vous pouvez activer
Shorewall avant les interfaces réseau.
#ZONE INTERFACE BROADCAST OPTIONS
net eth0 192.0.2.255 rfc1918
loc eth1 192.168.201.7
dmz eth2 192.168.202.7
/etc/shorewall/masq - Sous-réseau
Local
#INTERFACE SUBNET ADDRESS
eth0 192.168.201.0/29 192.0.2.176
/etc/shorewall/proxyarp - DMZ
#ADDRESS EXTERNAL INTERFACE HAVE ROUTE
192.0.2.177 eth2 eth0 No
192.0.2.178 eth2 eth0 No
/etc/shorewall/nat- Le système de ma
fille
#EXTERNAL INTERFACE INTERNAL ALL INTERFACES LOCAL
192.0.2.179 eth0 192.168.201.4 No No
/etc/shorewall/rules
#ACTION SOURCE DEST PROTO DEST COMMENTS
# PORT(S)
ACCEPT net dmz icmp echo-request
ACCEPT net loc icmp echo-request
ACCEPT dmz loc icmp echo-request
ACCEPT loc dmz icmp echo-request
ACCEPT net loc:192.168.201.4 tcp www #Daughter's
#Server
ACCEPT net dmz:192.0.2.178 tcp smtp #Mail from
#Internet
ACCEPT net dmz:192.0.2.178 tcp pop3 #Pop3 from
#Internet
ACCEPT loc dmz:192.0.2.178 tcp smtp #Mail from local
#Network
ACCEPT loc dmz:192.0.2.178 tcp pop3 #Pop3 from local
#Network
ACCEPT fw dmz:192.0.2.178 tcp smtp #Mail from the
#Firewall
ACCEPT dmz:192.0.2.178 net tcp smtp #Mail to the
#Internet
ACCEPT net dmz:192.0.2.177 tcp http #WWW from
#Internet
ACCEPT net dmz:192.0.2.177 tcp https #Secure WWW
#from Internet
ACCEPT loc dmz:192.0.2.177 tcp https #Secure WWW
#from local
#Network
ACCEPT net dmz:192.0.2.177 udp domain #UDP DNS from
#Internet
ACCEPT net dmz:192.0.2.177 tcp domain #TCP DNS from
#Internet
ACCEPT loc dmz:192.0.2.177 udp domain #UDP DNS from
#Local Network
ACCEPT loc dmz:192.0.2.177 tcp domain #TCP DNS from
#Local Network
ACCEPT fw dmz:192.0.2.177 udp domain #UDP DNS from
#the Firewall
ACCEPT fw dmz:192.0.2.177 tcp domain #TCP DNS from
#the Firewall
ACCEPT dmz:192.0.2.177 net udp domain #UDP DNS to
#the Internet
ACCEPT dmz:192.0.2.177 net tcp domain #TCPP DNS to
#the Internet
ACCEPT loc dmz tcp ssh #SSH to the DMZ
ACCEPT net fw tcp ssh #SSH to the
#Firewall
DNS
En donnant une collection d'adresses RFC 1918 et publiques dans la
configuration, cela justifie d'avoir des serveurs DNS interne et externe.
Vous pouvez combiner les deux dans un unique serveur BIND 9 utilisant les
vues (Views). Si vous n'êtes pas intéressé par les vues BIND 9, vous
pouvez allez à la section suivante.
Supposons que votre domaine est foobar.net et vous voulez que les
deux systèmes DMZ s'appellent www.foobar.net et mail.foobar.net, les trois
systèmes locaux "winken.foobar.net, blinken.foobar.net et nod.foobar.net.
Vous voulez que le firewall soit connu à l'extérieur sous le nom
firewall.foobar.net, son interface vers le réseau local gateway.foobar.net
et son interface vers la DMZ dmz.foobar.net. Mettons le serveur DNS sur
192.0.2.177 qui sera aussi connu sous le nom ns1.foobar.net.
Le fichier /etc/named.conf devrait ressembler à
cela:
options {
directory "/var/named";
listen-on { 127.0.0.1 ; 192.0.2.177; };
};
logging {
channel xfer-log {
file "/var/log/named/bind-xfer.log";
print-category yes;
print-severity yes;
print-time yes;
severity info;
};
category xfer-in { xfer-log; };
category xfer-out { xfer-log; };
category notify { xfer-log; };
};
#
# This is the view presented to our internal systems
#
view "internal" {
#
# These are the clients that see this view
#
match-clients { 192.168.201.0/29;
192.168.202.0/29;
127.0.0.0/8;
192.0.2.176/32;
192.0.2.178/32;
192.0.2.179/32;
192.0.2.180/32; };
#
# If this server can't complete the request, it should use
# outside servers to do so
#
recursion yes;
zone "." in {
type hint;
file "int/root.cache";
};
zone "foobar.net" in {
type master;
notify no;
allow-update { none; };
file "int/db.foobar";
};
zone "0.0.127.in-addr.arpa" in {
type master;
notify no;
allow-update { none; };
file "int/db.127.0.0";
};
zone "201.168.192.in-addr.arpa" in {
type master;
notify no;
allow-update { none; };
file "int/db.192.168.201";
};
zone "202.168.192.in-addr.arpa" in {
type master;
notify no;
allow-update { none; };
file "int/db.192.168.202";
};
zone "176.2.0.192.in-addr.arpa" in {
type master;
notify no;
allow-update { none; };
file "db.192.0.2.176";
};
zone "177.2.0.192.in-addr.arpa" in {
type master;
notify no;
allow-update { none; };
file "db.192.0.2.177";
};
zone "178.2.0.192.in-addr.arpa" in {
type master;
notify no;
allow-update { none; };
file "db.192.0.2.178";
};
zone "179.2.0.192.in-addr.arpa" in {
type master;
notify no;
allow-update { none; };
file "db.206.124.146.179";
};
};
#
# This is the view that we present to the outside world
#
view "external" {
match-clients { any; };
#
# If we can't answer the query, we tell the client so
#
recursion no;
zone "foobar.net" in {
type master;
notify yes;
allow-update {none; };
allow-transfer { <secondary NS IP>; };
file "ext/db.foobar";
};
zone "176.2.0.192.in-addr.arpa" in {
type master;
notify yes;
allow-update { none; };
allow-transfer { <secondary NS IP>; };
file "db.192.0.2.176";
};
zone "177.2.0.192.in-addr.arpa" in {
type master;
notify yes;
allow-update { none; };
allow-transfer { <secondary NS IP>; };
file "db.192.0.2.177";
};
zone "178.2.0.192.in-addr.arpa" in {
type master;
notify yes;
allow-update { none; };
allow-transfer { <secondary NS IP>; };
file "db.192.0.2.178";
};
zone "179.2.0.192.in-addr.arpa" in {
type master;
notify yes;
allow-update { none; };
allow-transfer { <secondary NS IP>; };
file "db.192.0.2.179";
};
};
Voici les fichiers de /var/named (ceux qui ne sont pas présents
font partis de votre distribution BIND).
db.192.0.2.176 - Zone inverse de l'interface
externe du firewall
; ############################################################
; Start of Authority (Inverse Address Arpa) for 192.0.2.176/32
; Filename: db.192.0.2.176
; ############################################################
@ 604800 IN SOA ns1.foobar.net. netadmin.foobar.net. (
2001102303 ; serial
10800 ; refresh (3 hour)
3600 ; retry (1 hour)
604800 ; expire (7 days)
86400 ) ; minimum (1 day)
;
; ############################################################
; Specify Name Servers for all Reverse Lookups (IN-ADDR.ARPA)
; ############################################################
@ 604800 IN NS ns1.foobar.net.
@ 604800 IN NS <name of secondary ns>.
;
; ############################################################
; Iverse Address Arpa Records (PTR's)
; ############################################################
176.2.0.192.in-addr.arpa. 86400 IN PTR firewall.foobar.net.
db.192.0.2.177 - Zone inverse pour le serveur
www/DNS server
; ############################################################
; Start of Authority (Inverse Address Arpa) for 192.0.2.177/32
; Filename: db.192.0.2.177
; ############################################################
@ 604800 IN SOA ns1.foobar.net. netadmin.foobar.net. (
2001102303 ; serial
10800 ; refresh (3 hour)
3600 ; retry (1 hour)
604800 ; expire (7 days)
86400 ) ; minimum (1 day)
;
; ############################################################
; Specify Name Servers for all Reverse Lookups (IN-ADDR.ARPA)
; ############################################################
@ 604800 IN NS ns1.foobar.net.
@ 604800 IN NS <name of secondary ns>.
;
; ############################################################
; Iverse Address Arpa Records (PTR's)
; ############################################################
177.2.0.192.in-addr.arpa. 86400 IN PTR www.foobar.net.
db.192.0.2.178 - Zone inverse du serveur
mail
; ############################################################
; Start of Authority (Inverse Address Arpa) for 192.0.2.178/32
; Filename: db.192.0.2.178
; ############################################################
@ 604800 IN SOA ns1.foobar.net. netadmin.foobar.net. (
2001102303 ; serial
10800 ; refresh (3 hour)
3600 ; retry (1 hour)
604800 ; expire (7 days)
86400 ) ; minimum (1 day)
;
; ############################################################
; Specify Name Servers for all Reverse Lookups (IN-ADDR.ARPA)
; ############################################################
@ 604800 IN NS ns1.foobar.net.
@ 604800 IN NS <name of secondary ns>.
;
; ############################################################
; Iverse Address Arpa Records (PTR's)
; ############################################################
178.2.0.192.in-addr.arpa. 86400 IN PTR mail.foobar.net.
db.192.0.2.179 - Zone inverse du serveur web
publique de votre fille
; ############################################################
; Start of Authority (Inverse Address Arpa) for 192.0.2.179/32
; Filename: db.192.0.2.179
; ############################################################
@ 604800 IN SOA ns1.foobar.net. netadmin.foobar.net. (
2001102303 ; serial
10800 ; refresh (3 hour)
3600 ; retry (1 hour)
604800 ; expire (7 days)
86400 ) ; minimum (1 day)
;
; ############################################################
; Specify Name Servers for all Reverse Lookups (IN-ADDR.ARPA)
; ############################################################
@ 604800 IN NS ns1.foobar.net.
@ 604800 IN NS <name of secondary ns>.
;
; ############################################################
; Iverse Address Arpa Records (PTR's)
; ############################################################
179.2.0.192.in-addr.arpa. 86400 IN PTR nod.foobar.net.
int/db.127.0.0 - Zone inverse pour
localhost
; ############################################################
; Start of Authority (Inverse Address Arpa) for 127.0.0.0/8
; Filename: db.127.0.0
; ############################################################
@ 604800 IN SOA ns1.foobar.net. netadmin.foobar.net. (
2001092901 ; serial
10800 ; refresh (3 hour)
3600 ; retry (1 hour)
604800 ; expire (7 days)
86400 ) ; minimum (1 day)
; ############################################################
; Specify Name Servers for all Reverse Lookups (IN-ADDR.ARPA)
; ############################################################
@ 604800 IN NS ns1.foobar.net.
; ############################################################
; Iverse Address Arpa Records (PTR's)
; ############################################################
1 86400 IN PTR localhost.foobar.net.
int/db.192.168.201 - Zone inverse pour le
réseau local. cela n'est montré qu'aux clients internes
; ############################################################
; Start of Authority (Inverse Address Arpa) for 192.168.201.0/29
; Filename: db.192.168.201
; ############################################################
@ 604800 IN SOA ns1.foobar.net netadmin.foobar.net. (
2002032501 ; serial
10800 ; refresh (3 hour)
3600 ; retry (1 hour)
604800 ; expire (7 days)
86400 ) ; minimum (1 day)
; ############################################################
; Specify Name Servers for all Reverse Lookups (IN-ADDR.ARPA)
; ############################################################
@ 604800 IN NS ns1.foobar.net.
; ############################################################
; Iverse Address Arpa Records (PTR's)
; ############################################################
1 86400 IN PTR gateway.foobar.net.
2 86400 IN PTR winken.foobar.net.
3 86400 IN PTR blinken.foobar.net.
4 86400 IN PTR nod.foobar.net.
int/db.192.168.202 - Zone inverse de
l'interface DMZ du firewall
; ############################################################
; Start of Authority (Inverse Address Arpa) for 192.168.202.0/29
; Filename: db.192.168.202
; ############################################################
@ 604800 IN SOA ns1.foobar.net netadmin.foobar.net. (
2002032501 ; serial
10800 ; refresh (3 hour)
3600 ; retry (1 hour)
604800 ; expire (7 days)
86400 ) ; minimum (1 day)
; ############################################################
; Specify Name Servers for all Reverse Lookups (IN-ADDR.ARPA)
; ############################################################
@ 604800 IN NS ns1.foobar.net.
; ############################################################
; Iverse Address Arpa Records (PTR's)
; ############################################################
1 86400 IN PTR dmz.foobar.net.
int/db.foobar - Forward zone pour l'utilisation
des clients internes.
;##############################################################
; Start of Authority for foobar.net.
; Filename: db.foobar
;##############################################################
@ 604800 IN SOA ns1.foobar.net. netadmin.foobar.net. (
2002071501 ; serial
10800 ; refresh (3 hour)
3600 ; retry (1 hour)
604800 ; expire (7 days)
86400 ); minimum (1 day)
;############################################################
; foobar.net Nameserver Records (NS)
;############################################################
@ 604800 IN NS ns1.foobar.net.
;############################################################
; Foobar.net Office Records (ADDRESS)
;############################################################
localhost 86400 IN A 127.0.0.1
firewall 86400 IN A 192.0.2.176
www 86400 IN A 192.0.2.177
ns1 86400 IN A 192.0.2.177
www 86400 IN A 192.0.2.177
gateway 86400 IN A 192.168.201.1
winken 86400 IN A 192.168.201.2
blinken 86400 IN A 192.168.201.3
nod 86400 IN A 192.168.201.4
ext/db.foobar - Forward zone pour les clients
externes
;##############################################################
; Start of Authority for foobar.net.
; Filename: db.foobar
;##############################################################
@ 86400 IN SOA ns1.foobar.net. netadmin.foobar.net. (
2002052901 ; serial
10800 ; refresh (3 hour)
3600 ; retry (1 hour)
604800 ; expire (7 days)
86400 ); minimum (1 day)
;############################################################
; Foobar.net Nameserver Records (NS)
;############################################################
@ 86400 IN NS ns1.foobar.net.
@ 86400 IN NS <secondary NS>.
;############################################################
; Foobar.net Foobar Wa Office Records (ADDRESS)
;############################################################
localhost 86400 IN A 127.0.0.1
;
; The firewall itself
;
firewall 86400 IN A 192.0.2.176
;
; The DMZ
;
ns1 86400 IN A 192.0.2.177
www 86400 IN A 192.0.2.177
mail 86400 IN A 192.0.2.178
;
; The Local Network
;
nod 86400 IN A 192.0.2.179
;############################################################
; Current Aliases for foobar.net (CNAME)
;############################################################
;############################################################
; foobar.net MX Records (MAIL EXCHANGER)
;############################################################
foobar.net. 86400 IN A 192.0.2.177
86400 IN MX 0 mail.foobar.net.
86400 IN MX 1 <backup MX>.
Quelques Points à Garder en Mémoire
Vous ne pouvez tester votre firewall de
l'intérieur de votre réseau. Car les requêtes que vous
envoyez à votre adresse IP ne veux pas dire qu'elles seront associées
à votre interface externe ou la zone net
. Tout trafic
généré par le réseau local sera traité par loc->fw.
Les adresses IP sont des propriétés des
systèmes, pas des interfaces. C'est une erreur de croire
que votre firewall est capable de renvoyer des paquets simplement
parce que vous pouvez faire un ping sur l'adresse IP de toutes les
interfaces du firewall depuis le réseau local. La seul conclusion est
de conclure que le lien entre le réseau local et le firewall est
établi et que vous avez probablement la bonne adresse de la passerelle
sur votre système.
Toutes les adresses IP configurées sur le
firewall sont dans la zone $FW (fw). Si 192.168.1.254 est
l'adresse IP de votre interface interne, alors vous pouvez écrire
$FW:192.168.1.254
dans
une régle mais vous ne devez pas écrire loc:192.168.1.254
. C'est aussi un
non-sens d'ajouter 192.168.1.254 à la zone loc en utilisant une entrée dans
/etc/shorewall/hosts.
Les paquets de retour (Reply) ne suivent
PAS automatiquement le chemin inverse de la requête
d'origine. Tous les paquets sont routés en se référant à la
table de routage respective de chaque hôte à chaque étape du trajet.
C'est commun chez ceux qui installent le firewall Shorewall en
parallèle à une passerelle existante et essayent d'utiliser DNAT dans
Shorewall sans changer la passerelle par défaut sur les systèmes
recevant le retour des requêtes. Les requêtes dont, à travers le
firewall Shorewall, l'adresse de destination IP est réécrite mais la
réponse va directement vers l'ancienne passerelle.
Shorewall lui-même n'a aucune notion du
dedans et du dehors. Ces concepts dépendent de la façon
dont Shorewall est configuré.
Démarrer et Arrêter Votre Firewall
La procédure d'installation
configure votre système pour lancer Shorewall au boot du système, mais au
début avec la version 1.3.9 de Shorewall le lancement est désactivé,
n'essayer pas de lancer Shorewall avec que la configuration soit finie.
Une fois que vous en aurez fini avec la configuration du firewall, vous
pouvez permettre le lancement de Shorewall en supprimant le fichier
/etc/shorewall/startup_disabled.
Les utilisateurs des paquets .deb doivent éditer /etc/default/shorewall
and set startup=1.
Le firewall est activé en utilisant la commande
shorewall start
et arrêté avec
shorewall stop
. Lorsque le firewall est
stoppé, le routage est autorisé sur les hôtes qui possèdent une entrée
dans /etc/shorewall/routestopped. Un
firewall qui tourne peut être relancé en utilisant la commande
shorewall restart
command. Si vous
voulez enlever toutes traces de Shorewall sur votre configuration de
Netfilter, utilisez shorewall
clear
.
Les exemples supposent que vous voulez permettre le routage depuis
ou vers eth1 (le réseau local) et
eth2 (DMZ) lorsque Shorewall est
stoppé. Si ces deux interfaces ne sont pas connectées à votre réseau local
et votre DMZ, ou si vous voulez permettre un ensemble d'hôtes différents,
modifiez /etc/shorewall/routestopped en
conséquence.
Si vous êtes connecté à votre firewall depuis Internet,
n'essayez pas une commande shorewall
stop
tant que vous n'avez pas ajouté une entrée pour
votre adresse IP (celle à partir de laquelle vous
êtes connectée) dans /etc/shorewall/routestopped.
De la même manière, je ne vous recommande pas d'utiliser
shorewall restart
; il est plus
intéressant de créer une configuration
alternative et de la tester en utilisant la commande
shorewall try
.