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