Gestion du pare-feu

Gestion du pare-feu #

Edit: on fera de même avec la commande ip6tables pour gérer les connexions IPv6

Le pare-feu permet de gérer les connexion au serveur, c’est à dire le réseau sur la machine. Pour cela j’utilise la commande iptables pour gérer les connexions IPv4 sur mon infrastructure.

On commencera par créer un fichier firewall.sh que l’on complètera au fur et à mesure.

On peut commencer par regarder les règles existantes grâce à la commande iptables -L. On remarquera que la chaîne policy ACCEPT revient souvent, cela veut dire que par défaut toutes les connexions sont acceptées sans restriction. C’est un comportement que nous voudrons changer.

On va commencer par ajouter dans notre fichier firewall.sh la commande iptables -F qui va effacer toutes les règles existentes pour partir sur des bases propres. Puis iptables -X pour effacer toutes les règles non prédéfinies.

Ensuite on renseigne les politiques par défaut, nous souhaitons rejeter pour l’entrée, la sortie, et la transmission :

iptables -P OUTPUT DROP
iptables -P INPUT DROP
iptables -P FORWARD DROP

Si on veut continuer à autoriser les connexions déjà établies on peut ajouter :

iptables -A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT

On peut aussi vouloir autoriser toutes les connexions entre les programmes s’exécutant sur la même machine :

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

ensuite il faut autoriser les connexions pour chaque service en entrée : iptables -A INPUT -p tcp --dport <PORT> -j ACCEPT, et en sortie : iptables -A OUTPUT -p tcp --dport <PORT> -j ACCEPT.

Exemple de configuration #

#!/bin/sh

########
# IPv4 #
########

# Flush
iptables -F
iptables -X

# Politics
iptables -P OUTPUT DROP
iptables -P INPUT DROP
iptables -P FORWARD DROP

# Established connexions
iptables -A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT

# Authorize loopback
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# SSH
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# HTTP(S)
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT

########
# IPv6 #
########

# Flush
ip6tables -F
ip6tables -X

# Politics
ip6tables -P OUTPUT DROP
ip6tables -P INPUT DROP
ip6tables -P FORWARD DROP

# Established connexions
ip6tables -A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
ip6tables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT

# Authorize loopback
ip6tables -A INPUT -i lo -j ACCEPT
ip6tables -A OUTPUT -o lo -j ACCEPT

# SSH
ip6tables -A INPUT -p tcp --dport 22 -j ACCEPT

# HTTP(S)
ip6tables -A INPUT -p tcp --dport 80 -j ACCEPT
ip6tables -A INPUT -p tcp --dport 443 -j ACCEPT

ip6tables -A OUTPUT -p tcp --dport 80 -j ACCEPT
ip6tables -A OUTPUT -p tcp --dport 443 -j ACCEPT