Dans cette section, on doit compléter les règles de filtrage
pour répondre à deux objectifs :
Le routeur Hub doit autoriser le
trafic issu des routeurs Spoke vers
l'Internet.
Les demandes de connexion aux services Web hébergés sur les
conteneurs desservis par les routeurs Spoke doivent être redirigées via la traduction
des adresses destination.
Voici un exemple de correspondances de numéros de ports pour
l'accès aux différents services web.
Tableau 1. Correspondance entre
numéro de port et service Web
numéros de port Hub :
http,https
conteneur
8010,8453
10.0.1.10 fda0:7a62:1:0:216:3eff:feda:e1a
8011,8454
10.0.1.11 fda0:7a62:1:0:216:3eff:fec4:d325
8012,8455
10.0.1.12 fda0:7a62:1:0:216:3eff:fe66:86fb
8020,8463
10.0.2.10 fda0:7a62:2:0:216:3eff:feda:e1a
8021,8464
10.0.2.11 fda0:7a62:2:0:216:3eff:fec4:d325
8022,8465
10.0.2.12 fda0:7a62:2:0:216:3eff:fe66:86fb
Avant d'aborder les questions, on commence par afficher le
contenu des deux fichiers /etc/iptables/rules.v4 et /etc/iptables/rules.v6 qui correspondent à la
situation initiale avant de répondre aux objectifs de cette
section.
Jeu de règles pour le protocole IPv4.
#~~~~~~~~~~~~ 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 DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -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
Jeu de règles pour le protocole IPv6.
#~~~~~~~~~~~~ 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 DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -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
Q24.
Comment autoriser et enregistrer dans le
mécanisme de suivi des états les flux entrants par les interfaces
WAN du routeur Hub ?
Rechercher dans les pages de manuels de la commande iptables le moyen de désigner
plusieurs interfaces en une seule règle.
C'est le symbole + qui permet de
regrouper les interfaces ppp0 et
ppp1 dans une même règle de
filtrage.
On ajoute donc les deux règles suivantes sur le routeur
Hub.
etu@HubBleu:~$ sudo iptables -A FORWARD -i ppp+ -m conntrack --ctstate NEW -j ACCEPT
etu@HubBleu:~$ sudo ip6tables -A FORWARD -i ppp+ -m conntrack --ctstate NEW -j ACCEPT
Q25.
Comment valider l'utilisation de ces deux
nouvelles règles à partir d'un routeur Spoke ?
Il suffit de lancer un téléchargement depuis un routeur
Spoke en utilisant successivement les
protocoles IPv4 et
IPv6. Ensuite, on relève les
enregistrements sur le routeur Hub à
l'aide de la commande conntrack.
Voici un exemple de relevé avec un téléchargement suffisamment
volumineux pour collecter la liste des entrées de suivi d'état sur
le routeur Hub.
Comment implanter les règles de traduction
d'adresses IPv4 et
IPv6 destination de façon à
rendre accessibles les services Web configurés dans les conteneurs
situés dans les réseaux desservis par les routeurs Spoke ?
Il faut rechercher la syntaxe des règles de la cible
DNAT à appliquer dans la table
des règles de traduction d'adresses (nat) ainsi que la syntaxe des règles à ajouter
dans la chaîne FORWARD de la table
netfilter.
Ces nouvelles règles doivent être conformes au tableau de
correspondance donné en début de section. Bien sûr, les adresses
doivent être modifiées en fonction du plan d'adressage du document
Topologie Hub & Spoke avec le protocole
PPPoE.
Comme indiqué dans l'énoncé de la question, l'ajout des règles
comprend deux parties : les règles de la table nat et les règles de la table netfilter.
Dans le contexte de la maquette, on a édité les fichiers
/etc/iptables/rules.v4 et
/etc/iptables/rules.v6.
Pour le protocole IPv4.
#~~~~~~~~~~~~ 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 PREROUTING -i enp0s2.300 -p tcp --syn --dport 8010 -m conntrack --ctstate NEW \
-m comment --comment Spoke1C0 -j DNAT --to 10.0.1.10:80
-A PREROUTING -i enp0s2.300 -p tcp --syn --dport 8453 -m conntrack --ctstate NEW \
-m comment --comment Spoke1C0 -j DNAT --to 10.0.1.10:443
-A PREROUTING -i enp0s2.300 -p tcp --syn --dport 8011 -m conntrack --ctstate NEW \
-m comment --comment Spoke1C1 -j DNAT --to 10.0.1.11:80
-A PREROUTING -i enp0s2.300 -p tcp --syn --dport 8454 -m conntrack --ctstate NEW \
-m comment --comment Spoke1C1 -j DNAT --to 10.0.1.11:443
-A PREROUTING -i enp0s2.300 -p tcp --syn --dport 8012 -m conntrack --ctstate NEW \
-m comment --comment Spoke1C2 -j DNAT --to 10.0.1.12:80
-A PREROUTING -i enp0s2.300 -p tcp --syn --dport 8455 -m conntrack --ctstate NEW \
-m comment --comment Spoke1C2 -j DNAT --to 10.0.1.12:443
-A PREROUTING -i enp0s2.300 -p tcp --syn --dport 8020 -m conntrack --ctstate NEW \
-m comment --comment Spoke2C0 -j DNAT --to 10.0.2.10:80
-A PREROUTING -i enp0s2.300 -p tcp --syn --dport 8463 -m conntrack --ctstate NEW \
-m comment --comment Spoke2C0 -j DNAT --to 10.0.2.10:443
-A PREROUTING -i enp0s2.300 -p tcp --syn --dport 8021 -m conntrack --ctstate NEW \
-m comment --comment Spoke2C1 -j DNAT --to 10.0.2.11:80
-A PREROUTING -i enp0s2.300 -p tcp --syn --dport 8464 -m conntrack --ctstate NEW \
-m comment --comment Spoke2C1 -j DNAT --to 10.0.2.11:443
-A PREROUTING -i enp0s2.300 -p tcp --syn --dport 8022 -m conntrack --ctstate NEW \
-m comment --comment Spoke2C2 -j DNAT --to 10.0.2.12:80
-A PREROUTING -i enp0s2.300 -p tcp --syn --dport 8465 -m conntrack --ctstate NEW \
-m comment --comment Spoke2C2 -j DNAT --to 10.0.2.12:443
-A POSTROUTING -o enp0s2.300 -j MASQUERADE
COMMIT
#~~~~~~~~~~~~ F I L T E R
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p icmp -m limit --limit 2/sec -m conntrack --ctstate NEW -j ACCEPT
-A INPUT -p tcp --syn --dport 2222 -m conntrack --ctstate NEW \
-m comment --comment SSH -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
-A FORWARD -p tcp --syn --dport 2222 -m conntrack --ctstate NEW \
-m comment --comment SSH -j ACCEPT
-A FORWARD -i ppp+ -m conntrack --ctstate NEW -j ACCEPT
-A FORWARD -d 10.0.1.10/32 -p tcp --syn -m multiport --dports 80,443 \
-m comment --comment Spoke1C0 -j ACCEPT
-A FORWARD -d 10.0.1.11/32 -p tcp --syn -m multiport --dports 80,443 \
-m comment --comment Spoke1C1 -j ACCEPT
-A FORWARD -d 10.0.1.12/32 -p tcp --syn -m multiport --dports 80,443 \
-m comment --comment Spoke1C2 -j ACCEPT
-A FORWARD -d 10.0.2.10/32 -p tcp --syn -m multiport --dports 80,443 \
-m comment --comment Spoke2C0 -j ACCEPT
-A FORWARD -d 10.0.2.11/32 -p tcp --syn -m multiport --dports 80,443 \
-m comment --comment Spoke2C1 -j ACCEPT
-A FORWARD -d 10.0.2.12/32 -p tcp --syn -m multiport --dports 80,443 \
-m comment --comment Spoke2C2 -j ACCEPT
COMMIT
Pour le protocole IPv6.
#~~~~~~~~~~~~ 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 PREROUTING -i enp0s2.300 -p tcp --syn --dport 8010 \
-m comment --comment Spoke1C0 -j DNAT --to [fda0:7a62:1:0:216:3eff:feda:e1a]:80
-A PREROUTING -i enp0s2.300 -p tcp --syn --dport 8453 \
-m comment --comment Spoke1C0 -j DNAT --to [fda0:7a62:1:0:216:3eff:feda:e1a]:443
-A PREROUTING -i enp0s2.300 -p tcp --syn --dport 8011 \
-m comment --comment Spoke1C1 -j DNAT --to [fda0:7a62:1:0:216:3eff:fec4:d325]:80
-A PREROUTING -i enp0s2.300 -p tcp --syn --dport 8454 \
-m comment --comment Spoke1C1 -j DNAT --to [fda0:7a62:1:0:216:3eff:fec4:d325]:443
-A PREROUTING -i enp0s2.300 -p tcp --syn --dport 8012 \
-m comment --comment Spoke1C2 -j DNAT --to [fda0:7a62:1:0:216:3eff:fe66:86fb]:80
-A PREROUTING -i enp0s2.300 -p tcp --syn --dport 8455 \
-m comment --comment Spoke1C2 -j DNAT --to [fda0:7a62:1:0:216:3eff:fe66:86fb]:443
-A PREROUTING -i enp0s2.300 -p tcp --syn --dport 8020 \
-m comment --comment Spoke2C0 -j DNAT --to [fda0:7a62:2:0:216:3eff:feda:e1a]:80
-A PREROUTING -i enp0s2.300 -p tcp --syn --dport 8463 \
-m comment --comment Spoke2C0 -j DNAT --to [fda0:7a62:2:0:216:3eff:feda:e1a]:443
-A PREROUTING -i enp0s2.300 -p tcp --syn --dport 8021 \
-m comment --comment Spoke2C1 -j DNAT --to [fda0:7a62:2:0:216:3eff:fec4:d325]:80
-A PREROUTING -i enp0s2.300 -p tcp --syn --dport 8464 \
-m comment --comment Spoke2C1 -j DNAT --to [fda0:7a62:2:0:216:3eff:fec4:d325]:443
-A PREROUTING -i enp0s2.300 -p tcp --syn --dport 8022 \
-m comment --comment Spoke2C2 -j DNAT --to [fda0:7a62:2:0:216:3eff:fe66:86fb]:80
-A PREROUTING -i enp0s2.300 -p tcp --syn --dport 8465 \
-m comment --comment Spoke2C2 -j DNAT --to [fda0:7a62:2:0:216:3eff:fe66:86fb]:443
-A POSTROUTING -o enp0s2.300 -j MASQUERADE
COMMIT
#~~~~~~~~~~~~ F I L T E R
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -s fe80::/10 -j ACCEPT
-A INPUT -p ipv6-icmp -m limit --limit 2/sec -j ACCEPT
-A INPUT -p tcp --syn --dport 2222 -m conntrack --ctstate NEW -m comment --comment SSH -j ACCEPT
-A INPUT -m limit --limit 1/sec -m conntrack --ctstate INVALID -j DROP
-A INPUT -m limit --limit 1/sec -j NFLOG
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -p ipv6-icmp -m limit --limit 2/sec -j ACCEPT
-A FORWARD -p tcp --syn --dport 2222 -m conntrack --ctstate NEW -m comment --comment SSH -j ACCEPT
-A FORWARD -i ppp+ -m conntrack --ctstate NEW -j ACCEPT
-A FORWARD -d fda0:7a62:1:0:216:3eff:feda:e1a/128 -p tcp --syn -m multiport --dports 80,443 \
-m conntrack --ctstate NEW -m comment --comment Spoke1C0 -j ACCEPT
-A FORWARD -d fda0:7a62:1:0:216:3eff:fec4:d325/128 -p tcp --syn -m multiport --dports 80,443 \
-m conntrack --ctstate NEW -m comment --comment Spoke1C1 -j ACCEPT
-A FORWARD -d fda0:7a62:1:0:216:3eff:fe66:86fb/128 -p tcp --syn -m multiport --dports 80,443 \
-m conntrack --ctstate NEW -m comment --comment Spoke1C2 -j ACCEPT
-A FORWARD -d fda0:7a62:2:0:216:3eff:feda:e1a/128 -p tcp --syn -m multiport --dports 80,443 \
-m conntrack --ctstate NEW -m comment --comment Spoke2C0 -j ACCEPT
-A FORWARD -d fda0:7a62:2:0:216:3eff:fec4:d325/128 -p tcp --syn -m multiport --dports 80,443 \
-m conntrack --ctstate NEW -m comment --comment Spoke2C1 -j ACCEPT
-A FORWARD -d fda0:7a62:2:0:216:3eff:fe66:86fb/128 -p tcp --syn -m multiport --dports 80,443 \
-m conntrack --ctstate NEW -m comment --comment Spoke2C2 -j ACCEPT
-A FORWARD -m limit --limit 1/sec -m conntrack --ctstate INVALID -j DROP
-A FORWARD -m limit --limit 1/sec -j NFLOG
COMMIT
Pour rétablir les lignes des copies d'écran ci-dessus, il est
possible d'utiliser la commande ci-dessous avec laquelle le fichier
rules.txt contient les lignes coupées
avec le caractère \.
$ sudo sed '/^[ \-].*\\$/N;s/\\\n *//' rules.txt
Comme pour toutes les autres sections, on n'oublie pas de
sauvegarder le jeu des règles qui ont été validées.
$ sudo sh -c "iptables-save >/etc/iptables/rules.v4"
$ sudo sh -c "ip6tables-save >/etc/iptables/rules.v6"