5. Règles de filtrage communes à toutes les configurations

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înes OUTPUT 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 enp0s6.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 enp0s6.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.

Q21.

Quelles règles faut-il ajouter pour autoriser les nouveaux flux réseau depuis et vers l'interface de boucle locale (chaîne INPUT) ?

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 lo.

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 2222.

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.

Q23.

Quelle est l'instruction qui définit la politique par défaut à appliquer sur les chaînes de la table netfilter ?

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 : INPUT, FORWARD et OUTPUT.

Une fois ces règles basiques en place, on peut aborder les filtrages réseau spécifiques à la topologie de travaux pratiques.