Page 1 sur 5 Article original traduit par Kmeleon, refonte de eks. Provenant de ubuntu-fr.org Netfilter & Iptables Netfilter est un module du noyau Linux (depuis la version 2.4) qui offre la possibilité de contrôler, modifier et filtrer les paquets IP, et de suivre les connexions. Il fournit ainsi les fonctions de pare-feu, de partage de connexions internet et d autorisation du trafic réseau. Iptables est l interface ligne de commande permettant de configurer Netfilter. Ce document contient les informations de base à propos de iptables, pour ceux qui souhaitent mettre en place un firewall et/ou un partage de connexion sanspasser par une interface graphique. Les lecteurs désirant approfondir leur recherche trouveront des dizaines de tutoriels sur iptables & netfilter. Théorie Firewall Nous allons configurer notre firewall de la manière suivante : On bloque tout le trafic entrant par défaut On autorise au cas par cas : le trafic appartenant ou lié à des connexions déjà établies, et le trafic à destinations des serveurs (web, ssh,...) que nous souhaitons mettre à disposition. Afin de ne pas avoir de problème au moment où on crée ces règles, nous allons d abord créer les autorisations, puis nous enverrons le reste en enfer. En tapant # sudo iptables -L une liste de vos règles actuelles est affichée. Si vous (ou un logiciel) n avez encore jamais touché à iptables, les chaînes sont vides, et vous devriez voir: Chain FORWARD (policy ACCEPT) Chain OUTPUT (policy ACCEPT) Pour l instant, tout passe dans toutes les directions (policy ACCEPT). Pour cette configuration basique, seul le trafic entrant (chaîne input) nous intéresse. Autoriser le trafic entrant d'une connexion déjà établie Nous pouvons permettre à une connexion déjà ouverte de recevoir du trafic: # iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT Permettre le trafic entrant sur un port spécifique Pour permettre le trafic entrant sur le port 22 (traditionnellement utilisé par SSH, vous devrez indiquer à iptables tout le trafic TCP sur le port 22 de votre adaptateur réseau.
Page 2 sur 5 # iptables -A INPUT -p tcp -i eth0 --dport ssh -j ACCEPT Cette commande ajoute une règle (-A) à la chaîne contrôlant le trafic entrant INPUT, pour autoriser le trafic (-j ACCEPT), vers l interface (-i) eth0 et à destination du port ( dport) SSH (on aurait pu mettre 22). Maintenant vous pouvez vérifier vos règles iptables: Maintenant, acceptons tout le trafic web (www) entrant: # iptables -A INPUT -p tcp -i eth0 --dport 80 -j ACCEPT En regardant nos règles, nous avons: ACCEPT tcp -- anywhere anywhere tcp dpt:www Nous avons exceptionnellement autorisé le trafic tcp pour ssh et les ports web, mais comme nous n avons rien bloqué, tout le trafic passe quand même. Bloquer le trafic Maintenant que nous avons fini avec les autorisations, il faut maintenant bloquer le reste. Nous allons en fait modifier la politique par défaut (policy) de la chaîne INPUT : cette décision (DROP) s applique lorsqu aucune règle n a été appliqué à un paquet. Donc, si la tentative de connexion n est permise par aucune des règles précédentes, elle sera rejetée. # iptables -P INPUT DROP Chain INPUT (policy DROP) ACCEPT tcp -- anywhere anywhere tcp dpt:www Un autre moyen de procéder est l ajout en fin de chaîne d une règle supprimant les paquets (les paquets autorisés par les règles précédentes n atteindraient pas celle-ci), via iptables -P INPUT -j DROP, mais il faudrait alors faire attention à la positions des futures règles. Autoriser le trafic local Un petit problème de notre configuration est que même l interface locale (loopback) est bloquée. Nous pourrions avoir écrit les règles de rejet seulement pour eth0 en spécifiant -i eth0, mais nous pouvons aussi ajouter une règle pour loopback. Par exemple, nous pourrions l insérer en 2ème position : # iptables -I INPUT 2 -i lo -j ACCEPT
Page 3 sur 5 Fini! Pour lister les règles plus en détail. -v Tester votre Firewall Attention un scan de port sur un serveur qui ne vous appartient pas est considéré comme une attaque. Afin de savoir si votre firewall fonctionne, vous pouvez utiliser l utilitaire nmap (http://insecure.org/nmap/). Avec nmap vous allez chercher à savoir quel est l état de vos ports. Il y a 3 états possibles : open : Le port est ouvert et un service écoute le port. closed : Le port est ouvert mais il n y a aucun service qui écoute le port. filtered : Le port est fermé. Pour utiliser nmap, vous devez vous situer sur un autre serveur (ou de chez vous) et procéder ainsi : root@dedibox:#nmap IPdevotrededibox -p leport Pratique Firewall Nous allons voir à présent dans un exemple pratique comment vous pouvez configurer un firewall simple sur votre dedibox. Créer un fichier firewall en root dans /etc/init.d/firewall root@dedibox:#nano /etc/init.d/firewall Entrer dans ce fichier le script bash suivant : #!/bin/bash echo Setting firewall rules... # # config de base dedibox # Florian Cristina # ###### Debut Initialisation ###### # Interdire toute connexion entrante iptables -t filter -P INPUT DROP iptables -t filter -P FORWARD DROP echo - Interdire toute connexion entrante : [OK] # Interdire toute connexion sortante iptables -t filter -P OUTPUT DROP echo - Interdire toute connexion sortante : [OK] # Vider les tables actuelles iptables -t filter -F iptables -t filter -X echo - Vidage : [OK] # Autoriser SSH
Page 4 sur 5 iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT echo - Autoriser SSH : [OK] # Ne pas casser les connexions etablies iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT echo - Ne pas casser les connexions établies : [OK] ###### Fin Inialisation ###### ##### Debut Regles ###### # Autoriser les requetes DNS, FTP, HTTP, NTP iptables -t filter -A OUTPUT -p tcp --dport 21 -j ACCEPT iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT iptables -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT iptables -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT echo - Autoriser les requetes DNS, FTP, HTTP, NTP : [OK] # Autoriser loopback iptables -t filter -A INPUT -i lo -j ACCEPT iptables -t filter -A OUTPUT -o lo -j ACCEPT echo - Autoriser loopback : [OK] # Autoriser ping iptables -t filter -A INPUT -p icmp -j ACCEPT iptables -t filter -A OUTPUT -p icmp -j ACCEPT echo - Autoriser ping : [OK] # HTTP iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT iptables -t filter -A INPUT -p tcp --dport 8443 -j ACCEPT echo - Autoriser serveur Apache : [OK] # FTP modprobe ip_conntrack_ftp iptables -t filter -A INPUT -p tcp --dport 20 -j ACCEPT iptables -t filter -A INPUT -p tcp --dport 21 -j ACCEPT iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT echo - Autoriser serveur FTP : [OK] # Mail iptables -t filter -A INPUT -p tcp --dport 25 -j ACCEPT iptables -t filter -A INPUT -p tcp --dport 110 -j ACCEPT iptables -t filter -A INPUT -p tcp --dport 143 -j ACCEPT iptables -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT iptables -t filter -A OUTPUT -p tcp --dport 110 -j ACCEPT iptables -t filter -A OUTPUT -p tcp --dport 143 -j ACCEPT echo - Autoriser serveur Mail : [OK] ###### Fin Regles ###### echo Firewall mis a jour avec succes! Donner lui les droits d éxécutions root@dedibox:#chmod +x /etc/init.d/firewall Lancer le script root@dedibox:#/etc/init.d/firewall Votre firewall est configuré et fonctionnel. Enjoy :) Informations supplémentaires Tutoriel Iptables How To Iptables
Page 5 sur 5 Documentation Multilingue de Netfilter et Iptables IPtables HOWTO français Bible française pour apprendre les bases de la sécurité sous Linux Rusty's Remarkably Unreliable Guides Tutorial Labo-Linux de l'école Supinfo Tutorial de Arnaud sur Lea linux Crédits Merci à Rusty Russell et son How-To, il est la base de cette page. Et merci surtout pour son travail au sein de l équipe de développement de Netfilter :) admin/iptables.txt Dernière modification: 10/25/2006 12:56 par artiflo