date: 14 Oct 2009 title: Home serveur : protéger son serveur - configuration du pare feu tags: auto-hébergement, iptables, sécurité, planet-libre xrefs: home-serveur-tri-du-courrier-avec-sieve.txt, home-serveur-installation-du-serveur-web.txt, home-serveur-configuration-du-serveur-imap-dovecot.txt, home-serveur-premiers-reglages.txt, home-serveur-proteger-son-serveur-configuration-de-fail2ban.txt, home-serveur-recuperer-ses-mail-avec-fetchmail.txt, home-serveur-installation.txt, home-serveur-quelques-astuces-bien-utiles.txt, home-serveur-configuration-du-serveur-de-mail-postfix.txt, home-serveur-utilisation-de-cles-pour-ssh.txt, home-serveur-openssh.txt, home-serveur-sauvegarde-des-maildirs.txt Quel intérêt à mettre en place un pare feu ? Effectivement, comme votre serveur se trouve derrière une box routeur (pour la plupart d'entre vous), la box protège votre serveur : c'est vous qui redirigez volontairement les ports que vous voulez vers votre serveur, les demandes de connection sur d'autres ports sont ignorées par la box. Mais premièrement, votre serveur n'est pas seul sur votre réseau local, il cohabite avec d'autres ordinateurs, qui peuvent être des nids à toutes sortes de malwares. Dans ce cas, la box ne protège rien du tout. Deuxièmement, on le verra dans le prochain article, un pare feu ne se contente pas de bloquer ou autoriser les ports, il peut bloquer aussi les adresses IP, par exemple. Jusqu'à présent votre serveur ne possédait pas de pare feu, ou plutôt si, mais il laissait tout passer. Sous la plupart des distributions GNU-Linux, le pare feu est intégré au noyau en tant que module. Il s'appelle netfilter. Une interface, iptables, permet de le configurer. Le fonctionnement d'iptables est très complexe, vous pouvez trouver de la doc [ici](http://fr.wikipedia.org/wiki/Iptables)par exemple. ## Définition des règles Voici le principe que l'on va suivre : * Écrire quels paquets ENTRANTS sont autorisés. On va utiliser des règles d'iptables * Bloquer tous ce qui ne correspond pas aux règles précédentes * Tous les paquets sortants sont autorisés. Pour ce dernier point, je trouve qu'il faudrait être parano pour le filtrer. En fait le seul cas que je vois serai la présence d'un logiciel espion qui enverrais des données à ses serveurs. La configuration d'iptables est perdue à chaque reboot, il faut donc inscrire toutes les commandes suivantes dans un fichier qui sera lancé au démarrage. Bien commençons : D'abord, on autorise tous ce qui passe sur la boucle locale (lo). Aucune raison de la filtrer : iptables -A INPUT -i lo -j ACCEPT On autorise tous les paquets ICMP (notamment les pings) : iptables -A INPUT -p icmp -j ACCEPT On autorise tous les paquets qui correspondent à des connections qui sont déjà établies avec le serveur. Permet d'aller plus vite : iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT On autorise les connexions ssh (à remplacer par votre port !) : iptables -A INPUT -p tcp --dport 3030 -j ACCEPT On bloque tout le reste : iptables -P INPUT DROP Enfin, on logue tous les paquets bloqués, ça peut toujours servir : iptables -A INPUT -j LOG --log-prefix "IPTABLES: " Et bien sûr, tous les autres paquets sont ignorés : iptables -P INPUT DROP Notez que nous serons amené à ajouter de nouvelles règles par la suite, quand nous ajouterons un service web, mail, ... Vous pouvez télécharger le fichier complet et commenté directement sur votre serveur : wget http://billux13.se rvhome.org/atelecharger/set_iptables ## Exécution automatique du script Comme dit plus haut, iptables perd toutes ses règles au démarrage. Il faut donc relancer le script à chaque fois. Il est courant de voir sur Internet des tutos qui propose de créer un script d'init (à placer dans /etc/init.d/) du style start stop restart, et d'ajouter celui ci aux scripts lancés au démarrage. Nous nous allons faire à la fois mieux et beaucoup plus simple : notre script sera lancé automatiquement quand l'interface réseau sera activée : il suffit de le placer dans /etc/network/if-pre-up.d/. Tous les scripts présents dans ce répertoire seront exécutés automatiquement juste avant de démarrer l'interface réseau. Magique :) . Pour faire propre, nous allons aussi créer un script pour remettre iptables par défaut, lorsque le réseau sera arrêté. On réaccepte tout en entrée : iptables -P INPUT ACCEPT Et on efface toutes les règles : iptables -F Vous pouvez le télécharger et le placer, devinez où ? Dans /etc/network/if-post-down.d/ ! wget http://billux13.servhome.org/atelecharger/reset_iptables Et voila, redémarrez le réseau ou exécutez le script pour appliquer les règles à iptables. Vous pouvez les voir grâce à la commande sudo iptables -L Pour la suite, toujours sur iptables, nous verrons comment modifier les règles dynamiquement en fonction d'évènements «suspect» grâce à fail2ban.