Mise en place d’un pare-feu sous Debian

Rédigé par monptitnuage - - Aucun commentaire
Le firewall est l’élément indispensable pour sécuriser son serveur. Il va en effet filtrer tout le trafic en n’autorisant que les échanges permis par l’administrateur. Sans firewall correctement réglé, tous les trafics sont plus ou moins permis (c’est à dire qu’un attaquant peut faire ce qu’il veut chez vous) et ce genre de faille est détectable par un simple scan de ports.

Or, le noyau Linux offre déjà un pare-feu à l’utilisateur, qu’il est possible de configurer via le logiciel iptables (normalement contenu dans /sbin/iptables). Vérifier, avant de commencer la création du script, que le paquet iptables est bien installé.

Ici mon firewall est implémentée sur ma Debian mais ce tutoriel fonctionne pour n'importe qu'elles distributions.

Etape 1 : on commence la création du script avec nano /etc/init.d/firewall et on y écrit : #!/bin/sh

### BEGIN INIT INFO
# Provides: firewall
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Démarre les règles iptables
# Description: Charge la configuration du pare-feu iptables
### END INIT INFO

Etape 2 : Réinitialisez les règles pour partir sur de bonnes bases :
iptables -F
iptables -X


Etape 3 : Ensuite bloquez par défaut tout le trafic (si vous êtes en ssh, bien entendu, n’exécutez pas encore le script.) :
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP


Etape 4 : nous indiquons avec les paramètres -m et --state de ne pas fermer les connexions déjà établies :
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT


Etape 5 : on autorise le loopback (évitons de se bloquer nous-mêmes, ce serait dommage)
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT


Remarque : lo signifie localhost,le serveur lui-même.

Pour le moment tout est bloqué, il ne nous reste plus qu’à ouvrir les ports que l’on utilise. Ci-dessous un exemple des ports les plus courant :


Ensuite la ligne de base pour la création d’une règle de filtrage sur un port est la suivante : iptables -A INPUT/OUTPUT -p protocole –dport/--sport port_a_ouvrir -j ACCEPT

Ci-dessous le script de base qui autorise les connexions sur les ports 22, 53, 80, 25, 110, 143, 123 ainsi que le ping (icmp) :
#!/bin/sh

# Reinitialise les regles
iptables -F
iptables -X

# Bloque tout le trafic
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

# Autorise les connexions deja etablies et localhost
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# ICMP (Ping)
iptables -A INPUT -p icmp -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT

# SSH
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
iptables -P OUTPUT DROP

# DNS
iptables -A OUTPUT -p tcp --sport 53 -j ACCEPT
iptables -A OUTPUT -p udp --sport 53 -j ACCEPT
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j ACCEPT

# HTTP
iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

# FTP
sudo iptables -A OUTPUT -p tcp --sport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT

# Mail SMTP
iptables -A INPUT -p tcp --dport 25 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 25 -j ACCEPT

# Mail POP3
iptables -A INPUT -p tcp --dport 110 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 110 -j ACCEPT

# Mail IMAP
iptables -A INPUT -p tcp --dport 143 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 143 -j ACCEPT

# NTP (horloge du serveur)
iptables -A OUTPUT -p udp --dport 123 -j ACCEPT



Lorsque vous avez défini toutes les règles, rendez ce fichier exécutable en tapant la commande chmod +x /etc/init.d/firewall

Vous pourrez le tester en l'exécutant directement en ligne de commande. Assurez-vous d'avoir toujours le contrôle de votre machine (reconnectez-vous en SSH, vérifiez la disponibilité des services web, ftp, mail...).
En cas d'erreur, redémarrez le serveur, les règles seront oubliées et vous permettront de reprendre la main. En revanche, si les tests s'avèrent concluants, ajoutez le script au démarrage pour que celui-ci protège le serveur dès le boot.

Afin de l'ajouter aux scripts appelés au démarrage : update-rc.d firewall defaults

Pour le retirer, vous pouvez utiliser la commande suivante : update-rc.d -f firewall remove

Redémarrez, ou exécutez /etc/init.d/firewall pour activer le filtrage.

Technicien helpdesk
Webmasteur et rédacteur du blog monptitnuage
Vous pouvez me suivre sur Twitter : @monptitnuage

Écrire un commentaire

Quelle est la troisième lettre du mot nztug ?