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 dimanche 21 septembre 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 script netfilter-rules :

Zip - 1007 octets
netfilter-rules

et un fichier de configuration /etc/netfilter-rules.conf :

Zip - 709 octets
netfilter-rules.conf
# unzip netfilter-rules.zip
# cp netfilter-rules /usr/local/sbin
# chmod +x /usr/local/sbin/netfilter-rules
# unzip netfilter-rules.conf.zip
# cp netfilter-rules.conf /etc

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

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

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, ex :

/usr/local/sbin/netfilter-rules

Dans le cas ou cette solution ne vous conviendrait pas, vous trouverez sur internet toutes les documentations sur la configuration d’iptables.

Options

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/jail.conf en modifiant le chemin de vos fichiers de logs :

[SSH]
enabled = true
logfile = /var/log/auth.log
[...]

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


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