Ceci est une ancienne révision du document !
IPTables - Installation et gestion de pare-feu
Création — Nicolas THOREZ 2022/07/20 08:47
Un pare-feu est un élément indispensable à la sécurité d'un serveur. Il permet de de contrôler les flux réseaux entrants, sortants et/ou transitant par ce serveur en autorisant ou interdisant ces dît flux.
Le principe est simple : le pare-feu est composé de règles et de politiques globales. Lorsqu'un flux passe sur le serveur, il est automatiquement analysé par ce dernier selon son trajet (entrant, sortant, transit). Le pare-feu va comparer ce flux à chacune de ces règles jusqu'à la dernière (si tout est bien configuré, cette dernière règle est la politique globale). Dès qu'il trouve une correspondance, il applique la règle et passe au flux suivant.
Ordre des règles
L'ordre des règles de pare-feu est extrêmement importante, ce dernier traitant la première règle correspondante trouvée. Ainsi, si votre 1ère règle autorise ou refuse tous les flux, les suivantes ne seront jamais traitées. Il est donc indispensable de commencer la liste des règles par les plus spécifiques possibles et de terminer par les règles plus générales, la dernière devant toujours être la politique par défaut.Politique par défaut
Pour des raisons de sécurité, les politiques par défaut sont généralement desrefus (DROP).
Il est toujours préférable de tout interdire et de n'autoriser que les flux identifiés comme utiles ou nécessaires. Cependant, il arrive qu'une exception pour le flux sortant soit faite. La politique par défaut pour ce flux devient alors autorisé (ACCEPT), considérant que les flux de l'intérieur vers l'extérieur sont maitrisés et légitimes (ce qui n'est pas toujours le cas).
Installation de IPTables
Droits
Attention, l'installation et le paramétrage de IPTables nécessitent des droitsroot. La plus grande prudence est donc requise.- L'installation est assez simple :
apt update && apt upgrade -y iptables
- On s'assure d'utiliser le bon programme de pare-feu :
update-alternatives --set iptables /usr/sbin/iptables-legacy
- On active le démarrage automatique du service :
systemctl enable iptables
Le service iptables est désormais installé, on peut vérifier les règles actuelles avec la commande :
iptables -L -n
Ce qui nous donne :
Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
Comme on peut le voir, par défaut le pare-feu autorise absolument tout, le rendant de fait particulièrement inutile. Il nous faut donc le paramétrer avant de pouvoir correctement l'utiliser.
Paramétrage
Le fichier principal du service est /etc/init.d/iptables. On va donc le modifier pour qu'il ressemble à cela :
#!/bin/bash -e
### BEGIN INIT INFO
# Provides: iptables
# Required-Start: $network $syslog
# Required-Stop: $network $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Set firewall rules at boot
# Description: Set firewall rules at boot from /etc/iptables-base.conf and /etc/iptables.d
### END INIT INFO
PATH=/sbin:/usr/sbin:/bin:/usr/bin
do_start () {
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables-restore < /etc/iptables-base.conf
find /etc/iptables.d/ -type f | sort | while read f
do
iptables-restore -n < $f
done
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
}
do_stop () {
iptables -P INPUT ACCEPT
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
}
case "$1" in
start)
do_start
;;
restart|reload|force-reload)
do_start
;;
stop)
do_stop
;;
*)
echo "Usage: iptables [start|stop]" >&2
exit 3
;;
esac
:
Quelques explication pour do_start :
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
On supprime les règles existantes dans les tables NAT (qui permet le routage d'une adresse vers une autre) et MANGLE (qui permet la modification des paquets). A noter qu'on ne touche pas aux règles dynamiques afin de ne pas couper les connexions en cas de recharge du pare-feu.
iptables-restore < /etc/iptables-base.conf
On recharge les règles de base contenues dans le fichier /etc/iptables-base.conf.
find /etc/iptables.d/ -type f | sort | while read f
do
iptables-restore -n < $f
done
On recharge les règles spécifiques contenues dans le dossier /etc/iptables.d/.
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
On applique les politiques par défaut pour les chaînes d'entrée (INPUT), de transit (FORWARD) et de sortie (ACCEPT). A noter que l'on trouve souvent ces règles en début de script, hors, d'expérience, il est préférable de les mettre en dernière position afin de s'assurer qu'elles ne seront pas écrasées par d'autres règles.
Discussion