MAJ
This commit is contained in:
@@ -0,0 +1,422 @@
|
||||
# **TP02 – Routage, NAT, Filtrage & FTP (with-routers.imn)**
|
||||
|
||||
# **tp02.SCR.3.2**
|
||||
|
||||
## **0\. Rappels sur la topologie & les adresses**
|
||||
|
||||
**Réseaux privés (RFC 1918\)**
|
||||
|
||||
* S1 : 172.16.1.0/24
|
||||
|
||||
* S2 : 172.16.2.0/24
|
||||
|
||||
* S3 : 172.16.3.0/24
|
||||
|
||||
**Réseaux publics (routables)**
|
||||
|
||||
| Adresse utilisée | Masque | Réseau CIDR | Plage |
|
||||
| ----- | ----- | ----- | ----- |
|
||||
| 37.37.37.1 | /22 | 37.37.36.0/22 | 37.37.36.0 – 37.37.39.255 |
|
||||
| 45.45.45.254 | /21 | 45.45.40.0/21 | 45.45.40.0 – 45.45.47.255 |
|
||||
| 62.62.62.253 | /19 | 62.62.48.0/19 | 62.62.48.0 – 62.62.79.255 |
|
||||
| 37.37.37.254 | /22 | 37.37.36.0/22 | même réseau que ci-dessus |
|
||||
| 45.45.45.253 | /21 | 45.45.40.0/21 | même réseau que ci-dessus |
|
||||
| 62.62.62.254 | /19 | 62.62.48.0/19 | même réseau que ci-dessus |
|
||||
|
||||
**PARTIE I – Topologie with-routers.imn**
|
||||
|
||||
## **I.1 Construction de la topologie**
|
||||
|
||||
* Partir d’une copie de `two-gateways.imn` du TP précédent.
|
||||
|
||||
* Renommer/adapter pour obtenir `with-routers.imn` avec les mêmes noms / adresses que dans l’énoncé.
|
||||
|
||||
**I.2 Configuration de GW1 (n10)**
|
||||
`node n10 {`
|
||||
`type host`
|
||||
`network-config {`
|
||||
`hostname GW1`
|
||||
`!`
|
||||
`interface eth1`
|
||||
`ip address 172.16.2.253/24`
|
||||
`mac address 42:00:aa:00:00:09`
|
||||
`!`
|
||||
`interface eth0`
|
||||
`ip address 172.16.1.253/24`
|
||||
`mac address 42:00:aa:00:00:08`
|
||||
`!`
|
||||
`interface lo0`
|
||||
`type lo`
|
||||
`ip address 127.0.0.1/8`
|
||||
`ipv6 address ::1/128`
|
||||
`!`
|
||||
`}`
|
||||
`canvas c0`
|
||||
`iconcoords {288 240}`
|
||||
`labelcoords {288 276}`
|
||||
`interface-peer {eth0 n0}`
|
||||
`interface-peer {eth1 n1}`
|
||||
`custom-configs {`
|
||||
`custom-config-id default {`
|
||||
`custom-command /bin/sh`
|
||||
`config {`
|
||||
`# --- IP ---`
|
||||
`ip addr add 127.0.0.1/8 dev lo0`
|
||||
`ip addr add 172.16.1.253/24 dev eth0`
|
||||
`ip addr add 172.16.2.253/24 dev eth1`
|
||||
`ip -6 addr add ::1/128 dev lo0`
|
||||
|
||||
`# --- Forwarding ---`
|
||||
`sysctl -w net.ipv4.ip_forward=1`
|
||||
|
||||
`# --- ROUTES ---`
|
||||
`# Route par défaut vers GW2`
|
||||
`ip route add 0.0.0.0/0 via 172.16.2.254`
|
||||
|
||||
`# --- NAT ---`
|
||||
`# S1 -> S2 (pour les réponses)`
|
||||
`iptables -t nat -A POSTROUTING \`
|
||||
`-s 172.16.1.0/24 -d 172.16.2.0/24 \`
|
||||
`-j SNAT --to-source 172.16.2.253`
|
||||
|
||||
`# --- FILTRAGE ---`
|
||||
`# 1. Autoriser les connexions déjà établies`
|
||||
`iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT`
|
||||
|
||||
`# 2. S1 <-> S2 : AUTORISÉ`
|
||||
`iptables -A FORWARD -s 172.16.1.0/24 -d 172.16.2.0/24 -j ACCEPT`
|
||||
`iptables -A FORWARD -s 172.16.2.0/24 -d 172.16.1.0/24 -j ACCEPT`
|
||||
|
||||
`# 3. S1 -> S3 : BLOQUÉ`
|
||||
`iptables -A FORWARD -s 172.16.1.0/24 -d 172.16.3.0/24 -j DROP`
|
||||
|
||||
`# 4. Politique par défaut`
|
||||
`iptables -P FORWARD DROP`
|
||||
|
||||
`# Services`
|
||||
`rpcbind`
|
||||
`inetd`
|
||||
`}`
|
||||
`}`
|
||||
`}`
|
||||
`custom-enabled true`
|
||||
`custom-selected default`
|
||||
`}`
|
||||
|
||||
**I.3 Configuration de GW2 (n11)**
|
||||
`node n11 {`
|
||||
`type host`
|
||||
`network-config {`
|
||||
`hostname GW2`
|
||||
`!`
|
||||
`interface eth2`
|
||||
`ip address 45.45.45.254/21`
|
||||
`mac address 42:00:aa:00:00:0c`
|
||||
`!`
|
||||
`interface eth1`
|
||||
`ip address 172.16.3.254/24`
|
||||
`mac address 42:00:aa:00:00:0b`
|
||||
`!`
|
||||
`interface eth0`
|
||||
`ip address 172.16.2.254/24`
|
||||
`mac address 42:00:aa:00:00:0a`
|
||||
`!`
|
||||
`interface lo0`
|
||||
`type lo`
|
||||
`ip address 127.0.0.1/8`
|
||||
`ipv6 address ::1/128`
|
||||
`!`
|
||||
`}`
|
||||
`canvas c0`
|
||||
`iconcoords {624 360}`
|
||||
`labelcoords {624 396}`
|
||||
`interface-peer {eth0 n1}`
|
||||
`interface-peer {eth1 n2}`
|
||||
`interface-peer {eth2 n3}`
|
||||
`custom-configs {`
|
||||
`custom-config-id default {`
|
||||
`custom-command /bin/sh`
|
||||
`config {`
|
||||
`# --- IP ---`
|
||||
`ip addr add 127.0.0.1/8 dev lo0`
|
||||
`ip addr add 172.16.2.254/24 dev eth0`
|
||||
`ip addr add 172.16.3.254/24 dev eth1`
|
||||
`ip addr add 45.45.45.254/21 dev eth2`
|
||||
`ip -6 addr add ::1/128 dev lo0`
|
||||
|
||||
`# --- Forwarding ---`
|
||||
`sysctl -w net.ipv4.ip_forward=1`
|
||||
|
||||
`# --- ROUTES vers autres réseaux publics ---`
|
||||
`ip route add 37.37.36.0/22 via 172.16.2.253 dev eth0`
|
||||
`ip route add 62.62.48.0/19 via 172.16.2.253 dev eth0`
|
||||
|
||||
`# --- NAT ---`
|
||||
`# S1/S2 -> Internet`
|
||||
`iptables -t nat -A POSTROUTING \`
|
||||
`-s 172.16.1.0/24 -o eth2 \`
|
||||
`-j SNAT --to-source 45.45.45.254`
|
||||
`iptables -t nat -A POSTROUTING \`
|
||||
`-s 172.16.2.0/24 -o eth2 \`
|
||||
`-j SNAT --to-source 45.45.45.254`
|
||||
|
||||
`# S2 <-> S3`
|
||||
`iptables -t nat -A POSTROUTING \`
|
||||
`-s 172.16.2.0/24 -d 172.16.3.0/24 \`
|
||||
`-j SNAT --to-source 172.16.3.254`
|
||||
`iptables -t nat -A POSTROUTING \`
|
||||
`-s 172.16.3.0/24 -d 172.16.2.0/24 \`
|
||||
`-j SNAT --to-source 172.16.2.254`
|
||||
|
||||
`# --- FILTRAGE ---`
|
||||
`# 1. Connexions établies`
|
||||
`iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT`
|
||||
|
||||
`# 2. S2 <-> S3 : AUTORISÉ`
|
||||
`iptables -A FORWARD -s 172.16.2.0/24 -d 172.16.3.0/24 -j ACCEPT`
|
||||
`iptables -A FORWARD -s 172.16.3.0/24 -d 172.16.2.0/24 -j ACCEPT`
|
||||
|
||||
`# 3. S3 -> S1 : BLOQUÉ`
|
||||
`iptables -A FORWARD -s 172.16.3.0/24 -d 172.16.1.0/24 -j DROP`
|
||||
|
||||
`# 4. S1/S2 -> Internet : AUTORISÉ`
|
||||
`iptables -A FORWARD -s 172.16.1.0/24 -d 45.45.40.0/21 -j ACCEPT`
|
||||
`iptables -A FORWARD -s 172.16.2.0/24 -d 45.45.40.0/21 -j ACCEPT`
|
||||
`iptables -A FORWARD -s 172.16.1.0/24 -d 37.37.36.0/22 -j ACCEPT`
|
||||
`iptables -A FORWARD -s 172.16.2.0/24 -d 37.37.36.0/22 -j ACCEPT`
|
||||
|
||||
`# 5. S3 -> Internet : BLOQUÉ`
|
||||
`iptables -A FORWARD -s 172.16.3.0/24 -d 45.45.40.0/21 -j DROP`
|
||||
`iptables -A FORWARD -s 172.16.3.0/24 -d 37.37.36.0/22 -j DROP`
|
||||
|
||||
`# 6. Politique par défaut`
|
||||
`iptables -P FORWARD DROP`
|
||||
|
||||
`# Services`
|
||||
`rpcbind`
|
||||
`inetd`
|
||||
`}`
|
||||
`}`
|
||||
`}`
|
||||
`custom-enabled true`
|
||||
`custom-selected default`
|
||||
`}`
|
||||
|
||||
**I.4 Configuration des PCs (routes par défaut)**
|
||||
|
||||
Exemple pour **pc2 (n7)** :
|
||||
|
||||
`node n7 {`
|
||||
`type pc`
|
||||
`network-config {`
|
||||
`hostname pc2`
|
||||
`!`
|
||||
`interface eth0`
|
||||
`ip address 172.16.2.2/24`
|
||||
`mac address 42:00:aa:00:00:05`
|
||||
`!`
|
||||
`interface lo0`
|
||||
`type lo`
|
||||
`ip address 127.0.0.1/8`
|
||||
`ipv6 address ::1/128`
|
||||
`!`
|
||||
`# Route par défaut vers GW2`
|
||||
`ip route 0.0.0.0/0 172.16.2.254`
|
||||
`!`
|
||||
`}`
|
||||
`# ...`
|
||||
`}`
|
||||
|
||||
(Le même principe s’applique aux autres PCs si nécessaire.)
|
||||
|
||||
**I.5 Tests de connectivité**
|
||||
|
||||
À lancer après démarrage de la topo :
|
||||
|
||||
`# S1 -> public`
|
||||
`sudo himage pc1 ping -c 1 37.37.37.1`
|
||||
|
||||
`# S2 -> public`
|
||||
`sudo himage pc2 ping -c 1 37.37.37.1`
|
||||
|
||||
`# public -> public`
|
||||
`sudo himage pc ping -c 1 45.45.45.2`
|
||||
|
||||
`# même réseau public`
|
||||
`sudo himage host1 ping -c 1 37.37.37.1`
|
||||
|
||||
`# public -> privé (doit échouer)`
|
||||
`sudo himage pc ping -c 1 172.16.2.2`
|
||||
`# -> Destination Net Unreachable`
|
||||
|
||||
**I.6 Analyse NAT avec tcpdump**
|
||||
|
||||
Ping depuis **pc2** vers l’hôte public :
|
||||
|
||||
`# Sur pc (public)`
|
||||
`sudo himage pc tcpdump -i eth0 -n icmp`
|
||||
|
||||
`# Sur pc2 (S2)`
|
||||
`sudo himage pc2 tcpdump -i eth0 -n icmp`
|
||||
|
||||
`# Ping`
|
||||
`sudo himage pc2 ping -c 2 37.37.37.1`
|
||||
|
||||
* Sur **pc2** : tu vois `172.16.2.2 -> 37.37.37.1`
|
||||
|
||||
* Sur **pc** : tu vois `45.45.45.254 -> 37.37.37.1`
|
||||
|
||||
Le routeur GW2 fait du **SNAT** : il remplace la source privée `172.16.2.2` par son IP publique `45.45.45.254`.
|
||||
|
||||
**PARTIE II – Service FTP avec DNAT**
|
||||
|
||||
## **II.1 Création de with-ftp-service.imn**
|
||||
|
||||
`cp with-routers.imn with-ftp-service.imn`
|
||||
|
||||
**II.2 Ajout du serveur FTP (n14) sur S2**
|
||||
`node n14 {`
|
||||
`type host`
|
||||
`network-config {`
|
||||
`hostname FTP`
|
||||
`!`
|
||||
`interface eth0`
|
||||
`ip address 172.16.2.10/24`
|
||||
`mac address 42:00:aa:00:00:0f`
|
||||
`!`
|
||||
`interface lo0`
|
||||
`type lo`
|
||||
`ip address 127.0.0.1/8`
|
||||
`ipv6 address ::1/128`
|
||||
`!`
|
||||
`}`
|
||||
`canvas c0`
|
||||
`iconcoords {480 120}`
|
||||
`labelcoords {480 156}`
|
||||
`interface-peer {eth0 n1} # switch2`
|
||||
`custom-configs {`
|
||||
`custom-config-id default {`
|
||||
`custom-command /bin/sh`
|
||||
`config {`
|
||||
`# Démarrer le serveur FTP`
|
||||
`/usr/sbin/in.ftpd &`
|
||||
`# (ou autre commande selon l’image)`
|
||||
`}`
|
||||
`}`
|
||||
`}`
|
||||
`custom-enabled true`
|
||||
`custom-selected default`
|
||||
`}`
|
||||
|
||||
`link l14 {`
|
||||
`nodes {n1 n14}`
|
||||
`bandwidth 0`
|
||||
`}`
|
||||
|
||||
**II.3 DNAT sur GW2 pour exposer FTP**
|
||||
|
||||
**Dans la config de GW2 (n11)**, ajouter :
|
||||
|
||||
`# --- DNAT FTP depuis Internet vers le serveur interne ---`
|
||||
|
||||
`# Port 21 (contrôle)`
|
||||
`iptables -t nat -A PREROUTING \`
|
||||
`-d 45.45.45.254 -p tcp --dport 21 \`
|
||||
`-j DNAT --to-destination 172.16.2.10:21`
|
||||
|
||||
`# Port 20 (données, mode actif)`
|
||||
`iptables -t nat -A PREROUTING \`
|
||||
`-d 45.45.45.254 -p tcp --dport 20 \`
|
||||
`-j DNAT --to-destination 172.16.2.10:20`
|
||||
|
||||
`# Autoriser le forwarding vers le serveur FTP`
|
||||
`iptables -A FORWARD -d 172.16.2.10 -p tcp --dport 21 -j ACCEPT`
|
||||
`iptables -A FORWARD -d 172.16.2.10 -p tcp --dport 20 -j ACCEPT`
|
||||
|
||||
`# Autoriser FTP depuis S1 et S2 (accès direct à 172.16.2.10)`
|
||||
`iptables -A FORWARD -s 172.16.1.0/24 -d 172.16.2.10 -p tcp --dport 21 -j ACCEPT`
|
||||
`iptables -A FORWARD -s 172.16.2.0/24 -d 172.16.2.10 -p tcp --dport 21 -j ACCEPT`
|
||||
|
||||
Rappel :
|
||||
|
||||
* **PREROUTING** : avant le routage, on peut faire du **DNAT** (changer la destination).
|
||||
|
||||
* Ici on publie le service FTP interne `172.16.2.10` sur l’IP publique **45.45.45.254**.
|
||||
|
||||
**II.4 Vérification du serveur FTP**
|
||||
`# Le service écoute bien sur 21/tcp`
|
||||
`sudo himage FTP ss -na --tcp`
|
||||
`# Doit montrer : LISTEN sur *:21`
|
||||
|
||||
`# Port FTP dans /etc/services`
|
||||
`sudo himage FTP cat /etc/services | grep ftp`
|
||||
`# -> ftp 21/tcp`
|
||||
|
||||
**II.5 Tests d’accès FTP**
|
||||
`# 1. Depuis pc (public) vers IP publique : OK`
|
||||
`sudo himage pc ftp 45.45.45.254`
|
||||
|
||||
`# 2. Depuis pc (public) vers IP privée : NON routable`
|
||||
`sudo himage pc ftp 172.16.2.10`
|
||||
`# -> Network is unreachable`
|
||||
|
||||
`# 3. Depuis pc1 (S1) vers IP privée : OK`
|
||||
`sudo himage pc1 ftp 172.16.2.10`
|
||||
|
||||
`# 4. Depuis pc2 (S2) vers IP privée : OK`
|
||||
`sudo himage pc2 ftp 172.16.2.10`
|
||||
|
||||
`# 5. Depuis host1 (réseau public 45.45.45.0/21) : OK`
|
||||
`sudo himage host1 ftp 45.45.45.254`
|
||||
|
||||
**II.6 Analyse FTP avec tcpdump**
|
||||
`# Sur pc (public)`
|
||||
`sudo himage pc tcpdump -i eth0 -n tcp port 21`
|
||||
|
||||
`# Sur FTP (serveur interne)`
|
||||
`sudo himage FTP tcpdump -i eth0 -n tcp port 21`
|
||||
|
||||
`# Connexion FTP`
|
||||
`sudo himage pc ftp 45.45.45.254`
|
||||
|
||||
* Côté **pc** : connexion `37.37.37.1 -> 45.45.45.254:21`
|
||||
|
||||
* Côté **FTP** : connexion `172.16.2.254 -> 172.16.2.10:21`
|
||||
|
||||
GW2 fait :
|
||||
|
||||
* **DNAT** : `45.45.45.254:21` → `172.16.2.10:21` (destination modifiée)
|
||||
|
||||
* **SNAT** : `37.37.37.1` → `172.16.2.254` (source modifiée pour que les réponses repartent bien via GW2)
|
||||
|
||||
**Récapitulatif des règles essentielles**
|
||||
|
||||
### **Sur GW1**
|
||||
|
||||
`# NAT S1 -> S2`
|
||||
`iptables -t nat -A POSTROUTING \`
|
||||
`-s 172.16.1.0/24 -d 172.16.2.0/24 \`
|
||||
`-j SNAT --to-source 172.16.2.253`
|
||||
|
||||
`# Filtrage`
|
||||
`iptables -A FORWARD -s 172.16.1.0/24 -d 172.16.2.0/24 -j ACCEPT # S1 -> S2`
|
||||
`iptables -A FORWARD -s 172.16.2.0/24 -d 172.16.1.0/24 -j ACCEPT # S2 -> S1`
|
||||
`iptables -A FORWARD -s 172.16.1.0/24 -d 172.16.3.0/24 -j DROP # S1 ->/ S3`
|
||||
|
||||
### **Sur GW2**
|
||||
|
||||
`# NAT S1/S2 -> Internet`
|
||||
`iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth2 \`
|
||||
`-j SNAT --to-source 45.45.45.254`
|
||||
`iptables -t nat -A POSTROUTING -s 172.16.2.0/24 -o eth2 \`
|
||||
`-j SNAT --to-source 45.45.45.254`
|
||||
|
||||
`# DNAT FTP`
|
||||
`iptables -t nat -A PREROUTING -d 45.45.45.254 -p tcp --dport 21 \`
|
||||
`-j DNAT --to-destination 172.16.2.10:21`
|
||||
|
||||
`# Filtrage (extraits)`
|
||||
`iptables -A FORWARD -s 172.16.2.0/24 -d 172.16.3.0/24 -j ACCEPT # S2 -> S3`
|
||||
`iptables -A FORWARD -s 172.16.3.0/24 -d 172.16.1.0/24 -j DROP # S3 ->/ S1`
|
||||
`iptables -A FORWARD -s 172.16.1.0/24 -d 45.45.40.0/21 -j ACCEPT # S1 -> Internet`
|
||||
`iptables -A FORWARD -s 172.16.3.0/24 -d 45.45.40.0/21 -j DROP # S3 ->/ Internet`
|
||||
Binary file not shown.
@@ -0,0 +1,469 @@
|
||||
TP02 – Routage, NAT, Filtrage & FTP (with-routers.imn)
|
||||
tp02.SCR.3.2
|
||||
0. Rappels sur la topologie & les adresses
|
||||
Réseaux privés (RFC 1918)
|
||||
* S1 : 172.16.1.0/24
|
||||
|
||||
* S2 : 172.16.2.0/24
|
||||
|
||||
* S3 : 172.16.3.0/24
|
||||
|
||||
Réseaux publics (routables)
|
||||
Adresse utilisée
|
||||
Masque
|
||||
Réseau CIDR
|
||||
Plage
|
||||
37.37.37.1
|
||||
/22
|
||||
37.37.36.0/22
|
||||
37.37.36.0 – 37.37.39.255
|
||||
45.45.45.254
|
||||
/21
|
||||
45.45.40.0/21
|
||||
45.45.40.0 – 45.45.47.255
|
||||
62.62.62.253
|
||||
/19
|
||||
62.62.48.0/19
|
||||
62.62.48.0 – 62.62.79.255
|
||||
37.37.37.254
|
||||
/22
|
||||
37.37.36.0/22
|
||||
même réseau que ci-dessus
|
||||
45.45.45.253
|
||||
/21
|
||||
45.45.40.0/21
|
||||
même réseau que ci-dessus
|
||||
62.62.62.254
|
||||
/19
|
||||
62.62.48.0/19
|
||||
même réseau que ci-dessus
|
||||
PARTIE I – Topologie with-routers.imn
|
||||
I.1 Construction de la topologie
|
||||
* Partir d’une copie de two-gateways.imn du TP précédent.
|
||||
|
||||
* Renommer/adapter pour obtenir with-routers.imn avec les mêmes noms / adresses que dans l’énoncé.
|
||||
|
||||
I.2 Configuration de GW1 (n10)
|
||||
node n10 {
|
||||
type host
|
||||
network-config {
|
||||
hostname GW1
|
||||
!
|
||||
interface eth1
|
||||
ip address 172.16.2.253/24
|
||||
mac address 42:00:aa:00:00:09
|
||||
!
|
||||
interface eth0
|
||||
ip address 172.16.1.253/24
|
||||
mac address 42:00:aa:00:00:08
|
||||
!
|
||||
interface lo0
|
||||
type lo
|
||||
ip address 127.0.0.1/8
|
||||
ipv6 address ::1/128
|
||||
!
|
||||
}
|
||||
canvas c0
|
||||
iconcoords {288 240}
|
||||
labelcoords {288 276}
|
||||
interface-peer {eth0 n0}
|
||||
interface-peer {eth1 n1}
|
||||
custom-configs {
|
||||
custom-config-id default {
|
||||
custom-command /bin/sh
|
||||
config {
|
||||
# --- IP ---
|
||||
ip addr add 127.0.0.1/8 dev lo0
|
||||
ip addr add 172.16.1.253/24 dev eth0
|
||||
ip addr add 172.16.2.253/24 dev eth1
|
||||
ip -6 addr add ::1/128 dev lo0
|
||||
|
||||
|
||||
# --- Forwarding ---
|
||||
sysctl -w net.ipv4.ip_forward=1
|
||||
|
||||
|
||||
# --- ROUTES ---
|
||||
# Route par défaut vers GW2
|
||||
ip route add 0.0.0.0/0 via 172.16.2.254
|
||||
|
||||
|
||||
# --- NAT ---
|
||||
# S1 -> S2 (pour les réponses)
|
||||
iptables -t nat -A POSTROUTING \
|
||||
-s 172.16.1.0/24 -d 172.16.2.0/24 \
|
||||
-j SNAT --to-source 172.16.2.253
|
||||
|
||||
|
||||
# --- FILTRAGE ---
|
||||
# 1. Autoriser les connexions déjà établies
|
||||
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
|
||||
|
||||
|
||||
# 2. S1 <-> S2 : AUTORISÉ
|
||||
iptables -A FORWARD -s 172.16.1.0/24 -d 172.16.2.0/24 -j ACCEPT
|
||||
iptables -A FORWARD -s 172.16.2.0/24 -d 172.16.1.0/24 -j ACCEPT
|
||||
|
||||
|
||||
# 3. S1 -> S3 : BLOQUÉ
|
||||
iptables -A FORWARD -s 172.16.1.0/24 -d 172.16.3.0/24 -j DROP
|
||||
|
||||
|
||||
# 4. Politique par défaut
|
||||
iptables -P FORWARD DROP
|
||||
|
||||
|
||||
# Services
|
||||
rpcbind
|
||||
inetd
|
||||
}
|
||||
}
|
||||
}
|
||||
custom-enabled true
|
||||
custom-selected default
|
||||
}
|
||||
|
||||
|
||||
I.3 Configuration de GW2 (n11)
|
||||
node n11 {
|
||||
type host
|
||||
network-config {
|
||||
hostname GW2
|
||||
!
|
||||
interface eth2
|
||||
ip address 45.45.45.254/21
|
||||
mac address 42:00:aa:00:00:0c
|
||||
!
|
||||
interface eth1
|
||||
ip address 172.16.3.254/24
|
||||
mac address 42:00:aa:00:00:0b
|
||||
!
|
||||
interface eth0
|
||||
ip address 172.16.2.254/24
|
||||
mac address 42:00:aa:00:00:0a
|
||||
!
|
||||
interface lo0
|
||||
type lo
|
||||
ip address 127.0.0.1/8
|
||||
ipv6 address ::1/128
|
||||
!
|
||||
}
|
||||
canvas c0
|
||||
iconcoords {624 360}
|
||||
labelcoords {624 396}
|
||||
interface-peer {eth0 n1}
|
||||
interface-peer {eth1 n2}
|
||||
interface-peer {eth2 n3}
|
||||
custom-configs {
|
||||
custom-config-id default {
|
||||
custom-command /bin/sh
|
||||
config {
|
||||
# --- IP ---
|
||||
ip addr add 127.0.0.1/8 dev lo0
|
||||
ip addr add 172.16.2.254/24 dev eth0
|
||||
ip addr add 172.16.3.254/24 dev eth1
|
||||
ip addr add 45.45.45.254/21 dev eth2
|
||||
ip -6 addr add ::1/128 dev lo0
|
||||
|
||||
|
||||
# --- Forwarding ---
|
||||
sysctl -w net.ipv4.ip_forward=1
|
||||
|
||||
|
||||
# --- ROUTES vers autres réseaux publics ---
|
||||
ip route add 37.37.36.0/22 via 172.16.2.253 dev eth0
|
||||
ip route add 62.62.48.0/19 via 172.16.2.253 dev eth0
|
||||
|
||||
|
||||
# --- NAT ---
|
||||
# S1/S2 -> Internet
|
||||
iptables -t nat -A POSTROUTING \
|
||||
-s 172.16.1.0/24 -o eth2 \
|
||||
-j SNAT --to-source 45.45.45.254
|
||||
iptables -t nat -A POSTROUTING \
|
||||
-s 172.16.2.0/24 -o eth2 \
|
||||
-j SNAT --to-source 45.45.45.254
|
||||
|
||||
|
||||
# S2 <-> S3
|
||||
iptables -t nat -A POSTROUTING \
|
||||
-s 172.16.2.0/24 -d 172.16.3.0/24 \
|
||||
-j SNAT --to-source 172.16.3.254
|
||||
iptables -t nat -A POSTROUTING \
|
||||
-s 172.16.3.0/24 -d 172.16.2.0/24 \
|
||||
-j SNAT --to-source 172.16.2.254
|
||||
|
||||
|
||||
# --- FILTRAGE ---
|
||||
# 1. Connexions établies
|
||||
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
|
||||
|
||||
|
||||
# 2. S2 <-> S3 : AUTORISÉ
|
||||
iptables -A FORWARD -s 172.16.2.0/24 -d 172.16.3.0/24 -j ACCEPT
|
||||
iptables -A FORWARD -s 172.16.3.0/24 -d 172.16.2.0/24 -j ACCEPT
|
||||
|
||||
|
||||
# 3. S3 -> S1 : BLOQUÉ
|
||||
iptables -A FORWARD -s 172.16.3.0/24 -d 172.16.1.0/24 -j DROP
|
||||
|
||||
|
||||
# 4. S1/S2 -> Internet : AUTORISÉ
|
||||
iptables -A FORWARD -s 172.16.1.0/24 -d 45.45.40.0/21 -j ACCEPT
|
||||
iptables -A FORWARD -s 172.16.2.0/24 -d 45.45.40.0/21 -j ACCEPT
|
||||
iptables -A FORWARD -s 172.16.1.0/24 -d 37.37.36.0/22 -j ACCEPT
|
||||
iptables -A FORWARD -s 172.16.2.0/24 -d 37.37.36.0/22 -j ACCEPT
|
||||
|
||||
|
||||
# 5. S3 -> Internet : BLOQUÉ
|
||||
iptables -A FORWARD -s 172.16.3.0/24 -d 45.45.40.0/21 -j DROP
|
||||
iptables -A FORWARD -s 172.16.3.0/24 -d 37.37.36.0/22 -j DROP
|
||||
|
||||
|
||||
# 6. Politique par défaut
|
||||
iptables -P FORWARD DROP
|
||||
|
||||
|
||||
# Services
|
||||
rpcbind
|
||||
inetd
|
||||
}
|
||||
}
|
||||
}
|
||||
custom-enabled true
|
||||
custom-selected default
|
||||
}
|
||||
|
||||
|
||||
I.4 Configuration des PCs (routes par défaut)
|
||||
Exemple pour pc2 (n7) :
|
||||
node n7 {
|
||||
type pc
|
||||
network-config {
|
||||
hostname pc2
|
||||
!
|
||||
interface eth0
|
||||
ip address 172.16.2.2/24
|
||||
mac address 42:00:aa:00:00:05
|
||||
!
|
||||
interface lo0
|
||||
type lo
|
||||
ip address 127.0.0.1/8
|
||||
ipv6 address ::1/128
|
||||
!
|
||||
# Route par défaut vers GW2
|
||||
ip route 0.0.0.0/0 172.16.2.254
|
||||
!
|
||||
}
|
||||
# ...
|
||||
}
|
||||
|
||||
|
||||
(Le même principe s’applique aux autres PCs si nécessaire.)
|
||||
I.5 Tests de connectivité
|
||||
À lancer après démarrage de la topo :
|
||||
# S1 -> public
|
||||
sudo himage pc1 ping -c 1 37.37.37.1
|
||||
|
||||
|
||||
# S2 -> public
|
||||
sudo himage pc2 ping -c 1 37.37.37.1
|
||||
|
||||
|
||||
# public -> public
|
||||
sudo himage pc ping -c 1 45.45.45.2
|
||||
|
||||
|
||||
# même réseau public
|
||||
sudo himage host1 ping -c 1 37.37.37.1
|
||||
|
||||
|
||||
# public -> privé (doit échouer)
|
||||
sudo himage pc ping -c 1 172.16.2.2
|
||||
# -> Destination Net Unreachable
|
||||
|
||||
|
||||
I.6 Analyse NAT avec tcpdump
|
||||
Ping depuis pc2 vers l’hôte public :
|
||||
# Sur pc (public)
|
||||
sudo himage pc tcpdump -i eth0 -n icmp
|
||||
|
||||
|
||||
# Sur pc2 (S2)
|
||||
sudo himage pc2 tcpdump -i eth0 -n icmp
|
||||
|
||||
|
||||
# Ping
|
||||
sudo himage pc2 ping -c 2 37.37.37.1
|
||||
|
||||
|
||||
* Sur pc2 : tu vois 172.16.2.2 -> 37.37.37.1
|
||||
|
||||
* Sur pc : tu vois 45.45.45.254 -> 37.37.37.1
|
||||
|
||||
Le routeur GW2 fait du SNAT : il remplace la source privée 172.16.2.2 par son IP publique 45.45.45.254.
|
||||
PARTIE II – Service FTP avec DNAT
|
||||
II.1 Création de with-ftp-service.imn
|
||||
cp with-routers.imn with-ftp-service.imn
|
||||
|
||||
|
||||
II.2 Ajout du serveur FTP (n14) sur S2
|
||||
node n14 {
|
||||
type host
|
||||
network-config {
|
||||
hostname FTP
|
||||
!
|
||||
interface eth0
|
||||
ip address 172.16.2.10/24
|
||||
mac address 42:00:aa:00:00:0f
|
||||
!
|
||||
interface lo0
|
||||
type lo
|
||||
ip address 127.0.0.1/8
|
||||
ipv6 address ::1/128
|
||||
!
|
||||
}
|
||||
canvas c0
|
||||
iconcoords {480 120}
|
||||
labelcoords {480 156}
|
||||
interface-peer {eth0 n1} # switch2
|
||||
custom-configs {
|
||||
custom-config-id default {
|
||||
custom-command /bin/sh
|
||||
config {
|
||||
# Démarrer le serveur FTP
|
||||
/usr/sbin/in.ftpd &
|
||||
# (ou autre commande selon l’image)
|
||||
}
|
||||
}
|
||||
}
|
||||
custom-enabled true
|
||||
custom-selected default
|
||||
}
|
||||
|
||||
|
||||
link l14 {
|
||||
nodes {n1 n14}
|
||||
bandwidth 0
|
||||
}
|
||||
|
||||
|
||||
II.3 DNAT sur GW2 pour exposer FTP
|
||||
Dans la config de GW2 (n11), ajouter :
|
||||
# --- DNAT FTP depuis Internet vers le serveur interne ---
|
||||
|
||||
|
||||
# Port 21 (contrôle)
|
||||
iptables -t nat -A PREROUTING \
|
||||
-d 45.45.45.254 -p tcp --dport 21 \
|
||||
-j DNAT --to-destination 172.16.2.10:21
|
||||
|
||||
|
||||
# Port 20 (données, mode actif)
|
||||
iptables -t nat -A PREROUTING \
|
||||
-d 45.45.45.254 -p tcp --dport 20 \
|
||||
-j DNAT --to-destination 172.16.2.10:20
|
||||
|
||||
|
||||
# Autoriser le forwarding vers le serveur FTP
|
||||
iptables -A FORWARD -d 172.16.2.10 -p tcp --dport 21 -j ACCEPT
|
||||
iptables -A FORWARD -d 172.16.2.10 -p tcp --dport 20 -j ACCEPT
|
||||
|
||||
|
||||
# Autoriser FTP depuis S1 et S2 (accès direct à 172.16.2.10)
|
||||
iptables -A FORWARD -s 172.16.1.0/24 -d 172.16.2.10 -p tcp --dport 21 -j ACCEPT
|
||||
iptables -A FORWARD -s 172.16.2.0/24 -d 172.16.2.10 -p tcp --dport 21 -j ACCEPT
|
||||
|
||||
|
||||
Rappel :
|
||||
* PREROUTING : avant le routage, on peut faire du DNAT (changer la destination).
|
||||
|
||||
* Ici on publie le service FTP interne 172.16.2.10 sur l’IP publique 45.45.45.254.
|
||||
|
||||
II.4 Vérification du serveur FTP
|
||||
# Le service écoute bien sur 21/tcp
|
||||
sudo himage FTP ss -na --tcp
|
||||
# Doit montrer : LISTEN sur *:21
|
||||
|
||||
|
||||
# Port FTP dans /etc/services
|
||||
sudo himage FTP cat /etc/services | grep ftp
|
||||
# -> ftp 21/tcp
|
||||
|
||||
|
||||
II.5 Tests d’accès FTP
|
||||
# 1. Depuis pc (public) vers IP publique : OK
|
||||
sudo himage pc ftp 45.45.45.254
|
||||
|
||||
|
||||
# 2. Depuis pc (public) vers IP privée : NON routable
|
||||
sudo himage pc ftp 172.16.2.10
|
||||
# -> Network is unreachable
|
||||
|
||||
|
||||
# 3. Depuis pc1 (S1) vers IP privée : OK
|
||||
sudo himage pc1 ftp 172.16.2.10
|
||||
|
||||
|
||||
# 4. Depuis pc2 (S2) vers IP privée : OK
|
||||
sudo himage pc2 ftp 172.16.2.10
|
||||
|
||||
|
||||
# 5. Depuis host1 (réseau public 45.45.45.0/21) : OK
|
||||
sudo himage host1 ftp 45.45.45.254
|
||||
|
||||
|
||||
II.6 Analyse FTP avec tcpdump
|
||||
# Sur pc (public)
|
||||
sudo himage pc tcpdump -i eth0 -n tcp port 21
|
||||
|
||||
|
||||
# Sur FTP (serveur interne)
|
||||
sudo himage FTP tcpdump -i eth0 -n tcp port 21
|
||||
|
||||
|
||||
# Connexion FTP
|
||||
sudo himage pc ftp 45.45.45.254
|
||||
|
||||
|
||||
* Côté pc : connexion 37.37.37.1 -> 45.45.45.254:21
|
||||
|
||||
* Côté FTP : connexion 172.16.2.254 -> 172.16.2.10:21
|
||||
|
||||
GW2 fait :
|
||||
* DNAT : 45.45.45.254:21 → 172.16.2.10:21 (destination modifiée)
|
||||
|
||||
* SNAT : 37.37.37.1 → 172.16.2.254 (source modifiée pour que les réponses repartent bien via GW2)
|
||||
|
||||
Récapitulatif des règles essentielles
|
||||
Sur GW1
|
||||
# NAT S1 -> S2
|
||||
iptables -t nat -A POSTROUTING \
|
||||
-s 172.16.1.0/24 -d 172.16.2.0/24 \
|
||||
-j SNAT --to-source 172.16.2.253
|
||||
|
||||
|
||||
# Filtrage
|
||||
iptables -A FORWARD -s 172.16.1.0/24 -d 172.16.2.0/24 -j ACCEPT # S1 -> S2
|
||||
iptables -A FORWARD -s 172.16.2.0/24 -d 172.16.1.0/24 -j ACCEPT # S2 -> S1
|
||||
iptables -A FORWARD -s 172.16.1.0/24 -d 172.16.3.0/24 -j DROP # S1 ->/ S3
|
||||
|
||||
|
||||
Sur GW2
|
||||
# NAT S1/S2 -> Internet
|
||||
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth2 \
|
||||
-j SNAT --to-source 45.45.45.254
|
||||
iptables -t nat -A POSTROUTING -s 172.16.2.0/24 -o eth2 \
|
||||
-j SNAT --to-source 45.45.45.254
|
||||
|
||||
|
||||
# DNAT FTP
|
||||
iptables -t nat -A PREROUTING -d 45.45.45.254 -p tcp --dport 21 \
|
||||
-j DNAT --to-destination 172.16.2.10:21
|
||||
|
||||
|
||||
# Filtrage (extraits)
|
||||
iptables -A FORWARD -s 172.16.2.0/24 -d 172.16.3.0/24 -j ACCEPT # S2 -> S3
|
||||
iptables -A FORWARD -s 172.16.3.0/24 -d 172.16.1.0/24 -j DROP # S3 ->/ S1
|
||||
iptables -A FORWARD -s 172.16.1.0/24 -d 45.45.40.0/21 -j ACCEPT # S1 -> Internet
|
||||
iptables -A FORWARD -s 172.16.3.0/24 -d 45.45.40.0/21 -j DROP # S3 ->/ Internet
|
||||
Reference in New Issue
Block a user