Installation et configuration d’un firewall Iptables

Un serveur en production est soumis à de nombreuses requêtes venant de partout. Leurs buts ? Trouver une faille pour transformer votre serveur en zombie. Les serveur hébergés dans des datacenter sont des cibles de choix, bande passante importante et disponibilité constante.

Il vaut donc mieux changer votre port d’écoute SSH car c’est le service le plus critique. Mais aussi configurer votre firewall. Le mieux étant de rester très restrictif.

Je vais vous proposer ici une configuration qui va par défaut drop (ne pas répondre) les paquets. Puis nous allons lister tout les ports que nous voulons garder ouvert.

Listes les services présent sur votre serveur

Nous allons bloquer tout le trafic entrant, il faut donc savoir quels sont les ports en écoute sur le serveur, pour autoriser le trafic en destination de ces ports.

netstat -tulpn | grep LISTEN

Je vous conseille de vérifier tout les services, il est possibles que votre serveur héberge des services que vous ne voulez pas rendre disponible sur internet.

Configuration

Pour pouvoir vous souvenir de pourquoi vous avez mit telle au telle ligne, je vous conseille de faire un fichier bash qui va contenir toutes les insertions de règles.

Si vous perdez votre connexion SSH vous pourrez toujours redémarrer votre machine (en hard si vous avez accès sinon via le panel de votre hébergeur), toutes les règles ne seront pas reéxécutés.

C’est une configuration en IPv4, la même chose est a faire en IPv6 avec la commande ipv6tables !

#!/bin/sh
IPT="/sbin/iptables"

# Supression des anciennes regles pour que celles presentes soient appliques
$IPT --flush
$IPT --delete-chain
$IPT -t nat --flush
$IPT -t nat --delete-chain

# Regles par defaut
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT ACCEPT # On choisit la solution de facilité et on permet au serveur d'accéder a tout le monde extérieur. Une meilleure pratique est de bloquer la sortie de certains paquets qui pourraient être émis en cas de compromisation de votre serveur. Ce qui permanenterait de réduire les attaques possible à partir de votre serveur.

# Aucune restriction sur l'interface de loopback
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT

# All TCP session

# Oblige que les paquets TCP commencent pas une connexion (comportement normal de TCP)
$IPT -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

# On accepte tout les paquets qui proviennent d'une session TCP déjà établie.
# Si le serveur ouvre une connexion TCP vers un destination extérieur, via
# cette commande, la réponse ne sera pas DROP.
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -p tcp --dport 20 -j ACCEPT # ftp-data
$IPT -A INPUT -p tcp --dport 21 -j ACCEPT # ftp
$IPT -A INPUT -p tcp --dport 22 -j ACCEPT # SSH
$IPT -A INPUT -p tcp --dport 80 -j ACCEPT # http
$IPT -A INPUT -p tcp --dport 443 -j ACCEPT # https

# Accepte les paquets ICMP (pour la configuration des protocoles de routage internet comme BGP
# ICMP ping est utilisé, nous autorisons donc les pings)
$IPT -A INPUT -p ICMP --icmp-type 8 -j ACCEPT

Valider votre configuration

Faites bien tout les tests de tout vos service pour être bien sur que tout est bon. Une fois le cas il vous reste plus qu’a rendre cette configuration permanente (après un reboot iptables reprendra la configuration que vous avez mise).

Sauvegarder votre configuration

Pour sauvegarder votre configuration (vérifiez bien avant que tout est bon !).
Vous aurez besoin de la commande iptables-save.
Vous devez l’installer via.

apt-get install iptables-converter

ou

apt-get install iptables-persistent
mkdir /etc/iptables
iptables-save > /etc/iptables/rules

Cela permet de sauvegarder les règles iptables dans le fichier /etc/iptables/rules

Nous allons maintenant faire un script pour charger ce fichier. Pour cela on va utiliser un hook présent dans ifconfig. Avant que les interfaces réseaux soit disponibles (montées), nous allons charger les règles iptables.

Créez un fichier /etc/network/if-pre-up.d/iptables et mettez cette commande dedans :

#!/bin/sh
/sbin/iptables-restore < /etc/iptables/rules

N’oubliez pas de donner les droit d’execution a ce nouveau fichier et tout est bon !

chmod +x /etc/iptables/rules
Remi

A propos de Rémi ANGENIEUX

Maintenant ingénieur en informatique et réseaux, j'ai commencé très tôt cette discipline. Dès l'âge de 12 ans j'ai appris le PHP. Grâce a ma capacité d'autodidacte j'ai pu rapidement apprendre de nombreuses technologies, consolidées par la suite grâce à une formation à l'IUT d'Annecy puis une école d'ingénieur à Grenoble-INP-ESISAR.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces balises et attributs HTML :

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>