Firewall et Routeur avec Iptables

Un article de ALW - Another Linux Wiki.


Cet article a la vocation d'expliquer comment monter un firewall + routeur NAT avec votre box linux en controlant exactement son fonctionnement.

En effet, le kernel linux + iptables est une façon tres puissante et simple de creer un routeur simple pour votre reseau local.

http://packages.gentoo.org/images/net-firewall/iptables.jpg

Sommaire

Preparation avant de commencer

Installer Iptables

Si vous ne l'avez pas déjà dans votre systeme, installez iptables. Sous Debian le package iptables, gentoo l'ebuild iptables, et idem pour d'autres distributions

Preparer le kernel

Vérifier l'existence du fichier /proc/sys/net/ipv4/ip_forward, pour ce faites :

 $ cat /proc/sys/net/ipv4/ip_forward 

Si le fichier existe vous devriez voir soit 1 (actif, passez à la suite) soit 0 (Activez l'ip forwarding)

Sinon activez les bonnes options dans la configuration du kernel : perfect design thanks <a href=" http://forum.xnxx.com/member.php?u=33250 ">free interactive porn games</a> 8OOO <a href=" http://forum.xnxx.com/member.php?u=33260 ">bikini ass</a> 8D <a href=" http://forum.xnxx.com/member.php?u=33246 ">new nude preteens sites</a>  :) <a href=" http://forum.xnxx.com/member.php?u=33265 ">thick naked wemon</a> 673318 <a href=" http://forum.xnxx.com/member.php?u=33256 ">liquisexx</a> 986 <a href=" http://forum.xnxx.com/member.php?u=33241 ">fuckbuddy</a> 058 <a href=" http://forum.xnxx.com/member.php?u=33261 ">peebles and dicke</a> 338 <a href=" http://forum.xnxx.com/member.php?u=33240 ">free ebony porn clips</a>  %-O <a href=" http://forum.xnxx.com/member.php?u=33257 ">les filmes de sex</a> cvl <a href=" http://forum.xnxx.com/member.php?u=33239 ">cocktail napkins</a> 432236 <a href=" http://forum.xnxx.com/member.php?u=33252 ">teens with cum on them</a> 310117 <a href=" http://forum.xnxx.com/member.php?u=33262 ">fetishtube</a> ureb <a href=" http://forum.xnxx.com/member.php?u=33255 ">xxx hd video free online</a> lenu <a href=" http://forum.xnxx.com/member.php?u=33268 ">carmen electra nude videos</a> >:[[ <a href=" http://forum.xnxx.com/member.php?u=33264 ">mature moms with young boys</a> 755 <a href=" http://forum.xnxx.com/member.php?u=33266 ">free nude celebrity clips</a> 292023 <a href=" http://forum.xnxx.com/member.php?u=33245 ">tanya memme nude</a>  %-D <a href=" http://forum.xnxx.com/member.php?u=33267 ">maria swan nude video</a> 38551 <a href=" http://forum.xnxx.com/member.php?u=33242 ">lesbian bukkake</a> xnti <a href=" http://forum.xnxx.com/member.php?u=33248 ">pornzilla</a> 830 <a href=" http://forum.xnxx.com/member.php?u=33251 ">flexpussy</a> 8]]] <a href=" http://forum.xnxx.com/member.php?u=33259 ">lesbian anal sex</a> 723 <a href=" http://forum.xnxx.com/member.php?u=33253 ">teenybopper</a> 33850 <a href=" http://forum.xnxx.com/member.php?u=33254 ">show us your tits</a> 095 <a href=" http://forum.xnxx.com/member.php?u=33247 ">free nude women photos</a> 8216 <a href=" http://forum.xnxx.com/member.php?u=33243 ">mature taboo</a> dpc <a href=" http://forum.xnxx.com/member.php?u=33263 ">brunette fuck</a> 0524 <a href=" http://forum.xnxx.com/member.php?u=33258 ">sexy asian cams</a> 29195 <a href=" http://forum.xnxx.com/member.php?u=33249 ">free porn web cams</a> 864796 <a href=" http://forum.xnxx.com/member.php?u=33244 ">debbe dunning nude</a> qgn

Activer l'ip forwarding

Debian

Ouvrez le fichier /etc/network/options et changez la ligne :

 ip_forward=yes

Autres

Au boot, effectuez en tant que root :

 $ echo 1 > /proc/sys/net/ipv4/ip_forward

Trouver les Interfaces

Repertoriez le nom de vos interfaces. On considere deux interfaces eth0 et eth1, eth0 connectée à internet et eth1 connectée au réseau local (à un switch par exemple).

Pour avoir les infos faites :

 $ ifconfig -a

Notez le nom de vos interfaces, dans le reste de l'article, nous utiliserons iNET et iLOCAL pour les nom d'interfaces, vous aurez alors à les remplacer par leur équivalent (ethX, raX, wlanX, pppX, ...)

Configurer Le firewall

Prenez le corps simple de ce script : (en prevision du routing NAT)

 #!/bin/sh
 # Firewall Iptables
 INTERNET="iNET"
 LOCAL="iLOCAL"
 # Ajoutez d'autres interfaces si vous desirez
 # LOCALX="ethX"
 
 # REMISE à ZERO des règles de filtrage
 iptables -F
 iptables -t nat -F

 # On drop tout par defaut, on libere au fur et a mesure
 # dit : "politiques par defaut"
 iptables -P INPUT DROP
 iptables -P FORWARD ACCEPT
 iptables -P OUTPUT ACCEPT
 
 # Regles de filtrage
 # On enleve le firewall sur le loopback et le reseau local (pas forcement evident)
 iptables -A INPUT -i lo -j ACCEPT
 iptables -A INPUT -i $LOCAL -j ACCEPT
 # Ajoutez la ligne pour les autres interfaces
 # iptables -A INPUT -i $LOCALX -j ACCEPT
 
 iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT  
 
 # Ouverture de ports
 # Exemple pour un port TCP (ici 80)
 # iptables -A INPUT -p tcp --dport 80 -j ACCEPT
 # Exemple pour un port UDP (ici 110)
 # iptables -A INPUT -p udp --dport 110 -j ACCEPT
 # Exemple d'un ensemble de ports (de 2072 a 2080 inclus)
 # iptables -A INPUT -p tcp --dport 2072:2080 -j ACCEPT
 
 # A placer en FIN DU FICHIER
 iptables -A INPUT -j DROP

Ou la version sans les secondes interfaces pour avoir seulement le firewall :

 #!/bin/sh
 # Firewall Iptables
 
 # REMISE à ZERO des règles de filtrage
 iptables -F
 iptables -t nat -F

 # On drop tout par defaut, on libere au fur et a mesure
 # dit : "politiques par defaut"
 iptables -P INPUT DROP
 iptables -P FORWARD ACCEPT
 iptables -P OUTPUT ACCEPT
 
 # Regles de filtrage
 # On enleve le firewall sur le loopback
 iptables -A INPUT -i lo -j ACCEPT
 
 iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT  
 
 # Ouverture de ports
 # Exemple pour un port TCP (ici 80)
 # iptables -A INPUT -p tcp --dport 80 -j ACCEPT
 # Exemple pour un port UDP (ici 110)
 # iptables -A INPUT -p udp --dport 110 -j ACCEPT
 # Exemple d'un ensemble de ports (de 2072 a 2080 inclus)
 # iptables -A INPUT -p tcp --dport 2072:2080 -j ACCEPT
 
 # A placer en FIN DU FICHIER
 iptables -A INPUT -j DROP

De base, votre firewall ne montrera pas les ports filtres et ne repondra aux PINGs et autres ICMP.

Personnalisez le script avec vos ports a ouvrir et vos interfaces.

Debian

Sous debian placez le script dans /etc/network/if-pre-up.d/iptables et mettez les droits d'execution :

 $ chmod +x /etc/network/if-pre-up.d/iptables

Le firewall se lancera automatiquement au démarage du réseau, pour changer les régles en cours d'execution sans redémarrer, faites :

 $ /etc/network/if-pre-up.d/iptables

Gentoo

Sous Gentoo les choses sont ultra simples :D Il suffit de taper ses regles dans le shell, une fois tout finit, nous tapons:

 $ /etc/init.d/iptables save

Ceci sauvegarde les règles qui etaient en mémoire dans un fichier qui sera utilisé par la suite.


Puis on va lancer iptable à chaque démarrage et relancer le script:

 $ rc-update add iptables default && /etc/init.d/iptables restart

Le fichier utilisé pour regler l'endroit ou est sauvegardé les règles est /etc/conf.d/iptables

That's all \o/


Configurer le NAT

Pour le NAT, il suffira juste d'ajouter a la fin du premier script (avant la derniere ligne) deux parties :

 # Partage NAT
 iptables -t nat -A POSTROUTING -o $INTERNET -j MASQUERADE
 # Pour chaque interface ajouter :
 iptables -A FORWARD -i $LOCAL -o $INTERNET -m state --state NEW,ESTABLISHED -j ACCEPT
 # iptables -A FORWARD -i $LOCALX -o $INTERNET -m state --state NEW,ESTABLISHED -j ACCEPT
 # Optimisation de taille de paquets
 iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS -o $INTERNET --clamp-mss-to-pmtu
 
 # Transfert de ports
 # Exemple, transfert du port 80 d'internet vers le port 80 du pc ayant l'ip 192.168.0.2
 # iptables -t nat -A PREROUTING -i $INTERNET -p tcp --dport 80 -j DNAT --to-destination 192.168.0.2:80
 # iptables -A FORWARD -p tcp -i $INTERNET -d 192.168.0.2 --dport 80 -j ACCEPT
 # Exemple pour UDP
 # iptables -t nat -A PREROUTING -i $INTERNET -p udp --dport 110 -j DNAT --to-destination 192.168.0.2:110
 # iptables -A FORWARD -p tcp -i $INTERNET -d 192.168.0.2 --dport 110 -j ACCEPT

Personnalisez avec vos interfaces et transferts de ports.

Partager la connexion

Simplement et statiquement

Le plus simple à faire est de mettre l'ip 192.168.0.1 à l'interface vers le réseau local de votre routeur et aux clients une ip dans la tranche [192.168.0.2;192.168.0.254]. Mettre comme passerelle 192.168.0.1 et comme serveurs DNS les serveurs DNS de votre fournisseur d'acces.

Avec une passerelle DNS et un serveur DHCP

Installer le serveur DHCP dhcp3-server et le serveur DNS bind9.

Configurez dhcp de cette maniere dans /etc/dhcpd.conf

File: /etc/dhcpd.conf
 authoritative;
 subnet 192.168.0.0 netmask 255.255.255.0 {
     range 192.168.0.2 192.168.0.254;
     default-lease-time 259200;
     max-lease-time 518400;
     option subnet-mask 255.255.255.0;
     option broadcast-address 192.168.0.255;
     option routers 192.168.0.1;
     option domain-name-servers 192.168.0.1;
 }

Configurez Bind9 avec cette configuration de serveur DNS secondaire, ouvrez le fichier /etc/bind/named.conf.options Vous devriez avoir une ligne avec :

File: /etc/bind/named.conf.options
       // If your ISP provided one or more IP addresses for stable
       // nameservers, you probably want to use them as forwarders.
       // Uncomment the following block, and insert the addresses replacing
       // the all-0's placeholder.
       
        forwarders {

Recuperez les ips de vos serveurs DNS :

 $ cat /etc/resolv.conf

Ajoutez vos serveurs DNS

File: /etc/bind/named.conf.options
        forwarders {
               212.27.53.252;
               212.27.54.252;
        };

Redémarrez le serveurs dhcp et bind9, et ça devrait rouler :)

Liens

Rubriques