98 lines
3.0 KiB
Markdown
98 lines
3.0 KiB
Markdown
|
# 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
|
||
|
```
|