Iptables

De Zed-Wiki
Aller à : Navigation, rechercher

Pré-requis

Avoir installé une Debian Sarge de base.

Plutôt que de parler d'expliquer de facon theorique, voila un exemple d'architecture réseau : Schemaiptables.png


Plan d'adressage

Avant de commencer et une fois après avoir dessiner l'architecture a mettre en place, il faut effectuer un plan d'adressage.

Comme le montre le schema ci-dessus, nous avons trois zones :

  • L'Internet
  • La DMZ (zone démilitarisée)
  • Le LAN (Local Area Network)

La partie Internet

Cette partie est celle qui nous permet de communiquer avec le "reste du monde". Pour cela il faut utiliser des adresses publiques. Imaginons dans ce cas, que nous avons obtenu ici auprès du RIPE le réseau 42.0.0.0/29. Ici on peut donc constater que l'on a six adresses utilisables de 42.0.0.1-6.

Dans notre schema, nous pouvons voir que nous avons deux serveurs dans la zone DMZ:

  • un serveur DNS
  • un serveur WEB

Pour cela, nous allons utiliser les adresses de la facon suivante :

Serveur DNS 42.0.0.1
Serveur WEB 42.0.0.2
LAN Ext. 42.0.0.6

La partie DMZ

Cette partie est une zone qui va héberger des serveurs qui seront accessibles de l'Internet de manière controlée. Pour cette partie, nous allons prendre un autre réseau. Cette fois, nous allons choisir un réseau privé RFC 1918.

Pour simplifier les choses, nous allons prendre le réseau 10.0.0.0/29. Nous allons donc faire correspondre les adresses :

  • 42.0.0.1 <==> 10.0.0.1
  • 42.0.0.2 <==> 10.0.0.2

Le LAN

Pour cette partie, nous allons prendre un réseau de classe C : 192.168.0.0/24.

Le firewall

Le firewall aura trois interfaces. La première eth0 vers l'Internet, la seconde eth1 pour la DMZ et enfin eth2 pour le LAN.

Les adresses que nous allons prendre pour chaques interfaces seront les suivantes :

  • 42.0.0.6 pour eth0
  • 10.0.0.6 pour eth1
  • 192.168.0.254 pour eth2

Installation d'Iptables

#apt-get install iptables

Script iptables

Iptables est une commande transmis au système pour créer des règles. Lorsque nous avons plusieurs règles ç gérer il est interressant de faire un script SHELL qui contient l'ensemble des règles. Suivant nos besoins et pour des raisons de lisibilitées, nous pouvons créer des fichiers pour chaques zones et ensuite de les inclures dans un autre script.

Règles de bases

# REMISE à ZERO des règles de filtrage
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X

# DEBUT des "politiques par défaut"

# connexions entrantes soient bloquées par défaut
iptables -P INPUT DROP

# connexions forwardées acceptées par défaut
iptables -P FORWARD ACCEPT

# connexions sortantes acceptées par défaut
iptables -P OUTPUT ACCEPT

# FIN des "politiques par défaut"

Règles filtrant les accès

Les règles suivantes permettent de ne pas filtrer sur l'interface de loopback, d'accepter le ping et d'accepter les paquets provenant de connexions en cours.

# Pas de filtrage sur l'interface de "loopback"
iptables -A INPUT -i lo -j ACCEPT

# J'accepte le protocole ICMP (i.e. le "ping")
iptables -A INPUT -p icmp -j ACCEPT

# J'accepte les packets entrants relatifs à des connexions déjà établies
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

Les règles suivantes permettent l'accès en ssh,dns et http :

iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -i eth0 -p udp --dport 53 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT

A la fin de vos règles, il est conseillé de mettre la règle suivante. Cette règle permet de cacher le firewall et de ne pas repondre en cas de DROP.

iptables -A INPUT -j REJECT

La partie nattée

Le NAT a pour but de transformer des adresses publiques en adresses privées et inversement. Dans iptables, il y a deux tables pour cela PREROUTING et POSTROUTING.

La table PREROUTING est utilisée pour transformer les IP publiques en IP privées. La table POSTROUTING est utilisée pour transformer les IP privées en IP publiques.

Voici dans notre cas les règles à mettre pour permettre de natter les adresses des serveurs DNS et WEB :

iptables -t nat -A PREROUTING -i eth0 -p tcp -d 42.0.0.1 --dport 53 -j DNAT --to-destination 10.0.0.1
iptables -t nat -A PREROUTING -i eth0 -p udp -d 42.0.0.1 --dport 53 -j DNAT --to-destination 10.0.0.1
iptables -t nat -A PREROUTING -i eth0 -p tcp -d 42.0.0.2 --dport 80 -j DNAT --to-destination 10.0.0.2

Les règles suivantes permettent de natter en sortie les adresses de la DMZ et du LAN. Le LAN sera nattée vers l'ip de l'interface du Firewall : 42.0.0.6. La DMZ sera nattée comme pour la partie PREROUTING.

iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j MASQUERADE 
iptables -t nat -A POSTROUTING -o eth0 -s 10.0.0.1    -j SNAT --to-source 42.0.0.1
iptables -t nat -A POSTROUTING -o eth0 -s 10.0.0.2    -j SNAT --to-source 42.0.0.2

Routage

Il ne faut pas oublier d'activer le routage entre les interfaces :

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

Reste une dernière petite chose, il faut ajouter les adresses IP au système. En effet si on n'ajoute pas les adresses, elles ne seront pas visible sur le firewall et donc pas dans la table ARP. Du point de vue ethernet cela sera comme si elle n'existait pas, car on ne pourra pas dire à qui appartient l'adresse.

ip address add 42.0.0.1 dev eth0
ip address add 42.0.0.2 dev eth0