La mise en place du filtrage réseau sur les équipements doit répondre à deux principes.
-
On considère que les équipements d'interconnexion mis en œuvre dans ces travaux pratiques délimitent des périmètres de dimension moyenne. Par conséquent, on a une connaissance exhaustive des flux réseaux sur le système. On adopte donc la règle : tout trafic réseau non autorisé est interdit.
-
On fait le choix d'un filtrage basé sur le suivi de communication (stateful inspection). On cherche donc à écrire des règles qui décrivent le plus précisément possible le premier paquet qui doit être enregistré dans la table de suivi de communication. Ces règles de description du premier paquet doivent être placées après celle qui laisse passer le trafic qui correspond ou qui est relatif à une communication déjà enregistrée dans les tables.
-
Dans le but de simplifier l'étude du filtrage, on fait le choix d'autoriser tous les flux sortants émis par les routeurs Hub et Spoke. On laisse donc la politique par défaut à
ACCEPT
pour les chaînesOUTPUT
des routeurs.
On commence par afficher les règles actives sur les différents routeurs à l'issue des questions de la section précédente : Section 4, « Protection de base des routeurs Hub et Spoke ».
Attention ! Les noms d'interfaces correspondent à la maquette de test.
-
Régles de filtrage IPv4 côté Hub : fichier
/etc/iptables/rules.v4
.#~~~~~~~~~~~~ R A W *raw :PREROUTING ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A PREROUTING -m rpfilter --invert -m comment --comment BCP38 -j DROP COMMIT #~~~~~~~~~~~~ N A T *nat :PREROUTING ACCEPT [0:0] :INPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A POSTROUTING -o enp0s2.300 -j MASQUERADE COMMIT #~~~~~~~~~~~~ F I L T E R *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmp -m limit --limit 2/sec -m conntrack --ctstate NEW -j ACCEPT -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A FORWARD -p icmp -m limit --limit 2/sec -m conntrack --ctstate NEW -j ACCEPT COMMIT
-
Régles de filtrage IPv6 côté Hub : fichier
/etc/iptables/rules.v6
.#~~~~~~~~~~~~ R A W *raw :PREROUTING ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A PREROUTING -m rpfilter --invert -m comment --comment BCP38 -j DROP COMMIT #~~~~~~~~~~~~ N A T *nat :PREROUTING ACCEPT [0:0] :INPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A POSTROUTING -o enp0s2.300 -j MASQUERADE COMMIT #~~~~~~~~~~~~ F I L T E R *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -s fe80::/10 -j ACCEPT -A INPUT -p ipv6-icmp -m limit --limit 2/sec -j ACCEPT -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A FORWARD -p ipv6-icmp -m limit --limit 2/sec -j ACCEPT COMMIT
-
Régles de filtrage IPv4 côté Spoke : fichier
/etc/iptables/rules.v4
.#~~~~~~~~~~~~ R A W *raw :PREROUTING ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A PREROUTING -m rpfilter --invert -m comment --comment BCP38 -j DROP COMMIT #~~~~~~~~~~~~ F I L T E R *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmp -m limit --limit 2/sec -m conntrack --ctstate NEW -j ACCEPT -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A FORWARD -p icmp -m limit --limit 2/sec -m conntrack --ctstate NEW -j ACCEPT COMMIT
-
Régles de filtrage IPv6 côté Spoke : fichier
/etc/iptables/rules.v6
.#~~~~~~~~~~~~ R A W *raw :PREROUTING ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A PREROUTING -m rpfilter --invert -m comment --comment BCP38 -j DROP COMMIT #~~~~~~~~~~~~ F I L T E R *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -s fe80::/10 -j ACCEPT -A INPUT -p ipv6-icmp -m limit --limit 2/sec -j ACCEPT -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A FORWARD -p ipv6-icmp -m limit --limit 2/sec -j ACCEPT COMMIT
Q20. |
Dans les jeux de règles déjà en place, comment identifier les règles qui traitent les flux réseau dèjà enregistrés dans le suivi de communication ? La section «7.3. États de l'espace utilisateur» du Tutoriel iptables décrit les correspondances entre les états et les flux réseau. |
Le tableau de la section «7.3. États de
l'espace utilisateur» permet de sélectionner les états
Voici un exemple qui illustre l'utilisation de ces règles dans le contexte de la maquette. L'évolution des compteurs, montre qu'une règle est effectivement utilisée dans le traitement du trafic réseau.
|
|
Q21. |
Quelles règles faut-il ajouter pour
autoriser les nouveaux flux réseau depuis et vers l'interface de
boucle locale (chaîne Pour que les processus locaux au système puissent communiquer
entre eux, il est essentiel
d'autoriser le trafic sur l'interface de boucle locale |
On insère une nouvelle règle sur la chaîne La même règle est insérée pour les protocoles IPv4 et IPv6. On utilise les numéros de lignes pour insérer les nouvelles règles en postion 2.
On relève un exemple de résultat en affichant la liste des règles actives avec leurs numéros.
À partir de ce jeu de règles, on peut lancer un test ICMP et relever les compteurs d'utilisation de la nouvelle règle.
|
|
Q22. |
Quelles règles faut-il ajouter pour autoriser les nouvelles connexions SSH et les intégrer dans la table de suivi des communications ? Le protocole de couche transport utilisé est TCP et le numéro de port utilisé par le service
SSH est La section «7.3. États de l'espace utilisateur» du Tutoriel iptables décrit les correspondances entre les états et les flux réseau. Rechercher la clé relative aux nouveaux flux entrants. |
Le tableau de la section «7.3. États de
l'espace utilisateur» permet de sélectionner l'état
Voici un exemple d'ajout de règles dans le contexte de la maquette.
Comme précédemment, on peut relever les compteurs suite à une nouvelle connexion SSH.
|
|
Q23. |
Quelle est l'instruction qui définit la
politique par défaut à appliquer sur les chaînes de la table
Il s'agit d'appliquer le principe de filtrage énoncé en début de section qui veut que tout trafic non autorisé soit interdit. La section «9.3. Commandes» du
Tutoriel iptables donne la syntaxe de
configuration de cible par
défaut pour les chaînes : |
On consulte la documentation et on relève la commande
-P. Ensuite, on
sélectionne la politique par défaut adaptée au contexte :
Voici un exemple sur un routeur Spoke.
|
Une fois ces règles basiques en place, on peut aborder les filtrages réseau spécifiques à la topologie de travaux pratiques.