gblend-1
Accueil du site > Trucs et Astuces > Configuration simplifiée iptables

Configuration simplifiée iptables

Publié le mardi 18 avril 2006, mis a jour le samedi 15 mars 2008, par Stephane MALINET


Introduction

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.

Configuration du noyau

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.

Iptables

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.

Option

Cette partie est optionnelle.

Fail2ban

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

Remerciements

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

liens

- Iptables

Répondre à cet article


Suivre la vie du site RSS 2.0 | Plan du site | Espace privé | SPIP | squelette