Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Écrire et lire des règles de pare-feu

Après cette leçon: Je peux écrire et lire une liste de règles de pare-feu en suivant leur ordre.

Leçon de 55 min1 commandeLab de passerelle NAT : masquerade et redirection de port avec nftables dans le navigateur

Qui peut passer, et dans quel ordre ?

Un pare-feu est un filtre qui laisse passer ou jette chaque paquet, selon une liste de règles. Lire cette liste dans le bon ordre explique pourquoi un paquet passe ou non.

Une bibliothèque universitaire veut que ses visiteurs naviguent sur le web. Elle veut aussi que personne de l'extérieur n'entre sur le serveur du personnel. Tout se joue dans l'ordre des règles.

À la fin de cette leçon

Remarque

Je peux écrire et lire une liste de règles de pare-feu en suivant leur ordre.

Mots clés

MotCe que ça veut dire
Pare-feuun filtre qui autorise ou refuse chaque paquet
Règleune condition et une action : autoriser ou refuser
Politique par défautl'action quand aucune règle ne correspond
Pare-feu à étatun pare-feu qui retient les connexions déjà ouvertes
Chaîneune liste de règles que lit un pare-feu dans un ordre fixe

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Un pare-feu lit de haut en bas

Pour chaque paquet, le pare-feu parcourt la liste depuis la première règle. Dès qu'une règle correspond, il applique son action et s'arrête. Les règles suivantes ne sont jamais lues pour ce paquet.

Si aucune règle ne correspond, c'est la politique par défaut qui décide.

Exemple : quatre paquets et une liste

PaquetRègle 1 : autoriser tcp 443Règle 2 : refuser tcp 23Décision
tcp 443CorrespondPas lueAutoriser
tcp 23Ne correspond pasCorrespondRefuser
tcp 80Ne correspond pasNe correspond pasPolitique par défaut
udp 53Ne correspond pasNe correspond pasPolitique par défaut

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Faire lire la liste par un programme

Code: python
# Un paquet : le protocole et le port.
paquet = "tcp 80"
regles = [
    "refuser tcp 23",
    "autoriser tcp 80",
    "autoriser tcp 443",
]
decision = "refuser"  # politique par défaut : on refuse
for regle in regles:
    action, protocole, port = regle.split(" ")
    if protocole + " " + port == paquet:
        decision = action
        break  # la première règle qui correspond gagne
print(decision)
# À vous : changez le paquet en "tcp 23", puis en "tcp 25", et relancez.

Tout refuser, puis autoriser ce qui sert

Il y a deux manières de bâtir une liste. La première refuse ce qu'on connaît de dangereux et laisse le reste. La seconde refuse tout par défaut et n'autorise que ce dont on a besoin.

La seconde est la plus sûre. Un service oublié ou nouveau reste fermé jusqu'à ce que quelqu'un le décide.

Exemple : deux politiques comparées

QuestionRefuser les dangers connusTout refuser par défaut
Un nouveau service apparaîtIl est ouvert tant qu'on ne le bloque pasIl est fermé tant qu'on ne l'autorise pas
Le risque oubliéUn danger absent de la liste passeUn besoin oublié est bloqué et se voit vite
Ce qu'on lit pour comprendreUne longue liste de refusUne courte liste d'autorisations

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Lire le jeu de règles de la passerelle

Commande
sudo ip netns exec gw nft list ruleset

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.

Comment lire ce que la passerelle affiche

Au départ du labo, vous lisez une table inet filter avec une chaîne forward. Elle contient policy drop : tout paquet qui traverse la passerelle et qu'aucune règle n'autorise est jeté.

Deux règles suivent. La première accepte ct state established,related, c'est-à-dire les réponses aux connexions déjà ouvertes. La seconde accepte ce qui entre par l'interface to-lan. Si vous avez déjà sauvegardé vos règles, elles s'affichent en plus.

Un pare-feu à état laisse revenir les réponses

Un pare-feu à état retient chaque connexion qu'il a laissée partir. Quand la réponse revient, il la reconnaît et la laisse passer sans règle de plus.

Sans cela, il faudrait autoriser tous les ports de retour, un par un. Avec cela, on n'écrit que les connexions qu'on accepte de voir commencer.

Exemple : deux ordres, deux décisions

Ordre des règlesPaquet tcp 22Pourquoi
1 refuser tout tout, 2 autoriser tcp 22RefuséLa règle 1 correspond à tout et arrête la lecture
1 autoriser tcp 22, 2 refuser tout toutAutoriséLa règle 1 correspond avant la règle qui refuse tout

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Une erreur fréquente

Attention

On croit souvent que la règle la plus précise gagne toujours. Dans une liste simple, c'est la première qui correspond qui gagne. Mettez les règles précises avant les règles larges, sinon la règle large cache les autres.

À propos de ce labo et de sa source: Lab de passerelle NAT : masquerade et redirection de port avec nftables dans le navigateur

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.