Shorewall¶
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.