Vous êtes sur la page 1sur 25

Filtrage de paquets et translation

d’adresse
Dr. Yahia Benmoussa
yahia.benmoussa@gmail.com
Plan

Transformer Linux en un pare-feu

Translation d’adresse avec Linux

Application à l’équilibrage de charge
Netfilter


Netfilter est un framework implémentant un pare-feu (et
d’autre fonctionnalité) au sein du noyau Linux
– Filtrage
– Translation d’adresse et de port
– Modification de packet.

Il permet la manipulation des paquets réseau lors des
appels des routines de réception ou d'émission des
paquets des interfaces réseau.
Netfilter (tables)


Les actions sur les paquets sont définit dans plusieurs
tables
– filter
– nat
– mangle
Netfilter (Chaînes)

PREROUTING: Par cette chaîne passeront les paquets
entrant dans la machine avant routage.

INPUT : Cette chaîne traitera les paquets entrants avant qu'ils
ne soient passées aux couches supérieures (les applications).

FORWARD: Ce sont les paquets uniquement transmis par la
machine sans que les applications n'en aient connaissance.

OUTPUT : Cette chaîne sera appelée pour des paquets
envoyés par des programmes présents sur la machine.

POSTROUTING: Les paquets prêts à être envoyés (soit
transmis, soit générés) seront pris en charge par cette chaîne.
Netfilter (Chaînes)
Netfilter (tables)

Table Description
filter Cette table permet de filtrer les paquets. Typiquement ce
sera pour les accepter ou non.
nat Avec cette table, on peut réaliser des translations d'adresse
(ou de ports). Ceci sera notamment utile pour
partager une connexion.

mangle Elle sert pour modifier les en-têtes des paquets. On la


rencontrera parfois pour marquer des paquets afin que
d'autres applications puissent les reconnaître.
Netfilter
Association entre chaîne et table

Chaîne Table Description


PREROUTING nat, mangle Par cette chaîne passeront les paquets entrant dans la
machine avant routage.

INPUT filter Cette chaîne traitera les paquets entrants avant qu'ils ne
soient passées aux couches supérieures (les
applications).

FORWARD filter Ce sont les paquets uniquement transmis par la machine


sans que les applications n'en aient connaissance.

OUTPUT filter, nat, Cette chaîne sera appelée pour des paquets envoyés
mangle par des programmes présents sur la machine.

POSTROUTING Nat, mangle Les paquets prêts à être envoyés (soit transmis, soit
générés) seront pris en charge par cette chaîne.
iptables


Iptables → ligne de commande qui permet de configurer
Netfilter.

Example :
sudo iptables -A OUTPUT -p icmp -j REJECT
$ sudo iptables -t filter -L
$ sudo iptables -t mangle -L
$ sudo iptables -t nat -L
Affichage des règles iptables

$ sudo iptables -t filter -L


$ sudo iptables -t mangle -L
$ sudo iptables -t nat -L
Les cibles des règles


Traitement que l'on décide d'appliquer au paquet → C'est
la cible qui se chargera de faire les opérations
nécessaires.

La cibles doit être spécifiée avec l’option –jump (-j)
Les cibles des règles
Cible Description
ACCEPT Les paquets envoyés vers cette cible seront tout simplement acceptés et pourront
poursuivre leur cheminement au travers des couches réseaux.

DROP Cette cible permet de jeter des paquets qui seront donc ignorés.

REJECT Permet d'envoyer une réponse à l'émetteur pour lui signaler que son paquet a été
refusé.

LOG Demande au noyau d'enregistrer des informations sur le paquet courant. Cela se
fera généralement dans le fichier /var/log/messages (selon la configuration du
programme syslogd).
MASQUERADE Cible valable uniquement dans la chaîne POSTROUTING de la table nat. Elle
change l'adresse IP de l'émetteur par celle courante de la machine pour l'interface
spécifiée. Cela permet de masquer des machines et de faire par exemple du
partage de connexion.
SNAT Egalement valable pour la chaîne POSTROUTING de la table nat seulement. Elle
modifie aussi la valeur de l'adresse IP de l'émetteur en la remplaçant par la valeur
fixe spécifiée.

DNAT Valable uniquement pour les chaînes PREROUTING et OUTPUT de la table nat.
Elle modifie la valeur de l'adresse IP du destinataire en la remplaçant par la valeur
fixe spécifiée.
iptables


iptables est l'outil qui est fourni à l'administateur pour agir
sur tous les concepts vus précédemment et pour modifier
les règles de filtrage donc.

option -t → permet de spécifier le nom de la table sur
laquelle porteront les autres paramètres. Si cette option
n'est pas spécifiée, ce sera par défaut

Options d'iptables :
Iptables (options)
Option Rôle

-L Affiche toutes les règles de la chaîne indiquée.

-F Supprime toutes les règles de la chaîne. Si aucune chaîne n'est spécifiée, toutes celles de la
table sont vidées.

-P Modifie la politique par défaut de la chaîne. Il faut indiquer en plus comme paramètre la cible à
utiliser.

-A Ajoute une règle à la fin de la chaîne spécifiée.

-I Insère la règle avant celle indiquée. Cette place est précisée par un numéro qui fait suite au
nom de la chaîne. La première porte le numéro 1. Si aucun numéro n'est indiqué, la règle est
insérée au début.

-D Supprime une règle de la chaîne. Soit un numéro peut être précisé, soit la définition de la
chaîne à supprimer (ses tests de concordance et sa cible).
Tests de concordance


Tests de concordance → définissent les caractéristiques
que doivent présenter les paquets pour être concernés par
la règle, et donc être dirigés vers la cible spécifiée.
Tests de concordance
opt Contexte Description
-s Adresse source. Cette option est suivie par l'adresse de la machine qui
doit avoir émis ce paquet.
Si l'adresse est précédée d'un ! (point d'exclamation), le test est alors
inversé sous-réseau
-d Adresse de destination. On trouve ensuite l'adresse de destination du
paquet, avec les mêmes possibilités que pour --source.
-i Chaînes INPUT, Interface d'entrée. Suivie par le nom de l'interface par laquelle doivent
FORWARD ou arriver les paquets.
PREROUTING
-o Chaînes FORWARD, Interface de sortie. Suivi du nom de l’interface
OUTPUT ou
POSTROUTING
-p Protocole. Permet de vérifier le protocole du paquet. ( tcp, udp, icmp ou
all)

--source-port --protocol tcp ou -- Port source. Cette option permet de vérifier le port source (celui utilisé par
protocol udp l'émetteur).
Intervalle de port : ex. 25:110 pour tous les ports compris entre 25 et 110.

--destination-port --protocol tcp ou -- Port destination. Compare le port utilisé pour se connecter sur la machine
protocol udp avec la valeur ou plage de valeur indiquée.

-m NEW correspond à un paquet initiant une nouvelle connexion.


ESTABLISHED est un paquet participant à une conversation déjà établie.
RELATED est pour un paquet qui ouvre une nouvelle connexion, mais
ceci en rapport avec une précédente déjà établie.
INVALID indique un paquet qui n'est rattaché à aucune connexion.
Exemples

iptables -t filter -A INPUT --source 207.46.134.190 --jump DROP

iptables -A INPUT -s 207.46.134.190 -j DROP

iptables -t filter -F

iptables -t filter -A INPUT --protocol tcp --destination-port 80 --jump
ACCEPT

iptables -t filter -A OUTPUT --protocol tcp --destination-port 80 --jump
ACCEPT

iptables -A FORWARD -i eth1 -j ACCEPT

iptables -A FORWARD -o eth1 -j ACCEPT
Exemples


iptables -t filter -A FORWARD -i eth0 -o eth --state NEW --
jump ACCEPT

iptables -t filter -A FORWARD -i eth1 -o eth0 --state
ESTABLISHED,RELATED --jump ACCEPT
Translation d’adresses


Deux types de translation d’adresses
– Source → utilisée pour accéder à Internet sans
disposer d’adresse publique
– Destination
Translation d’adresse source

La traduction d’adresse source est utilisée le plus
fréquemment lorsqu’on ne dispose pas d’une adresse IP
publique pour chacun

La machine disposant d’une adresse publique sera
transformée en passerelle possédant deux interfaces réseau :
– l’une d’adresse réseau privée reliée au réseau local
– l’autre d’adresse réseau publique, reliée à Internet. Cette

La passerelle jouera le rôle de serveur SNAT, traduisant toutes
les adresses privé vers l’adresse publique

l’IP publique sera partagée.
Translation d’adresse source


Pour changer l’adresse source en 1.2.3.4 :
– iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to
1.2.3.4

Pour changer l’adresse source en 1.2.3.4, 1.2.3.5 ou 1.2.3.6
– iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to
1.2.3.4-1.2.3.6

Pour changer l’adresse source en 1.2.3.4, port 1-1023 :
– iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT
--to 1.2.3.4 :1-1023
MASQUARADING (Camouflage)


Cas particulier de translation d’adresse source

Faire une translation d’adresse source en utilisant celle de
l’interface disponible.


Exemple :
– $ iptables -t nat -A POSTROUTING -o ppp0 -j
MASQUERADE
Translation d’adresse destination


La traduction d’adresse de destination est utile lorsque, on
veut qu’un serveur visible de l’extérieur une adresse
publique alors qu’il est physiquement sur une machine du
réseau local qui n’est pas la passerelle.

Exemle → Exécuter un serveur web et smtp sur deux
serveurs locaux alors qu’on ne dispose que d’une seule
adresse publique.
Translation d’adresse destination


Exemple :
$ iptables -t nat -A PREROUTING -p tcp --dport 80 -i eth0 \
-j DNAT --to 192.168.1.1

$ iptables -t nat -A PREROUTING -p tcp --dport 25 -i eth0 \


-j DNAT --to 192.168.1.2

Vous aimerez peut-être aussi