Outils pour utilisateurs

Outils du site


Couverture de survie

Le firewall de la Freebox

La Freebox v6 propose une case à cocher pour activer un firewall sur la délégation principale. Si celle-ci est activée, alors une autre case concernant les délégations secondaires devient activable.

Le problème, c'est que rien n'indique ce que fait ou ce que ne fait pas ce firewell et rien ne semble paramétrable. Aussi allons-nous utiliser notre maquette pour mettre en place sur demoserver un pare-feu certes minimaliste, mais qui aura le mérite d'être maîtrisé. Il y a plus loin un chapitre dédié au système de filtrage de paquets du noyau Linux.

Netfilter et Nftables (et Iptables)

Juste un mot pour donner du courage.

  • Netfilter, c'est le cœur du système de filtrage de paquets, présent dans le kernel Linux depuis les versions 2.4x. C'est un système extrêmement puissant et peu gourmand en ressources CPU.
  • IPtables, c'est l'outil qui permetait autrefois de définir les règles de filtrage que Netfilter doit suivre. La commande «iptables» permet de créer de manipuler ces règles. C'est en quelque sorte le «front-end» de Netfilter.
  • Nftables apparaît comme le successeur d'IPtables, toujours en appui sur Netfilter, mais avec plus de cohérence et d'efficacité.

Passer d'un système de gestion des règles à l'autre n'est pas simple, mais ce n'est pas ici le débat. IPtables est toujours activement supporté, bien que Debian 12 (Bookworm) installe nftables par défaut.

Ici, nous allons faire de la résistance, avec iptables, qu'il va falloir installer:

apt install iptables -y

...
Réception de :1 http://deb.debian.org/debian bookworm/main amd64 libip6tc2 amd64 1.8.9-2 [19,4 kB]
Réception de :2 http://deb.debian.org/debian bookworm/main amd64 libnfnetlink0 amd64 1.0.2-2 [15,1 kB]
Réception de :3 http://deb.debian.org/debian bookworm/main amd64 libnetfilter-conntrack3 amd64 1.0.9-3 [40,7 kB]
Réception de :4 http://deb.debian.org/debian bookworm/main amd64 iptables amd64 1.8.9-2 [360 kB]
....
Paramétrage de iptables (1.8.9-2) ...
update-alternatives: utilisation de « /usr/sbin/iptables-legacy » pour fournir « /usr/sbin/iptables » (iptables) en mode automatique
update-alternatives: utilisation de « /usr/sbin/ip6tables-legacy » pour fournir « /usr/sbin/ip6tables » (ip6tables) en mode automatique
update-alternatives: utilisation de « /usr/sbin/iptables-nft » pour fournir « /usr/sbin/iptables » (iptables) en mode automatique
update-alternatives: utilisation de « /usr/sbin/ip6tables-nft » pour fournir « /usr/sbin/ip6tables » (ip6tables) en mode automatique
update-alternatives: utilisation de « /usr/sbin/arptables-nft » pour fournir « /usr/sbin/arptables » (arptables) en mode automatique
update-alternatives: utilisation de « /usr/sbin/ebtables-nft » pour fournir « /usr/sbin/ebtables » (ebtables) en mode automatique
...
On sent bien que iptables va être traduit en nftables au passage…

Principes de base

Il y a deux façons de concevoir un pare-feu:

  1. Tout interdire, sauf ce dont on a besoin;
  2. Tout autoriser sauf ce dont on n'a pas besoin.

Sur une installation similaire à notre maquette, nous pouvons effectuer un permier niveau de filtrage sur demoserver:

  • pour sa protection personnelle;
  • pour la protection des nœuds présents dans la délégation qui est derrière lui.

Nous pouvons également ajouter des filtrages plus personnels sur chaque hôte de la délégation. Le but ici est de faire juste un minimum, en partant du principe que les postes clients ne sont que des clients de l'internet et que demoserver n'a aucun service à proposer à l'extérieur de sa délégation.

Protéger demoserver

Ce qui suit reste spécifique à IPv6.

Du fait que cet hôte n'a rien à partager avec le monde extérieur, aucune requête venant de dehors ne devrait passer. en mode TCP, tous les paquets contenant un simple [SYN] devraient être rejetés.

En revanche, demoserver va avoir des requêtes à formuler vers les services extérieurs, ne serait-ce que pour que notre résolveur DNS puisse fonctionner. Il faut également assurer les mises à jour du système qui nécessiteront de se connecter aux dépôts de paquets Debian. En UDP, il n'y a pas de SYN, mais Netfilter va bien se débrouiller. enp1s0 est l'interface exposée à l'extérieur. rien ne dot y pénétrer par défaut. et ça, c'est le piège classique si l'on accède à l'hôte à distance, que ce soit telnet ou ssh. Soit on pilote par une autre interface, soit on se ferme la porte au nez. Mais ici nous avons une console locale donc pas de risques, mais gardons les réflexes. Nous commençons par autoriser tout ce qui peut rentrer par enp7s0, l'interface locale:

ip6tables -A INPUT -i enp7s0 -j ACCEPT
ip6tables -A INPUT -i lo -j ACCEPT

Sur enp1s0, nous devons laisser entrer toutes les adresses de type «lien-local» et, concernant le suivi de connexion, toutes les connexions établies et celles qui y sont attachées:

ip6tables -A INPUT -i enp1s0 -s FE80::/10 -j ACCEPT
ip6tables -A INPUT -i enp1s0 -m state --state RELATED,ESTABLISHED -j ACCEPT

Éventuellement, nous pouvons accepter tous messages ICMP entrants:

ip6tables -A INPUT -p icmp -j ACCEPT

Et seulement dernier, la politique par défaut:

ip6tables -P INPUT DROP

Pour vérifier certaines choses, depuis un nœud capable d'accéder en IPv6 à demoserver par son interface enp1s0 en se rappelant que de ce côté, les adresses IPv6 font:

2a01:e0a:875:b1d0:5054:ff:fe74:45f2
fe80::5054:ff:fe74:45f2

Testons un ping:

ping6 -c1 fe80::5054:ff:fe74:45f2

PING fe80::5054:ff:fe74:45f2(fe80::5054:ff:fe74:45f2) 56 data bytes
64 bytes from fe80::5054:ff:fe74:45f2%sw0: icmp_seq=1 ttl=64 time=0.294 ms

--- fe80::5054:ff:fe74:45f2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.294/0.294/0.294/0.000 ms

ping6 -c1 2a01:e0a:875:b1d0:5054:ff:fe74:45f2

PING 2a01:e0a:875:b1d0:5054:ff:fe74:45f2(2a01:e0a:875:b1d0:5054:ff:fe74:45f2) 56 data bytes
From 2a01:e0a:875:b1d0:ac2a:a7ff:fedd:e607 icmp_seq=1 Destination unreachable: Address unreachable

--- 2a01:e0a:875:b1d0:5054:ff:fe74:45f2 ping statistics ---
1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms

Formidable, ça marche comme prévu!

Protéger la délégation

Au minimum, empêcher les nouvelles connexions entrantes:

ip6tables -A FORWARD -i enp1s0 -m state --state RELATED,ESTABLISHED -j ACCEPT

Accepter toutes les connexions sortantes

ip6tables -A FORWARD -i enp7s0 -j ACCEPT

Et Par défaut:

ip6tables -P FORWARD  DROP

Vérifier que tout fonctionne depuis un client:

ping6 -c1 www.debian.org

PING www.debian.org(static-mirror-grnet-01.debian.org (2001:648:2ffc:deb:216:61ff:fe2b:6138)) 56 data bytes
64 bytes from static-mirror-grnet-01.debian.org (2001:648:2ffc:deb:216:61ff:fe2b:6138): icmp_seq=1 ttl=48 time=65.1 ms

--- www.debian.org ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
mais qu'un ping venant de l'extérieur ne puisse pas entrer:
ping6 -c4  2a01:e0a:875:b1d2:5054:ff:feb7:6681

PING 2a01:e0a:875:b1d2:5054:ff:feb7:6681(2a01:e0a:875:b1d2:5054:ff:feb7:6681) 56 data bytes

--- 2a01:e0a:875:b1d2:5054:ff:feb7:6681 ping statistics ---
4 packets transmitted, 0 received, 100% packet loss, time 3063ms

Bilan

Nous avons maintenant toute possibilité d'héberger chez soi différents types de services sans passer par du NAT (translation d'adresse) tout en protégeant les hôtes d'agressions basiques. Il faudra cependant qu'à l'autre bout, les clients disposent également d'une connectivité IPv6.

Couverture de survie: Dernière modification le: 17/03/2025 à 14:21 par prof