Shorewall

Shorewall Logo

Shorewall est une solution que j’ai découvert chez TIS. Je trouve que c’est une solution sans fioriture, ça a l’avantage d’être extrement light.

De plus la conf est entièrement sur fichier plat, très pratique pour une sauvegarde.

Nous on install ceci sur des APU AMD ou du des SG-2440, bref au niveau matériel, vous pouvez vous inspirer du matos vendu sur le site de pfsense: https://www.pfsense.org/products/

Le boitier peut donc avoir plusieurs rôles: parfeu, vpn et pourquoi pas dhcp…

A savoir que pour votre partie lan, vous pouvez directement connectée votre adsl sur le boitier si vous avez un modem. Du coup l’adresse ip publique sera directement sur le boitier… le modem lui s’occupera de la synchro (pour l’adsl)

Mise en place classique wan/lan/dmz

Dans notre cas nous allons prendre une livebox pour le WAN:

|---------------------------------------------------------------|
|                                                               |
|                                                               |
|         INTERNET --> LIVEBOX --> FWALL --> LAN                |
|                                    |                          |
|                                    |                          |
|                                    v                          |
|                                   DMZ                         |
|                                                               |
|                                                               |
|---------------------------------------------------------------|

Sur la livebox le fwall doit être déclarée en DMZ

A noter que sur la partie WAN on peut être en dhcp. En effet cela est intéressant lors de remplacement de box orange.

Configuration réseau

Configurer votre fichier interface /etc/network/interfaces :

# WAN
auto eth0
iface eth0 inet dhcp

# LAN LOC
auto eth1
iface eth1 inet static
address 172.19.0.254
netmask 255.255.0.0

#DMZ
auto eth2
iface eth2 inet static
address 172.31.0.254
netmask 255.255.0.0

Installation Shorewall

On va maintenant installer shorewall:

apt-get update
apt-get install shorewall

Configuration Shorewall

On va avant toute chose renseigner quelques variables dans le fichiers /etc/shorewall/params:

WAN_IF="eth0"
LOC_IF="eth1"
DMZ_IF="eth2"

LOC="172.19.0.0/16"
DMZ="172.31.0.0/16"

Ensuite nous allons déclarer les zones dans le fichiers /etc/shorewall/zones

fw      firewall
net     ipv4
loc     ipv4
dmz     ipv4

Nous allons ensuite déclarer nos différentes interface et leur zone associée dans /etc/shorewall/interfaces :

net     $WAN_IF       detect          dhcp,tcpflags,nosmurfs,logmartians
dmz     $DMZ_IF       detect          routeback
loc     $LOC_IF       detect          routeback

On va maintenant activer forward de paquet:

On bascule dans le fichier /etc/shorewall/shorewall.conf

IP_FORWARDING=Yes

Puis on va définir le masq: (on indique que si loc essaie de sortir par l’interface wan, son adresse ip source sera remplacée)

Dans le fichier : /etc/shorewall/masq

$WAN_IF     $LOC

Puis on définis dans le fichier /etc/shorewall/policy les règles par défaut entre les différente zones (on est très restrictif par défaut):

#SOURCE         DEST            POLICY          LOG LEVEL       LIMIT:BURST

fw              all             ACCEPT
loc             fw              ACCEPT
all             all             REJECT          debug

Puis dans le fichier /etc/shorewall/rules on peu définir des choses plus précise.

Le fichiers rules prend le dessus sur le fichier policy

ACCEPT  all       fw    icmp

Indication

Dans ce cas on Autorise tout le monde a effectuer un ping en direction du fwall

Attention

Pour le fichier rules la bonne méthode a appliquer c’est le stocker en variable les différentes chose dont on a besoin dans le fichiers /etc/shorewall/params :

PCTEST="172.19.0.1"
SRVPROXY="172.30.1.8"
SRVADS="172.30.1.1"
SRVWEB="172.31.0.10"
NET_PEDAGO="172.28.0.0/16"
NET_SRV="172.30.0.0/16"
NET_DMZ="172.31.0.10"
SRVMICROSOFT="3.6.53.5"

Et on peu ensuite les utiliser directement dans le fichiers /etc/shorewall/rules:

ACCEPT  loc:$PCTEST        net                  all
ACCEPT  loc                all                  icmp
ACCEPT  loc                net                  icmp
ACCEPT  loc:$SRVPROXY      net                  tcp    80,443
ACCEPT  dmz                loc:$SRVADS          udp    53
ACCEPT  loc:$SRVADS        net                  udp    53
DNAT    net                dmz:$SRVWEB:443      tcp    443
DNAT    net                dmz:$SRVWEB:80       tcp    80
ACCEPT  loc                net:$SRVMICROSOFT    tcp

Pour vérifier la configuration :

shorewall check

Si pas de soucis on peu appliquer la conf:

shorewall restart

Pour appliquer la conf mais où shorewall demande une vérif a la fin :

C’est comme un restart sauf qu’a la fin, shorewall demande d’appuyer sur yes pour vérifier si vous êtes toujours là.

En cas de non réponse shorewall ré-appliquera la conf précédente.

shorewall safe-restart

Attention

Lors d’un redémarrage, les connexions déjà établie ne sont pas ré-initialiser (notament la connexion ssh) vous devez donc tester si la connexion fonctionne toujours avec un deuxième terminal.

Indication

Pour couper toutes les connexions vous devez vider la conntrack. La commande conntrack -F permet cela. Si conntrack n’est pas installer vous pouvez l’installer avec la commande apt-get install conntrack

Activation au démarrage

Dans le fichier /etc/default/shorewall

Indiquer :

startup=1

Lancer également :

systemctl enable shorewall

Test

Dans la conf précédente nous avons autoriser PCTEST avec l’ip en « 172.19.0.1 » a a sortir directement sur internet

Vous pouvez donc tester avec un pc pour vérifier que tout fonctionne.

Note

Le pc doit avoir la conf

ip      : 172.19.0.1
mask    : 255.255.0.0
gateway : 172.19.0.254
dns     : 8.8.8.8

Utilisation avec un coeur de réseau

Comment ajouter les routes pour un fonctionnement avec un coeur de réseau :

|---------------------------------------------------------------|
|                                                               |
|                                                               |
|                                                               |
|         INTERNET --> LIVEBOX --> FWALL --> COEUR --> NET_SRV  |
|                                    |         |                |
|                                    |         |                |
|                                    v         |                |
|                                   DMZ        v                |
|                                             NET_PEDAGO        |
|                                                               |
|---------------------------------------------------------------|

Pour ajouter les routes retour sur mon fwall rdv dans /etc/network/interface:

up route add -net 172.28.0.0/16 gw 172.19.0.253 dev eth1
up route add -net 172.30.0.0/16 gw 172.19.0.253 dev eth1

Note

Ici notre coeur de réseau est en 172.19.0.253

Ajouter les sous réseaux dans le fichier /etc/shorewall/params

NET_PEDAGO="172.28.0.0/16"
NET_SRV="172.30.0.0/16"

Et également n’oubliez pas d’ajouter le masquerading dans /etc/shorewall/masq pour qu’il puisse sortir sur internet

$WAN_IF     $NET_PEDAGO
$WAN_IF     $NET_SRV

Et bien évidement ajouter les routes dans le cœur de réseau, si c’est le seul coeur de réseau ce sera donc la route 0.0.0.0/0 vers le fwall

Indication

Pour éviter les problèmes je vous conseille de laisser uniquement le fwall et le coeur dans leur propre sous réseau et de ne rien ajouter d’autre. Par exemple: 172.19.0.254 pour le fwall et 172.19.0.253 pour le coeur de réseau.

Utilisation de vlan

Peu on utiliser des vlan avec shorewall ? OUI

On va utiliser la méthode classique Linux pour utiliser des vlan, dans notre exemple on ajoute le vlan wifi sur le fwall.

|-----------------------------------------------------------------------------|
|                                WIFI(id 100)                                 |
|                                    |                                        |
|                                    |     untagged(lan)                      |
|         INTERNET --> LIVEBOX --> FWALL -----trunk------> COEUR --> NET_SRV  |
|                                    |     (tagged 100)       |               |
|                                    |                        |               |
|                                    v                        |               |
|                                   DMZ                       v               |
|                                                           NET_PEDAGO        |
|                                                                             |
|-----------------------------------------------------------------------------|

On a fait un vlan wifi sur le coeur de réseau:

Donc un vlan sur l’id 100:

On ajouter l’interface dans le fichier : /etc/network/interface

auto eth1.100
iface eth1.100 inet static
address 172.23.0.254
netmask 255.255.0.0

Puis on reprend la procédure précédente:

On déclare l’interface et le sous réseau dans le fichiers /etc/shorewall/params

WIFI_IF="eth1.100"
WIFI="172.27.0.0/16"

Puis on défini la nouvelle zone wifi (fichiers /etc/shorewall/zones ) :

wifi     ipv4

Puis on défini dans quelle zone va être l’interface (/etc/shorewall/interfaces ) :

wifi     $WIFI_IF       detect          routeback

Puis on définis le masq /etc/shorewall/masq :

$WAN_IF  $WIFI

Utilisation avec multi providers

Le mutli providers c’est quoi ?

Dans notre exemple c’est lorsque nous avons deux connexion wan.

En multi providers les interface votre fichier /etc/network/interfaces ne doivent pas avoir de gateway.

En effet c’est la conf shorewall qui va diriger les flux.

#WAN2
iface eth3 inet static
address 192.168.2.254
netmask 255.255.255.0

On ajoute ensuite l’interface dans /etc/shorewall/interfaces

net     $WAN2_IF       detect          optional,dhcp,tcpflags,nosmurfs,logmartians

Et dans le fichier /etc/network/params:

GW_WAN="192.168.1.254"
GW_WAN2="192.168.200.254"
WAN2_IF="eth3"

On va définir le masq pour la sortie WAN2:

$WAN2_IF    $LOC

Puis on va créer un fichier /etc/shorewall/providers:

#NAME   NUMBER  MARK    DUPLICATE       INTERFACE       GATEWAY         OPTIONS         COPY
WAN      1       1       -               $WAN_IF        $GW_WAN         track,balance=1   -
WAN2     2       2       -               $WAN2_IF       $GW_WAN2        track,balance=1   -

Puis on va créer un fichier /etc/shorewall/mangle:

MARK(1)     $LAN    $WAN
MARK(1)     $LAN    $WAN    tcp     smtp
MARK(2)     $LAN    $WAN    tcp     20,21
MARK(1)     $LAN    $WAN    tcp     http,https,8080,8888
MARK(2)     $LAN    $WAN    tcp     9418
MARK(2)     $LAN    $GITHUB tcp     ssh,https,git
MARK(2)     $SRVERP $WAN
MARK(1)     $PUB    $WAN

En gros on mark les flux pour indiquer par quelle tuyau le flux doit sortir. La dernière ligne qui parle a raison.

Indication

Il est possible de faire du load balancing mais je ne le conseille pas. Plus d’info ici : http://www.shorewall.org

Mode Standalone

On peut aussi utiliser shorewall pour un mode standalone

C’est presque la même configuration que « Mise en place classique wan/lan/dmz »

A la différence que vous avez n’avez que deux zones et une interface

Deux zones :

fw      firewall
net     ipv4

Et une seul interface :

net     $WAN_IF       detect          dhcp,tcpflags,nosmurfs,logmartians

Dans ce mode, inutile de configurer un masq ni d’activer l’IP_FORWARDING

la zone fw est votre serveur la zone net est l’exterieur.