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

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,393 @@
# **Guide COMPLET de `iptables -t filter -A`**
Je vais t'expliquer en détail toutes les possibilités avec `iptables -t filter -A`. C'est la partie la plus utilisée d'iptables \!
---
## **STRUCTURE DE BASE**
`iptables -t filter -A CHAINE [CRITÈRES] -j ACTION`
* `-t filter` \= table FILTER (pare-feu) → optionnelle car c'est la table par défaut
* `-A` \= Append (ajouter à la fin)
* `CHAINE` \= `INPUT`, `OUTPUT` ou `FORWARD`
* `CRITÈRES` \= conditions pour appliquer la règle
* `-j` \= Jump (action à faire)
* `ACTION` \= `ACCEPT`, `DROP`, `REJECT`, etc.
---
## **Les 3 CHAÎNES principales de FILTER**
### **1\. CHAÎNE `INPUT` → Paquets POUR la machine**
*`# Exemple : Quelqu'un essaie de se connecter à TON serveur SSH`*
`iptables -A INPUT -p tcp --dport 22 -j ACCEPT`
*`# "Accepte les connexions TCP sur le port 22 (SSH) qui viennent vers MOI"`*
### **2\. CHAÎNE `OUTPUT` → Paquets DE la machine**
*`# Exemple : Tu essaies d'aller sur un site web`*
`iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT`
*`# "Accepte les connexions TCP sortantes vers le port 80 (HTTP)"`*
### **3\. CHAÎNE `FORWARD` → Paquets qui TRAVERSENT la machine**
*`# Exemple : Ta machine fait routeur entre 2 réseaux`*
`iptables -A FORWARD -s 192.168.1.0/24 -d 192.168.2.0/24 -j ACCEPT`
*`# "Accepte les paquets qui viennent de 192.168.1.0/24 vers 192.168.2.0/24"`*
---
## **TOUTES les OPTIONS possibles (CRITÈRES)**
### **A. Par ADRESSE IP**
| Option | Signification | Exemple |
| :---- | :---- | :---- |
| `-s ADRESSE` | Source (qui envoie) | `-s 192.168.1.100` |
| `-d ADRESSE` | Destination (pour qui) | `-d 10.0.0.1` |
| `!` | SAUF (négation) | `-s ! 192.168.1.100` |
Exemples :
*`# Bloquer une IP spécifique`*
`iptables -A INPUT -s 192.168.1.100 -j DROP`
*`# Autoriser seulement un réseau`*
`iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT`
`iptables -A INPUT -j DROP # Tout le reste bloqué`
*`# Sauf mon serveur DNS`*
`iptables -A INPUT -s ! 8.8.8.8 -p udp --dport 53 -j DROP`
---
### **B. Par INTERFACE**
| Option | Signification | Exemple |
| :---- | :---- | :---- |
| `-i INTERFACE` | Interface d'entrée | `-i eth0` |
| `-o INTERFACE` | Interface de sortie | `-o wlan0` |
Exemples :
*`# Seulement sur l'interface WiFi`*
`iptables -A INPUT -i wlan0 -p tcp --dport 22 -j ACCEPT`
*`# Bloquer tout ce qui entre par eth1`*
`iptables -A INPUT -i eth1 -j DROP`
*`# Routeur : autoriser eth0→eth1`*
`iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT`
---
### **C. Par PROTOCOLE**
| Option | Signification | Exemple |
| :---- | :---- | :---- |
| `-p PROTO` | Protocol | `-p tcp`, `-p udp`, `-p icmp` |
| `-p all` | Tous les protocoles | `-p all` |
#### **Pour TCP :**
*`# Autoriser SSH (port 22)`*
`iptables -A INPUT -p tcp --dport 22 -j ACCEPT`
*`# Autoriser HTTP (port 80) et HTTPS (443)`*
`iptables -A INPUT -p tcp --dport 80 -j ACCEPT`
`iptables -A INPUT -p tcp --dport 443 -j ACCEPT`
*`# Ports sources (quand tu envoies)`*
`iptables -A OUTPUT -p tcp --sport 1024:65535 -j ACCEPT`
#### **Pour UDP :**
*`# Autoriser DNS (port 53)`*
`iptables -A INPUT -p udp --dport 53 -j ACCEPT`
*`# Autoriser DHCP (port 67-68)`*
`iptables -A INPUT -p udp --dport 67:68 -j ACCEPT`
#### **Pour ICMP (ping) :**
`bash`
*`# Autoriser le ping entrant`*
`iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT`
*`# Autoriser les réponses ping`*
`iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT`
*`# Bloquer tous les ICMP`*
`iptables -A INPUT -p icmp -j DROP`
---
### **D. Par ÉTAT de connexion (IMPORTANT \!)**
| Option | Signification |
| :---- | :---- |
| `NEW` | Nouvelle connexion |
| `ESTABLISHED` | Connexion déjà établie |
| `RELATED` | Connexion liée (ex: FTP data) |
| `INVALID` | Paquet invalide |
EXEMPLE CRUCIAL pour ton TP :
*`# TOUJOURS mettre en PREMIER !`*
`iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT`
*`# "Autorise les réponses aux connexions que J'AI initiées"`*
Pourquoi c'est important ?
Sans cette règle :
* Tu pingues `8.8.8.8` → paquet sort (NEW)
* `8.8.8.8` répond → paquet entre (ESTABLISHED) → BLOQUÉ si pas de règle \!
* Résultat : le ping ne marche que dans un sens
---
### **E. Par PORT (TCP/UDP)**
| Option | Signification | Exemple |
| :---- | :---- | :---- |
| `--sport PORT` | Source port | `--sport 1024:65535` |
| `--dport PORT` | Destination port | `--dport 80` |
| `--sport MIN:MAX` | Range de ports | `--sport 1000:2000` |
| `--multiport --sports` | Multiples ports source | `--multiport --sports 22,80,443` |
| `--multiport --dports` | Multiples ports destination | `--multiport --dports 21,22,23` |
Exemples :
*`# Un seul port`*
`iptables -A INPUT -p tcp --dport 22 -j ACCEPT # SSH`
*`# Range de ports`*
`iptables -A INPUT -p tcp --dport 1024:65535 -j ACCEPT # Ports éphémères`
*`# Multiples ports`*
`iptables -A INPUT -p tcp -m multiport --dports 80,443,8080 -j ACCEPT`
*`# Ports source (quand tu es client)`*
`iptables -A OUTPUT -p tcp --sport 32768:60999 -j ACCEPT`
---
### **F. Options avancées**
| Option | Signification | Exemple |
| :---- | :---- | :---- |
| `-m limit --limit` | Limiter le débit | `--limit 3/sec` |
| `-m mac --mac-source` | Par adresse MAC | `--mac-source 00:11:22:33:44:55` |
| `-m tcp --tcp-flags` | Flags TCP | `--tcp-flags SYN,ACK,FIN,RST SYN` |
| `-m time` | Par heure/jour | `--timestart 09:00 --timestop 17:00` |
Exemples :
*`# Anti-DDoS sur ping`*
`iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT`
`iptables -A INPUT -p icmp --icmp-type echo-request -j DROP`
*`# Par MAC address`*
`iptables -A INPUT -m mac --mac-source 00:11:22:33:44:55 -j ACCEPT`
*`# Seulement le jour`*
`iptables -A INPUT -p tcp --dport 22 -m time --timestart 09:00 --timestop 17:00 -j ACCEPT`
---
## **ACTIONS possibles (`-j`)**
| Action | Signification | Exemple |
| :---- | :---- | :---- |
| `ACCEPT` | Accepter le paquet | `-j ACCEPT` |
| `DROP` | Supprimer silencieusement | `-j DROP` |
| `REJECT` | Rejeter avec erreur | `-j REJECT` |
| `LOG` | Logger (journaliser) | `-j LOG` |
| `RETURN` | Retourner à la chaîne parente | `-j RETURN` |
Différence DROP vs REJECT :
* `DROP` \= paquet jeté, pas de réponse → timeout
* `REJECT` \= envoie "Connection refused" → erreur immédiate
*`# Exemple LOG`*
`iptables -A INPUT -p tcp --dport 22 -j LOG --log-prefix "SSH attempt: "`
`iptables -A INPUT -p tcp --dport 22 -j ACCEPT`
---
## **EXEMPLES COMPLETS pour ton TP**
### **Exemple 1 : Pare-feu personnel**
*`# Politique par défaut DROP`*
`iptables -P INPUT DROP`
`iptables -P FORWARD DROP`
`iptables -P OUTPUT ACCEPT`
*`# Localhost toujours autorisé`*
`iptables -A INPUT -i lo -j ACCEPT`
*`# Réponses aux connexions établies`*
`iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT`
*`# SSH depuis réseau local seulement`*
`iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT`
*`# HTTP/HTTPS`*
`iptables -A INPUT -p tcp --dport 80 -j ACCEPT`
`iptables -A INPUT -p tcp --dport 443 -j ACCEPT`
*`# Ping limité`*
`iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT`
### **Exemple 2 : Routeur (comme dans ton TP)**
`bash`
*`# Activer le forwarding`*
`sysctl -w net.ipv4.ip_forward=1`
*`# --- RÈGLES FORWARD ---`*
*`# 1. TOUJOURS en premier : réponses`*
`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`
*`# 3. S2 → S1 autorisé`*
`iptables -A FORWARD -s 172.16.2.0/24 -d 172.16.1.0/24 -j ACCEPT`
*`# 4. S1 ↛ S3 bloqué`*
`iptables -A FORWARD -s 172.16.1.0/24 -d 172.16.3.0/24 -j DROP`
*`# 5. S3 ↛ S1 bloqué`*
`iptables -A FORWARD -s 172.16.3.0/24 -d 172.16.1.0/24 -j DROP`
*`# 6. Politique par défaut`*
`iptables -P FORWARD DROP`
### **Exemple 3 : Serveur web sécurisé**
*`# Vider toutes les règles`*
`iptables -F`
`iptables -X`
*`# Politiques par défaut`*
`iptables -P INPUT DROP`
`iptables -P FORWARD DROP`
`iptables -P OUTPUT ACCEPT`
*`# Localhost`*
`iptables -A INPUT -i lo -j ACCEPT`
*`# Réponses`*
`iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT`
*`# SSH avec limite`*
`iptables -A INPUT -p tcp --dport 22 -m limit --limit 3/min -j ACCEPT`
*`# HTTP/HTTPS`*
`iptables -A INPUT -p tcp --dport 80 -j ACCEPT`
`iptables -A INPUT -p tcp --dport 443 -j ACCEPT`
*`# DNS`*
`iptables -A INPUT -p udp --dport 53 -j ACCEPT`
*`# Ping limité`*
`iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT`
*`# Protection contre les scans`*
`iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP`
`iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP`
---
## **ORDRE DES RÈGLES (TRÈS IMPORTANT \!)**
Les règles sont vérifiées dans l'ordre \! La première qui correspond s'applique.
**MAUVAIS ordre :**
`iptables -A INPUT -j DROP # 1. Tout bloqué !`
`iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 2. Jamais atteint`
**BON ordre :**
`iptables -A INPUT -i lo -j ACCEPT # 1. Localhost`
`iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 2. Réponses`
`iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 3. SSH`
`iptables -A INPUT -j DROP # 4. Tout le reste bloqué`
Règle d'or :
1. localhost (`lo`)
2. ESTABLISHED,RELATED
3. Règles spécifiques (ACCEPT)
4. Règles de blocage spécifiques
5. Politique par défaut (DROP)
---
## **COMMANDES UTILES pour tester**
*`# Voir toutes les règles`*
`iptables -L -v -n`
*`# Voir une chaîne spécifique`*
`iptables -L INPUT -v -n`
*`# Voir avec numéros de ligne`*
`iptables -L --line-numbers`
*`# Supprimer une règle (ex: ligne 3 de INPUT)`*
`iptables -D INPUT 3`
*`# Vider toutes les règles`*
`iptables -F`
*`# Sauvegarder`*
`iptables-save > /etc/iptables.rules`
*`# Restaurer`*
`iptables-restore < /etc/iptables.rules`
---
`Une règle iptables =`
`iptables -t filter -A CHAINE`
`↓`
`CRITÈRES :`
`-s 192.168.1.0/24 (source)`
`-d 10.0.0.1 (destination)`
`-p tcp (protocole)`
`--dport 80 (port)`
`-i eth0 (interface)`
`-m state --state NEW (état)`
`↓`
`-j ACTION`
`ACCEPT / DROP / REJECT / LOG`

View File

@@ -0,0 +1,433 @@
Guide COMPLET de iptables -t filter -A
Je vais t'expliquer en détail toutes les possibilités avec iptables -t filter -A. C'est la partie la plus utilisée d'iptables !
________________
STRUCTURE DE BASE
iptables -t filter -A CHAINE [CRITÈRES] -j ACTION
* -t filter = table FILTER (pare-feu) → optionnelle car c'est la table par défaut
* -A = Append (ajouter à la fin)
* CHAINE = INPUT, OUTPUT ou FORWARD
* CRITÈRES = conditions pour appliquer la règle
* -j = Jump (action à faire)
* ACTION = ACCEPT, DROP, REJECT, etc.
________________
Les 3 CHAÎNES principales de FILTER
1. CHAÎNE INPUT → Paquets POUR la machine
# Exemple : Quelqu'un essaie de se connecter à TON serveur SSH
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# "Accepte les connexions TCP sur le port 22 (SSH) qui viennent vers MOI"
2. CHAÎNE OUTPUT → Paquets DE la machine
# Exemple : Tu essaies d'aller sur un site web
iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
# "Accepte les connexions TCP sortantes vers le port 80 (HTTP)"
3. CHAÎNE FORWARD → Paquets qui TRAVERSENT la machine
# Exemple : Ta machine fait routeur entre 2 réseaux
iptables -A FORWARD -s 192.168.1.0/24 -d 192.168.2.0/24 -j ACCEPT
# "Accepte les paquets qui viennent de 192.168.1.0/24 vers 192.168.2.0/24"
________________
TOUTES les OPTIONS possibles (CRITÈRES)
A. Par ADRESSE IP
Option
Signification
Exemple
-s ADRESSE
Source (qui envoie)
-s 192.168.1.100
-d ADRESSE
Destination (pour qui)
-d 10.0.0.1
!
SAUF (négation)
-s ! 192.168.1.100
Exemples :
# Bloquer une IP spécifique
iptables -A INPUT -s 192.168.1.100 -j DROP
# Autoriser seulement un réseau
iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -j DROP # Tout le reste bloqué
# Sauf mon serveur DNS
iptables -A INPUT -s ! 8.8.8.8 -p udp --dport 53 -j DROP
________________
B. Par INTERFACE
Option
Signification
Exemple
-i INTERFACE
Interface d'entrée
-i eth0
-o INTERFACE
Interface de sortie
-o wlan0
Exemples :
# Seulement sur l'interface WiFi
iptables -A INPUT -i wlan0 -p tcp --dport 22 -j ACCEPT
# Bloquer tout ce qui entre par eth1
iptables -A INPUT -i eth1 -j DROP
# Routeur : autoriser eth0→eth1
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
________________
C. Par PROTOCOLE
Option
Signification
Exemple
-p PROTO
Protocol
-p tcp, -p udp, -p icmp
-p all
Tous les protocoles
-p all
Pour TCP :
# Autoriser SSH (port 22)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Autoriser HTTP (port 80) et HTTPS (443)
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# Ports sources (quand tu envoies)
iptables -A OUTPUT -p tcp --sport 1024:65535 -j ACCEPT
Pour UDP :
# Autoriser DNS (port 53)
iptables -A INPUT -p udp --dport 53 -j ACCEPT
# Autoriser DHCP (port 67-68)
iptables -A INPUT -p udp --dport 67:68 -j ACCEPT
Pour ICMP (ping) :
bash
# Autoriser le ping entrant
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
# Autoriser les réponses ping
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
# Bloquer tous les ICMP
iptables -A INPUT -p icmp -j DROP
________________
D. Par ÉTAT de connexion (IMPORTANT !)
Option
Signification
NEW
Nouvelle connexion
ESTABLISHED
Connexion déjà établie
RELATED
Connexion liée (ex: FTP data)
INVALID
Paquet invalide
EXEMPLE CRUCIAL pour ton TP :
# TOUJOURS mettre en PREMIER !
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
# "Autorise les réponses aux connexions que J'AI initiées"
Pourquoi c'est important ?
Sans cette règle :
* Tu pingues 8.8.8.8 → paquet sort (NEW)
* 8.8.8.8 répond → paquet entre (ESTABLISHED) → BLOQUÉ si pas de règle !
* Résultat : le ping ne marche que dans un sens
________________
E. Par PORT (TCP/UDP)
Option
Signification
Exemple
--sport PORT
Source port
--sport 1024:65535
--dport PORT
Destination port
--dport 80
--sport MIN:MAX
Range de ports
--sport 1000:2000
--multiport --sports
Multiples ports source
--multiport --sports 22,80,443
--multiport --dports
Multiples ports destination
--multiport --dports 21,22,23
Exemples :
# Un seul port
iptables -A INPUT -p tcp --dport 22 -j ACCEPT # SSH
# Range de ports
iptables -A INPUT -p tcp --dport 1024:65535 -j ACCEPT # Ports éphémères
# Multiples ports
iptables -A INPUT -p tcp -m multiport --dports 80,443,8080 -j ACCEPT
# Ports source (quand tu es client)
iptables -A OUTPUT -p tcp --sport 32768:60999 -j ACCEPT
________________
F. Options avancées
Option
Signification
Exemple
-m limit --limit
Limiter le débit
--limit 3/sec
-m mac --mac-source
Par adresse MAC
--mac-source 00:11:22:33:44:55
-m tcp --tcp-flags
Flags TCP
--tcp-flags SYN,ACK,FIN,RST SYN
-m time
Par heure/jour
--timestart 09:00 --timestop 17:00
Exemples :
# Anti-DDoS sur ping
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
# Par MAC address
iptables -A INPUT -m mac --mac-source 00:11:22:33:44:55 -j ACCEPT
# Seulement le jour
iptables -A INPUT -p tcp --dport 22 -m time --timestart 09:00 --timestop 17:00 -j ACCEPT
________________
ACTIONS possibles (-j)
Action
Signification
Exemple
ACCEPT
Accepter le paquet
-j ACCEPT
DROP
Supprimer silencieusement
-j DROP
REJECT
Rejeter avec erreur
-j REJECT
LOG
Logger (journaliser)
-j LOG
RETURN
Retourner à la chaîne parente
-j RETURN
Différence DROP vs REJECT :
* DROP = paquet jeté, pas de réponse → timeout
* REJECT = envoie "Connection refused" → erreur immédiate
# Exemple LOG
iptables -A INPUT -p tcp --dport 22 -j LOG --log-prefix "SSH attempt: "
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
________________
EXEMPLES COMPLETS pour ton TP
Exemple 1 : Pare-feu personnel
# Politique par défaut DROP
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# Localhost toujours autorisé
iptables -A INPUT -i lo -j ACCEPT
# Réponses aux connexions établies
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# SSH depuis réseau local seulement
iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT
# HTTP/HTTPS
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# Ping limité
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
Exemple 2 : Routeur (comme dans ton TP)
bash
# Activer le forwarding
sysctl -w net.ipv4.ip_forward=1
# --- RÈGLES FORWARD ---
# 1. TOUJOURS en premier : réponses
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
# 3. S2 → S1 autorisé
iptables -A FORWARD -s 172.16.2.0/24 -d 172.16.1.0/24 -j ACCEPT
# 4. S1 ↛ S3 bloqué
iptables -A FORWARD -s 172.16.1.0/24 -d 172.16.3.0/24 -j DROP
# 5. S3 ↛ S1 bloqué
iptables -A FORWARD -s 172.16.3.0/24 -d 172.16.1.0/24 -j DROP
# 6. Politique par défaut
iptables -P FORWARD DROP
Exemple 3 : Serveur web sécurisé
# Vider toutes les règles
iptables -F
iptables -X
# Politiques par défaut
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# Localhost
iptables -A INPUT -i lo -j ACCEPT
# Réponses
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# SSH avec limite
iptables -A INPUT -p tcp --dport 22 -m limit --limit 3/min -j ACCEPT
# HTTP/HTTPS
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# DNS
iptables -A INPUT -p udp --dport 53 -j ACCEPT
# Ping limité
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
# Protection contre les scans
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
________________
ORDRE DES RÈGLES (TRÈS IMPORTANT !)
Les règles sont vérifiées dans l'ordre ! La première qui correspond s'applique.
MAUVAIS ordre :
iptables -A INPUT -j DROP # 1. Tout bloqué !
iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 2. Jamais atteint
BON ordre :
iptables -A INPUT -i lo -j ACCEPT # 1. Localhost
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 2. Réponses
iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 3. SSH
iptables -A INPUT -j DROP # 4. Tout le reste bloqué
Règle d'or :
1. localhost (lo)
2. ESTABLISHED,RELATED
3. Règles spécifiques (ACCEPT)
4. Règles de blocage spécifiques
5. Politique par défaut (DROP)
________________
COMMANDES UTILES pour tester
# Voir toutes les règles
iptables -L -v -n
# Voir une chaîne spécifique
iptables -L INPUT -v -n
# Voir avec numéros de ligne
iptables -L --line-numbers
# Supprimer une règle (ex: ligne 3 de INPUT)
iptables -D INPUT 3
# Vider toutes les règles
iptables -F
# Sauvegarder
iptables-save > /etc/iptables.rules
# Restaurer
iptables-restore < /etc/iptables.rules
________________
Une règle iptables =
iptables -t filter -A CHAINE
CRITÈRES :
-s 192.168.1.0/24 (source)
-d 10.0.0.1 (destination)
-p tcp (protocole)
--dport 80 (port)
-i eth0 (interface)
-m state --state NEW (état)
-j ACTION
ACCEPT / DROP / REJECT / LOG

View File

@@ -0,0 +1,373 @@
# **Guide complet de `iptables -t nat`**
## **Structure de base**
`iptables -t nat -A CHAINE [CRITÈRES] -j ACTION [OPTIONS]`
* `-t nat` \= table NAT (obligatoire ici)
* `-A` \= Append (ajouter à la fin)
* `CHAINE` \= `PREROUTING`, `POSTROUTING` ou `OUTPUT`
* `ACTION` \= `SNAT`, `DNAT`, `MASQUERADE`, `REDIRECT`
---
## **Les 3 chaînes principales de NAT**
### **1\. Chaîne `PREROUTING` \- Avant le routage**
Quand : Paquets qui viennent d'arriver sur la machine
Fonction : Changer la DESTINATION
Typique pour : Port forwarding, redirection
### **2\. Chaîne `POSTROUTING` \- Après le routage**
Quand : Paquets qui vont sortir de la machine
Fonction : Changer la SOURCE
Typique pour : Masquer l'adresse source, NAT sortant
### **3\. Chaîne `OUTPUT` (nat) \- Paquets générés localement**
Quand : Paquets créés par la machine elle-même
Fonction : Changer la destination pour le trafic local
---
## **Actions NAT principales**
### **A. `SNAT` (Source NAT) \- Changer l'adresse source**
`-j SNAT --to-source ADRESSE[:PORT-PORT]`
Exemples :
*`# Changer la source en IP fixe`*
`iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source 203.0.113.1`
*`# Changer la source avec range de ports`*
`iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source 203.0.113.1:1024-65535`
*`# Dans ton TP`*
`iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 172.16.2.254`
### **B. `MASQUERADE` \- SNAT avec IP dynamique**
`-j MASQUERADE [--to-ports PORT-PORT]`
Exemples :
*`# Masquer tout un réseau (typique pour Internet)`*
`iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE`
*`# Masquer avec ports spécifiques`*
`iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE --to-ports 1024-65535`
Différence SNAT vs MASQUERADE :
* `SNAT` : IP source fixe (connue à l'avance)
* `MASQUERADE` : IP source \= celle de l'interface (dynamique, typique pour connexions Internet)
### **C. `DNAT` (Destination NAT) \- Changer l'adresse destination**
`-j DNAT --to-destination ADRESSE[:PORT]`
Exemples :
*`# Port forwarding simple`*
`iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:80`
*`# Rediriger vers un autre port`*
`iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80`
*`# Load balancing entre 2 serveurs`*
`iptables -t nat -A PREROUTING -p tcp --dport 80 -m statistic --mode nth --every 2 --packet 0 -j DNAT --to-destination 192.168.1.101:80`
`iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.102:80`
### **D. `REDIRECT` \- Rediriger vers un port local**
`-j REDIRECT --to-ports PORT[-PORT]`
Exemples :
*`# Rediriger le port 80 vers 8080 local`*
`iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080`
*`# Rediriger vers un range de ports`*
`iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080-8090`
---
## **Critères de filtrage (communs avec filter)**
### **Par adresse IP**
*`# Source spécifique`*
`iptables -t nat -A POSTROUTING -s 192.168.1.100 -j SNAT --to-source 203.0.113.1`
*`# Destination spécifique`*
`iptables -t nat -A PREROUTING -d 203.0.113.1 -j DNAT --to-destination 192.168.1.100`
*`# Réseau entier`*
`iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE`
### **Par interface**
*`# Interface d'entrée (-i)`*
`iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100`
*`# Interface de sortie (-o)`*
`iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE`
### **Par protocole et port**
*`# TCP`*
`iptables -t nat -A PREROUTING -p tcp --dport 22 -j DNAT --to-destination 192.168.1.100:22`
*`# UDP`*
`iptables -t nat -A PREROUTING -p udp --dport 53 -j DNAT --to-destination 192.168.1.100:53`
*`# Multiple ports`*
`iptables -t nat -A PREROUTING -p tcp -m multiport --dports 80,443 -j DNAT --to-destination 192.168.1.100`
### **Par état de connexion**
*`# Seulement les nouvelles connexions`*
`iptables -t nat -A PREROUTING -p tcp --dport 80 -m state --state NEW -j DNAT --to-destination 192.168.1.100`
---
## **Exemples complets pour ton TP**
### **Exemple 1 : Routeur simple avec Internet**
*`# Activer le forwarding IP`*
`echo 1 > /proc/sys/net/ipv4/ip_forward`
*`# NAT pour le réseau local vers Internet`*
`iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE`
*`# Autoriser le trafic forwardé`*
`iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT`
`iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT`
### **Exemple 2 : Serveur avec port forwarding**
*`# Forwarding SSH`*
`iptables -t nat -A PREROUTING -d 203.0.113.1 -p tcp --dport 22 -j DNAT --to-destination 192.168.1.100:22`
*`# Forwarding HTTP/HTTPS`*
`iptables -t nat -A PREROUTING -d 203.0.113.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:80`
`iptables -t nat -A PREROUTING -d 203.0.113.1 -p tcp --dport 443 -j DNAT --to-destination 192.168.1.100:443`
*`# NAT de retour (conntrack gère automatiquement normalement)`*
*`# Mais parfois besoin de :`*
`iptables -t nat -A POSTROUTING -s 192.168.1.100 -j SNAT --to-source 203.0.113.1`
### **Exemple 3 : Dans ton TP02**
*`# Sur GW1 : NAT entre S1 et 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`
*`# Sur GW2 : NAT vers 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`
*`# Sur GW2 : DNAT pour le FTP`*
`iptables -t nat -A PREROUTING -d 45.45.45.254 -p tcp --dport 21 -j DNAT --to-destination 172.16.2.10:21`
### **Exemple 4 : Proxy transparent**
*`# Rediriger tout le HTTP vers un proxy local`*
`iptables -t nat -A PREROUTING -s 192.168.1.0/24 -p tcp --dport 80 -j REDIRECT --to-ports 3128`
*`# Rediriger le HTTPS (nécessite proxy SSL)`*
`iptables -t nat -A PREROUTING -s 192.168.1.0/24 -p tcp --dport 443 -j REDIRECT --to-ports 3129`
### **Exemple 5 : Load balancing**
*`# Répartir la charge entre 3 serveurs web`*
`iptables -t nat -A PREROUTING -p tcp --dport 80 -m statistic --mode nth --every 3 --packet 0 -j DNAT --to-destination 192.168.1.101:80`
`iptables -t nat -A PREROUTING -p tcp --dport 80 -m statistic --mode nth --every 3 --packet 1 -j DNAT --to-destination 192.168.1.102:80`
`iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.103:80`
---
## **Chemin d'un paquet avec NAT**
`Paquet entre sur eth0`
`↓`
`PREROUTING (nat) ← DNAT/REDIRECT (changer destination)`
`↓`
`ROUTAGE (décision) ← Où aller ?`
`↓`
`├── Pour la machine → INPUT (filter) → processus`
`│`
`├── Pour traverser → FORWARD (filter)`
`│ ↓`
`│ POSTROUTING (nat) ← SNAT/MASQUERADE (changer source)`
`│ ↓`
`│ Sort par interface`
`│`
`└── Généré localement → OUTPUT (nat) ← DNAT pour trafic local`
`↓`
`OUTPUT (filter)`
`↓`
`POSTROUTING (nat)`
`↓`
`Sort par interface`
---
## **Règles importantes avec connection tracking**
Le NAT utilise le connection tracking pour gérer les états :
*`# Voir les connexions NAT actives`*
`cat /proc/net/nf_conntrack`
*`# ou`*
`conntrack -L`
*`# Voir le statut d'une connexion spécifique`*
`conntrack -L -s 192.168.1.100`
*`# Effacer les connexions`*
`conntrack -D`
Exemple de sortie :
`tcp 6 117 ESTABLISHED src=192.168.1.100 dst=8.8.8.8 sport=54321 dport=53 src=8.8.8.8 dst=203.0.113.1 sport=53 dport=54321 [ASSURED] mark=0 use=1`
---
## **Bonnes pratiques et pièges courants**
### **1\. Ordre des règles NAT**
*`# Mauvais ordre`*
`iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE`
`iptables -t nat -A POSTROUTING -s 192.168.1.100 -j SNAT --to-source 203.0.113.2`
*`# La règle 2 n'est jamais atteinte !`*
*`# Bon ordre (spécifique avant générale)`*
`iptables -t nat -A POSTROUTING -s 192.168.1.100 -j SNAT --to-source 203.0.113.2`
`iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE`
### **2\. NAT et filtrage**
*`# IMPORTANT : Les règles filter voient les adresses APRÈS PREROUTING`*
*`# Donc pour DNAT :`*
`iptables -t nat -A PREROUTING -d 203.0.113.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:80`
*`# Puis en filter :`*
`iptables -A FORWARD -d 192.168.1.100 -p tcp --dport 80 -j ACCEPT # Pas 203.0.113.1 !`
### **3\. FTP avec NAT (cas spécial)**
*`# FTP actif nécessite des modules spéciaux`*
`modprobe nf_conntrack_ftp`
`modprobe nf_nat_ftp`
*`# Puis les règles NAT normales marchent`*
`iptables -t nat -A PREROUTING -d IP_PUBLIQUE -p tcp --dport 21 -j DNAT --to-destination IP_FTP:21`
### **4\. Problèmes courants**
*`# Oublier d'activer le forwarding`*
`echo 1 > /proc/sys/net/ipv4/ip_forward`
*`# Oublier les règles FORWARD après le NAT`*
`iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT`
`iptables -A FORWARD -i INTERNE -o EXTERNE -j ACCEPT`
*`# NAT asymétrique (à éviter)`*
`iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source IP_ETH0`
`iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source IP_ETH1`
*`# Le mieux : une seule règle MASQUERADE`*
---
## **Commandes de débogage**
*`# Voir les règles NAT`*
`iptables -t nat -L -v -n`
*`# Voir avec numéros de ligne`*
`iptables -t nat -L --line-numbers`
*`# Voir les compteurs`*
`iptables -t nat -L -v -n -x`
*`# Tracer le chemin d'un paquet`*
`iptables -t nat -L -v -n | grep -A5 -B5 "nom_regle"`
*`# Voir le connection tracking`*
`cat /proc/net/nf_conntrack | grep -i "ton_ip"`
*`# Logguer le NAT`*
`iptables -t nat -A PREROUTING -p tcp --dport 80 -j LOG --log-prefix "DNAT-80: "`
`iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:80`
---
## **Exemple complet de configuration type**
`#!/bin/bash`
*`# Configuration NAT complète pour un routeur`*
*`# Réinitialiser`*
`iptables -t nat -F`
`iptables -t nat -X`
*`# Activer le forwarding`*
`sysctl -w net.ipv4.ip_forward=1`
*`# === NAT SORTANT (Internet) ===`*
`iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE`
*`# === PORT FORWARDING ===`*
*`# SSH`*
`iptables -t nat -A PREROUTING -d 203.0.113.1 -p tcp --dport 22 -j DNAT --to-destination 192.168.1.100:22`
*`# HTTP/HTTPS`*
`iptables -t nat -A PREROUTING -d 203.0.113.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.101:80`
`iptables -t nat -A PREROUTING -d 203.0.113.1 -p tcp --dport 443 -j DNAT --to-destination 192.168.1.101:443`
*`# === RÈGLES FILTER CORRESPONDANTES ===`*
`iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT`
`iptables -A FORWARD -d 192.168.1.100 -p tcp --dport 22 -j ACCEPT`
`iptables -A FORWARD -d 192.168.1.101 -p tcp --dport 80 -j ACCEPT`
`iptables -A FORWARD -d 192.168.1.101 -p tcp --dport 443 -j ACCEPT`
`iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT`
`iptables -P FORWARD DROP`
*`# === SAUVEGARDE ===`*
`iptables-save > /etc/iptables/rules.v4`
---
Ce guide couvre l'essentiel de `iptables -t nat`. La clé est de comprendre que :
* `PREROUTING` \= avant routage \= changement de DESTINATION
* `POSTROUTING` \= après routage \= changement de SOURCE
* Le connection tracking gère automatiquement les flux inverses
* Les règles `filter` voient les adresses APRÈS le `PREROUTING` NAT

View File

@@ -0,0 +1,326 @@
Guide complet de iptables -t nat
Structure de base
iptables -t nat -A CHAINE [CRITÈRES] -j ACTION [OPTIONS]
* -t nat = table NAT (obligatoire ici)
* -A = Append (ajouter à la fin)
* CHAINE = PREROUTING, POSTROUTING ou OUTPUT
* ACTION = SNAT, DNAT, MASQUERADE, REDIRECT
________________
Les 3 chaînes principales de NAT
1. Chaîne PREROUTING - Avant le routage
Quand : Paquets qui viennent d'arriver sur la machine
Fonction : Changer la DESTINATION
Typique pour : Port forwarding, redirection
2. Chaîne POSTROUTING - Après le routage
Quand : Paquets qui vont sortir de la machine
Fonction : Changer la SOURCE
Typique pour : Masquer l'adresse source, NAT sortant
3. Chaîne OUTPUT (nat) - Paquets générés localement
Quand : Paquets créés par la machine elle-même
Fonction : Changer la destination pour le trafic local
________________
Actions NAT principales
A. SNAT (Source NAT) - Changer l'adresse source
-j SNAT --to-source ADRESSE[:PORT-PORT]
Exemples :
# Changer la source en IP fixe
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source 203.0.113.1
# Changer la source avec range de ports
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source 203.0.113.1:1024-65535
# Dans ton TP
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 172.16.2.254
B. MASQUERADE - SNAT avec IP dynamique
-j MASQUERADE [--to-ports PORT-PORT]
Exemples :
# Masquer tout un réseau (typique pour Internet)
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
# Masquer avec ports spécifiques
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE --to-ports 1024-65535
Différence SNAT vs MASQUERADE :
* SNAT : IP source fixe (connue à l'avance)
* MASQUERADE : IP source = celle de l'interface (dynamique, typique pour connexions Internet)
C. DNAT (Destination NAT) - Changer l'adresse destination
-j DNAT --to-destination ADRESSE[:PORT]
Exemples :
# Port forwarding simple
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:80
# Rediriger vers un autre port
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80
# Load balancing entre 2 serveurs
iptables -t nat -A PREROUTING -p tcp --dport 80 -m statistic --mode nth --every 2 --packet 0 -j DNAT --to-destination 192.168.1.101:80
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.102:80
D. REDIRECT - Rediriger vers un port local
-j REDIRECT --to-ports PORT[-PORT]
Exemples :
# Rediriger le port 80 vers 8080 local
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
# Rediriger vers un range de ports
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080-8090
________________
Critères de filtrage (communs avec filter)
Par adresse IP
# Source spécifique
iptables -t nat -A POSTROUTING -s 192.168.1.100 -j SNAT --to-source 203.0.113.1
# Destination spécifique
iptables -t nat -A PREROUTING -d 203.0.113.1 -j DNAT --to-destination 192.168.1.100
# Réseau entier
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE
Par interface
# Interface d'entrée (-i)
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100
# Interface de sortie (-o)
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
Par protocole et port
# TCP
iptables -t nat -A PREROUTING -p tcp --dport 22 -j DNAT --to-destination 192.168.1.100:22
# UDP
iptables -t nat -A PREROUTING -p udp --dport 53 -j DNAT --to-destination 192.168.1.100:53
# Multiple ports
iptables -t nat -A PREROUTING -p tcp -m multiport --dports 80,443 -j DNAT --to-destination 192.168.1.100
Par état de connexion
# Seulement les nouvelles connexions
iptables -t nat -A PREROUTING -p tcp --dport 80 -m state --state NEW -j DNAT --to-destination 192.168.1.100
________________
Exemples complets pour ton TP
Exemple 1 : Routeur simple avec Internet
# Activer le forwarding IP
echo 1 > /proc/sys/net/ipv4/ip_forward
# NAT pour le réseau local vers Internet
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
# Autoriser le trafic forwardé
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
Exemple 2 : Serveur avec port forwarding
# Forwarding SSH
iptables -t nat -A PREROUTING -d 203.0.113.1 -p tcp --dport 22 -j DNAT --to-destination 192.168.1.100:22
# Forwarding HTTP/HTTPS
iptables -t nat -A PREROUTING -d 203.0.113.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:80
iptables -t nat -A PREROUTING -d 203.0.113.1 -p tcp --dport 443 -j DNAT --to-destination 192.168.1.100:443
# NAT de retour (conntrack gère automatiquement normalement)
# Mais parfois besoin de :
iptables -t nat -A POSTROUTING -s 192.168.1.100 -j SNAT --to-source 203.0.113.1
Exemple 3 : Dans ton TP02
# Sur GW1 : NAT entre S1 et 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
# Sur GW2 : NAT vers 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
# Sur GW2 : DNAT pour le FTP
iptables -t nat -A PREROUTING -d 45.45.45.254 -p tcp --dport 21 -j DNAT --to-destination 172.16.2.10:21
Exemple 4 : Proxy transparent
# Rediriger tout le HTTP vers un proxy local
iptables -t nat -A PREROUTING -s 192.168.1.0/24 -p tcp --dport 80 -j REDIRECT --to-ports 3128
# Rediriger le HTTPS (nécessite proxy SSL)
iptables -t nat -A PREROUTING -s 192.168.1.0/24 -p tcp --dport 443 -j REDIRECT --to-ports 3129
Exemple 5 : Load balancing
# Répartir la charge entre 3 serveurs web
iptables -t nat -A PREROUTING -p tcp --dport 80 -m statistic --mode nth --every 3 --packet 0 -j DNAT --to-destination 192.168.1.101:80
iptables -t nat -A PREROUTING -p tcp --dport 80 -m statistic --mode nth --every 3 --packet 1 -j DNAT --to-destination 192.168.1.102:80
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.103:80
________________
Chemin d'un paquet avec NAT
Paquet entre sur eth0
PREROUTING (nat) ← DNAT/REDIRECT (changer destination)
ROUTAGE (décision) ← Où aller ?
├── Pour la machine → INPUT (filter) → processus
├── Pour traverser → FORWARD (filter)
│ ↓
│ POSTROUTING (nat) ← SNAT/MASQUERADE (changer source)
│ ↓
│ Sort par interface
└── Généré localement → OUTPUT (nat) ← DNAT pour trafic local
OUTPUT (filter)
POSTROUTING (nat)
Sort par interface
________________
Règles importantes avec connection tracking
Le NAT utilise le connection tracking pour gérer les états :
# Voir les connexions NAT actives
cat /proc/net/nf_conntrack
# ou
conntrack -L
# Voir le statut d'une connexion spécifique
conntrack -L -s 192.168.1.100
# Effacer les connexions
conntrack -D
Exemple de sortie :
tcp 6 117 ESTABLISHED src=192.168.1.100 dst=8.8.8.8 sport=54321 dport=53 src=8.8.8.8 dst=203.0.113.1 sport=53 dport=54321 [ASSURED] mark=0 use=1
________________
Bonnes pratiques et pièges courants
1. Ordre des règles NAT
# Mauvais ordre
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.1.100 -j SNAT --to-source 203.0.113.2
# La règle 2 n'est jamais atteinte !
# Bon ordre (spécifique avant générale)
iptables -t nat -A POSTROUTING -s 192.168.1.100 -j SNAT --to-source 203.0.113.2
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE
2. NAT et filtrage
# IMPORTANT : Les règles filter voient les adresses APRÈS PREROUTING
# Donc pour DNAT :
iptables -t nat -A PREROUTING -d 203.0.113.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:80
# Puis en filter :
iptables -A FORWARD -d 192.168.1.100 -p tcp --dport 80 -j ACCEPT # Pas 203.0.113.1 !
3. FTP avec NAT (cas spécial)
# FTP actif nécessite des modules spéciaux
modprobe nf_conntrack_ftp
modprobe nf_nat_ftp
# Puis les règles NAT normales marchent
iptables -t nat -A PREROUTING -d IP_PUBLIQUE -p tcp --dport 21 -j DNAT --to-destination IP_FTP:21
4. Problèmes courants
# Oublier d'activer le forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward
# Oublier les règles FORWARD après le NAT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i INTERNE -o EXTERNE -j ACCEPT
# NAT asymétrique (à éviter)
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source IP_ETH0
iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source IP_ETH1
# Le mieux : une seule règle MASQUERADE
________________
Commandes de débogage
# Voir les règles NAT
iptables -t nat -L -v -n
# Voir avec numéros de ligne
iptables -t nat -L --line-numbers
# Voir les compteurs
iptables -t nat -L -v -n -x
# Tracer le chemin d'un paquet
iptables -t nat -L -v -n | grep -A5 -B5 "nom_regle"
# Voir le connection tracking
cat /proc/net/nf_conntrack | grep -i "ton_ip"
# Logguer le NAT
iptables -t nat -A PREROUTING -p tcp --dport 80 -j LOG --log-prefix "DNAT-80: "
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:80
________________
Exemple complet de configuration type
#!/bin/bash
# Configuration NAT complète pour un routeur
# Réinitialiser
iptables -t nat -F
iptables -t nat -X
# Activer le forwarding
sysctl -w net.ipv4.ip_forward=1
# === NAT SORTANT (Internet) ===
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
# === PORT FORWARDING ===
# SSH
iptables -t nat -A PREROUTING -d 203.0.113.1 -p tcp --dport 22 -j DNAT --to-destination 192.168.1.100:22
# HTTP/HTTPS
iptables -t nat -A PREROUTING -d 203.0.113.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.101:80
iptables -t nat -A PREROUTING -d 203.0.113.1 -p tcp --dport 443 -j DNAT --to-destination 192.168.1.101:443
# === RÈGLES FILTER CORRESPONDANTES ===
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -d 192.168.1.100 -p tcp --dport 22 -j ACCEPT
iptables -A FORWARD -d 192.168.1.101 -p tcp --dport 80 -j ACCEPT
iptables -A FORWARD -d 192.168.1.101 -p tcp --dport 443 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
iptables -P FORWARD DROP
# === SAUVEGARDE ===
iptables-save > /etc/iptables/rules.v4
________________
Ce guide couvre l'essentiel de iptables -t nat. La clé est de comprendre que :
* PREROUTING = avant routage = changement de DESTINATION
* POSTROUTING = après routage = changement de SOURCE
* Le connection tracking gère automatiquement les flux inverses
* Les règles filter voient les adresses APRÈS le PREROUTING NAT

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@@ -0,0 +1,266 @@
# **TP01 IMUNES : Passerelles, Routage et Filtrage**
Ce TP a deux grands blocs :
* **PARTIE II : Une passerelle (one-gateway.imn)**
* **PARTIE III : Deux passerelles (two-gateways.imn)**
Je te fais **les deux**, propres, complets.
---
# **PARTIE I Préparation (répertoires IMUNES)**
### **À faire une seule fois au début du TP :**
## **1\. Sur ton compte personnel :**
`mkdir -p ~/SCR.3.2`
## **2\. Sur le compte local (celui où tu lances IMUNES) :**
Créer :
`mkdir -p ~/IMUNES/SCR.3.2/TP01`
IMUNES se lance :
`sudo imunes &`
---
# **PARTIE II Une passerelle (one-gateway.imn)**
Objectif :
Créer **un réseau S1** (172.16.1.0/24) et **un réseau S2** (172.16.2.0/24), reliés par **une passerelle GW**.
Les règles :
* S1 → S2 : **autorisé**
* S2 → S1 : **interdit**
---
## **Étape 1 — Construire la topologie**
Dans IMUNES :
1. Créer un switch pour S1
2. Créer un switch pour S2
3. Ajouter **pc1-1** et **pc1-2** sur S1
4. Ajouter **pc2-1** et **pc2-2** sur S2
5. Ajouter une machine type **host** pour la passerelle `GW`
6. Connecter :
`switch1 -- eth0:GW:eth0 -- switch2`
### **Adressage des machines :**
| Machine | Adresse | Masque | Route ? |
| ----- | ----- | ----- | ----- |
| pc1-1 | 172.16.1.1 | /24 | GW \= 172.16.1.254 |
| pc1-2 | 172.16.1.2 | /24 | GW \= 172.16.1.254 |
| pc2-1 | 172.16.2.1 | /24 | GW \= 172.16.2.254 |
| pc2-2 | 172.16.2.2 | /24 | GW \= 172.16.2.254 |
| GW eth0 | 172.16.1.254 | /24 | — |
| GW eth1 | 172.16.2.254 | /24 | — |
**Supprimer toutes les adresses IPv6** (elles perturbent les tests).
---
## **Étape 2 — Ajouter les routes statiques**
### **Question 1 : "Y a-t-il des routes à ajouter ? Où ?"**
**OUI : Dans *chaque PC***
Un PC ne peut pas joindre lautre réseau sans route vers GW.
### **Sur pc1-1 :**
`ip route add default via 172.16.1.254`
Sur pc1-2 :
`ip route add default via 172.16.1.254`
Sur pc2-1 :
`ip route add default via 172.16.2.254`
Sur pc2-2 :
`ip route add default via 172.16.2.254`
---
## **Étape 3 — Script de démarrage de GW**
Dans GW → **Custom configuration → Scripts** :
1. Cliquer sur **Fill defaults**
2. Ajouter à la fin :
`# Activer le routage IP`
`sysctl -w net.ipv4.ip_forward=1`
`# Autoriser S1 → S2 mais bloquer S2 → S1`
`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 DROP`
**Très important :**
* Le routage IP doit être activé (ip\_forward=1).
* iptables applique la règle du TP (S2 ne peut pas initier).
---
## **Étape 4 — Tests**
### **Depuis S1 → S2 (doit marcher) :**
`sudo himage pc1-1 ping -c 1 172.16.2.2`
Résultat attendu :
PING OK (comme dans lénoncé)
tp01.SCR.3.2
### **Depuis S2 → S1 (doit échouer) :**
`sudo himage pc2-1 ping -c 1 172.16.1.1`
Résultat attendu :
`connect: Network is unreachable` (comme lénoncé)
tp01.SCR.3.2
**FIN DE LA PARTIE II**
---
# **PARTIE III Deux passerelles (two-gateways.imn)**
Objectif :
Construire **un réseau à 3 segments** avec **2 passerelles**, des accès limités, et un accès Internet (10.0.0.0/8).
Schéma de lénoncé :
tp01.SCR.3.2
`S1 -- P1 -- S2 -- P2 -- S3`
`\`
`\---- Internet (10.0.0.0/8)`
### **Adresses exactes (selon lénoncé) :**
| Interface | Adresse |
| ----- | ----- |
| P1 eth0 | 172.16.1.254 |
| P1 eth1 | 172.16.2.253 |
| P2 eth0 | 172.16.2.252 |
| P2 eth1 | 172.16.3.251 |
| P2 eth2 | 10.0.0.250 |
---
# **Étape 1 — Construire la topo two-gateways.imn**
Créer :
* **3 switches** : S1, S2, S3
* **2 passerelles** : P1, P2
* **PCs** dans chaque segment
Configurer les adresses comme dans le tableau.
---
# **Étape 2 — Ajouter les routes par défaut**
### **S1 → défaut \= P1 :**
`ip route add default via 172.16.1.254`
### **S2 → défaut \= P2 :**
`ip route add default via 172.16.2.252`
### **S3 → défaut \= P2 :**
`ip route add default via 172.16.3.251`
---
# **Étape 3 — Scripts passerelles (iptables \+ routage)**
## **Script de démarrage P1**
`sysctl -w net.ipv4.ip_forward=1`
`# S1 → S2 autorisé`
`iptables -A FORWARD -s 172.16.1.0/24 -d 172.16.2.0/24 -j ACCEPT`
`# S2 → S1 interdit`
`iptables -A FORWARD -s 172.16.2.0/24 -d 172.16.1.0/24 -j DROP`
---
## **Script de P2**
`sysctl -w net.ipv4.ip_forward=1`
`# S2 → S3 autorisé`
`iptables -A FORWARD -s 172.16.2.0/24 -d 172.16.3.0/24 -j ACCEPT`
`# S3 → S2 interdit`
`iptables -A FORWARD -s 172.16.3.0/24 -d 172.16.2.0/24 -j DROP`
`# S1 pas visible par S3`
`iptables -A FORWARD -s 172.16.3.0/24 -d 172.16.1.0/24 -j DROP`
`# S1 et S2 → Internet (10.0.0.0/8) autorisé`
`iptables -A FORWARD -s 172.16.1.0/24 -d 10.0.0.0/8 -j ACCEPT`
`iptables -A FORWARD -s 172.16.2.0/24 -d 10.0.0.0/8 -j ACCEPT`
`# S3 → Internet interdit`
`iptables -A FORWARD -s 172.16.3.0/24 -d 10.0.0.0/8 -j DROP`
Le filtrage correspond **exactement** aux règles de lénoncé.
---
# **Étape 4 — Tests de validation**
### **S1 ↔ S2 :**
`pc1 ping 172.16.2.x → OK`
`pc2 ping 172.16.1.x → FAIL`
### **S2 ↔ S3 :**
`pc2 ping 172.16.3.x → OK`
`pc3 ping 172.16.2.x → FAIL`
### **S1 et S2 → Internet :**
`pc1 ping 10.0.0.1 → OK`
`pc2 ping 10.0.0.1 → OK`
### **S3 → Internet :**
`pc3 ping 10.0.0.1 → FAIL`
**FIN DE LA PARTIE III**

View File

@@ -0,0 +1,276 @@
TP01 IMUNES : Passerelles, Routage et Filtrage
Ce TP a deux grands blocs :
* PARTIE II : Une passerelle (one-gateway.imn)
* PARTIE III : Deux passerelles (two-gateways.imn)
Je te fais les deux, propres, complets.
________________
PARTIE I Préparation (répertoires IMUNES)
À faire une seule fois au début du TP :
1. Sur ton compte personnel :
mkdir -p ~/SCR.3.2
2. Sur le compte local (celui où tu lances IMUNES) :
Créer :
mkdir -p ~/IMUNES/SCR.3.2/TP01
IMUNES se lance :
sudo imunes &
________________
PARTIE II Une passerelle (one-gateway.imn)
Objectif :
Créer un réseau S1 (172.16.1.0/24) et un réseau S2 (172.16.2.0/24), reliés par une passerelle GW.
Les règles :
* S1 → S2 : autorisé
* S2 → S1 : interdit
________________
Étape 1 — Construire la topologie
Dans IMUNES :
1. Créer un switch pour S1
2. Créer un switch pour S2
3. Ajouter pc1-1 et pc1-2 sur S1
4. Ajouter pc2-1 et pc2-2 sur S2
5. Ajouter une machine type host pour la passerelle GW
6. Connecter :
switch1 -- eth0:GW:eth0 -- switch2
Adressage des machines :
Machine
Adresse
Masque
Route ?
pc1-1
172.16.1.1
/24
GW = 172.16.1.254
pc1-2
172.16.1.2
/24
GW = 172.16.1.254
pc2-1
172.16.2.1
/24
GW = 172.16.2.254
pc2-2
172.16.2.2
/24
GW = 172.16.2.254
GW eth0
172.16.1.254
/24
GW eth1
172.16.2.254
/24
Supprimer toutes les adresses IPv6 (elles perturbent les tests).
________________
Étape 2 — Ajouter les routes statiques
Question 1 : "Y a-t-il des routes à ajouter ? Où ?"
OUI : Dans chaque PC
Un PC ne peut pas joindre lautre réseau sans route vers GW.
Sur pc1-1 :
ip route add default via 172.16.1.254
Sur pc1-2 :
ip route add default via 172.16.1.254
Sur pc2-1 :
ip route add default via 172.16.2.254
Sur pc2-2 :
ip route add default via 172.16.2.254
________________
Étape 3 — Script de démarrage de GW
Dans GW → Custom configuration → Scripts :
1. Cliquer sur Fill defaults
2. Ajouter à la fin :
# Activer le routage IP
sysctl -w net.ipv4.ip_forward=1
# Autoriser S1 → S2 mais bloquer S2 → S1
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 DROP
Très important :
* Le routage IP doit être activé (ip_forward=1).
* iptables applique la règle du TP (S2 ne peut pas initier).
________________
Étape 4 — Tests
Depuis S1 → S2 (doit marcher) :
sudo himage pc1-1 ping -c 1 172.16.2.2
Résultat attendu :
PING OK (comme dans lénoncé)
tp01.SCR.3.2
Depuis S2 → S1 (doit échouer) :
sudo himage pc2-1 ping -c 1 172.16.1.1
Résultat attendu :
connect: Network is unreachable (comme lénoncé)
tp01.SCR.3.2
FIN DE LA PARTIE II
________________
PARTIE III Deux passerelles (two-gateways.imn)
Objectif :
Construire un réseau à 3 segments avec 2 passerelles, des accès limités, et un accès Internet (10.0.0.0/8).
Schéma de lénoncé :
tp01.SCR.3.2
S1 -- P1 -- S2 -- P2 -- S3
\
\---- Internet (10.0.0.0/8)
Adresses exactes (selon lénoncé) :
Interface
Adresse
P1 eth0
172.16.1.254
P1 eth1
172.16.2.253
P2 eth0
172.16.2.252
P2 eth1
172.16.3.251
P2 eth2
10.0.0.250
________________
Étape 1 — Construire la topo two-gateways.imn
Créer :
* 3 switches : S1, S2, S3
* 2 passerelles : P1, P2
* PCs dans chaque segment
Configurer les adresses comme dans le tableau.
________________
Étape 2 — Ajouter les routes par défaut
S1 → défaut = P1 :
ip route add default via 172.16.1.254
S2 → défaut = P2 :
ip route add default via 172.16.2.252
S3 → défaut = P2 :
ip route add default via 172.16.3.251
________________
Étape 3 — Scripts passerelles (iptables + routage)
Script de démarrage P1
sysctl -w net.ipv4.ip_forward=1
# S1 → S2 autorisé
iptables -A FORWARD -s 172.16.1.0/24 -d 172.16.2.0/24 -j ACCEPT
# S2 → S1 interdit
iptables -A FORWARD -s 172.16.2.0/24 -d 172.16.1.0/24 -j DROP
________________
Script de P2
sysctl -w net.ipv4.ip_forward=1
# S2 → S3 autorisé
iptables -A FORWARD -s 172.16.2.0/24 -d 172.16.3.0/24 -j ACCEPT
# S3 → S2 interdit
iptables -A FORWARD -s 172.16.3.0/24 -d 172.16.2.0/24 -j DROP
# S1 pas visible par S3
iptables -A FORWARD -s 172.16.3.0/24 -d 172.16.1.0/24 -j DROP
# S1 et S2 → Internet (10.0.0.0/8) autorisé
iptables -A FORWARD -s 172.16.1.0/24 -d 10.0.0.0/8 -j ACCEPT
iptables -A FORWARD -s 172.16.2.0/24 -d 10.0.0.0/8 -j ACCEPT
# S3 → Internet interdit
iptables -A FORWARD -s 172.16.3.0/24 -d 10.0.0.0/8 -j DROP
Le filtrage correspond exactement aux règles de lénoncé.
________________
Étape 4 — Tests de validation
S1 ↔ S2 :
pc1 ping 172.16.2.x → OK
pc2 ping 172.16.1.x → FAIL
S2 ↔ S3 :
pc2 ping 172.16.3.x → OK
pc3 ping 172.16.2.x → FAIL
S1 et S2 → Internet :
pc1 ping 10.0.0.1 → OK
pc2 ping 10.0.0.1 → OK
S3 → Internet :
pc3 ping 10.0.0.1 → FAIL
FIN DE LA PARTIE III

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

View File

@@ -0,0 +1,268 @@
## **0\. Topologie & prérequis**
Sur le schéma (page 3\) on a :
tp03.SCR.3.2
* **DHCPsrv** — `eth0` : `192.168.10.10/20`
* **GW**
* `eth0` : `192.168.10.254/20` (vers `switch1`)
* `eth1` : `172.16.2.254/24` (vers `switch2`)
* **pc1-1, pc1-2** : reliés à `switch1`, **sans IP** au départ (obtiendront une IP via DHCP)
* **pc2-1, pc2-2** : reliés à `switch2` (on les utilisera plus tard en partie II avec le relais)
Lidée de la partie I :
Serveur DHCP sur **DHCPsrv**, qui donne des adresses aux machines **du segment 192.168.10.0/20** (pc1-1, pc1-2) \+ leur route vers le reste.
Les contraintes DHCP :
tp03.SCR.3.2
1. Dernier octet (4ᵉ) des IPv4 allouées : **entre 20 et 40**.
2. 3ᵉ octet \= **10**.
3. Les nœuds du segment 192.168.10.0/20 doivent connaître la route vers lautre segment (172.16.2.0/24) → on va leur donner le **routeur par défaut GW (192.168.10.254)**.
Donc notre plage DHCP sera :
`192.168.10.20` à `192.168.10.40`.
---
## **1\. Construire la topo `dhcp-serv.imn`**
Dans IMUNES :
1. Crée un nouveau projet, ajoute :
* 1 routeur/host nommé **DHCPsrv**
* 1 routeur/host nommé **GW**
* 2 switches `switch1`, `switch2`
* 4 PCs : `pc1-1`, `pc1-2`, `pc2-1`, `pc2-2`
2. Câblage comme sur la *Figure 1 dhcp-serv.imn* (page 3).
tp03.SCR.3.2
3. Configure les **adresses statiques** suivantes :
* **DHCPsrv**
* `eth0` : `192.168.10.10/20`
* **GW**
* `eth0` : `192.168.10.254/20`
* `eth1` : `172.16.2.254/24`
* **pc1-1, pc1-2, pc2-1, pc2-2** : laisses **vide en IPv4** (ils auront une IPv6 link-local et éventuellement une fc00::20/64, comme dans lexemple de lénoncé).
tp03.SCR.3.2
Enregistre ça sous `dhcp-serv.imn`.
---
## **2\. Préparer le fichier `dhcpd.conf` (sur la machine host)**
Lénoncé demande de **copier** le `/etc/dhcp/dhcpd.conf` dun nœud virtuel vers lhost, de le modifier, puis de le recopier sur `DHCPsrv`.
tp03.SCR.3.2
### **2.1 Copier le modèle depuis un nœud virtuel**
Par exemple :
`# Depuis ta machine physique, dans ton répertoire IMUNES/SCR.3.2/TP03`
`mkdir -p IMUNES/SCR.3.2/TP03`
`# Copier le dhcpd.conf du nœud DHCPsrv vers lhost`
`sudo himage DHCPsrv cat /etc/dhcp/dhcpd.conf > IMUNES/SCR.3.2/TP03/dhcpd.conf`
Cest **ce** fichier `IMUNES/SCR.3.2/TP03/dhcpd.conf` quon va modifier.
tp03.SCR.3.2
### **2.2 Adapter `TP03/dhcpd.conf`**
Ouvre-le dans ton éditeur favori (`nano`, `vim`, …) et adapte pour obtenir quelque chose comme :
`# /etc/dhcp/dhcpd.conf - TP03`
`default-lease-time 600;`
`max-lease-time 7200;`
`authoritative;`
`# Sous-réseau 192.168.0.0/20`
`subnet 192.168.0.0 netmask 255.255.240.0 {`
`# (a) Plage dadresses : 192.168.10.20 - 192.168.10.40`
`range 192.168.10.20 192.168.10.40;`
`# (b) Route vers lautre segment via le routeur GW`
`option routers 192.168.10.254;`
`option subnet-mask 255.255.240.0;`
`option broadcast-address 192.168.15.255;`
`# DNS quelconque (par ex. Google)`
`option domain-name-servers 8.8.8.8;`
`}`
* Condition (a) respectée : dernier octet ∈ \[20, 40\], 3ᵉ octet \= 10\.
* Condition (b) : les clients recevront **une route par défaut** via `192.168.10.254`, qui leur permet datteindre aussi le réseau `172.16.2.0/24` (via GW).
---
## **3\. Re-copier `dhcpd.conf` sur DHCPsrv**
`# Copier le fichier configuré vers le node DHCPsrv`
`sudo himage DHCPsrv /bin/sh -c "cat > /etc/dhcp/dhcpd.conf" < IMUNES/SCR.3.2/TP03/dhcpd.conf`
Tu peux vérifier :
`sudo himage DHCPsrv cat /etc/dhcp/dhcpd.conf`
---
## **4\. Créer le fichier des baux côté serveur**
Le fichier des baux nexiste pas au départ ; il faut le créer manuellement.
tp03.SCR.3.2
`sudo himage DHCPsrv touch /var/lib/dhcp/dhcpd.leases`
---
## **5\. Limiter le serveur à IPv4 & interface `eth0`**
Dans `/etc/default/isc-dhcp-server` (sur **DHCPsrv**) :
tp03.SCR.3.2
1. Ouvrir le fichier :
`sudo himage DHCPsrv nano /etc/default/isc-dhcp-server`
2. Modifier :
**Commenter** la ligne `INTERFACESv6` :
`#INTERFACESv6="..."`
*
Mettre `INTERFACESv4` à `eth0` :
`INTERFACESv4="eth0"`
*
Sauvegarde, quitte.
---
## **6\. Démarrer le service DHCP**
Toujours sur ta machine physique :
`sudo himage DHCPsrv /etc/init.d/isc-dhcp-server start`
Sil ny a pas derreur de configuration, le service se lance.
Tu peux vérifier avec :
`sudo himage DHCPsrv ps aux | grep dhcpd`
Le PID est aussi enregistré dans un fichier (typiquement `/var/run/dhcpd.pid` ou similaire, voir `man dhcpd` pour le chemin exact).
tp03.SCR.3.2
---
## **7\. Well-known port « bootps » (question I.7)**
Dans `/etc/services`, le port **bootps** est le port **67/udp** (DHCP serveur).
tp03.SCR.3.2
Tu peux le vérifier :
`sudo himage DHCPsrv grep bootps /etc/services`
Vérifier quil est bien ouvert :
`# Avec ss`
`sudo himage DHCPsrv ss -lunp | grep 67`
`# ou avec netstat`
`sudo himage DHCPsrv netstat -anu | grep bootps`
Tu dois voir `udp 0 0 0.0.0.0:67` écouté par `dhcpd`.
---
## **8\. Vérifier pc1-1 avant DHCP (I.8)**
Avant de lancer `dhclient` :
`sudo himage pc1-1 ip addr show dev eth0`
`sudo himage pc1-1 ip route show`
Tu devrais voir seulement une adresse IPv6 (fc00::20/64 et fe80::...) comme dans lénoncé.
tp03.SCR.3.2
---
## **9\. Demander une adresse DHCP sur pc1-1 (I.9)**
Sur ta machine physique :
`sudo himage pc1-1 dhclient eth0`
Le client discute avec DHCPsrv, obtient une IP.
---
## **10\. Re-vérifier lIP & la table de routage (I.10 & I.11)**
`sudo himage pc1-1 ip addr show dev eth0`
`sudo himage pc1-1 ip route show`
Attendu :
* Une IPv4 dans la **plage** `192.168.10.20192.168.10.40`
Une route par défaut du type :
`default via 192.168.10.254 dev eth0`
*
**Réponse à la question I.11 :**
Oui, la route statique (route par défaut fournie par DHCP via `option routers 192.168.10.254;`) est fonctionnelle : pc1-1 enverra tout ce qui nest pas local vers GW, qui sait joindre lautre segment `172.16.2.0/24`.
tp03.SCR.3.2
Tu peux tester, par ex. ping vers GW :
`sudo himage pc1-1 ping -c 2 192.168.10.254`
---
## **11\. Voir les baux côté client (I.12)**
Sur pc1-1 :
`sudo himage pc1-1 cat /var/lib/dhcp/dhclient.leases`
Tu y verras lhistorique des baux obtenus / renouvelés.

Binary file not shown.

View File

@@ -0,0 +1,238 @@
0. Topologie & prérequis
Sur le schéma (page 3) on a :
tp03.SCR.3.2
* DHCPsrv — eth0 : 192.168.10.10/20
* GW
* eth0 : 192.168.10.254/20 (vers switch1)
* eth1 : 172.16.2.254/24 (vers switch2)
* pc1-1, pc1-2 : reliés à switch1, sans IP au départ (obtiendront une IP via DHCP)
* pc2-1, pc2-2 : reliés à switch2 (on les utilisera plus tard en partie II avec le relais)
Lidée de la partie I :
Serveur DHCP sur DHCPsrv, qui donne des adresses aux machines du segment 192.168.10.0/20 (pc1-1, pc1-2) + leur route vers le reste.
Les contraintes DHCP :
tp03.SCR.3.2
1. Dernier octet (4ᵉ) des IPv4 allouées : entre 20 et 40.
2. 3ᵉ octet = 10.
3. Les nœuds du segment 192.168.10.0/20 doivent connaître la route vers lautre segment (172.16.2.0/24) → on va leur donner le routeur par défaut GW (192.168.10.254).
Donc notre plage DHCP sera :
192.168.10.20 à 192.168.10.40.
________________
1. Construire la topo dhcp-serv.imn
Dans IMUNES :
1. Crée un nouveau projet, ajoute :
* 1 routeur/host nommé DHCPsrv
* 1 routeur/host nommé GW
* 2 switches switch1, switch2
* 4 PCs : pc1-1, pc1-2, pc2-1, pc2-2
2. Câblage comme sur la Figure 1 dhcp-serv.imn (page 3).
tp03.SCR.3.2
3. Configure les adresses statiques suivantes :
* DHCPsrv
* eth0 : 192.168.10.10/20
* GW
* eth0 : 192.168.10.254/20
* eth1 : 172.16.2.254/24
* pc1-1, pc1-2, pc2-1, pc2-2 : laisses vide en IPv4 (ils auront une IPv6 link-local et éventuellement une fc00::20/64, comme dans lexemple de lénoncé).
tp03.SCR.3.2
Enregistre ça sous dhcp-serv.imn.
________________
2. Préparer le fichier dhcpd.conf (sur la machine host)
Lénoncé demande de copier le /etc/dhcp/dhcpd.conf dun nœud virtuel vers lhost, de le modifier, puis de le recopier sur DHCPsrv.
tp03.SCR.3.2
2.1 Copier le modèle depuis un nœud virtuel
Par exemple :
# Depuis ta machine physique, dans ton répertoire IMUNES/SCR.3.2/TP03
mkdir -p IMUNES/SCR.3.2/TP03
# Copier le dhcpd.conf du nœud DHCPsrv vers lhost
sudo himage DHCPsrv cat /etc/dhcp/dhcpd.conf > IMUNES/SCR.3.2/TP03/dhcpd.conf
Cest ce fichier IMUNES/SCR.3.2/TP03/dhcpd.conf quon va modifier.
tp03.SCR.3.2
2.2 Adapter TP03/dhcpd.conf
Ouvre-le dans ton éditeur favori (nano, vim, …) et adapte pour obtenir quelque chose comme :
# /etc/dhcp/dhcpd.conf - TP03
default-lease-time 600;
max-lease-time 7200;
authoritative;
# Sous-réseau 192.168.0.0/20
subnet 192.168.0.0 netmask 255.255.240.0 {
# (a) Plage dadresses : 192.168.10.20 - 192.168.10.40
range 192.168.10.20 192.168.10.40;
# (b) Route vers lautre segment via le routeur GW
option routers 192.168.10.254;
option subnet-mask 255.255.240.0;
option broadcast-address 192.168.15.255;
# DNS quelconque (par ex. Google)
option domain-name-servers 8.8.8.8;
}
* Condition (a) respectée : dernier octet ∈ [20, 40], 3ᵉ octet = 10.
* Condition (b) : les clients recevront une route par défaut via 192.168.10.254, qui leur permet datteindre aussi le réseau 172.16.2.0/24 (via GW).
________________
3. Re-copier dhcpd.conf sur DHCPsrv
# Copier le fichier configuré vers le node DHCPsrv
sudo himage DHCPsrv /bin/sh -c "cat > /etc/dhcp/dhcpd.conf" < IMUNES/SCR.3.2/TP03/dhcpd.conf
Tu peux vérifier :
sudo himage DHCPsrv cat /etc/dhcp/dhcpd.conf
________________
4. Créer le fichier des baux côté serveur
Le fichier des baux nexiste pas au départ ; il faut le créer manuellement.
tp03.SCR.3.2
sudo himage DHCPsrv touch /var/lib/dhcp/dhcpd.leases
________________
5. Limiter le serveur à IPv4 & interface eth0
Dans /etc/default/isc-dhcp-server (sur DHCPsrv) :
tp03.SCR.3.2
1. Ouvrir le fichier :
sudo himage DHCPsrv nano /etc/default/isc-dhcp-server
2. Modifier :
Commenter la ligne INTERFACESv6 :
#INTERFACESv6="..."
* Mettre INTERFACESv4 à eth0 :
INTERFACESv4="eth0"
* Sauvegarde, quitte.
________________
6. Démarrer le service DHCP
Toujours sur ta machine physique :
sudo himage DHCPsrv /etc/init.d/isc-dhcp-server start
Sil ny a pas derreur de configuration, le service se lance.
Tu peux vérifier avec :
sudo himage DHCPsrv ps aux | grep dhcpd
Le PID est aussi enregistré dans un fichier (typiquement /var/run/dhcpd.pid ou similaire, voir man dhcpd pour le chemin exact).
tp03.SCR.3.2
________________
7. Well-known port « bootps » (question I.7)
Dans /etc/services, le port bootps est le port 67/udp (DHCP serveur).
tp03.SCR.3.2
Tu peux le vérifier :
sudo himage DHCPsrv grep bootps /etc/services
Vérifier quil est bien ouvert :
# Avec ss
sudo himage DHCPsrv ss -lunp | grep 67
# ou avec netstat
sudo himage DHCPsrv netstat -anu | grep bootps
Tu dois voir udp 0 0 0.0.0.0:67 écouté par dhcpd.
________________
8. Vérifier pc1-1 avant DHCP (I.8)
Avant de lancer dhclient :
sudo himage pc1-1 ip addr show dev eth0
sudo himage pc1-1 ip route show
Tu devrais voir seulement une adresse IPv6 (fc00::20/64 et fe80::...) comme dans lénoncé.
tp03.SCR.3.2
________________
9. Demander une adresse DHCP sur pc1-1 (I.9)
Sur ta machine physique :
sudo himage pc1-1 dhclient eth0
Le client discute avec DHCPsrv, obtient une IP.
________________
10. Re-vérifier lIP & la table de routage (I.10 & I.11)
sudo himage pc1-1 ip addr show dev eth0
sudo himage pc1-1 ip route show
Attendu :
* Une IPv4 dans la plage 192.168.10.20192.168.10.40
Une route par défaut du type :
default via 192.168.10.254 dev eth0
* Réponse à la question I.11 :
Oui, la route statique (route par défaut fournie par DHCP via option routers 192.168.10.254;) est fonctionnelle : pc1-1 enverra tout ce qui nest pas local vers GW, qui sait joindre lautre segment 172.16.2.0/24.
tp03.SCR.3.2
Tu peux tester, par ex. ping vers GW :
sudo himage pc1-1 ping -c 2 192.168.10.254
________________
11. Voir les baux côté client (I.12)
Sur pc1-1 :
sudo himage pc1-1 cat /var/lib/dhcp/dhclient.leases
Tu y verras lhistorique des baux obtenus / renouvelés.

View File

@@ -0,0 +1,176 @@
# **TP03 \- Partie II : Configuration du service DHCP Relay**
## **Configuration du fichier dhcpd.conf sur DHCPsrv**
### **Ce qui doit être ajouté/modifié :**
*\# Fichier : /etc/dhcp/dhcpd.conf*
*\# Déclaration des adresses fixes pour GW (Question II.1)*
host GW-eth0 {
hardware ethernet 42:00:aa:00:00:02; *\# MAC de eth0 de GW*
fixed-address 172.16.2.254; *\# IP fixe pour eth0 sur réseau 172.16.2.0/24*
}
host GW-eth1 {
hardware ethernet 42:00:aa:00:00:04; *\# MAC de eth1 de GW*
fixed-address 192.168.10.254; *\# IP fixe pour eth1 sur réseau 192.168.10.0/20*
}
*\# Configuration pour le réseau 192.168.10.0/20 (déjà présent)*
subnet 192.168.10.0 netmask 255.255.240.0 {
range 192.168.10.20 192.168.10.40; *\# Plage d'adresses (II.2.a)*
option subnet-mask 255.255.240.0;
option rfc-3442-classless-static-routes 24,172,16,2,192,168,10,254;
}
*\# AJOUTER : Configuration pour le réseau 172.16.2.0/24 (Question II.2)*
subnet 172.16.2.0 netmask 255.255.255.0 {
range 172.16.2.1 172.16.2.254; *\# Plage large*
option subnet-mask 255.255.255.0;
}
\#option rfc-3442.... : ladresse' 172.16.2.?/24 dmnd a 192.168.10.254 pour que les noeud 192 connaisse les autres route.
Explication :
* hardware ethernet : l'adresse MAC de l'interface
* fixed-address : IP fixe attribuée (réservation DHCP)
* range : plage d'adresses dynamiques
* option routers : route par défaut pour les clients
## **2\. Mise en place du DHCP Relay sur GW**
## **Commande à exécuter sur GW :**
*\# Sur le nœud GW dans IMUNES*
root@GW:/*\# dhcrelay \-d 192.168.10.10*
Options :
* \-d : mode debug (affiche l'activité à l'écran)
* 192.168.10.10 : adresse du serveur DHCP (DHCPsrv)
Sortie attendue :
Internet Systems Consortium DHCP Relay Agent 4.3.5
Copyright 2004-2016 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Listening on LPF/eth1/42:00:aa:00:00:04
Sending on LPF/eth1/42:00:aa:00:00:04
Listening on LPF/eth0/42:00:aa:00:00:02
Sending on LPF/eth0/42:00:aa:00:00:02
Sending on Socket/fallback
## **3\. Test avec un client (pc2-2)**
### **Commandes sur pc2-2 :**
*\# Libérer l'adresse actuelle (si existante)*
root@pc2-2:/*\# dhclient \-r eth0*
*\# Demander une nouvelle adresse*
root@pc2-2:/*\# dhclient eth0*
### **Observations sur GW (relais) :**
Forwarded BOOTREQUEST for 42:00:aa:00:00:06 to 192.168.10.10
### **Questions II.4 :**
a) Quelle est l'adresse MAC indiquée ?
→ 42:00:aa:00:00:06 (c'est l'adresse MAC de pc2-2)
b) Quelle est l'adresse de l'interface relais ?
→ 172.16.2.254 (c'est l'IP de eth0 de GW sur le réseau 172.16.2.0/24)
**4\. Problème des doublons (Questions II.5-6)**
### **Pourquoi des doublons ?**
Les requêtes DHCP sont des broadcasts. Le relais GW a deux interfaces sur le même réseau broadcast (eth0 et eth1 sur le même segment logique). Quand il reçoit un broadcast DHCP sur une interface, il le relaie vers le serveur, mais l'autre interface reçoit aussi ce même broadcast et le relaie à nouveau.
Explication :
1. pc2-2 envoie DHCPDISCOVER en broadcast
2. GW reçoit sur eth0 → relaie vers DHCPsrv
3. GW reçoit SUR eth1 (même broadcast) → relaie À NOUVEAU vers DHCPsrv
4. Résultat : DHCPsrv reçoit 2 fois chaque message
### **Messages dupliqués (II.6) :**
* DHCPDISCOVER (message de découverte)
* DHCPREQUEST (message de requête)
**5\. Solution pour éviter les doublons (Question II.7)**
### **Commande corrigée :**
*\# Sur GW*
root@GW:/*\# dhcrelay \-i discard 192.168.10.10*
Option :
* \-i discard : demande au relais de ne pas traiter les messages déjà vus (discard duplicates)
Alternative (selon version) :
dhcrelay \-m discard 192.168.10.10
*\# ou*
dhcrelay \--no-ping 192.168.10.10
Explication : L'option discard fait que le relais ignore les messages DHCP qu'il a déjà traités, évitant ainsi les doublons.
**6\. Vérification finale (Question II.8)**
### **Après correction :**
*\# Sur GW*
root@GW:/*\# dhcrelay \-i discard 192.168.10.10*
*\# Sur pc2-2*
root@pc2-2:/*\# dhclient \-r eth0*
root@pc2-2:/*\# dhclient eth0*
Observations :
* Plus de doublons côté serveur DHCP
* Un seul DHCPDISCOVER et un seul DHCPREQUEST
* Attribution d'adresse normale
Conclusion : L'option \-i discard (ou \-m discard) résout le problème des doublons en faisant ignorer au relais les messages qu'il a déjà traités.
---
**Résumé des commandes importantes**
| Étape | Machine | Commande | But |
| :---- | :---- | :---- | :---- |
| 1 | DHCPsrv | nano /etc/dhcp/dhcpd.conf | Configurer les sous-réseaux et réservations |
| 2 | DHCPsrv | /etc/init.d/isc-dhcp-server restart | Redémarrer le serveur DHCP |
| 3 | GW | dhcrelay \-i discard 192.168.10.10 | Lancer le relais sans doublons |
| 4 | Client | dhclient \-r eth0 && dhclient eth0 | Renouveler l'adresse IP |
**Points de vérification**
1. Vérifier que le serveur DHCP écoute bien :
2. sudo himage DHCPsrv netstat \-tulpn | grep :67
3. Vérifier les baux attribués :
4. sudo himage DHCPsrv cat /var/lib/dhcp/dhcpd.leases
5. Vérifier la configuration réseau du client :
sudo himage pc2-2 ip addr show dev eth0
6. sudo himage pc2-2 ip route show

View File

@@ -0,0 +1,149 @@
TP03 - Partie II : Configuration du service DHCP Relay
Configuration du fichier dhcpd.conf sur DHCPsrv
Ce qui doit être ajouté/modifié :
# Fichier : /etc/dhcp/dhcpd.conf
# Déclaration des adresses fixes pour GW (Question II.1)
host GW-eth0 {
hardware ethernet 42:00:aa:00:00:02; # MAC de eth0 de GW
fixed-address 172.16.2.254; # IP fixe pour eth0 sur réseau 172.16.2.0/24
}
host GW-eth1 {
hardware ethernet 42:00:aa:00:00:04; # MAC de eth1 de GW
fixed-address 192.168.10.254; # IP fixe pour eth1 sur réseau 192.168.10.0/20
}
# Configuration pour le réseau 192.168.10.0/20 (déjà présent)
subnet 192.168.10.0 netmask 255.255.240.0 {
range 192.168.10.20 192.168.10.40; # Plage d'adresses (II.2.a)
option subnet-mask 255.255.240.0;
option rfc-3442-classless-static-routes 24,172,16,2,192,168,10,254;
}
# AJOUTER : Configuration pour le réseau 172.16.2.0/24 (Question II.2)
subnet 172.16.2.0 netmask 255.255.255.0 {
range 172.16.2.1 172.16.2.254; # Plage large
option subnet-mask 255.255.255.0;
}
#option rfc-3442.... : ladresse' 172.16.2.?/24 dmnd a 192.168.10.254 pour que les noeud 192 connaisse les autres route.
Explication :
* hardware ethernet : l'adresse MAC de l'interface
* fixed-address : IP fixe attribuée (réservation DHCP)
* range : plage d'adresses dynamiques
* option routers : route par défaut pour les clients
2. Mise en place du DHCP Relay sur GW
Commande à exécuter sur GW :
# Sur le nœud GW dans IMUNES
root@GW:/# dhcrelay -d 192.168.10.10
Options :
* -d : mode debug (affiche l'activité à l'écran)
* 192.168.10.10 : adresse du serveur DHCP (DHCPsrv)
Sortie attendue :
Internet Systems Consortium DHCP Relay Agent 4.3.5
Copyright 2004-2016 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Listening on LPF/eth1/42:00:aa:00:00:04
Sending on LPF/eth1/42:00:aa:00:00:04
Listening on LPF/eth0/42:00:aa:00:00:02
Sending on LPF/eth0/42:00:aa:00:00:02
Sending on Socket/fallback
3. Test avec un client (pc2-2)
Commandes sur pc2-2 :
# Libérer l'adresse actuelle (si existante)
root@pc2-2:/# dhclient -r eth0
# Demander une nouvelle adresse
root@pc2-2:/# dhclient eth0
Observations sur GW (relais) :
Forwarded BOOTREQUEST for 42:00:aa:00:00:06 to 192.168.10.10
Questions II.4 :
a) Quelle est l'adresse MAC indiquée ?
→ 42:00:aa:00:00:06 (c'est l'adresse MAC de pc2-2)
b) Quelle est l'adresse de l'interface relais ?
→ 172.16.2.254 (c'est l'IP de eth0 de GW sur le réseau 172.16.2.0/24)
4. Problème des doublons (Questions II.5-6)
Pourquoi des doublons ?
Les requêtes DHCP sont des broadcasts. Le relais GW a deux interfaces sur le même réseau broadcast (eth0 et eth1 sur le même segment logique). Quand il reçoit un broadcast DHCP sur une interface, il le relaie vers le serveur, mais l'autre interface reçoit aussi ce même broadcast et le relaie à nouveau.
Explication :
1. pc2-2 envoie DHCPDISCOVER en broadcast
2. GW reçoit sur eth0 → relaie vers DHCPsrv
3. GW reçoit SUR eth1 (même broadcast) → relaie À NOUVEAU vers DHCPsrv
4. Résultat : DHCPsrv reçoit 2 fois chaque message
Messages dupliqués (II.6) :
* DHCPDISCOVER (message de découverte)
* DHCPREQUEST (message de requête)
5. Solution pour éviter les doublons (Question II.7)
Commande corrigée :
# Sur GW
root@GW:/# dhcrelay -i discard 192.168.10.10
Option :
* -i discard : demande au relais de ne pas traiter les messages déjà vus (discard duplicates)
Alternative (selon version) :
dhcrelay -m discard 192.168.10.10
# ou
dhcrelay --no-ping 192.168.10.10
Explication : L'option discard fait que le relais ignore les messages DHCP qu'il a déjà traités, évitant ainsi les doublons.
6. Vérification finale (Question II.8)
Après correction :
# Sur GW
root@GW:/# dhcrelay -i discard 192.168.10.10
# Sur pc2-2
root@pc2-2:/# dhclient -r eth0
root@pc2-2:/# dhclient eth0
Observations :
* Plus de doublons côté serveur DHCP
* Un seul DHCPDISCOVER et un seul DHCPREQUEST
* Attribution d'adresse normale
Conclusion : L'option -i discard (ou -m discard) résout le problème des doublons en faisant ignorer au relais les messages qu'il a déjà traités.
________________
Résumé des commandes importantes
Étape
Machine
Commande
But
1
DHCPsrv
nano /etc/dhcp/dhcpd.conf
Configurer les sous-réseaux et réservations
2
DHCPsrv
/etc/init.d/isc-dhcp-server restart
Redémarrer le serveur DHCP
3
GW
dhcrelay -i discard 192.168.10.10
Lancer le relais sans doublons
4
Client
dhclient -r eth0 && dhclient eth0
Renouveler l'adresse IP
Points de vérification
1. Vérifier que le serveur DHCP écoute bien :
2. sudo himage DHCPsrv netstat -tulpn | grep :67
3. Vérifier les baux attribués :
4. sudo himage DHCPsrv cat /var/lib/dhcp/dhcpd.leases
5. Vérifier la configuration réseau du client :
sudo himage pc2-2 ip addr show dev eth0
6. sudo himage pc2-2 ip route show

View File

@@ -0,0 +1,227 @@
# **PARTIE 1 — Créer la topologie ddns.imn**
### **1\. Copier la topologie du TP22**
`cp ~/SCR.3.2/TP22/dns1.imn ~/SCR.3.2/TP04/ddns.imn`
### **2\. Ouvrir ddns.imn dans IMUNES**
Dans IMUNES :
`File → Open → ddns.imn`
### **3\. Rôles des machines :**
| Machine | Rôle |
| ----- | ----- |
| osiris | Serveur DNS (bind9) |
| isis | Serveur DHCP |
| eno, owt, host1, host2… | Clients DHCP |
---
# **PARTIE 2 — Préparation des fichiers DNS sur osiris**
### **1\. Copier les fichiers DNS du TP22 vers TP04**
`mkdir -p ~/SCR.3.2/TP04/DNS`
`cp ~/SCR.3.2/TP22/*.zone ~/SCR.3.2/TP04/DNS/`
`cp ~/SCR.3.2/TP22/named.conf.local ~/SCR.3.2/TP04/DNS/`
Et renomme-les :
`mv named.conf.local osiris.named.conf.local`
### **2\. Éditer les fichiers de zone**
Très important :
Garder uniquement **osiris** et **isis** dans la zone.
Supprimer **eno**, **owt**, etc. (ces machines seront ajoutées par DHCP).
Exemple :
`osiris.db.tp.scr`
`$TTL 86400`
`@ IN SOA osiris.tp.scr. admin.tp.scr. (`
`1 ; serial`
`3H ; refresh`
`1H ; retry`
`1W ; expire`
`1D ); minimum`
`@ IN NS osiris.tp.scr.`
`osiris IN A 192.168.1.158`
`isis IN A 192.168.1.2`
### **Déplacer les fichiers dans /var/lib/bind (exigé par TP)**
`sudo cp osiris.db.tp.scr /var/lib/bind/db.tp.scr`
`sudo cp osiris.db.rev /var/lib/bind/db.1.168.192`
Pourquoi pas /etc/bind ?
Car `named` sexécute en **user bind**, donc il na pas le droit décrire dans `/etc/bind`, mais **il a le droit** dans `/var/lib/bind`.
---
# **PARTIE 3 — Générer et installer la clé TSIG**
### **1\. Sur osiris, générer la clé :**
`tsig-keygen -a md5 tp.scr-key > ddns.key`
### **2\. Copier la clé dans les bons répertoires**
`sudo cp ddns.key /etc/bind/`
`sudo cp ddns.key /etc/dhcp/`
### **3\. Protéger la clé (obligatoire)**
`sudo chown root:bind /etc/bind/ddns.key`
`sudo chmod 640 /etc/bind/ddns.key`
`sudo chown root:bind /etc/dhcp/ddns.key`
`sudo chmod 640 /etc/dhcp/ddns.key`
---
# **PARTIE 4 — Configurer BIND9 (osiris)**
Éditer `/etc/bind/named.conf.local` :
`sudo nano /etc/bind/named.conf.local`
Mettre :
`include "/etc/bind/ddns.key";`
`zone "tp.scr" {`
`type master;`
`file "/var/lib/bind/db.tp.scr";`
`allow-update { key tp.scr-key; };`
`};`
`zone "1.168.192.in-addr.arpa" {`
`type master;`
`file "/var/lib/bind/db.1.168.192";`
`allow-update { key tp.scr-key; };`
`};`
---
# **PARTIE 5 — Configurer DHCP (isis)**
### **Éditer `/etc/dhcp/dhcpd.conf`**
`sudo nano /etc/dhcp/dhcpd.conf`
Mettre :
`include "/etc/dhcp/ddns.key";`
`ddns-update-style standard;`
`update-static-leases on;`
`option domain-name "tp.scr";`
`option domain-name-servers 192.168.1.158; # osiris`
`zone tp.scr. {`
`primary 192.168.1.158;`
`key tp.scr-key;`
`}`
`zone 1.168.192.in-addr.arpa. {`
`primary 192.168.1.158;`
`key tp.scr-key;`
`}`
`subnet 192.168.1.0 netmask 255.255.255.0 {`
`range 192.168.1.11 192.168.1.200;`
`option routers 192.168.1.254;`
`}`
---
# **PARTIE 6 — Lancer les services en mode debug**
### **1\. DNS (osiris)**
`sudo named -u bind -g`
Attendre les logs de démarrage…
---
### **2\. DHCP (isis)**
Créer dabord le fichier de leases :
`sudo touch /var/lib/dhcp/dhcpd.leases`
Lancer DHCP :
`sudo dhcpd -d`
Tu dois voir :
* DHCPDISCOVER
* DHCPOFFER
* DHCPREQUEST
* DHCPACK
* puis : **Forward update → osiris**
---
# **PARTIE 7 — Tests sur un client**
### **1\. Vérifier avant DHCP**
`sudo himage eno ip a`
`sudo himage eno cat /etc/resolv.conf`
### **2\. Demander une adresse**
`sudo himage eno dhclient -v eth0`
### **3\. Vérifier côté DNS**
Sur osiris (qui affiche en live) tu verras :
`approved update: add eno.tp.scr A 192.168.1.X`
`approved update: add X.1.168.192.in-addr.arpa PTR eno.tp.scr`
### **4\. Tester DNS**
`sudo himage eno dig eno.tp.scr`
`sudo himage eno dig -x 192.168.1.X`
---
# **PARTIE 8 — Tester une erreur de clé (obligatoire TP)**
### **Sur isis → Modifier volontairement la clé**
Dans `/etc/dhcp/ddns.key`, changer 1 caractère de la clé.
Relancer :
`sudo dhcpd -d`
### **Résultat attendu :**
* DHCP fonctionne toujours
DNS affiche :
`tsig verify failure (BADSIG)`
### **Test DNS :**
`dig eno.tp.scr`
→ Résultat : **NXDOMAIN**

View File

@@ -0,0 +1,223 @@
PARTIE 1 — Créer la topologie ddns.imn
1. Copier la topologie du TP22
cp ~/SCR.3.2/TP22/dns1.imn ~/SCR.3.2/TP04/ddns.imn
2. Ouvrir ddns.imn dans IMUNES
Dans IMUNES :
File → Open → ddns.imn
3. Rôles des machines :
Machine
Rôle
osiris
Serveur DNS (bind9)
isis
Serveur DHCP
eno, owt, host1, host2…
Clients DHCP
________________
PARTIE 2 — Préparation des fichiers DNS sur osiris
1. Copier les fichiers DNS du TP22 vers TP04
mkdir -p ~/SCR.3.2/TP04/DNS
cp ~/SCR.3.2/TP22/*.zone ~/SCR.3.2/TP04/DNS/
cp ~/SCR.3.2/TP22/named.conf.local ~/SCR.3.2/TP04/DNS/
Et renomme-les :
mv named.conf.local osiris.named.conf.local
2. Éditer les fichiers de zone
Très important :
Garder uniquement osiris et isis dans la zone.
Supprimer eno, owt, etc. (ces machines seront ajoutées par DHCP).
Exemple :
osiris.db.tp.scr
$TTL 86400
@ IN SOA osiris.tp.scr. admin.tp.scr. (
1 ; serial
3H ; refresh
1H ; retry
1W ; expire
1D ); minimum
@ IN NS osiris.tp.scr.
osiris IN A 192.168.1.158
isis IN A 192.168.1.2
Déplacer les fichiers dans /var/lib/bind (exigé par TP)
sudo cp osiris.db.tp.scr /var/lib/bind/db.tp.scr
sudo cp osiris.db.rev /var/lib/bind/db.1.168.192
Pourquoi pas /etc/bind ?
Car named sexécute en user bind, donc il na pas le droit décrire dans /etc/bind, mais il a le droit dans /var/lib/bind.
________________
PARTIE 3 — Générer et installer la clé TSIG
1. Sur osiris, générer la clé :
tsig-keygen -a md5 tp.scr-key > ddns.key
2. Copier la clé dans les bons répertoires
sudo cp ddns.key /etc/bind/
sudo cp ddns.key /etc/dhcp/
3. Protéger la clé (obligatoire)
sudo chown root:bind /etc/bind/ddns.key
sudo chmod 640 /etc/bind/ddns.key
sudo chown root:bind /etc/dhcp/ddns.key
sudo chmod 640 /etc/dhcp/ddns.key
________________
PARTIE 4 — Configurer BIND9 (osiris)
Éditer /etc/bind/named.conf.local :
sudo nano /etc/bind/named.conf.local
Mettre :
include "/etc/bind/ddns.key";
zone "tp.scr" {
type master;
file "/var/lib/bind/db.tp.scr";
allow-update { key tp.scr-key; };
};
zone "1.168.192.in-addr.arpa" {
type master;
file "/var/lib/bind/db.1.168.192";
allow-update { key tp.scr-key; };
};
________________
PARTIE 5 — Configurer DHCP (isis)
Éditer /etc/dhcp/dhcpd.conf
sudo nano /etc/dhcp/dhcpd.conf
Mettre :
include "/etc/dhcp/ddns.key";
ddns-update-style standard;
update-static-leases on;
option domain-name "tp.scr";
option domain-name-servers 192.168.1.158; # osiris
zone tp.scr. {
primary 192.168.1.158;
key tp.scr-key;
}
zone 1.168.192.in-addr.arpa. {
primary 192.168.1.158;
key tp.scr-key;
}
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.11 192.168.1.200;
option routers 192.168.1.254;
}
________________
PARTIE 6 — Lancer les services en mode debug
1. DNS (osiris)
sudo named -u bind -g
Attendre les logs de démarrage…
________________
2. DHCP (isis)
Créer dabord le fichier de leases :
sudo touch /var/lib/dhcp/dhcpd.leases
Lancer DHCP :
sudo dhcpd -d
Tu dois voir :
* DHCPDISCOVER
* DHCPOFFER
* DHCPREQUEST
* DHCPACK
* puis : Forward update → osiris
________________
PARTIE 7 — Tests sur un client
1. Vérifier avant DHCP
sudo himage eno ip a
sudo himage eno cat /etc/resolv.conf
2. Demander une adresse
sudo himage eno dhclient -v eth0
3. Vérifier côté DNS
Sur osiris (qui affiche en live) tu verras :
approved update: add eno.tp.scr A 192.168.1.X
approved update: add X.1.168.192.in-addr.arpa PTR eno.tp.scr
4. Tester DNS
sudo himage eno dig eno.tp.scr
sudo himage eno dig -x 192.168.1.X
________________
PARTIE 8 — Tester une erreur de clé (obligatoire TP)
Sur isis → Modifier volontairement la clé
Dans /etc/dhcp/ddns.key, changer 1 caractère de la clé.
Relancer :
sudo dhcpd -d
Résultat attendu :
* DHCP fonctionne toujours
DNS affiche :
tsig verify failure (BADSIG)
Test DNS :
dig eno.tp.scr
→ Résultat : NXDOMAIN

View File

@@ -0,0 +1,364 @@
# **TP04 Dynamic DNS — Organisation par GRANDES PARTIES**
---
# **PARTIE 1 — Préparation de la topologie (ddns.imn)**
### **Objectif :**
Créer une topologie avec :
* un **serveur DNS** : *osiris*
* un **serveur DHCP** : *isis*
* des clients (eno, owt, pc1, pc2…)
### **Ce que tu dois faire :**
1. Copier la topologie du TP22 (`dns1.imn`)
2. Enregistrer sous `ddns.imn` dans :
`~/SCR.3.2/TP04/`
3. Assigner :
* **osiris** : serveur DNS
* **isis** : serveur DHCP
* Les autres machines : sans IP statique (elles utiliseront DHCP)
### **Pourquoi ?**
Parce que :
* DHCP doit distribuer IP \+ DNS \+ nom de domaine,
* DHCP doit envoyer des mises à jour dynamiques au DNS.
---
# **PARTIE 2 — Préparation des fichiers DNS (osiris)**
### **Objectif :**
Créer les fichiers de zone que BIND pourra *modifier dynamiquement*.
### **Étapes :**
### **(1) Copier les fichiers du TP22 dans TP04**
Tu copies depuis ton dossier TP22 tout ce qui concerne DNS :
`named.conf.local`
`db.tp.scr`
`db.1.168.192`
Tu renommes :
`osiris.named.conf.local`
`osiris.db.tp.scr`
`osiris.db.1.168.192`
### **(2) Éditer les fichiers de zone**
Le TP dit : garder seulement :
* les enregistrements pour **osiris**,
* ajouter ceux pour **isis**,
* supprimer toutes les autres machines (eno, owt, pc1, pc2…).
tp04.SCR.3.2
Parce que ces autres machines recevront leurs enregistrements **dynamiquement via DHCP**, donc pas dans les fichiers statiques.
### **(3) Déplacer les fichiers dans `/var/lib/bind/`**
Très important : BIND **na pas le droit décrire** dans `/etc/bind/`.
Les fichiers de zones finalisés doivent être placés dans :
`/var/lib/bind/db.tp.scr`
`/var/lib/bind/db.1.168.192`
Pourquoi ?
* Parce que `named` tourne sous lutilisateur **bind**,
* Il doit créer un fichier journal `.jnl` pour les mises à jour dynamiques,
* `/etc/bind` nest pas modifiable par bind.
tp04.SCR.3.2
---
# **PARTIE 3 — Génération et configuration de la clé TSIG (sécurité)**
### **Objectif :**
Permettre à DHCP (isis) de mettre à jour DNS (osiris) en toute sécurité.
### **Générer la clé sur *osiris* :**
`tsig-keygen -a md5 tp.scr-key > ddns.key`
### **Installer la clé :**
#### **Sur osiris :**
`/etc/bind/ddns.key`
`chmod 640 ddns.key`
`chown root:bind ddns.key`
#### **Sur isis :**
`/etc/dhcp/ddns.key`
`chmod 640 ddns.key`
`chown root:bind ddns.key`
### **Pourquoi ?**
TSIG \= Transaction Signature
→ sécurité \= le DNS naccepte des updates **que du DHCP**, pas dun intrus.
---
# **PARTIE 4 — Configuration DNS dynamique (osiris)**
### **Objectif :**
Dire au serveur DNS de permettre les mises à jour dynamiques venant de isis.
### **Modifier `/etc/bind/named.conf.local` (renommé ici en osiris.named.conf.local)**
Exemple :
`include "/etc/bind/ddns.key";`
`zone "tp.scr" IN {`
`type master;`
`file "/var/lib/bind/db.tp.scr";`
`allow-update { key tp.scr-key; };`
`};`
`zone "1.168.192.in-addr.arpa" IN {`
`type master;`
`file "/var/lib/bind/db.1.168.192";`
`allow-update { key tp.scr-key; };`
`};`
### **Pourquoi ?**
* `allow-update { key ... }` \= autoriser DHCP uniquement.
* Le fichier de zone est dans `/var/lib/bind/` pour que BIND puisse écrire le `.jnl`.
---
# **PARTIE 5 — Configuration DHCP avec DDNS (isis)**
### **Objectif :**
Faire en sorte que DHCP :
* attribue des IP aux clients,
* génère automatiquement :
* un enregistrement A (nom → IP)
* un enregistrement PTR (IP → nom)
* envoie les mises à jour signées au DNS.
---
### **Modifier `/etc/dhcp/dhcpd.conf` (fichier isis.dhcpd.conf)**
Exemple minimal :
`include "/etc/dhcp/ddns.key";`
`ddns-update-style standard;`
`update-static-leases on;`
`option domain-name "tp.scr";`
`option domain-name-servers 192.168.1.158; # osiris`
`zone tp.scr. {`
`primary 192.168.1.158;`
`key tp.scr-key;`
`}`
`zone 1.168.192.in-addr.arpa. {`
`primary 192.168.1.158;`
`key tp.scr-key;`
`}`
`subnet 192.168.1.0 netmask 255.255.255.0 {`
`range 192.168.1.11 192.168.1.200;`
`option routers 192.168.1.254;`
`}`
---
### **Pourquoi ?**
Parce que DHCP doit :
* **savoir où envoyer** les mises à jour DNS → directives `zone {...}`;
* **les signer** → directive `key`;
* fournir lIP du DNS aux clients → option `domain-name-servers`.
---
# **PARTIE 6 — Lancement manuel des services en mode debug**
### **Objectif :**
Observer les transactions DDNS en temps réel.
---
### **Sur osiris (DNS) :**
`named -u bind -g`
Cela garde `named` en avant-plan et affiche les mises à jour.
---
### **Sur isis (DHCP) :**
`dhcpd -d`
Cela permet de voir :
* DHCPDISCOVER
* DHCPOFFER
* DHCPREQUEST
* DHCPACK
* et surtout → la génération des messages DDNS
---
### **Pourquoi ne pas lancer via `service bind9 start` ?**
Parce que tu ne verrais **aucun log**, et tu ne pourrais pas analyser les mises à jour dynamiques.
Le TP impose explicitement lexécution en mode debug.
tp04.SCR.3.2
---
# **PARTIE 7 — Tests fonctionnels**
### **1\. Avant la requête DHCP**
Sur un client (eno par exemple) :
`ip a`
`cat /etc/resolv.conf`
→ pas dIPv4, pas de DNS.
---
### **2\. Demande dadresse :**
`dhclient -v eth0`
### **Observations :**
#### **Côté DHCP (isis) :**
* DHCPACK
* "Added new forward map ..."
* "Added reverse map ..."
#### **Côté DNS (osiris) :**
* Validation TSIG
* Écriture dans `.jnl`
* Mise à jour A \+ PTR
---
### **3\. Test DNS :**
`dig eno.tp.scr`
`dig -x 192.168.1.X`
Résultat attendu :
* le nom résout vers lIP DHCP,
* lIP résout vers le nom.
---
# **PARTIE 8 — Cas derreur : mauvaise clé TSIG**
Le TP demande de modifier légèrement la clé du DHCP pour provoquer une erreur.
tp04.SCR.3.2
### **Symptômes :**
#### **DHCP (isis) :**
*Continue à fonctionner normalement*.
#### **DNS (osiris) :**
→ Rejette les mises à jour :
`tsig verify failure (BADSIG)`
### **Test DNS :**
`dig eno.tp.scr`
→ Réponse : **NXDOMAIN**
---
### **Pourquoi ?**
Parce que la requête DDNS est :
* signée par DHCP,
* vérifiée par DNS.
Si la signature ne correspond pas, DNS rejette la mise à jour → donc pas denregistrement.
---
# **RÉSUMÉ PARFAIT DU TP04**
| Partie | Ce que tu fais | Pourquoi |
| ----- | ----- | ----- |
| 1 | Créer ddns.imn | Topo du TP |
| 2 | Préparer les zones | Utilisation dynamique |
| 3 | Créer clé TSIG | Sécurisation |
| 4 | Configurer DNS | Autoriser mises à jour |
| 5 | Configurer DHCP | Envoyer mises à jour |
| 6 | Lancer named & dhcpd en debug | Voir les transactions |
| 7 | Tester DHCP \+ DNS | Vérification du DDNS |
| 8 | Tester erreur de clé | Comprendre TSIG |

View File

@@ -0,0 +1,342 @@
TP04 Dynamic DNS — Organisation par GRANDES PARTIES
________________
PARTIE 1 — Préparation de la topologie (ddns.imn)
Objectif :
Créer une topologie avec :
* un serveur DNS : osiris
* un serveur DHCP : isis
* des clients (eno, owt, pc1, pc2…)
Ce que tu dois faire :
1. Copier la topologie du TP22 (dns1.imn)
2. Enregistrer sous ddns.imn dans :
~/SCR.3.2/TP04/
3. Assigner :
* osiris : serveur DNS
* isis : serveur DHCP
* Les autres machines : sans IP statique (elles utiliseront DHCP)
Pourquoi ?
Parce que :
* DHCP doit distribuer IP + DNS + nom de domaine,
* DHCP doit envoyer des mises à jour dynamiques au DNS.
________________
PARTIE 2 — Préparation des fichiers DNS (osiris)
Objectif :
Créer les fichiers de zone que BIND pourra modifier dynamiquement.
Étapes :
(1) Copier les fichiers du TP22 dans TP04
Tu copies depuis ton dossier TP22 tout ce qui concerne DNS :
named.conf.local
db.tp.scr
db.1.168.192
Tu renommes :
osiris.named.conf.local
osiris.db.tp.scr
osiris.db.1.168.192
(2) Éditer les fichiers de zone
Le TP dit : garder seulement :
* les enregistrements pour osiris,
* ajouter ceux pour isis,
* supprimer toutes les autres machines (eno, owt, pc1, pc2…).
tp04.SCR.3.2
Parce que ces autres machines recevront leurs enregistrements dynamiquement via DHCP, donc pas dans les fichiers statiques.
(3) Déplacer les fichiers dans /var/lib/bind/
Très important : BIND na pas le droit décrire dans /etc/bind/.
Les fichiers de zones finalisés doivent être placés dans :
/var/lib/bind/db.tp.scr
/var/lib/bind/db.1.168.192
Pourquoi ?
* Parce que named tourne sous lutilisateur bind,
* Il doit créer un fichier journal .jnl pour les mises à jour dynamiques,
* /etc/bind nest pas modifiable par bind.
tp04.SCR.3.2
________________
PARTIE 3 — Génération et configuration de la clé TSIG (sécurité)
Objectif :
Permettre à DHCP (isis) de mettre à jour DNS (osiris) en toute sécurité.
Générer la clé sur osiris :
tsig-keygen -a md5 tp.scr-key > ddns.key
Installer la clé :
Sur osiris :
/etc/bind/ddns.key
chmod 640 ddns.key
chown root:bind ddns.key
Sur isis :
/etc/dhcp/ddns.key
chmod 640 ddns.key
chown root:bind ddns.key
Pourquoi ?
TSIG = Transaction Signature
→ sécurité = le DNS naccepte des updates que du DHCP, pas dun intrus.
________________
PARTIE 4 — Configuration DNS dynamique (osiris)
Objectif :
Dire au serveur DNS de permettre les mises à jour dynamiques venant de isis.
Modifier /etc/bind/named.conf.local (renommé ici en osiris.named.conf.local)
Exemple :
include "/etc/bind/ddns.key";
zone "tp.scr" IN {
type master;
file "/var/lib/bind/db.tp.scr";
allow-update { key tp.scr-key; };
};
zone "1.168.192.in-addr.arpa" IN {
type master;
file "/var/lib/bind/db.1.168.192";
allow-update { key tp.scr-key; };
};
Pourquoi ?
* allow-update { key ... } = autoriser DHCP uniquement.
* Le fichier de zone est dans /var/lib/bind/ pour que BIND puisse écrire le .jnl.
________________
PARTIE 5 — Configuration DHCP avec DDNS (isis)
Objectif :
Faire en sorte que DHCP :
* attribue des IP aux clients,
* génère automatiquement :
* un enregistrement A (nom → IP)
* un enregistrement PTR (IP → nom)
* envoie les mises à jour signées au DNS.
________________
Modifier /etc/dhcp/dhcpd.conf (fichier isis.dhcpd.conf)
Exemple minimal :
include "/etc/dhcp/ddns.key";
ddns-update-style standard;
update-static-leases on;
option domain-name "tp.scr";
option domain-name-servers 192.168.1.158; # osiris
zone tp.scr. {
primary 192.168.1.158;
key tp.scr-key;
}
zone 1.168.192.in-addr.arpa. {
primary 192.168.1.158;
key tp.scr-key;
}
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.11 192.168.1.200;
option routers 192.168.1.254;
}
________________
Pourquoi ?
Parce que DHCP doit :
* savoir où envoyer les mises à jour DNS → directives zone {...};
* les signer → directive key;
* fournir lIP du DNS aux clients → option domain-name-servers.
________________
PARTIE 6 — Lancement manuel des services en mode debug
Objectif :
Observer les transactions DDNS en temps réel.
________________
Sur osiris (DNS) :
named -u bind -g
Cela garde named en avant-plan et affiche les mises à jour.
________________
Sur isis (DHCP) :
dhcpd -d
Cela permet de voir :
* DHCPDISCOVER
* DHCPOFFER
* DHCPREQUEST
* DHCPACK
* et surtout → la génération des messages DDNS
________________
Pourquoi ne pas lancer via service bind9 start ?
Parce que tu ne verrais aucun log, et tu ne pourrais pas analyser les mises à jour dynamiques.
Le TP impose explicitement lexécution en mode debug.
tp04.SCR.3.2
________________
PARTIE 7 — Tests fonctionnels
1. Avant la requête DHCP
Sur un client (eno par exemple) :
ip a
cat /etc/resolv.conf
→ pas dIPv4, pas de DNS.
________________
2. Demande dadresse :
dhclient -v eth0
Observations :
Côté DHCP (isis) :
* DHCPACK
* "Added new forward map ..."
* "Added reverse map ..."
Côté DNS (osiris) :
* Validation TSIG
* Écriture dans .jnl
* Mise à jour A + PTR
________________
3. Test DNS :
dig eno.tp.scr
dig -x 192.168.1.X
Résultat attendu :
* le nom résout vers lIP DHCP,
* lIP résout vers le nom.
________________
PARTIE 8 — Cas derreur : mauvaise clé TSIG
Le TP demande de modifier légèrement la clé du DHCP pour provoquer une erreur.
tp04.SCR.3.2
Symptômes :
DHCP (isis) :
→ Continue à fonctionner normalement.
DNS (osiris) :
→ Rejette les mises à jour :
tsig verify failure (BADSIG)
Test DNS :
dig eno.tp.scr
→ Réponse : NXDOMAIN
________________
Pourquoi ?
Parce que la requête DDNS est :
* signée par DHCP,
* vérifiée par DNS.
Si la signature ne correspond pas, DNS rejette la mise à jour → donc pas denregistrement.
________________
RÉSUMÉ PARFAIT DU TP04
Partie
Ce que tu fais
Pourquoi
1
Créer ddns.imn
Topo du TP
2
Préparer les zones
Utilisation dynamique
3
Créer clé TSIG
Sécurisation
4
Configurer DNS
Autoriser mises à jour
5
Configurer DHCP
Envoyer mises à jour
6
Lancer named & dhcpd en debug
Voir les transactions
7
Tester DHCP + DNS
Vérification du DDNS
8
Tester erreur de clé
Comprendre TSIG

View File

@@ -0,0 +1,120 @@
iptables \-t nat \-A POSTROUTING \-o eth1 \-j SNAT \--to-source 172.16.2.254
iptables \-A FORWARD \-s 172.16.1.0/24 \-d 172.16.3.0/24 \-j DROP
# **1\)**
`iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 172.16.2.254`
* `-t nat` : indique que la règle appartient à la table NAT, utilisée pour modifier les adresses IP (source ou destination).
* `-A POSTROUTING` : ajoute la règle dans la chaîne POSTROUTING, exécutée après la décision de routage, juste avant que le paquet quitte linterface.
* `-o eth1` : la règle ne sapplique quaux paquets sortant par linterface eth1.
* `-j SNAT` : laction consiste à effectuer un Source NAT, cest-à-dire modifier ladresse source du paquet.
* `--to-source 172.16.2.254` : nouvelle adresse source à utiliser pour ces paquets.
* Effet global : tous les paquets sortant par eth1 auront pour adresse source 172.16.2.254 ; ceci permet dassurer que les machines en aval envoient correctement leurs réponses vers la passerelle.
---
# **2\)**
`iptables -A FORWARD -s 172.16.1.0/24 -d 172.16.3.0/24 -j DROP`
* `-A FORWARD` : ajoute une règle à la chaîne FORWARD, qui filtre les paquets transitant par la machine lorsquelle agit comme routeur.
* `-s 172.16.1.0/24` : condition sur ladresse source ; la règle sapplique uniquement aux paquets provenant du réseau 172.16.1.0/24.
* `-d 172.16.3.0/24` : condition sur ladresse de destination ; la règle ne concerne que les paquets visant le réseau 172.16.3.0/24.
* `-j DROP` : le paquet correspondant à ces conditions est supprimé sans notification à lexpéditeur.
* Effet global : tout trafic entre S1 et S3 dans ce sens est bloqué.
## **1\. PREROUTING DNAT (changer la destination)**
Cest ce quon vous demande pour : serveur web, serveur FTP, services internes.
* Port forwarding HTTP
`iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to 10.3.2.1:80`
* Port forwarding FTP (TP03 partie II)
`iptables -t nat -A PREROUTING -p tcp --dport 21 -j DNAT --to 172.16.2.10:21`
* Redirection interne
`iptables -t nat -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-port 80`
* Redirection basée sur la source
`iptables -t nat -A PREROUTING -s 10.0.0.5 -j DNAT --to 192.168.1.10`
port 22: ssh
port 80 : https
**Salut les gars alors pour configurer un DHCP:**
### **1\. `/etc/dhcp/dhcpd.conf` Le fichier de configuration principal**
C'est le cœur de la configuration du serveur DHCP. Dans ce fichier, tu définis :
* Les **plages d'adresses IP** que le serveur DHCP peut attribuer.
* Les **options** comme les routeurs, les serveurs DNS, la durée du bail, etc.
* Les sous-réseaux que le serveur peut gérer.
* Les **adresses fixes** pour certains clients, comme le routeur ou des équipements spécifiques.
**Exemple de `dhcpd.conf`** :
`subnet 192.168.1.0 netmask 255.255.255.0 {`
`range 192.168.1.10 192.168.1.100; // tu met la range que tu veux ici`
`option subnet-mask 255.255.255.0;`
`}`
### **2.ensuite dans le etc/default/isc-dhcp-server**
### tu cale :
### INTERFACESV4:”eth0”
### \#INTERFACESV6:””
### ---
### **En résumé, pour la configuration de base de DHCP, les deux fichiers principaux sont :**
1. **`/etc/dhcp/dhcpd.conf`** (configuration du serveur DHCP)
exemple du dhcp.conf du tp3:
default-lease-time 600;
max-lease-time 7200;
option rfc-3442-classless-static-routes code 121 \= array of integer 8;
subnet 192.168.10.0 netmask 255.255.255.0 {
range 192.168.10.10 192.168.10.40;
option rfc-3442-classless-static-routes 24,172.16.2.192,168,10,254;
}
host GW-eth0 {
hardware ethernet 42:00:00:00:00:02;
fixed-address 172.16.2.254;
}
host GW-eth1 {
hardware ethernet 42:00:00:00:00:04;
fixed-address 192.168.10.254;
}
subnet 172.16.2.0 netmask 255.255.255.0 {
range 172.16.2.1 172.16.2.254;
option subnet-mask 255.255.255.0;
}
\#option rfc-3442.... : l'adresse 172.16.2.7/24 dans 192.168.10.254 pour que les noeuds 192 connaissent les autres routes.
\# SYNTAXE : dhcrelay \-i INTERFACE SERVEUR\_DHCP
dhcrelay \-i eth0 192.168.10.10 \# Écoute sur eth0 seulement et évite les doublons

Binary file not shown.

View File

@@ -0,0 +1,119 @@
iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 172.16.2.254
iptables -A FORWARD -s 172.16.1.0/24 -d 172.16.3.0/24 -j DROP
1)
iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 172.16.2.254
* -t nat : indique que la règle appartient à la table NAT, utilisée pour modifier les adresses IP (source ou destination).
* -A POSTROUTING : ajoute la règle dans la chaîne POSTROUTING, exécutée après la décision de routage, juste avant que le paquet quitte linterface.
* -o eth1 : la règle ne sapplique quaux paquets sortant par linterface eth1.
* -j SNAT : laction consiste à effectuer un Source NAT, cest-à-dire modifier ladresse source du paquet.
* --to-source 172.16.2.254 : nouvelle adresse source à utiliser pour ces paquets.
* Effet global : tous les paquets sortant par eth1 auront pour adresse source 172.16.2.254 ; ceci permet dassurer que les machines en aval envoient correctement leurs réponses vers la passerelle.
________________
2)
iptables -A FORWARD -s 172.16.1.0/24 -d 172.16.3.0/24 -j DROP
* -A FORWARD : ajoute une règle à la chaîne FORWARD, qui filtre les paquets transitant par la machine lorsquelle agit comme routeur.
* -s 172.16.1.0/24 : condition sur ladresse source ; la règle sapplique uniquement aux paquets provenant du réseau 172.16.1.0/24.
* -d 172.16.3.0/24 : condition sur ladresse de destination ; la règle ne concerne que les paquets visant le réseau 172.16.3.0/24.
* -j DROP : le paquet correspondant à ces conditions est supprimé sans notification à lexpéditeur.
* Effet global : tout trafic entre S1 et S3 dans ce sens est bloqué.
1. PREROUTING DNAT (changer la destination)
Cest ce quon vous demande pour : serveur web, serveur FTP, services internes.
* Port forwarding HTTP
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to 10.3.2.1:80
* Port forwarding FTP (TP03 partie II)
iptables -t nat -A PREROUTING -p tcp --dport 21 -j DNAT --to 172.16.2.10:21
* Redirection interne
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-port 80
* Redirection basée sur la source
iptables -t nat -A PREROUTING -s 10.0.0.5 -j DNAT --to 192.168.1.10
port 22: ssh
port 80 : https
Salut les gars alors pour configurer un DHCP:
1. /etc/dhcp/dhcpd.conf Le fichier de configuration principal
C'est le cœur de la configuration du serveur DHCP. Dans ce fichier, tu définis :
* Les plages d'adresses IP que le serveur DHCP peut attribuer.
* Les options comme les routeurs, les serveurs DNS, la durée du bail, etc.
* Les sous-réseaux que le serveur peut gérer.
* Les adresses fixes pour certains clients, comme le routeur ou des équipements spécifiques.
Exemple de dhcpd.conf :
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.10 192.168.1.100; // tu met la range que tu veux ici
option subnet-mask 255.255.255.0;
}
2.ensuite dans le etc/default/isc-dhcp-server
tu cale :
INTERFACESV4:”eth0”
#INTERFACESV6:””
________________
En résumé, pour la configuration de base de DHCP, les deux fichiers principaux sont :
1. /etc/dhcp/dhcpd.conf (configuration du serveur DHCP)
exemple du dhcp.conf du tp3:
default-lease-time 600;
max-lease-time 7200;
option rfc-3442-classless-static-routes code 121 = array of integer 8;
subnet 192.168.10.0 netmask 255.255.255.0 {
range 192.168.10.10 192.168.10.40;
option rfc-3442-classless-static-routes 24,172.16.2.192,168,10,254;
}
host GW-eth0 {
hardware ethernet 42:00:00:00:00:02;
fixed-address 172.16.2.254;
}
host GW-eth1 {
hardware ethernet 42:00:00:00:00:04;
fixed-address 192.168.10.254;
}
subnet 172.16.2.0 netmask 255.255.255.0 {
range 172.16.2.1 172.16.2.254;
option subnet-mask 255.255.255.0;
}
#option rfc-3442.... : l'adresse 172.16.2.7/24 dans 192.168.10.254 pour que les noeuds 192 connaissent les autres routes.
# SYNTAXE : dhcrelay -i INTERFACE SERVEUR_DHCP
dhcrelay -i eth0 192.168.10.10 # Écoute sur eth0 seulement et évite les doublons