diff --git a/firewall.md b/firewall.md new file mode 100644 index 0000000..0049751 --- /dev/null +++ b/firewall.md @@ -0,0 +1,98 @@ +# 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 -j ACCEPT`, et en sortie : `iptables -A OUTPUT -p tcp --dport -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 +``` \ No newline at end of file