3psilon website

slogan


Vous êtes ici : Accueil » Articles » Système

>>IPTables

26 juillet 2006
Auteur(e) : 

Sommaire

 - Présentation
 - IPTables
 - Script
 - Références


Présentation

Comment réaliser un partage de connexion Internet facilement et complétement sécurisé. La solution consiste à créer une Zone démilitarisée.

L’exemple qui suit est donc la création d’un réseau local assez basique.

C’est un sous réseau dans le réseau Internet. De ce fait, il vous faut un routeur, alors soit vous vous procurez un routeur dans le marché actuel soit, ce qui est mon cas, vous possédez un petit ordinateur, et vous installez un système libre et le configurez pour qu’il fasse office de routeur.

Cette page va décrire la configuration à effectuez pour que votre linux devienne un routeur. Ce routeur va permettre de donner un accès total à Internet pour notre réseau local, et surtout va empêcher le réseau Internet de pouvoir avoir accès à notre réseau local.

(JPG)

Pour cela vous devez disposer de deux interfaces réseaux sur votre routeur.

Nommé ici eth0 et eth1, ou eth0 sera l’interface communiquant avec Internet qui possedera votre ip publique et eth1 qui sera votre interface local qui possedera votre ip privée.

L’élément qui va vous permettre de réaliser cette prouesse est Le module iptables de votre linux.

IpTables est une solution complète de firewall (noyau 2.4) remplaçant ipchains (noyau 2.2) tournant sous le système GNU/Linux.

IpTables permet de faire du firewalling stateful (à états), de la translation de port et d’adresse, du filtrage au niveau 2 et beaucoup d’autres choses. IpTables est installé en standard sur de nombreuses distributions Linux récentes.

En particulier, il est installé sur Linux RedHat 7.1 et sur la plupart des distributions basées sur un kernel 2.4.x. Si celui ci n’est pas compris dans le noyau vous pouvez toujours monter ce module grâce à la commande ’modprobe [ip_tables]’.

Pour voir si votre module est bien inséré vous devez regarder la liste des modules en faisant un ’lsmod’.

Si vous trouvez des modules non-utilisés alors vous pouvez les retirer par ’rmmod [Nom du Module]’.

Si vous désirez que certain module soit présent dans devoir les monter ou retirer certain module au démarrage, il vous faut recompiler le noyau.

IPTables

IpTables possède plusieurs Table :

  • Table NAT (Network Address Translation)  : Table utilisée pour la translation d’adresse ou la translation de port. Il existe 2 types de chaînes :
    • PREROUTING qui permet de spécifier "à l’arrivée du firewall" et la chaîne
    • POSTROUTING qui permet de spécifier "à la sortie du firewall".

Il existe 3 targets (ou cibles) :

    • DNAT (permet de modifier l’adresse destination du paquet)
    • SNAT (permet de modifier l’adresse source du paquet)
    • MASQUERADE (Une gateway transforme les paquets sortants passant par elle pour donner l’illusion qu’ils sortent de la passerelle)
  • Table FILTER  : C’est la table par défaut lorsque l’on en spécifie pas. Cette table contient toutes les règles de filtrage, il existe 3 types de chaînes :
    • FORWARD pour les paquets passant par le firewall,
    • INPUT pour les paquets entrant et
    • OUTPUT pour les paquets sortants. Les cibles disponibles sont :
      • ACCEPT
      • DENY
      • DROP
      • REJECT
  • Table Mangle  : C’est la table qui contient les règles pour la modification de paquets. Elle est peu utilisée et ne sera pas décrite ici. Etant donné, qu’il n’existe pas d’interface graphique permettant une configuration pointue, le mieux est de réalisé un script :

Script

Voici un exemple de script.

Mise à zéro des tables


iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X


Montage des modules nécessaire (module de base)


modprobe iptable_nat
modprobe iptable_filter


Paramétrage du réseau : AntiSpoofing


if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]
then
for filtre in /proc/sys/net/ipv4/conf/*/rp_filter
do
echo 1 > $filtre
done
fi


On active la translation des packets


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


On ignore les pings

echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts


La politique par défaut La méthode consiste à tout refuser puis à rajouter des règles d’acceptation au compte goutte. Des fichiers logs peuvent être paramétrés.


iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP


On accepte les translations des IP


iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT


On accepte que les processus locaux puissent communiquer par le biais de l’interface local (localhost)


iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT


On part du principe que notre réseau local est sur, donc on accepte tout


iptables -A INPUT -i eth1 -j ACCEPT
iptables -A OUTPUT -o eth1 -j ACCEPT


Configuration de la translation A la sortie du firewall, toute ip sera masqué et prendra l’ip publique


iptables -A POSTROUTING -t nat -s 192.168.166.0/24 -j MASQUERADE


Toutes les connexions qui sortent du LAN vers le Net sont acceptées


iptables -A FORWARD -i eth1 -o eth0 -m state
--state NEW,ESTABLISHED,RELATED -j ACCEPT


Seules les connexions deja établies ou en relation avec des connexions établies sont acceptees venant du Net vers le LAN


iptables -A FORWARD -i eth0 -o eth1 -m state
--state ESTABLISHED,RELATED -j ACCEPT


Autorisations particulières. Par exemple, notre serveur étant une des machine du réseau local, il est nécessaire de faire les bonnes translations. Dans ce cas le ftp se trouve sur la machine local ayant comme ip 192.168.166.177:21.


iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 21
-j DNAT --to-destination 192.168.166.177
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport
40000:41000 -j DNAT --to-destination 192.168.166.177


Le serveur SSH écoute seulement sur l’interface locale, donc il est imposssible d’y accéder depuis internet, néanmoins une seule machine du réseau local pourra y accéder.


iptables -A INPUT -i eth1 -s 192.168.166.14 -m state
--state NEW,ESTABLISHED -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -o eth1 -d 192.168.166.14 -m state
--state ESTABLISHED -p tcp --sport 22 -j ACCEPT


Enfin, si aucune régle ne correspond aux régles précedentes alors on supprime


iptables -A INPUT -j DROP
iptables -A OUTPUT -j DROP
iptables -A FORWARD -j DROP


En effet le script sera lu séquentiellement, donc dès que un packet correspondra à une régle la lecture sera terminée, en revanche si aucune régle ne correspond alors la dernière règle sera définie.

Il va s’en dire que vous pouvez crée des logs de tout ce qui ce passe. Vous pouvez également installer un IDS comme Snort afin de logger encore plus de chose. Couplé avec certains plugins il devient très vite indispensable.

Références

Léa - Iptables

Ipfilter

Formuler un commentaire


3psilon (c) 2003

[W3C CSS Validator] [W3C XHTML Validator] [W3C WAI AAA]