This commit is contained in:
2025-12-10 01:26:13 +01:00
parent 2311cb07eb
commit 38d424e819
33 changed files with 5822 additions and 0 deletions

View File

@@ -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 dune 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 sapplique 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 lhô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 limage)`
`}`
`}`
`}`
`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 lIP 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 daccè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`

View File

@@ -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 dune 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 sapplique 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 lhô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 limage)
}
}
}
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 lIP 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 daccè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