Ceci est une ancienne révision du document !


IPTables - Installation et gestion de pare-feu

CréationNicolas 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 des refus (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 droits root. 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.

Entrer votre commentaire. La syntaxe wiki est autorisée:
 
  • iptables.1658304750.txt.gz
  • Dernière modification : 2022/07/20 10:12
  • de nekan