Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédenteDernière révisionLes deux révisions suivantes | ||
technique:adminsys:secu:firewall [2021/01/25 23:35] – qduchemi | technique:adminsys:secu:firewall [2023/06/10 19:08] – qduchemi | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | # Création d'un firewall basique | + | {{indexmenu_n> |
+ | # Filtrer le trafic autorisé : pare-feu | ||
Pour filtrer les accès au strict minimum sur les machines de Picasoft, on utilise un firewall. | Pour filtrer les accès au strict minimum sur les machines de Picasoft, on utilise un firewall. | ||
- | Pour cela on utilise [ufw](https:// | + | Pour cela on utilise [ufw](https:// |
- | ## Installation | + | < |
+ | |||
+ | ## Firewall basique avec ufw | ||
+ | |||
+ | < | ||
+ | Sur Debian 11, `iptables` est disponibles en deux versions : une moderne (nft) et une ancienne (legacy). La version moderne n'est plus compatible avec `ufw`, qui construit des règles `iptables`. | ||
+ | |||
+ | Beaucoup de gens critiquent `ufw`, et à raison. En revanche, pour ce qu'on en fait, et pour simplifier l' | ||
+ | |||
+ | Exécuter la commande : | ||
+ | |||
+ | ``` | ||
+ | update-alternatives --set iptables / | ||
+ | ``` | ||
+ | |||
+ | sur les machines qui font tourner Debian 11 pour utiliser l' | ||
+ | </ | ||
+ | |||
+ | ### Installation | ||
On commence par l' | On commence par l' | ||
Ligne 12: | Ligne 31: | ||
``` | ``` | ||
- | ## Configuration | + | ### Configuration |
- | + | ||
- | ### Pour les machines virtuelles | + | |
- | Sur la plupart des machines, l' | + | Sur la plupart des machines, l' |
Les règles de base seront donc : | Les règles de base seront donc : | ||
Ligne 23: | Ligne 40: | ||
# Autorisation du SSH | # Autorisation du SSH | ||
ufw allow in 22 | ufw allow in 22 | ||
- | # Autorisation | + | # Autorisation |
ufw allow in 80 | ufw allow in 80 | ||
ufw allow in 443 | ufw allow in 443 | ||
Ligne 30: | Ligne 47: | ||
``` | ``` | ||
- | ### Pour les hyperviseurs | + | < |
+ | |||
+ | Pour un cas très spécifique : lorsque vous essayez d' | ||
+ | |||
+ | ```sh | ||
+ | docker exec -it A bash | ||
+ | $ curl b.picasoft.net | ||
+ | ``` | ||
+ | |||
+ | sera bloqué. La magie de Docker et d' | ||
+ | |||
+ | ### Configuration (hyperviseurs) | ||
Sur la plupart des machines, l' | Sur la plupart des machines, l' | ||
Ligne 41: | Ligne 69: | ||
# Autorisation pour DNS | # Autorisation pour DNS | ||
ufw allow in 53 | ufw allow in 53 | ||
+ | # Autorisation pour Let's Encrypt (certificats Proxmox) | ||
+ | ufw allow in 80 | ||
# Autorisation du GUI Proxmox | # Autorisation du GUI Proxmox | ||
ufw allow in 8006 | ufw allow in 8006 | ||
``` | ``` | ||
- | ### Pour toutes les machines | + | ### Configuration pour toutes les machines |
Enfin on définit une politique d' | Enfin on définit une politique d' | ||
Ligne 55: | Ligne 85: | ||
``` | ``` | ||
- | < | + | ### Vérification |
- | Docker passe au travers des règles firewall configurées via `ufw`. Tout les services Docker qui écoutent directement sur un port de la machine (Traefik par exemple) sont donc automatiquement exposés sur Internet, sans protection du firewall.</ | + | |
- | + | ||
- | ## Vérification | + | |
La commande `ufw status` liste les règles activées sur le système. Exemple : | La commande `ufw status` liste les règles activées sur le système. Exemple : | ||
Ligne 85: | Ligne 112: | ||
< | < | ||
- | ## Supprimer une règle | + | ### Supprimer une règle |
Pour supprimer une règle, on récupère son " | Pour supprimer une règle, on récupère son " | ||
Ligne 100: | Ligne 126: | ||
< | < | ||
+ | |||
+ | ## Filtrage IP vers Docker | ||
+ | |||
+ | [[technique: | ||
+ | |||
+ | Comme on vient de le voir, Docker est « prioritaire » sur les règles `ufw`, il faut donc utiliser la chaîne spéciale `DOCKER-USER` pour ajouter nos bans IP. Les règles de cette chaîne sont évaluées avant tout // | ||
+ | |||
+ | < | ||
+ | |||
+ | < | ||
+ | Avant de bloquer une IP, il faut faire bien attention : les IP des VPS peuvent être ré-attribuées, | ||
+ | </ | ||
+ | |||
+ | ### Syntaxe pour rejeter une IP | ||
+ | |||
+ | ```bash | ||
+ | sudo iptables -I DOCKER-USER -i eth0 -s <IP> -j DROP | ||
+ | ``` | ||
+ | |||
+ | - `-I` permet d' | ||
+ | - `-i` spécifie l' | ||
+ | - `-s` spécifie l'IP source | ||
+ | - `-j` spécifie l' | ||
+ | |||
+ | ### Suppression d'une règle | ||
+ | |||
+ | On liste les règles de la chaîne `DOCKER-USER` avec leur numéro : | ||
+ | |||
+ | ```bash | ||
+ | sudo iptables -L DOCKER-USER --line-numbers | ||
+ | Chain DOCKER-USER (1 references) | ||
+ | num target | ||
+ | 1 DROP | ||
+ | 2 RETURN | ||
+ | ``` | ||
+ | |||
+ | On veut supprimer la première règle, alors : | ||
+ | |||
+ | ```bash | ||
+ | sudo iptables -D DOCKER-USER 1 | ||
+ | ``` | ||
+ | |||
+ | ### Vérification et persistance de la règle | ||
+ | |||
+ | ```bash | ||
+ | sudo iptables -L DOCKER-USER | ||
+ | Chain DOCKER-USER (1 references) | ||
+ | target | ||
+ | DROP | ||
+ | RETURN | ||
+ | ``` | ||
+ | |||
+ | On retrouve bien notre règle insérée en premier. | ||
+ | |||
+ | En revanche, les règles `iptables` ne sont pas persistantes. Un paquet Debian permet de les sauvegarder et de les repeupler au démarrage de la machine. | ||
+ | |||
+ | ```bash | ||
+ | sudo apt install iptables-persistent | ||
+ | ``` | ||
+ | |||
+ | Ce paquet installe un service `netfilter-persistent` qui charge les fichiers `/ | ||
+ | On peut vérifier qu'il tourne bien avec | ||
+ | |||
+ | ```bash | ||
+ | systemctl status netfilter-persistent | ||
+ | ``` | ||
+ | |||
+ | < | ||
+ | Chaque changement de règle doit s' | ||
+ | |||
+ | ```bash | ||
+ | sudo iptables-save | sudo tee / | ||
+ | sudo ip6tables-save | sudo tee / | ||
+ | ``` | ||
+ | </ |