
Pas mal de personnes ont peur d'iptables et je les comprends. Il existe un moyen simple et rapide de générer vos autorisations de traffic sans toucher aux iptables avec le logiciel Shorewall.
Shorewall génère les règles iptables à votre place, il vous faut juste lui d’écrire les autorisations.
Nous avons:
Serveur asterisk eth0 adresse 192.168.0.1 masque 255.255.255.0
Postes téléphoniques en local 192.168.0.0/24
Postes télétravail: 83.167.123.58
Un second bureau distant avec vpn openvpn entre deux sites 192.168.1.0/24 interface tun0
Nos besoins:
1: Protéger serveur asterisk de l’extérieur
2: Permettre le reste
Première étape, télécharger le paquet Shorewall il faut juste choisir la bonne version, depuis la version 4.4 il y a 3 éditions de logiciel, version lite, standard et avec support de ipv6
Nous allons prendre une normale rpm puisque j'ai une centos.
cd /usr/src
wget http://slovakia.shorewall.net/pub/sh...3-1.noarch.rpm
rpm -ivh shorewall-4.4.13-1.noarch.rpm
wget http://slovakia.shorewall.net/pub/sh...3-1.noarch.rpm
rpm -ivh shorewall-4.4.13-1.noarch.rpm
cd /etc/shorewall
ls
accounting clear hosts interfaces maclist nat params proxyarp restored rules started tcclasses tcfilters tcrules zones
actions ecn init isusable Makefile netmap policy refresh route_rules shorewall.conf stop tcclear tcinterfaces tos
blacklist findgw initdone lib.private masq notrack providers refreshed routestopped start stopped tcdevices tcpri tunnels
ls
accounting clear hosts interfaces maclist nat params proxyarp restored rules started tcclasses tcfilters tcrules zones
actions ecn init isusable Makefile netmap policy refresh route_rules shorewall.conf stop tcclear tcinterfaces tos
blacklist findgw initdone lib.private masq notrack providers refreshed routestopped start stopped tcdevices tcpri tunnels
interfaces
Il faut commencer par les interfaces, c'est ici que nous allons signaler nos interfaces.
Zone internet c'est eth0 zone vpn c'est tun0 il est possible de spécifier masque mais pas obligatoire, les options tcpflags,routeback sont pour vérifier les paquets tcp, et permettre le routage entre les interfaces.
cat interfaces:
################################################## ###########################
#ZONE INTERFACE BROADCAST OPTIONS
internet eth0 - tcpflags,routeback
vpn tun0 - tcpflags,routeback
################################################## ###########################
#ZONE INTERFACE BROADCAST OPTIONS
internet eth0 - tcpflags,routeback
vpn tun0 - tcpflags,routeback
Les zones sont déclares en ipv4. Par rapport au dernier fichier nous avons une ligne supplémentaire par défaut "fw firewall" c'est la zone de pare-feu, en fait la machine elle même.
cat zones
################################################## ##########################
#ZONE TYPE OPTIONS IN OUT
# OPTIONS OPTIONS
fw firewall
internet ipv4
vpn ipv4
################################################## ##########################
#ZONE TYPE OPTIONS IN OUT
# OPTIONS OPTIONS
fw firewall
internet ipv4
vpn ipv4
policy Le fichier policy est la pour définir de manière générale le comportement de pare feu. Nous allons permettre le traffic sortant, et interdire entrant, l'ordre est "DE VERS" je vais coller deux exemples, détaillé et abrégé.
Détaillé
cat policy
################################################## #############################
#SOURCE DEST POLICY LOG LIMIT: CONNLIMIT:
# LEVEL BURST MASK
internet $FW DROP info
internet vpn DROP info
$FW loc ACCEPT info
$FW vpn ACCEPT info
vpn $FW ACCEPT info
vpn loc ACCEPT info
################################################## #############################
#SOURCE DEST POLICY LOG LIMIT: CONNLIMIT:
# LEVEL BURST MASK
internet $FW DROP info
internet vpn DROP info
$FW loc ACCEPT info
$FW vpn ACCEPT info
vpn $FW ACCEPT info
vpn loc ACCEPT info
Abrégé, la différence est simple , le mot clé "all" autorise ou interdit le traffic vers l'ensemble de zones.
cat policy
################################################## #############################
#SOURCE DEST POLICY LOG LIMIT: CONNLIMIT:
# LEVEL BURST MASK
internet all DROP info
$FW all ACCEPT info
vpn all ACCEPT info
################################################## #############################
#SOURCE DEST POLICY LOG LIMIT: CONNLIMIT:
# LEVEL BURST MASK
internet all DROP info
$FW all ACCEPT info
vpn all ACCEPT info
Si on interdit tout en entrée comment autoriser les ports spécifiques ? Pour cette tache nous avons une fichier rules si Shorewall ne trouve aucune règle dans le fichier rules il applique policy
rules C'est la ou Shorewall montre ça puissance, étape par étape:
cat rules
#ACTION SOURCE DEST PROTO DEST SOURCE ORIGINAL RATE USER/ MARK CONNLIMIT TIME
# PORT PORT(S) DEST LIMIT GROUP
#SECTION ESTABLISHED
#SECTION RELATED
SECTION NEW
ACCEPT internet:192.168.0.0/24,83.167.123.58 $FW tcp -
ACCEPT internet:192.168.0.0/24,83.167.123.58 $FW udp -
#Le traffic depuis réseau local et postes télétravail est autorise sans limites ni restriction de ports en tcp et udp
ACCEPT internet:181.13.18.69 $FW tcp 22
#Le traffic sur le port 22 ssh est autorise depuis 181.13.18.69
Ping/ACCEPT internet:192.168.0.0/24 $FW
#Autoriser le ping depuis local, encore quelque exemples.
ACCEPT internet:181.13.18.69 $FW udp 10000:20000
ACCEPT internet:181.13.18.69 $FW udp 5060
#Autoriser les ports 10000-20000 en udp depuis 181.13.18.69
#ACTION SOURCE DEST PROTO DEST SOURCE ORIGINAL RATE USER/ MARK CONNLIMIT TIME
# PORT PORT(S) DEST LIMIT GROUP
#SECTION ESTABLISHED
#SECTION RELATED
SECTION NEW
ACCEPT internet:192.168.0.0/24,83.167.123.58 $FW tcp -
ACCEPT internet:192.168.0.0/24,83.167.123.58 $FW udp -
#Le traffic depuis réseau local et postes télétravail est autorise sans limites ni restriction de ports en tcp et udp
ACCEPT internet:181.13.18.69 $FW tcp 22
#Le traffic sur le port 22 ssh est autorise depuis 181.13.18.69
Ping/ACCEPT internet:192.168.0.0/24 $FW
#Autoriser le ping depuis local, encore quelque exemples.
ACCEPT internet:181.13.18.69 $FW udp 10000:20000
ACCEPT internet:181.13.18.69 $FW udp 5060
#Autoriser les ports 10000-20000 en udp depuis 181.13.18.69
La dernière étape pour démarrer shorewall il faut éditer shorewall.conf, et mettre la valeur STARTUP_ENABLED=Yes
Attention la commande "shorewall stop" arrête le routage et networking, à utiliser seulement dans le cas de suspicion d'intrusion
Si vous avez un service qui ne passe pas, c'est la ou les logs sont utiles, ils sont la pour permettre rapidement de trouver ou ça bloque, l'avantage majeur c'est que ils sont très lisible sans chercher.
Exemples
Sep 28 09:57:13 trixbox kernel: Shorewall:internet2fw:DROP:IN=eth0 OUT= MAC=00:30:18:ab:b0:c8:00:07:cb:0c:a0:65:08:00 SRC=74.115.97.9 DST=192.168.0.1 LEN=31 TOS=0x00 PREC=0x00 TTL=51 ID=46553 DF PROTO=UDP SPT=44489 DPT=5060 LEN=11
Sep 28 14:27:04 trixbox kernel: Shorewall:vpn2fw:ACCEPT:IN=tun0 OUT= MAC= SRC=10.37.252.169 DST=1.0.182.170 LEN=60 TOS=0x00 PREC=0x00 TTL=62 ID=30322 DF PROTO=TCP SPT=51769 DPT=443 WINDOW=5840 RES=0x00 SYN URGP=0
tail -f /var/log/messages | grep Shorewall
tail -f /var/log/messages | grep DROP
Astuces:
Pour démarrer shorewall c'est "shorewall start" pour virer les règles de shorewall c'est "shorewall clear"
La procédure de l’arrêt d'urgence c'est shorewall stop, à utiliser seulement dans le cas de contamination, shorewall arrête l'ensemble de traffic sauf depuis IP de confiance qui se trouve dans le fichier routestopped.
routestopped
#INTERFACE HOST(S) OPTIONS PROTO DEST SOURCE
############################################PORT(S ) PORT(S)
eth0 83.167.121.12 tcp 22
############################################PORT(S ) PORT(S)
eth0 83.167.121.12 tcp 22
Reaper