Créer un pare-feu avec iptables

Protéger votre Raspberry Pi avec iptables

Iptables est un outil de filtrage de paquets réseau qui permet de contrôler le trafic entrant et sortant de votre Raspberry Pi.
En configurant correctement iptables, vous pouvez renforcer la sécurité de votre appareil en bloquant les connexions non autorisées et en autorisant uniquement les services nécessaires.

Principe de fonctionnement

Iptables fonctionne en utilisant des règles qui définissent comment traiter les paquets réseau. Ces règles sont organisées en chaînes (INPUT, OUTPUT, FORWARD) et en tables (filter, nat, mangle).
Chaque règle spécifie des critères de correspondance (par exemple, adresse IP source, port de destination) et une action à effectuer (ACCEPT, DROP, REJECT). Si aucune règle ne correspond à un paquet, iptables applique une règle par défaut (par exemple, DROP ou ACCEPT).

Exemple de configuration

Voici un exemple de configuration basique pour sécuriser votre Raspberry Pi avec iptables :
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -j DROP
Cette configuration permet les connexions établies et les connexions SSH (port 22), et bloque toutes les autres connexions entrantes.

Enregistrer les règles

Pour que vos règles iptables soient persistantes après un redémarrage, vous devez les enregistrer. Sur un Raspberry Pi, vous pouvez utiliser le paquet `iptables-persistent` :
sudo apt-get install iptables-persistent
Cette commande installe le paquet qui permet de sauvegarder les règles iptables. Ensuite, vous pouvez enregistrer vos règles actuelles avec la commande suivante :
sudo netfilter-persistent save

Règles de base

Voici quelques règles de base que vous pouvez ajouter à votre configuration iptables pour renforcer la sécurité de votre Raspberry Pi :
# comportement par défaut
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
# Autoriser les connexions établies et liées
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
	
# Autoriser les connexions SSH
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
	
# Autoriser les connexions HTTP et HTTPS
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT 
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
	
# Bloquer les connexions ICMP (ping)	
sudo iptables -A INPUT -p icmp -j DROP