IPTables, le firewall sous Linux

Transcription

IPTables, le firewall sous Linux
Nicolas Dewaele
Firewall Iptables - Netfilter
[email protected]
http://nicodewaele.free.fr
Firewall avec Iptables – NetFilter
I- Introduction :
NetFilter et iptables :
Les noyaux 2.4 et supérieurs de Linux contiennent un logiciel très puissant de filtrage de paquets
IP appellé NetFilter et qui utilise iptables. Il remplace ipchains, utilisé sur les noyaux 2.2.
A partir de ces cinq point d'entrée, NetFilter va être capable de faire :
–
–
–
du filtrage de paquets (FILTER)
de la translation d'adresses ou de ports (NAT)
de la modification de paquets (MANGLE) non abordé ici
Commande iptables :
La commande iptables permet d'ajouter, de modifier ou de supprimer des règles de filtrage :
Dernières modifications le 30/03/11
- Page 1 -
Nicolas Dewaele
Firewall Iptables - Netfilter
[email protected]
http://nicodewaele.free.fr
II- Passer à l'action :
Configuration de base du firewall :
Première étape : On vide tout.
iptables -F // Vidage des règles dans les chaînes
iptables -X // Suppression des chaînes autres que celles par défaut
iptables -t nat -F // Idem mais pour la table nat
iptables -t nat -X
iptables -t mangle -F // Idem mais pour la table mangle
iptables -t mangle -X
Après avoir tout vidé on interdit toutes les connexions :
iptables -P INPUT DROP // Toutes les entrées sont bloquées
iptables -P OUTPUT DROP // '' sorties
iptables -P FORWARD DROP // '' transmissions
// On peut faire pareil pour les tables NAT et MANGLE
La première règle d'acceptation va être le droit de tout faire sur l'interface lo (loopback) :
iptables -A INPUT -i lo -j ACCEPT // On accepte les entrées sur lo
iptables -A OUTPUT -o lo -j ACCEPT // On accepte les sorties sur lo
iptables -A FORWARD -i lo -j ACCEPT // On accepte le forward en entrée
iptables -A FORWARD -o lo -j ACCEPT // et en sortie
Le firewall fonctionne suivant les règles qu'il contient, vous n'avez pas besoin
d'enregistrer votre configuration pour appliquer vos règles
Sauvegarder / restaurer une configuration
Vous pouvez sauvegarder une configuration du firewall pour pouvoir la restaurer quand vous en
aurez besoin en tapant cette commande :
iptables-save > votre_fichier
Les règles vont alors être écrites dans ce fichier et pourront être restaurées très facilement :
iptables-restore < votre_fichier
Je vous conseille de sauvegarder vos tables à chaque fois que vous voulez tester une
configuration et surtout de sauvegarder la configuration d'origine pour pouvoir la restaurer en
cas de problème.
Dernières modifications le 30/03/11
- Page 2 -
Nicolas Dewaele
Firewall Iptables - Netfilter
[email protected]
http://nicodewaele.free.fr
Filtrage des entrées et des sorties :
C'est à partir de là que ça devient intéressant, on va pouvoir accepter seulement certaines
entrées et certaines sorties. Par exemple, la navigation sur Internet nécessite d'ouvrir une
session TCP sur le port 80 du serveur que l'on veut visiter :
Il va donc falloir autoriser l'envoi de données vers le port TCP 80 et la réception depuis ce même
port :
iptables -A INPUT -p tcp --sport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
D'autre part, il faut aussi accepter de laisser passer les requêtes DNS car quand on visite un
site, on tape son nom (ex : www.google.fr) et non pas son adresse IP :
iptables -A INPUT -p tcp --sport 53 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
Si vous ne connaissez pas les principaux numéros de ports TCP et UDP et que vous
demandez lesquels vous devez ouvrir ou fermer, affichez ce fichier :
cat /etc/services
Vous pourrez voir le nom du service, le numéro de port qui est associé et le protocole sur lequel
il se base. Par exemple :
Protocole pop3 : ports UDP et TCP 110
Protocole telnet : port TCP 23
Ensuite, on peut autoriser une adresse ou un groupe d'adresses à passer à travers notre serveur :
iptables -A FORWARD -i eth0 -o eth1 -s 172.16.0.0/16 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -d 172.16.0.0/16 -j ACCEPT
En fait, avec la table Filter, on peut faire une quasi infinité de filtrages :
– Par
– Par
– Par
– Par
– Par
– Par
– Par
adresses MAC
adresses IP
interfaces
protocoles (ICMP, TCP ou UDP)
ports
états de connexion
flag TCP
Dernières modifications le 30/03/11
- Page 3 -
Nicolas Dewaele
Firewall Iptables - Netfilter
[email protected]
http://nicodewaele.free.fr
III- Aller plus loin :
Journalisation (logs) :
Vous pouvez journaliser les connexions qui ont été refusées par le firewall :
iptables -A INPUT -j LOG --log-prefix=«ATTAQUE RESEAU»
iptables -A OUTPUT -j LOG --log-prefix=«ATTAQUE RESEAU»
Filtrage par suivi de connexions :
Iptables sait travailler par état de connexions (utile pour le protocole TCP). Il existe 4 états :
– L'état NEW vérifie qu'il s'agit d'une demande de connexion TCP
– L'état ESTABLISHED vérifie que la connexion avec la serveur était déjà établie
– L'état RELATED vérifie que la connexion fait suite à une connexion déjà établie (renégociation de ports avec le serveur).
– L'état INVALID concerne les connexions qui ne sont ni NEW, ni ESTABLISHED, ni RELATED.
Dans l'exemple suivant, personne ne peut entrer pour accéder à un serveur car la chaîne INPUT
n'accepte pas les demandes de connexions des clients (pas de NEW).
Par contre, en sortie, on peut demander à se connecter à des serveurs.
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
Filtrage d'adresses MAC :
iptables -A INPUT -m mac --mac-source 00:11:22:33:44:55
Limitations :
Pour éviter qu'un attaquant n'envoie des masses de demandes pour submerger votre serveur et
lui faire un deni de service (attaques DoS), il faut limiter le nombre de requêtes, par exemple :
iptables -A INPUT -m limit --limit 3/second
NAT : Masquage d'adresses :
Il est également possible de se servir d'iptables pour faire du NAT : Cet exemple montre
comment masquer les adresses de toutes les machines du réseau local 192.168.1.0/24 pour leur
permettre d'aller sur Internet :
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
Dernières modifications le 30/03/11
- Page 4 -
Nicolas Dewaele
Firewall Iptables - Netfilter
[email protected]
http://nicodewaele.free.fr
IV- En complément :
Distributions spécialisées :
Certaines distribution Linux sont spécialisées dans le filtrage. IPCop est très connue et très
utilisée. PFSense est connue également et fonctionne sur BSD. Enfin NuFw de la société
Edenwall est un pare-feu très complet.
GuFw et Firestarter : iptables pour les nuls :
Si le but du jeu est de protéger un poste utilisateur sous Linux, vous n'allez pas configurer
Iptables pour ça. Des logiciels comme GuFw ou Firestarter s'en chargent pour vous. C'est très
simple à installer et à configurer.
Mort aux rootkits !
Vous pouvez installer le logiciel RootKitHunter. Il ira tous les jours à la chasse aux rootkits
(logiciels pirates cachés sur votre machine). Si il rapporte du gibier, il vous préviendra par mail.
http://doc.ubuntu-fr.org/rootkit
Listes noires automatiques :
Deux logiciels sont capables de bannir des attaquants quand ceux ci ont trop essayé de se
connecter à votre machine (ceci évite les attaques par force brute essayant sur un serveur SSH,
par exemple, tous les mots de passe possibles).
Fail2ban :
http://doc.ubuntu-fr.org/fail2ban
DenyHosts :
http://doc.ubuntu-fr.org/denyhosts
Port Knocking (Frappez avant d'entrer !) :
Le port knocking permet de faire une combinaison de demande de connexion sur plusieurs ports
avant que le firewall ouvre un port important (typiquement celui du SSH).
Tout est parfaitement expliqué ici :
http://www-igm.univ-mlv.fr/~dr/XPOSE2004/killy/
Liens :
Tout ce qu'il faut savoir sur Iptables se trouve ici :
http://olivieraj.free.fr/fr/linux/information/firewall/index.html
http://www.linux-france.org/prj/inetdoc/guides/iptables-tutorial/
http://www.alsacreations.com/tuto/lire/622-Securite-firewall-iptables.html
Dernières modifications le 30/03/11
- Page 5 -

Documents pareils