Ci-dessous, les différences entre deux révisions de la page.
admin:iptables [2011/02/02 22:42] |
admin:iptables [2011/02/02 22:42] (Version actuelle) |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | Article original [[https:// | ||
+ | ====== 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' | ||
+ | Iptables est l' | ||
+ | |||
+ | 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' | ||
+ | |||
+ | 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 INPUT (policy ACCEPT) | ||
+ | target | ||
+ | |||
+ | Chain FORWARD (policy ACCEPT) | ||
+ | target | ||
+ | |||
+ | Chain OUTPUT (policy ACCEPT) | ||
+ | target | ||
+ | </ | ||
+ | |||
+ | Pour l' | ||
+ | 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, | ||
+ | </ | ||
+ | |||
+ | === 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. | ||
+ | < | ||
+ | # 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' | ||
+ | |||
+ | Maintenant vous pouvez vérifier vos règles iptables: | ||
+ | < | ||
+ | # iptables -L | ||
+ | Chain INPUT (policy ACCEPT) | ||
+ | target | ||
+ | ACCEPT | ||
+ | ACCEPT | ||
+ | </ | ||
+ | |||
+ | 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: | ||
+ | < | ||
+ | # iptables -L | ||
+ | Chain INPUT (policy ACCEPT) | ||
+ | target | ||
+ | ACCEPT | ||
+ | ACCEPT | ||
+ | ACCEPT | ||
+ | </ | ||
+ | |||
+ | Nous avons exceptionnellement autorisé le trafic tcp pour ssh et les ports web, mais comme nous n' | ||
+ | |||
+ | === Bloquer le trafic === | ||
+ | Maintenant que nous avons fini avec les autorisations, | ||
+ | Nous allons en fait modifier la " | ||
+ | |||
+ | < | ||
+ | # iptables -P INPUT DROP | ||
+ | # iptables -L | ||
+ | Chain INPUT (policy DROP) | ||
+ | target | ||
+ | ACCEPT | ||
+ | ACCEPT | ||
+ | ACCEPT | ||
+ | </ | ||
+ | |||
+ | **Un autre moyen de procéder** est l' | ||
+ | |||
+ | === Autoriser le trafic local === | ||
+ | |||
+ | Un petit problème de notre configuration est que même l' | ||
+ | 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' | ||
+ | |||
+ | < | ||
+ | # iptables -I INPUT 2 -i lo -j ACCEPT | ||
+ | </ | ||
+ | |||
+ | Fini ! | ||
+ | |||
+ | Pour lister les règles plus en détail. | ||
+ | < | ||
+ | # iptables -L -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' | ||
+ | Avec nmap vous allez chercher à savoir quel est l' | ||
+ | |||
+ | 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:# | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== 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 / | ||
+ | < | ||
+ | root@dedibox:# | ||
+ | </ | ||
+ | |||
+ | 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 | ||
+ | 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, | ||
+ | iptables -A OUTPUT -m state --state RELATED, | ||
+ | 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, | ||
+ | echo - Autoriser serveur FTP : [OK] | ||
+ | |||
+ | |||
+ | 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' | ||
+ | < | ||
+ | root@dedibox:# | ||
+ | </ | ||
+ | |||
+ | Lancer le script | ||
+ | < | ||
+ | root@dedibox:#/ | ||
+ | </ | ||
+ | |||
+ | Votre firewall est configuré et fonctionnel. Enjoy :) | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== Informations supplémentaires ===== | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | | ||
+ | |||
+ | |||
+ | ===== 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' |