Added firewall tutorial

This commit is contained in:
Romain de Laage 2020-04-20 15:40:31 +02:00
parent c4719afb59
commit 8721c786ec
1 changed files with 98 additions and 0 deletions

98
firewall.md Normal file
View File

@ -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 <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
```