![]() | ![]() |
Auteur : Alois Aubel
But: Le but est de comprendre l'écriture de règles pour les écluses ("firewall") avec ipchains sous Linux.
Les facilités d'ouverture et de communication apportées par les protocoles liés à TCP/IP (donc sur les réseaux de type Internet / Intranet) sont malheureusement à double tranchant : s'il est vrai qu'il permettent une ouverture sans précédent vers la quasi-totalité des systèmes existants ils peuvent aussi être un moyen d'intrusion dans vos systèmes. La sécurité est donc devenu un point critique quand un organisme décide de relier son réseau privé à l'Internet. Or, un nombre toujours croissant d'utilisateurs de réseaux privés demandent un accès à l'Internet. De plus les entreprises veulent de plus en plus mettre à disposition du public un site web ainsi qu'un serveur FTP. Il en incombe donc à l'administrateur réseau de faire la connexion et d'en sécuriser l'utilisation. Pour cela, il existe des dispositifs appelés firewall soit pare-feu en français ou encore écluse qui permettent d'instaurer une politique de sécurité.
Le logiciel que nous allons utiliser dans ce TP appelé "ipchains" est un firewall. Il nous faudra le configurer afin dans un premier temps, de donner accès aux machines du réseau privé à l'Internet et dans un deuxième temps, de sécurisé la connexion. Pour comprendre le fonctionnement d'ipchains il est indispensable de comprendre ce qu'est un firewall. Donc, la première partie de ce compte rendu présentera les firewalls et plus particulièrement ipchains. Nous aborderons ensuite la pratique avec la configuration d'ipchains et enfin nous nous étendrons sur les différentes applications des firewalls.
Un firewall est un (ou plusieurs) dispositif(s) qui assure(nt) le respect d'une politique de sécurité entre un réseau privé
et l'Internet. Il décide quels services sont accessible de l'extérieur,
qui peuvent y accéder et quels services extérieurs sont accessibles
de l'intérieur. En ce sens, il est plus évolué que
le routeur qui lui transmet juste les données.
L'objectif d'un firewall est double, il permet :
fig. 1 - Présentation d'un firewall
Pour qu'un firewall soit efficace, il faut que tout le trafic allant ou provenant d'Internet passe par le firewall. Ainsi le trafic pourra être surveillé. Il doit permettre seulement aux paquets autorisés de passer. De plus, il doit être immuniser contre toute intrusion.
Il existe différents types de firewall:
Lorsqu'un firewall de type proxy est utilisé sur un réseau,
il n'y a aucune connexion directes entre les systèmes du réseau
local et le réseau Internet : les machines internes se connectent
sur le firewall pour lui demander un service. Après une éventuelle
procédure d'authentification, le firewall se charge de relayer la
requête au serveur Internet puis de renvoyer la réponse au
client interne.
L'absence de connexion directe entre réseau local et Internet
est un élément important de sécurité; il est
ainsi généralement admis que ce type de firewall offre un
meilleur niveau de sécurité, mais au détriment d'une
moins bonne flexibilité.
squid est le proxy que l'on à utilisé dans les
TP précédents et il est disponible dans la plupart des distributions
Linux mais n'est pas comme ipchains intégré dans le
noyau.
Enfin, des technologies hybrides existent à mi-chemins entre
filtre de paquets et proxy, tentant de réconcilier les avantages
de chacune de ces deux technologies (flexibilité et haut niveau
de sécurité). Citons, par exemple, la technologie "Stateful
Inspection" implémenté dans Checkpoint Firewall-1,
produit leader sur le marché.
ipchains; est en fait un module du noyaux Linux. Il a été introduit à partir de la version 2.1.102 remplaçant ainsi ipfwadm.il est utilisé pour contrôler à la fois le camouflage et le cache transparent, alors que ce sont des notions séparées du filtrage de paquets (l'implémentation actuelle de Linux les brouille tous les trois de façon inhabituelle, laissant l'impression qu'ils sont très proches). Dans le dernier noyau, ipchains a été finalement remplacé par un autre logiciel appelé netfilter qui est sensé être plus efficace et plus simple à configurer.
Tout le trafic circulant dans un réseau est envoyé sous la forme de paquets. Le début de chaque paquet précise sa destination, sa source, le type du paquet, et divers autres détails administratifs. Le début de chaque paquet est appelé l'entête (header). Le reste du paquet, contenant les données à transmettre, est couramment appelé le corps (body).
Un filtre de paquet est un logiciel qui regarde l'entête des paquets lorsque ceux-ci passent, et décide du destin du paquet entier. Il peut décider de le refuser (le supprimer comme s'il n'avait jamais été reçu), de l'accepter (le laisser circuler) ou de le rejeter (effet identique au refus, mais il est précisé à la source que le paquet n'a pas été accepté).
ipchains fait partie des firewalls dits "filtre de paquets" ou encore "firewall de niveau réseau". A ce titre, il traite tous les paquets passant par son interface de routage. C'est en configurant d'une certaine façon cette interface que l'on peut appliquer un filtre. Ce filtre agit sur les champs suivants:
Pour bloquer une connexion à (ou venant) d'un serveur web ou d'un réseau, le filtre peut être appliqué de plusieurs façons. Par exemple vous pouvez décider de bloquer les connexions provenant d'adresses ou de site non sûres, ou vous pouvez décidez de bloquer toutes les connexions venant de l'extérieur. Tout cela se fait par la mise en place de règles de filtrage au niveau d'ipchains. Il existe trois listes de règles: chaîne d'entrée (input), chaîne de transmission (forward) et chaîne de sortie (output). Lorsqu'un paquet arrive au niveau de l'interface d'ipchains, il utilise la chaîne input pour décider de son sort. S'il le paquet est accepté et qu'il est destiné à une autre machine il est transmis (routed) suivant les règles définies dans la chaîne forward. Enfin, juste avant que le paquet ne ressorte, un dernier filtrage est effectué avec la chaîne output.
Une chaîne est une vérification de règles. Chaque règle énonce: "si l'entête du paquet ressemble à ceci, alors voilà ce qu'il faut en faire". Si la règle ne vérifie pas le paquet, alors la règle suivante dans la chaîne est consultée. Enfin, s'il n'y a plus de règles à consulter, alors le noyau regarde la chaîne politique (police) pour décider ce qu'il doit faire. Dans un système orienté sécurité, cette police dit généralement au noyau de rejeter ou de refuser le paquet.
Voici comment se présente ipchains
L'utilisation d'ipchains c-a-d la configuration et la mise en route se fait en ligne de commande. Voici les principales fonctions:
# ipchains -L |
# ipchains-save > firewall_backup # ipchains-restore < firewall_backup |
# ipchains -[AD] <chaine> <regle> |
# ipchains -[FP] <chaine> |
# ipchains -M <options> |
<chaine>
input, pour la chaîne entrée
output, pour la chaîne de sortie
<regle> se compose de plusieurs paramètres:
-s, source
-d, destination
-p, protocole
-i, interface
-j, action à effectuer si la il y a correspondance de la règle.
!, pour faire le complément (l'inverse)
Exemples:
# ipchains -A output -d 199.95.207.0/24 -j REJECT |
Maintenant que nous connaissons les bases, nous pouvons passer à l'expérimentation.
![]() | ![]() |