TP Filtrage de paquets avec iptables

Transcription

TP Filtrage de paquets avec iptables
TP
Filtrage de paquets avec iptables
Guilhem BORGHESI
Décembre 2008
Page 1 sur 4
Filtrage sans états
1. Afficher la police par défaut de vos chaînes
2. Lancer le serveur web
3. Connectez-vous au serveur web à partir d’une autre machine afin de vérifier que
ça marche
4. Modifier la police par défaut des chaînes INPUT et OUTPUT afin d’empêcher
tout trafic de les traverser. Connectez-vous au serveur web à partir d’une autre
machine. Est-ce que cela fonctionne ? Analysez le trafic avec ethereal afin de voir
ce qui est échangé entre les deux machines. Ajouter une règle à la chaîne INPUT
afin de permettre de se connecter au serveur web. Connectez-vous au serveur web
à partir d’une autre machine. Est-ce que cela fonctionne ? Pourquoi ?
5. Analysez le trafic avec ethereal afin de voir ce qui est échangé entre les deux
machines.
6. Ajouter une règle à la chaîne OUTPUT afin de permettre le passage de la réponse
de votre serveur web
7. Connectez-vous au serveur web à partir d’une autre machine. Est-ce que cela
fonctionne ? Pourquoi ?
8. Ajouter une règle à la chaîne INPUT afin d’interdire de se connecter au serveur
web.
9. Connectez-vous au serveur web à partir d’une autre machine. Est-ce que cela
fonctionne ? Pourquoi ? Listez les règles afin de vous aider.
10. Supprimez la règle n°1 de la chaîne INPUT.
11. Connectez-vous au serveur web à partir d’une autre machine. Est-ce que cela
fonctionne ?
Différences entre la cible REJECT et DROP
1. Supprimez toutes les règles de votre firewall
2. Modifier la police par défaut des chaînes INPUT et OUTPUT afin d’accepter tout
trafic
3. Rajouter une règle sur la chaîne INPUT interdisant le trafic web avec la cible
DROP (interdiction d’atteindre le serveur web de votre machine à partir de
l’extérieur)
4. Connectez-vous au serveur web à partir d’une autre machine afin de vérifier que
c’est réussi.
5. Analysez le trafic avec ethereal afin de voir ce qui est échangé entre les deux
machines. Que constatez-vous ?
6. A partir d’une autre machine, analysez les ports ouverts sur votre machine avec
NMAP. Dans quel état est indiqué le port 80 ?
7. Supprimez la règle précédemment ajoutée
8. Rajouter une règle sur la chaîne INPUT interdisant le trafic web avec la cible
REJECT
9. Analysez le trafic avec ethereal afin de voir ce qui est échangé entre les deux
machines. Que constatez-vous ?
10. A partir d’une autre machine, analysez les ports ouverts sur votre machine avec
NMAP. Dans quel état est indiqué le port 80 ?
Page 2 sur 4
Filtrage avec états
1. Supprimez toutes les règles de vos chaînes.
2. Modifiez la police par défaut des chaînes INPUT et OUTPUT afin d’empêcher
tout trafic de les traverser.
3. Connectez-vous au serveur web à partir d’une autre machine. Est-ce que cela
fonctionne ? Vérifiez si le module de suivi de connexion ip_conntrack est chargé.
Sinon, chargez ce dernier. Ajouter une règle à la chaîne INPUT afin de permettre
de se connecter au serveur web en utilisant le suivi de connexion.
4. Connectez-vous au serveur web à partir d’une autre machine. Est-ce que cela
fonctionne ? Pourquoi ? Vous pouvez consulter le résultat du suivi de connexion
par la commande cat /proc/net/ip_conntrack
Sauvegarde de vos règles
1. Sauvegardez vos règles
2. Supprimez les règles de toutes vos chaînes
3. Restaurez les règles précédemment supprimées
Journalisation des paquets
1. Vérifiez que le module permettant la journalisation des paquets traités par le parefeu est chargé en mémoire
2. Sinon déterminez quel est le module qu’il vous faut charger
3. Chargez ce dernier en mémoire
4. Ajoutez une règle permettant de consigner le passage de paquets à destination de
votre site web dans les logs
5. Connectez-vous au serveur web à partir d’une autre machine.
6. Vérifiez le contenu de votre fichier de log
Page 3 sur 4
Annexe
Config noyau et modules
Linux est un système modulaire. Une partie importante du code de ce système d’exploitation
peut être compilé sous forme de modules. Pour peu que l’on connaisse le nom du module que
l’on veut utiliser et que ce dernier ai été compilé il est possible de le charger en mémoire
dynamiquement grâce aux commandes insmod ou modprobe.
Les modules sont présent dans l’arborescence /lib/modules/nom_du_noyau/kernel/
Si l’on ne connait pas le nom du module qu’il nous faut charger, mais que l’on a une idée de
ce qu’il fait, on peut parcourir cette arborescence et tenter de le localiser. Ayant alors son
nom on est en mesure de le charger en mémoire.
Une autre méthode afin de s’assurer que le code dont on a besoin est présent dans le noyau ou
dans un module est d’éditer le fichier de configuration du noyau et de voir si le code a été
compilé dans le noyau (=y) ou sous forme de module (=y) ou éventuellement encore pas du
tout (not set).
Le fichier de configuration du noyau qui fonctionne sur notre machine se situe dans le
répertoire /boot. Il porte le nom config-xxx ou xxx est la version du noyau.
Afin d’obtenir la version de votre noyau utilisez la commande uname –a.
Dans le cas présent, ce qui va nous intéresser est de savoir si Netfilter a bien été compilé
(dans le noyau) ou sous forme de module et si c’est le cas de savoir grâce à la commande
lsmod s’il est présent en mémoire.
Dans le fichier de configuration les variables correspondant aux modules qui nous intéressent
commencent par CONFIG_IP_NF…
Si un module vient à vous manquer au cours du TP n’hésitez pas à aller voir dans ce fichier et
dans le répertoire /lib/modules/numéro_noyau/kernel/net/ipv4/netfilter/ afin de vérifier si le
module existe et éventuellement le charger.
Netfilter
Il existe un excellent tutorial sur iptables à l’URL suivante. Vous pouvez vous en servir pour
trouver l’inspiration lors de vos exercices :
www.linux-france.org/prj/inetdoc/guides/iptables-tutoriel
Page 4 sur 4