Le silence qui a coûté un après-midi
Une développeuse n'arrive pas à joindre un serveur de test. La page reste figée. Elle attend, réessaie et appelle l'équipe réseau.
Un refus lui aurait dit en une seconde que le serveur était en marche. Le silence ne lui a rien dit.
Cette leçon montre pourquoi un pare-feu peut être silencieux ou bruyant, et ce qui décide.
À la fin de cette leçon
Remarque
Je peux écrire une règle de pare-feu et dire ce que voit l'autre côté.
Mots clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Pare-feu | des règles qui décident quels paquets passent | |
| Chaîne | une liste de règles, lues dans l'ordre | |
| Politique | ce qui arrive à un paquet qu'aucune règle ne retient | |
| Drop | jeter un paquet sans aucune réponse | |
| Reject | refuser un paquet et le dire à l'expéditeur | |
| Crochet | l'endroit du trajet d'un paquet où une chaîne est lue | input |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Une chaîne est une liste avec une politique
Un pare-feu garde ses règles dans une chaîne. Un paquet est comparé aux règles depuis le haut. La première règle qui correspond décide, et les autres ne sont pas lues.
Si aucune règle ne correspond, c'est la politique qui décide. La chaîne de la passerelle a ici la politique drop : elle ne laisse passer que ce qu'une règle autorise.
Lire la chaîne forward de la passerelle
sudo ip netns exec gw nft list chain inet filter forwardAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Exemple : lire cette chaîne ligne par ligne
| Ligne | En mots simples |
|---|---|
| hook forward ... policy drop | Lire les paquets qui traversent, et jeter ce qu'aucune règle n'autorise |
| ct state established,related accept | Laisser passer les réponses aux connexions déjà ouvertes |
| iifname "to-lan" accept | Laisser passer tout ce qui arrive du câble du LAN |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Une règle sur une machine jette un port
Maintenant vous écrivez une règle vous-même, sur la machine LAN et pas sur la passerelle. Elle va dans une table à part, appelée entrainement, et rien n'est sauvegardé.
D'abord une table, puis une chaîne sur le crochet input, qui voit les paquets qui arrivent à cette machine, puis une règle.
Créer une table sur la machine LAN
sudo ip netns exec lan nft add table inet entrainementAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Ajouter une chaîne sur le crochet input
sudo ip netns exec lan nft add chain inet entrainement garde '{ type filter hook input priority 0 ; policy accept ; }'Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Ajouter une règle qui jette le port 8081
sudo ip netns exec lan nft add rule inet entrainement garde tcp dport 8081 dropAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Demander le port 80, sans règle
sudo ip netns exec gw curl --noproxy '*' -sS -m 3 -o /dev/null -w '%{http_code}\n' http://10.0.0.2/Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Demander le port 8081, que la règle jette
sudo ip netns exec gw curl --noproxy '*' -sS -m 3 http://10.0.0.2:8081/Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Reject dit non à voix haute
Un drop ne donne aucune réponse, donc l'expéditeur attend jusqu'à abandonner. Un reject renvoie un refus tout de suite, donc l'expéditeur le sait en un instant.
Drop est plus discret pour l'extérieur. Reject est plus aimable pour vos propres collègues, qui trouvent la panne plus vite.
Vider la chaîne
sudo ip netns exec lan nft flush chain inet entrainement gardeAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Ajouter une règle qui refuse le port 8081
sudo ip netns exec lan nft add rule inet entrainement garde tcp dport 8081 reject with tcp resetAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Frapper de nouveau au port 8081
sudo ip netns exec gw nc -zv -w 2 10.0.0.2 8081Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Une erreur fréquente
Attention
On croit souvent qu'un port bloqué affiche toujours Connection refused. Ce n'est le cas que si le pare-feu fait un reject. Avec un drop, l'expéditeur voit un délai dépassé, et un délai dépassé ressemble à une machine éteinte.
La première règle qui correspond gagne
Les règles sont lues depuis le haut. Une règle ajoutée avec add va tout en bas. Une règle ajoutée avec insert va tout en haut.
Vous laissez maintenant passer une machine, la passerelle en 10.0.0.1, vers le port 8081, pendant que tous les autres restent refusés.
Insérer une règle accept au-dessus du reject
sudo ip netns exec lan nft insert rule inet entrainement garde ip saddr 10.0.0.1 tcp dport 8081 acceptAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Redemander le port 8081 depuis la passerelle
sudo ip netns exec gw curl --noproxy '*' -sS -m 3 http://10.0.0.2:8081/Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Supprimer la table d'entraînement
sudo ip netns exec lan nft delete table inet entrainementAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Pour aller plus loin : compter les correspondances
Refaites la table et la chaîne. Ajoutez la règle tcp dport 8081 counter reject with tcp reset, puis frappez trois fois au port 8081 avec nc.
Listez la table avec sudo ip netns exec lan nft list table inet entrainement. Que dit le compteur, et pourquoi une équipe réseau en voudrait-elle un ? Supprimez ensuite la table.