Publié le mardi 18 avril 2006, mis a jour le samedi 15 mars 2008, par Stephane MALINET
Cet article a pour but la configuration d’une passerelle avec deux interfaces réseaux : une sur un réseau local et l’autre externe (internet).
Le script servant a la gestion simplifiée d’iptables ne supporte que deux interfaces, inutile d’éssayer avec plus.
Dans un premier temps, il vous faudra modifier la configuration du noyau afin d’y activer les supports nécéssaires au bon fonctionement d’iptables.
Networking --->
[*] Networking support
Networking options --->
<*> Packet socket
[*] Packet socket: mmapped IO
[*] IP: multicasting
QoS and/or fair queueing --->
[*] QoS and/or fair queueing
<M> Hierarchical Token Bucket (HTB)
<M> Ingress Qdisc
[*] Network packet filtering framework (Netfilter) --->
Core Netfilter Configuration --->
<*> Netfilter netlink interface
<*> Netfilter NFQUEUE over NFNETLINK interface
<*> Netfilter LOG over NFNETLINK interface
<*> Netfilter connection tracking support Netfilter connection tracking support (Layer 3 Independent Connection tracking) --->
[*] Connection tracking flow accounting
[*] Connection mark tracking support
[*] Connection tracking events (EXPERIMENTAL)
<M> FTP protocol support
<M> IRC protocol support
<*> Connection tracking netlink interface (EXPERIMENTAL)
--- Netfilter Xtables support (required for ip_tables)
<M> Multiple port match support
<M> "state" match support
IP: Netfilter Configuration --->
<*> Connection tracking (required for masq/NAT)
[*] Connection tracking flow accounting
[*] Connection mark tracking support
<*> IPv4 connection tracking support (required for NAT)
[*] proc/sysctl compatibility with old connection tracking
<*> IP tables support (required for filtering/masq/NAT)
<M> IP range match support
<M> Owner match support
<M> address type match support
<*> Packet filtering
<M> REJECT target support
<M> LOG target support
<*> Full NAT
<M> MASQUERADE target support
<M> REDIRECT target support
<*> Packet mangling
Recompilez et installez ce noyau et redemarez le système.
Tout d’abord, installons le paquet net-firewall/iptables :
# emerge -av net-firewall/iptables
Je vous propose une gestion simplifiée d’iptables avec un fichier de configuration /etc/netfilter-rules.conf et un script netfilter-rules-2.
# wget http://babykart.free.fr/scripts/iptables/netfilter-rules.conf -P /etc/
# wget http://babykart.free.fr/scripts/iptables/netfilter-rules-2.1
# chmod +x netfilter-rules-2.1
Editez le fichier de configuration avec votre éditeur préféré :
# vi /etc/netfilter-rules.conf
### configuration generale
# on autorise tout sur ces interfaces
# (laissez toujours la boucle locale)
all="lo"
# on autorise le ping sur ces interfaces
ping="eth0 eth1"
# mais plus specifiquement par protocole, par interface et par port
interfaces_TCP="eth0+21+22+25+53+80+443+873+993+4080 eth1+22+25+873+993"
interfaces_UDP="eth0+53+68"
# a l'exception de tout ce qui vient de ces reseaux
#exceptions="192.168.0.0/24 \
# 192.168.1.0/24"
# log t'on les packets droppés ?
logdrop="false"
### configuration passerelle
gateway="true"
# interface externe
extif="eth1"
# interface interne
intif="eth0"
### dans le cas d'une passerelle: on veut que les requetes sur le port 80 soit forwardes sur
### une machine du réseau local
#iptables -t nat -A PREROUTING -p TCP --dport 80 -i $extif -j DNAT --to-destination 192.168.129.2:80
#iptables -A FORWARD -i $extif -o $intif -p TCP --dport 80 -j ACCEPT
# multiposte free.fr
#iptables -t nat -A PREROUTING -p UDP --dport 32000:34000 -j DNAT --to-destination 192.168.0.2
#iptables -A FORWARD -i $extif -o $intif -p UDP -s 212.27.38.253 --dport 32000:34000 -j ACCEPT
### Dr : exemples interdictions specifiques par IP source (a destination du port 25)
#iptables -A INPUT -p tcp --dport 25 -j LOGDROP -s x.x.x.x
#iptables -A INPUT -p tcp --dport 25 -j LOGDROP -s x.x.x.x/x
Ce dernier me parait suffisament bien renseigné pour ne rien avoir à y ajouter... ;) Une fois les modifications faites selon vos besoins, éxecutez le script :
# ./netfilter-rules-2.1
S’il n’y a aucun message, c’est que le script s’est bien déroulé.
Démarrez le firewall :
# /etc/init.d/iptables save
# /etc/init.d/iptables start
# rc-update add iptables default
Vérifiez que vos règles ont bien été appliquées :
# iptables -L -v
Après chaque modification dans le fichier /etc/netfilter-rules.conf, n’oubliez pas de relancer le script netfilter-rules-2.1...
Il ne reste plus qu’à s’assurer que le script se lance automatiquement au démarrage du système. Pour ce faire, éditez le fichier /etc/conf.d/local.start et mettez la ligne correspondante au chemin du script netfilter-rules-2.1, ex :
/usr/local/sbin/netfilter-rules-2.1
Dans le cas ou cette solution ne vous conviendrait pas, vous trouverez sur internet toutes les documentations sur la configuration d’iptables.
Cette partie est optionnelle.
Si comme moi vous aimez pouvoir vous connecter sur votre passerelle depuis n’importe où, vous laisserez probablement l’accés SSH ouvert. Dans ce cas, vous vous retrouverez vite avec des logs pleins de tentatives de connexion d’utilisateurs pour le moins farfelus... Alors, fail2ban va ajouter une chaine dans iptables afin de bloquer une adresse IP après 5 tentavives ratées et ce pendant 600 secondes. Bien sûr, ces valeurs sont paramétrables.
# echo "net-analyzer/fail2ban ~x86" >> /etc/portage/package.keywords
# emerge -av net-analyzer/fail2ban
Editez le fichier de configuration /etc/fail2ban.conf en modifiant le chemin de vos fichiers de logs :
[SSH]
enabled = true
logfile = /var/log/auth.log
[...]
Ajoutez le chemin de votre script au démarrage et à l’arret du service fail2ban :
[DEFAULT]
[...]
cmdstart = /usr/local/sbin/netfilter-rules-2.1
cmdend = /usr/local/sbin/netfilter-rules-2.1
[...]
Lancez le service :
# /etc/init.d/fail2ban start
# rc-update add fail2ban default
Je remercie en particulier Didier Rebeix pour le script de gestion simplifiée d’iptables fort pratique, et qui m’a permis de comprendre le fonctionement d’iptables...