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édente | ||
technique:adminsys:secu:firewall [2023/06/10 19:01] – qduchemi | technique:adminsys:secu:firewall [2023/06/10 19:08] (Version actuelle) – qduchemi | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | {{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 cela on utilise [ufw](https:// | ||
+ | |||
+ | < | ||
+ | |||
+ | ## 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' | ||
+ | |||
+ | ```bash | ||
+ | apt-get install ufw | ||
+ | ``` | ||
+ | |||
+ | ### Configuration (machines virtuelles) | ||
+ | |||
+ | Sur la plupart des machines, l' | ||
+ | |||
+ | Les règles de base seront donc : | ||
+ | |||
+ | ```bash | ||
+ | # Autorisation du SSH | ||
+ | ufw allow in 22 | ||
+ | # Autorisation pour le web | ||
+ | ufw allow in 80 | ||
+ | ufw allow in 443 | ||
+ | # On ouvre la socket Docker sur le réseau | ||
+ | ufw allow in 2376 | ||
+ | ``` | ||
+ | |||
+ | < | ||
+ | |||
+ | Pour un cas très spécifique : lorsque vous essayez d' | ||
+ | |||
+ | ```bash | ||
+ | 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' | ||
+ | |||
+ | Les règles de base seront donc : | ||
+ | |||
+ | ```bash | ||
+ | # Autorisation du SSH | ||
+ | ufw allow in 22 | ||
+ | # Autorisation pour DNS | ||
+ | ufw allow in 53 | ||
+ | # Autorisation pour Let's Encrypt (certificats Proxmox) | ||
+ | ufw allow in 80 | ||
+ | # Autorisation du GUI Proxmox | ||
+ | ufw allow in 8006 | ||
+ | ``` | ||
+ | |||
+ | ### Configuration pour toutes les machines | ||
+ | |||
+ | Enfin on définit une politique d' | ||
+ | |||
+ | ```bash | ||
+ | ufw default deny | ||
+ | ufw default allow outgoing | ||
+ | ufw enable | ||
+ | ``` | ||
+ | |||
+ | ### Vérification | ||
+ | |||
+ | La commande `ufw status` liste les règles activées sur le système. Exemple : | ||
+ | |||
+ | ``` | ||
+ | Status: active | ||
+ | |||
+ | To | ||
+ | -- | ||
+ | 9100/ | ||
+ | 22 | ||
+ | 80 | ||
+ | 443 ALLOW | ||
+ | 2376 | ||
+ | 64738 ALLOW | ||
+ | 9323/ | ||
+ | 9100/ | ||
+ | 22 (v6) ALLOW | ||
+ | 80 (v6) ALLOW | ||
+ | 443 (v6) | ||
+ | 2376 (v6) ALLOW | ||
+ | 64738 (v6) | ||
+ | 9323/ | ||
+ | ``` | ||
+ | |||
+ | < | ||
+ | |||
+ | ### Supprimer une règle | ||
+ | Pour supprimer une règle, on récupère son " | ||
+ | |||
+ | ``` | ||
+ | ufw status numbered | ||
+ | ``` | ||
+ | |||
+ | Puis on peut la supprimer : | ||
+ | |||
+ | ``` | ||
+ | ufw delete < | ||
+ | ``` | ||
+ | |||
+ | < | ||
+ | |||
+ | ## 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 / | ||
+ | ``` | ||
+ | </ |