diff --git a/TP_SCR3.2/revision_scr3.2/Enonce_tp/tp01.SCR.3.2.pdf b/TP_SCR3.2/revision_scr3.2/Enonce_tp/tp01.SCR.3.2.pdf new file mode 100644 index 0000000..962df38 Binary files /dev/null and b/TP_SCR3.2/revision_scr3.2/Enonce_tp/tp01.SCR.3.2.pdf differ diff --git a/TP_SCR3.2/revision_scr3.2/Enonce_tp/tp02.SCR.3.2.pdf b/TP_SCR3.2/revision_scr3.2/Enonce_tp/tp02.SCR.3.2.pdf new file mode 100644 index 0000000..34d2f88 Binary files /dev/null and b/TP_SCR3.2/revision_scr3.2/Enonce_tp/tp02.SCR.3.2.pdf differ diff --git a/TP_SCR3.2/revision_scr3.2/Enonce_tp/tp03.SCR.3.2.pdf b/TP_SCR3.2/revision_scr3.2/Enonce_tp/tp03.SCR.3.2.pdf new file mode 100644 index 0000000..05c86d2 Binary files /dev/null and b/TP_SCR3.2/revision_scr3.2/Enonce_tp/tp03.SCR.3.2.pdf differ diff --git a/TP_SCR3.2/revision_scr3.2/Enonce_tp/tp04.SCR.3.2.pdf b/TP_SCR3.2/revision_scr3.2/Enonce_tp/tp04.SCR.3.2.pdf new file mode 100644 index 0000000..0d3d44b Binary files /dev/null and b/TP_SCR3.2/revision_scr3.2/Enonce_tp/tp04.SCR.3.2.pdf differ diff --git a/TP_SCR3.2/revision_scr3.2/Guide COMPLET de iptables -t filter -A.md b/TP_SCR3.2/revision_scr3.2/Guide COMPLET de iptables -t filter -A.md new file mode 100644 index 0000000..8892154 --- /dev/null +++ b/TP_SCR3.2/revision_scr3.2/Guide COMPLET de iptables -t filter -A.md @@ -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` + diff --git a/TP_SCR3.2/revision_scr3.2/Guide COMPLET de iptables -t filter -A.pdf b/TP_SCR3.2/revision_scr3.2/Guide COMPLET de iptables -t filter -A.pdf new file mode 100644 index 0000000..4297e20 Binary files /dev/null and b/TP_SCR3.2/revision_scr3.2/Guide COMPLET de iptables -t filter -A.pdf differ diff --git a/TP_SCR3.2/revision_scr3.2/Guide COMPLET de iptables -t filter -A.txt b/TP_SCR3.2/revision_scr3.2/Guide COMPLET de iptables -t filter -A.txt new file mode 100644 index 0000000..9be0644 --- /dev/null +++ b/TP_SCR3.2/revision_scr3.2/Guide COMPLET de iptables -t filter -A.txt @@ -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 \ No newline at end of file diff --git a/TP_SCR3.2/revision_scr3.2/Guide complet de iptables -t nat.md b/TP_SCR3.2/revision_scr3.2/Guide complet de iptables -t nat.md new file mode 100644 index 0000000..7dca2c8 --- /dev/null +++ b/TP_SCR3.2/revision_scr3.2/Guide complet de iptables -t nat.md @@ -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 + diff --git a/TP_SCR3.2/revision_scr3.2/Guide complet de iptables -t nat.pdf b/TP_SCR3.2/revision_scr3.2/Guide complet de iptables -t nat.pdf new file mode 100644 index 0000000..24af8d6 Binary files /dev/null and b/TP_SCR3.2/revision_scr3.2/Guide complet de iptables -t nat.pdf differ diff --git a/TP_SCR3.2/revision_scr3.2/Guide complet de iptables -t nat.txt b/TP_SCR3.2/revision_scr3.2/Guide complet de iptables -t nat.txt new file mode 100644 index 0000000..aab4776 --- /dev/null +++ b/TP_SCR3.2/revision_scr3.2/Guide complet de iptables -t nat.txt @@ -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 \ No newline at end of file diff --git a/TP_SCR3.2/revision_scr3.2/TP0/tp00.SCR.3.2.imn b/TP_SCR3.2/revision_scr3.2/TP0/tp00.SCR.3.2.imn new file mode 100644 index 0000000..2a5e451 --- /dev/null +++ b/TP_SCR3.2/revision_scr3.2/TP0/tp00.SCR.3.2.imn @@ -0,0 +1,638 @@ +node n2 { + type lanswitch + network-config { + hostname switch3 + ! + } + canvas c0 + iconcoords {96 528} + labelcoords {97 556} + interface-peer {e0 n10} + interface-peer {e1 n19} + interface-peer {e2 n0} +} + +node n3 { + type lanswitch + network-config { + hostname switch4 + ! + } + canvas c0 + iconcoords {120 72} + labelcoords {75 55} + interface-peer {e0 n10} + interface-peer {e1 n11} + interface-peer {e2 n20} +} + +node n4 { + type lanswitch + network-config { + hostname switch5 + ! + } + canvas c0 + iconcoords {360 288} + labelcoords {341 309} + interface-peer {e0 n9} + interface-peer {e1 n11} + interface-peer {e2 n21} + interface-peer {e3 n1} +} + +node n5 { + type lanswitch + network-config { + hostname switch6 + ! + } + canvas c0 + iconcoords {816 48} + labelcoords {765 27} + interface-peer {e0 n9} + interface-peer {e1 n22} +} + +node n6 { + type lanswitch + network-config { + hostname switch7 + ! + } + canvas c0 + iconcoords {816 264} + labelcoords {810 232} + interface-peer {e0 n9} + interface-peer {e1 n12} + interface-peer {e2 n23} + interface-peer {e3 n8} +} + +node n7 { + type lanswitch + network-config { + hostname switch8 + ! + } + canvas c0 + iconcoords {528 312} + labelcoords {513 289} + interface-peer {e0 n12} + interface-peer {e1 n13} + interface-peer {e2 n14} +} + +node n9 { + type host + network-config { + hostname P5 + ! + interface eth3 + mac address 42:00:aa:00:00:09 + ip address 10.80.0.254/17 + ! + interface eth2 + mac address 42:00:aa:00:00:04 + ip address 10.64.0.254/17 + ! + interface eth1 + mac address 42:00:aa:00:00:03 + ip address 10.48.0.254/17 + ! + interface lo0 + type lo + ip address 127.0.0.1/8 + ipv6 address ::1/128 + ! + ! + } + canvas c0 + iconcoords {576 96} + labelcoords {543 52} + interface-peer {eth1 n4} + interface-peer {eth2 n5} + interface-peer {eth3 n6} + custom-configs { + custom-config-id default { + custom-command /bin/sh + config { + ip addr add 127.0.0.1/8 dev lo0 + + ip addr add 10.48.0.254/17 dev eth1 + ip addr add 10.64.0.254/17 dev eth2 + ip addr add 10.80.0.254/17 dev eth3 + ip -6 addr add ::1/128 dev lo0 + + + iptables -t nat -A POSTROUTING -o eth3 -s 10.48.0.0/17 -j SNAT --to-source 10.80.0.254 + + rpcbind + inetd + + } + } + } + custom-enabled true + custom-selected default +} + +node n10 { + type host + network-config { + hostname P3 + ! + interface eth1 + mac address 42:00:aa:00:00:06 + ip address 10.32.0.254/17 + ! + interface eth0 + mac address 42:00:aa:00:00:05 + ip address 10.16.0.254/17 + ! + interface lo0 + type lo + ip address 127.0.0.1/8 + ipv6 address ::1/128 + ! + ! + } + canvas c0 + iconcoords {240 288} + labelcoords {246 328} + interface-peer {eth0 n2} + interface-peer {eth1 n3} +} + +node n11 { + type host + network-config { + hostname P4 + ! + interface eth1 + mac address 42:00:aa:00:00:08 + ip address 10.48.0.255/17 + ! + interface eth0 + mac address 42:00:aa:00:00:07 + ip address 10.32.0.255/17 + ! + interface lo0 + type lo + ip address 127.0.0.1/8 + ipv6 address ::1/128 + ! + ! + } + canvas c0 + iconcoords {312 96} + labelcoords {319 52} + interface-peer {eth0 n3} + interface-peer {eth1 n4} + custom-configs { + custom-config-id default { + custom-command /bin/sh + config { + ip addr add 127.0.0.1/8 dev lo0 + ip addr add 10.32.0.255/17 dev eth0 + ip addr add 10.48.0.255/17 dev eth1 + ip -6 addr add ::1/128 dev lo0 + + + iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 10.32.0.255 + iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 10.48.0.255 + + rpcbind + inetd + + } + } + } + custom-enabled true + custom-selected default +} + +node n12 { + type host + network-config { + hostname P6 + ! + interface eth0 + mac address 42:00:aa:00:00:0a + ip address 10.80.0.255/17 + ! + interface eth1 + mac address 42:00:aa:00:00:0b + ip address 102.103.104.255/15 + ! + interface lo0 + type lo + ip address 127.0.0.1/8 + ipv6 address ::1/128 + ! + ! + ! + } + canvas c0 + iconcoords {792 456} + labelcoords {751 479} + interface-peer {eth0 n6} + interface-peer {eth1 n7} + custom-configs { + custom-config-id default { + custom-command /bin/sh + config { + ip addr add 127.0.0.1/8 dev lo0 + ip addr add 10.80.0.255/17 dev eth0 + ip addr add 102.103.104.255/15 dev eth1 + ip -6 addr add ::1/128 dev lo0 + + + iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 102.103.104.255 + + rpcbind + inetd + + } + } + } + custom-enabled true + custom-selected default +} + +node n13 { + type router + model quagga + network-config { + hostname router1 + ! + interface eth1 + mac address 42:00:aa:00:00:0e + ip address 202.203.204.254/11 + ! + interface eth0 + mac address 42:00:aa:00:00:0c + ip address 102.103.104.254/15 + ! + interface lo0 + type lo + ip address 127.0.0.1/8 + ipv6 address ::1/128 + ! + router rip + redistribute static + redistribute connected + redistribute ospf + network 0.0.0.0/0 + ! + router ripng + redistribute static + redistribute connected + redistribute ospf6 + network ::/0 + ! + } + canvas c0 + iconcoords {792 576} + labelcoords {792 601} + interface-peer {eth0 n7} + interface-peer {eth1 n15} +} + +node n14 { + type host + network-config { + hostname host2 + ! + interface eth0 + mac address 42:00:aa:00:00:0d + ip address 102.103.104.104/15 + ! + interface lo0 + type lo + ip address 127.0.0.1/8 + ipv6 address ::1/128 + ! + ! + } + canvas c0 + iconcoords {384 456} + labelcoords {369 415} + interface-peer {eth0 n7} +} + +node n15 { + type host + network-config { + hostname host3 + ! + interface eth0 + mac address 42:00:aa:00:00:0f + ip address 202.203.204.204/11 + ! + interface lo0 + type lo + ip address 127.0.0.1/8 + ipv6 address ::1/128 + ! + ! + ! + } + canvas c0 + iconcoords {408 552} + labelcoords {408 588} + interface-peer {eth0 n13} +} + +node n19 { + type pc + network-config { + hostname pc3 + ! + interface eth0 + mac address 42:00:aa:00:00:13 + ip address 10.16.0.3/17 + ! + interface lo0 + type lo + ip address 127.0.0.1/8 + ipv6 address ::1/128 + ! + ! + } + canvas c0 + iconcoords {264 432} + labelcoords {264 463} + interface-peer {eth0 n2} +} + +node n20 { + type pc + network-config { + hostname pc4 + ! + interface eth0 + mac address 42:00:aa:00:00:14 + ip address 10.32.0.4/17 + ! + interface lo0 + type lo + ip address 127.0.0.1/8 + ipv6 address ::1/128 + ! + ! + } + canvas c0 + iconcoords {48 264} + labelcoords {48 295} + interface-peer {eth0 n3} +} + +node n21 { + type pc + network-config { + hostname pc5 + ! + interface eth0 + mac address 42:00:aa:00:00:15 + ip address 10.48.0.5/17 + ! + interface lo0 + type lo + ip address 127.0.0.1/8 + ipv6 address ::1/128 + ! + ! + } + canvas c0 + iconcoords {528 216} + labelcoords {528 247} + interface-peer {eth0 n4} +} + +node n22 { + type pc + network-config { + hostname pc6 + ! + interface eth0 + mac address 42:00:aa:00:00:16 + ip address 10.64.0.6/17 + ! + interface lo0 + type lo + ip address 127.0.0.1/8 + ipv6 address ::1/128 + ! + ! + } + canvas c0 + iconcoords {768 144} + labelcoords {768 175} + interface-peer {eth0 n5} +} + +node n23 { + type pc + network-config { + hostname pc7 + ! + interface eth0 + mac address 42:00:aa:00:00:17 + ip address 10.80.0.7/17 + ! + interface lo0 + type lo + ip address 127.0.0.1/8 + ipv6 address ::1/128 + ! + ! + } + canvas c0 + iconcoords {624 216} + labelcoords {624 247} + interface-peer {eth0 n6} +} + +node n0 { + type host + network-config { + hostname host1 + ! + interface eth0 + mac address 42:00:aa:00:00:00 + ip address 10.16.0.200/17 + ! + interface lo0 + type lo + ip address 127.0.0.1/8 + ipv6 address ::1/128 + ! + ! + } + canvas c0 + iconcoords {48 360} + labelcoords {31 327} + interface-peer {eth0 n2} +} + +node n1 { + type pc + network-config { + hostname pc6-5 + ! + interface eth0 + mac address 42:00:aa:00:00:01 + ip address 10.48.0.6/17 + ! + interface lo0 + type lo + ip address 127.0.0.1/8 + ipv6 address ::1/128 + ! + } + canvas c0 + iconcoords {456 72} + labelcoords {429 41} + interface-peer {eth0 n4} +} + +node n8 { + type pc + network-config { + hostname pc8 + ! + interface eth0 + mac address 42:00:aa:00:00:02 + ip address 10.80.0.8/17 + ! + interface lo0 + type lo + ip address 127.0.0.1/8 + ipv6 address ::1/128 + ! + } + canvas c0 + iconcoords {648 288} + labelcoords {648 319} + interface-peer {eth0 n6} +} + +link l3 { + nodes {n9 n4} + bandwidth 0 +} + +link l4 { + nodes {n5 n9} + bandwidth 0 +} + +link l5 { + nodes {n10 n2} + bandwidth 0 +} + +link l6 { + nodes {n3 n10} + bandwidth 0 +} + +link l7 { + nodes {n11 n3} + bandwidth 0 +} + +link l8 { + nodes {n4 n11} + bandwidth 0 +} + +link l9 { + nodes {n6 n9} + bandwidth 0 +} + +link l10 { + nodes {n6 n12} + bandwidth 0 +} + +link l11 { + nodes {n7 n12} + bandwidth 0 +} + +link l12 { + nodes {n13 n7} + bandwidth 0 +} + +link l13 { + nodes {n7 n14} + bandwidth 0 +} + +link l14 { + nodes {n15 n13} + bandwidth 0 +} + +link l18 { + nodes {n19 n2} + bandwidth 0 +} + +link l19 { + nodes {n20 n3} + bandwidth 0 +} + +link l20 { + nodes {n4 n21} + bandwidth 0 +} + +link l21 { + nodes {n5 n22} + bandwidth 0 +} + +link l22 { + nodes {n6 n23} + bandwidth 0 +} + +link l0 { + nodes {n2 n0} + bandwidth 0 +} + +link l1 { + nodes {n1 n4} + bandwidth 0 +} + +link l2 { + nodes {n6 n8} + bandwidth 0 +} + +canvas c0 { + name {Canvas0} +} + +option show { + interface_names yes + ip_addresses yes + ipv6_addresses yes + node_labels yes + link_labels yes + background_images no + annotations yes + hostsAutoAssign no + grid yes + iconSize normal + zoom 1.0 +} + diff --git a/TP_SCR3.2/revision_scr3.2/TP0/tp00.SCR.3.2.pdf b/TP_SCR3.2/revision_scr3.2/TP0/tp00.SCR.3.2.pdf new file mode 100644 index 0000000..0f33157 Binary files /dev/null and b/TP_SCR3.2/revision_scr3.2/TP0/tp00.SCR.3.2.pdf differ diff --git a/TP_SCR3.2/revision_scr3.2/TP1/TP01 – IMUNES _ Passerelles, Routage et Filtrage.md b/TP_SCR3.2/revision_scr3.2/TP1/TP01 – IMUNES _ Passerelles, Routage et Filtrage.md new file mode 100644 index 0000000..9adb051 --- /dev/null +++ b/TP_SCR3.2/revision_scr3.2/TP1/TP01 – IMUNES _ Passerelles, Routage et Filtrage.md @@ -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 l’autre 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** + diff --git a/TP_SCR3.2/revision_scr3.2/TP1/TP01 – IMUNES _ Passerelles, Routage et Filtrage.pdf b/TP_SCR3.2/revision_scr3.2/TP1/TP01 – IMUNES _ Passerelles, Routage et Filtrage.pdf new file mode 100644 index 0000000..c219dcc Binary files /dev/null and b/TP_SCR3.2/revision_scr3.2/TP1/TP01 – IMUNES _ Passerelles, Routage et Filtrage.pdf differ diff --git a/TP_SCR3.2/revision_scr3.2/TP1/TP01 – IMUNES _ Passerelles, Routage et Filtrage.txt b/TP_SCR3.2/revision_scr3.2/TP1/TP01 – IMUNES _ Passerelles, Routage et Filtrage.txt new file mode 100644 index 0000000..f387ded --- /dev/null +++ b/TP_SCR3.2/revision_scr3.2/TP1/TP01 – IMUNES _ Passerelles, Routage et Filtrage.txt @@ -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 l’autre 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 \ No newline at end of file diff --git a/TP_SCR3.2/revision_scr3.2/TP2/TP02 – Routage, NAT, Filtrage & FTP (with-routers.md b/TP_SCR3.2/revision_scr3.2/TP2/TP02 – Routage, NAT, Filtrage & FTP (with-routers.md new file mode 100644 index 0000000..38d1d16 --- /dev/null +++ b/TP_SCR3.2/revision_scr3.2/TP2/TP02 – Routage, NAT, Filtrage & FTP (with-routers.md @@ -0,0 +1,422 @@ +# **TP02 – Routage, NAT, Filtrage & FTP (with-routers.imn)** + +# **tp02.SCR.3.2** + +## **0\. Rappels sur la topologie & les adresses** + +**Réseaux privés (RFC 1918\)** + +* S1 : 172.16.1.0/24 + +* S2 : 172.16.2.0/24 + +* S3 : 172.16.3.0/24 + +**Réseaux publics (routables)** + +| Adresse utilisée | Masque | Réseau CIDR | Plage | +| ----- | ----- | ----- | ----- | +| 37.37.37.1 | /22 | 37.37.36.0/22 | 37.37.36.0 – 37.37.39.255 | +| 45.45.45.254 | /21 | 45.45.40.0/21 | 45.45.40.0 – 45.45.47.255 | +| 62.62.62.253 | /19 | 62.62.48.0/19 | 62.62.48.0 – 62.62.79.255 | +| 37.37.37.254 | /22 | 37.37.36.0/22 | même réseau que ci-dessus | +| 45.45.45.253 | /21 | 45.45.40.0/21 | même réseau que ci-dessus | +| 62.62.62.254 | /19 | 62.62.48.0/19 | même réseau que ci-dessus | + +**PARTIE I – Topologie with-routers.imn** + +## **I.1 Construction de la topologie** + +* Partir d’une copie de `two-gateways.imn` du TP précédent. + +* Renommer/adapter pour obtenir `with-routers.imn` avec les mêmes noms / adresses que dans l’énoncé. + +**I.2 Configuration de GW1 (n10)** +`node n10 {` + `type host` + `network-config {` + `hostname GW1` + `!` + `interface eth1` + `ip address 172.16.2.253/24` + `mac address 42:00:aa:00:00:09` + `!` + `interface eth0` + `ip address 172.16.1.253/24` + `mac address 42:00:aa:00:00:08` + `!` + `interface lo0` + `type lo` + `ip address 127.0.0.1/8` + `ipv6 address ::1/128` + `!` + `}` + `canvas c0` + `iconcoords {288 240}` + `labelcoords {288 276}` + `interface-peer {eth0 n0}` + `interface-peer {eth1 n1}` + `custom-configs {` + `custom-config-id default {` + `custom-command /bin/sh` + `config {` + `# --- IP ---` + `ip addr add 127.0.0.1/8 dev lo0` + `ip addr add 172.16.1.253/24 dev eth0` + `ip addr add 172.16.2.253/24 dev eth1` + `ip -6 addr add ::1/128 dev lo0` + + `# --- Forwarding ---` + `sysctl -w net.ipv4.ip_forward=1` + + `# --- ROUTES ---` + `# Route par défaut vers GW2` + `ip route add 0.0.0.0/0 via 172.16.2.254` + + `# --- NAT ---` + `# S1 -> S2 (pour les réponses)` + `iptables -t nat -A POSTROUTING \` + `-s 172.16.1.0/24 -d 172.16.2.0/24 \` + `-j SNAT --to-source 172.16.2.253` + + `# --- FILTRAGE ---` + `# 1. Autoriser les connexions déjà établies` + `iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT` + + `# 2. S1 <-> S2 : AUTORISÉ` + `iptables -A FORWARD -s 172.16.1.0/24 -d 172.16.2.0/24 -j ACCEPT` + `iptables -A FORWARD -s 172.16.2.0/24 -d 172.16.1.0/24 -j ACCEPT` + + `# 3. S1 -> S3 : BLOQUÉ` + `iptables -A FORWARD -s 172.16.1.0/24 -d 172.16.3.0/24 -j DROP` + + `# 4. Politique par défaut` + `iptables -P FORWARD DROP` + + `# Services` + `rpcbind` + `inetd` + `}` + `}` + `}` + `custom-enabled true` + `custom-selected default` +`}` + +**I.3 Configuration de GW2 (n11)** +`node n11 {` + `type host` + `network-config {` + `hostname GW2` + `!` + `interface eth2` + `ip address 45.45.45.254/21` + `mac address 42:00:aa:00:00:0c` + `!` + `interface eth1` + `ip address 172.16.3.254/24` + `mac address 42:00:aa:00:00:0b` + `!` + `interface eth0` + `ip address 172.16.2.254/24` + `mac address 42:00:aa:00:00:0a` + `!` + `interface lo0` + `type lo` + `ip address 127.0.0.1/8` + `ipv6 address ::1/128` + `!` + `}` + `canvas c0` + `iconcoords {624 360}` + `labelcoords {624 396}` + `interface-peer {eth0 n1}` + `interface-peer {eth1 n2}` + `interface-peer {eth2 n3}` + `custom-configs {` + `custom-config-id default {` + `custom-command /bin/sh` + `config {` + `# --- IP ---` + `ip addr add 127.0.0.1/8 dev lo0` + `ip addr add 172.16.2.254/24 dev eth0` + `ip addr add 172.16.3.254/24 dev eth1` + `ip addr add 45.45.45.254/21 dev eth2` + `ip -6 addr add ::1/128 dev lo0` + + `# --- Forwarding ---` + `sysctl -w net.ipv4.ip_forward=1` + + `# --- ROUTES vers autres réseaux publics ---` + `ip route add 37.37.36.0/22 via 172.16.2.253 dev eth0` + `ip route add 62.62.48.0/19 via 172.16.2.253 dev eth0` + + `# --- NAT ---` + `# S1/S2 -> Internet` + `iptables -t nat -A POSTROUTING \` + `-s 172.16.1.0/24 -o eth2 \` + `-j SNAT --to-source 45.45.45.254` + `iptables -t nat -A POSTROUTING \` + `-s 172.16.2.0/24 -o eth2 \` + `-j SNAT --to-source 45.45.45.254` + + `# S2 <-> S3` + `iptables -t nat -A POSTROUTING \` + `-s 172.16.2.0/24 -d 172.16.3.0/24 \` + `-j SNAT --to-source 172.16.3.254` + `iptables -t nat -A POSTROUTING \` + `-s 172.16.3.0/24 -d 172.16.2.0/24 \` + `-j SNAT --to-source 172.16.2.254` + + `# --- FILTRAGE ---` + `# 1. Connexions établies` + `iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT` + + `# 2. S2 <-> S3 : AUTORISÉ` + `iptables -A FORWARD -s 172.16.2.0/24 -d 172.16.3.0/24 -j ACCEPT` + `iptables -A FORWARD -s 172.16.3.0/24 -d 172.16.2.0/24 -j ACCEPT` + + `# 3. S3 -> S1 : BLOQUÉ` + `iptables -A FORWARD -s 172.16.3.0/24 -d 172.16.1.0/24 -j DROP` + + `# 4. S1/S2 -> Internet : AUTORISÉ` + `iptables -A FORWARD -s 172.16.1.0/24 -d 45.45.40.0/21 -j ACCEPT` + `iptables -A FORWARD -s 172.16.2.0/24 -d 45.45.40.0/21 -j ACCEPT` + `iptables -A FORWARD -s 172.16.1.0/24 -d 37.37.36.0/22 -j ACCEPT` + `iptables -A FORWARD -s 172.16.2.0/24 -d 37.37.36.0/22 -j ACCEPT` + + `# 5. S3 -> Internet : BLOQUÉ` + `iptables -A FORWARD -s 172.16.3.0/24 -d 45.45.40.0/21 -j DROP` + `iptables -A FORWARD -s 172.16.3.0/24 -d 37.37.36.0/22 -j DROP` + + `# 6. Politique par défaut` + `iptables -P FORWARD DROP` + + `# Services` + `rpcbind` + `inetd` + `}` + `}` + `}` + `custom-enabled true` + `custom-selected default` +`}` + +**I.4 Configuration des PCs (routes par défaut)** + +Exemple pour **pc2 (n7)** : + +`node n7 {` + `type pc` + `network-config {` + `hostname pc2` + `!` + `interface eth0` + `ip address 172.16.2.2/24` + `mac address 42:00:aa:00:00:05` + `!` + `interface lo0` + `type lo` + `ip address 127.0.0.1/8` + `ipv6 address ::1/128` + `!` + `# Route par défaut vers GW2` + `ip route 0.0.0.0/0 172.16.2.254` + `!` + `}` + `# ...` +`}` + +(Le même principe s’applique aux autres PCs si nécessaire.) + +**I.5 Tests de connectivité** + +À lancer après démarrage de la topo : + +`# S1 -> public` +`sudo himage pc1 ping -c 1 37.37.37.1` + +`# S2 -> public` +`sudo himage pc2 ping -c 1 37.37.37.1` + +`# public -> public` +`sudo himage pc ping -c 1 45.45.45.2` + +`# même réseau public` +`sudo himage host1 ping -c 1 37.37.37.1` + +`# public -> privé (doit échouer)` +`sudo himage pc ping -c 1 172.16.2.2` +`# -> Destination Net Unreachable` + +**I.6 Analyse NAT avec tcpdump** + +Ping depuis **pc2** vers l’hôte public : + +`# Sur pc (public)` +`sudo himage pc tcpdump -i eth0 -n icmp` + +`# Sur pc2 (S2)` +`sudo himage pc2 tcpdump -i eth0 -n icmp` + +`# Ping` +`sudo himage pc2 ping -c 2 37.37.37.1` + +* Sur **pc2** : tu vois `172.16.2.2 -> 37.37.37.1` + +* Sur **pc** : tu vois `45.45.45.254 -> 37.37.37.1` + + Le routeur GW2 fait du **SNAT** : il remplace la source privée `172.16.2.2` par son IP publique `45.45.45.254`. + +**PARTIE II – Service FTP avec DNAT** + +## **II.1 Création de with-ftp-service.imn** + +`cp with-routers.imn with-ftp-service.imn` + +**II.2 Ajout du serveur FTP (n14) sur S2** +`node n14 {` + `type host` + `network-config {` + `hostname FTP` + `!` + `interface eth0` + `ip address 172.16.2.10/24` + `mac address 42:00:aa:00:00:0f` + `!` + `interface lo0` + `type lo` + `ip address 127.0.0.1/8` + `ipv6 address ::1/128` + `!` + `}` + `canvas c0` + `iconcoords {480 120}` + `labelcoords {480 156}` + `interface-peer {eth0 n1} # switch2` + `custom-configs {` + `custom-config-id default {` + `custom-command /bin/sh` + `config {` + `# Démarrer le serveur FTP` + `/usr/sbin/in.ftpd &` + `# (ou autre commande selon l’image)` + `}` + `}` + `}` + `custom-enabled true` + `custom-selected default` +`}` + +`link l14 {` + `nodes {n1 n14}` + `bandwidth 0` +`}` + +**II.3 DNAT sur GW2 pour exposer FTP** + +**Dans la config de GW2 (n11)**, ajouter : + +`# --- DNAT FTP depuis Internet vers le serveur interne ---` + +`# Port 21 (contrôle)` +`iptables -t nat -A PREROUTING \` + `-d 45.45.45.254 -p tcp --dport 21 \` + `-j DNAT --to-destination 172.16.2.10:21` + +`# Port 20 (données, mode actif)` +`iptables -t nat -A PREROUTING \` + `-d 45.45.45.254 -p tcp --dport 20 \` + `-j DNAT --to-destination 172.16.2.10:20` + +`# Autoriser le forwarding vers le serveur FTP` +`iptables -A FORWARD -d 172.16.2.10 -p tcp --dport 21 -j ACCEPT` +`iptables -A FORWARD -d 172.16.2.10 -p tcp --dport 20 -j ACCEPT` + +`# Autoriser FTP depuis S1 et S2 (accès direct à 172.16.2.10)` +`iptables -A FORWARD -s 172.16.1.0/24 -d 172.16.2.10 -p tcp --dport 21 -j ACCEPT` +`iptables -A FORWARD -s 172.16.2.0/24 -d 172.16.2.10 -p tcp --dport 21 -j ACCEPT` + +Rappel : + +* **PREROUTING** : avant le routage, on peut faire du **DNAT** (changer la destination). + +* Ici on publie le service FTP interne `172.16.2.10` sur l’IP publique **45.45.45.254**. + +**II.4 Vérification du serveur FTP** +`# Le service écoute bien sur 21/tcp` +`sudo himage FTP ss -na --tcp` +`# Doit montrer : LISTEN sur *:21` + +`# Port FTP dans /etc/services` +`sudo himage FTP cat /etc/services | grep ftp` +`# -> ftp 21/tcp` + +**II.5 Tests d’accès FTP** +`# 1. Depuis pc (public) vers IP publique : OK` +`sudo himage pc ftp 45.45.45.254` + +`# 2. Depuis pc (public) vers IP privée : NON routable` +`sudo himage pc ftp 172.16.2.10` +`# -> Network is unreachable` + +`# 3. Depuis pc1 (S1) vers IP privée : OK` +`sudo himage pc1 ftp 172.16.2.10` + +`# 4. Depuis pc2 (S2) vers IP privée : OK` +`sudo himage pc2 ftp 172.16.2.10` + +`# 5. Depuis host1 (réseau public 45.45.45.0/21) : OK` +`sudo himage host1 ftp 45.45.45.254` + +**II.6 Analyse FTP avec tcpdump** +`# Sur pc (public)` +`sudo himage pc tcpdump -i eth0 -n tcp port 21` + +`# Sur FTP (serveur interne)` +`sudo himage FTP tcpdump -i eth0 -n tcp port 21` + +`# Connexion FTP` +`sudo himage pc ftp 45.45.45.254` + +* Côté **pc** : connexion `37.37.37.1 -> 45.45.45.254:21` + +* Côté **FTP** : connexion `172.16.2.254 -> 172.16.2.10:21` + + GW2 fait : + +* **DNAT** : `45.45.45.254:21` → `172.16.2.10:21` (destination modifiée) + +* **SNAT** : `37.37.37.1` → `172.16.2.254` (source modifiée pour que les réponses repartent bien via GW2) + +**Récapitulatif des règles essentielles** + +### **Sur GW1** + +`# NAT S1 -> S2` +`iptables -t nat -A POSTROUTING \` + `-s 172.16.1.0/24 -d 172.16.2.0/24 \` + `-j SNAT --to-source 172.16.2.253` + +`# Filtrage` +`iptables -A FORWARD -s 172.16.1.0/24 -d 172.16.2.0/24 -j ACCEPT # S1 -> S2` +`iptables -A FORWARD -s 172.16.2.0/24 -d 172.16.1.0/24 -j ACCEPT # S2 -> S1` +`iptables -A FORWARD -s 172.16.1.0/24 -d 172.16.3.0/24 -j DROP # S1 ->/ S3` + +### **Sur GW2** + +`# NAT S1/S2 -> Internet` +`iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth2 \` + `-j SNAT --to-source 45.45.45.254` +`iptables -t nat -A POSTROUTING -s 172.16.2.0/24 -o eth2 \` + `-j SNAT --to-source 45.45.45.254` + +`# DNAT FTP` +`iptables -t nat -A PREROUTING -d 45.45.45.254 -p tcp --dport 21 \` + `-j DNAT --to-destination 172.16.2.10:21` + +`# Filtrage (extraits)` +`iptables -A FORWARD -s 172.16.2.0/24 -d 172.16.3.0/24 -j ACCEPT # S2 -> S3` +`iptables -A FORWARD -s 172.16.3.0/24 -d 172.16.1.0/24 -j DROP # S3 ->/ S1` +`iptables -A FORWARD -s 172.16.1.0/24 -d 45.45.40.0/21 -j ACCEPT # S1 -> Internet` +`iptables -A FORWARD -s 172.16.3.0/24 -d 45.45.40.0/21 -j DROP # S3 ->/ Internet` diff --git a/TP_SCR3.2/revision_scr3.2/TP2/TP02 – Routage, NAT, Filtrage & FTP (with-routers.pdf b/TP_SCR3.2/revision_scr3.2/TP2/TP02 – Routage, NAT, Filtrage & FTP (with-routers.pdf new file mode 100644 index 0000000..26ce1c3 Binary files /dev/null and b/TP_SCR3.2/revision_scr3.2/TP2/TP02 – Routage, NAT, Filtrage & FTP (with-routers.pdf differ diff --git a/TP_SCR3.2/revision_scr3.2/TP2/TP02 – Routage, NAT, Filtrage & FTP (with-routers.txt b/TP_SCR3.2/revision_scr3.2/TP2/TP02 – Routage, NAT, Filtrage & FTP (with-routers.txt new file mode 100644 index 0000000..1a52874 --- /dev/null +++ b/TP_SCR3.2/revision_scr3.2/TP2/TP02 – Routage, NAT, Filtrage & FTP (with-routers.txt @@ -0,0 +1,469 @@ +TP02 – Routage, NAT, Filtrage & FTP (with-routers.imn) +tp02.SCR.3.2 +0. Rappels sur la topologie & les adresses +Réseaux privés (RFC 1918) +* S1 : 172.16.1.0/24 + +* S2 : 172.16.2.0/24 + +* S3 : 172.16.3.0/24 + +Réseaux publics (routables) +Adresse utilisée + Masque + Réseau CIDR + Plage + 37.37.37.1 + /22 + 37.37.36.0/22 + 37.37.36.0 – 37.37.39.255 + 45.45.45.254 + /21 + 45.45.40.0/21 + 45.45.40.0 – 45.45.47.255 + 62.62.62.253 + /19 + 62.62.48.0/19 + 62.62.48.0 – 62.62.79.255 + 37.37.37.254 + /22 + 37.37.36.0/22 + même réseau que ci-dessus + 45.45.45.253 + /21 + 45.45.40.0/21 + même réseau que ci-dessus + 62.62.62.254 + /19 + 62.62.48.0/19 + même réseau que ci-dessus + PARTIE I – Topologie with-routers.imn +I.1 Construction de la topologie + * Partir d’une copie de two-gateways.imn du TP précédent. + + * Renommer/adapter pour obtenir with-routers.imn avec les mêmes noms / adresses que dans l’énoncé. + +I.2 Configuration de GW1 (n10) +node n10 { + type host + network-config { + hostname GW1 + ! + interface eth1 + ip address 172.16.2.253/24 + mac address 42:00:aa:00:00:09 + ! + interface eth0 + ip address 172.16.1.253/24 + mac address 42:00:aa:00:00:08 + ! + interface lo0 + type lo + ip address 127.0.0.1/8 + ipv6 address ::1/128 + ! + } + canvas c0 + iconcoords {288 240} + labelcoords {288 276} + interface-peer {eth0 n0} + interface-peer {eth1 n1} + custom-configs { + custom-config-id default { + custom-command /bin/sh + config { + # --- IP --- + ip addr add 127.0.0.1/8 dev lo0 + ip addr add 172.16.1.253/24 dev eth0 + ip addr add 172.16.2.253/24 dev eth1 + ip -6 addr add ::1/128 dev lo0 + + + # --- Forwarding --- + sysctl -w net.ipv4.ip_forward=1 + + + # --- ROUTES --- + # Route par défaut vers GW2 + ip route add 0.0.0.0/0 via 172.16.2.254 + + + # --- NAT --- + # S1 -> S2 (pour les réponses) + iptables -t nat -A POSTROUTING \ + -s 172.16.1.0/24 -d 172.16.2.0/24 \ + -j SNAT --to-source 172.16.2.253 + + + # --- FILTRAGE --- + # 1. Autoriser les connexions déjà établies + iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT + + + # 2. S1 <-> S2 : AUTORISÉ + iptables -A FORWARD -s 172.16.1.0/24 -d 172.16.2.0/24 -j ACCEPT + iptables -A FORWARD -s 172.16.2.0/24 -d 172.16.1.0/24 -j ACCEPT + + + # 3. S1 -> S3 : BLOQUÉ + iptables -A FORWARD -s 172.16.1.0/24 -d 172.16.3.0/24 -j DROP + + + # 4. Politique par défaut + iptables -P FORWARD DROP + + + # Services + rpcbind + inetd + } + } + } + custom-enabled true + custom-selected default +} + + +I.3 Configuration de GW2 (n11) +node n11 { + type host + network-config { + hostname GW2 + ! + interface eth2 + ip address 45.45.45.254/21 + mac address 42:00:aa:00:00:0c + ! + interface eth1 + ip address 172.16.3.254/24 + mac address 42:00:aa:00:00:0b + ! + interface eth0 + ip address 172.16.2.254/24 + mac address 42:00:aa:00:00:0a + ! + interface lo0 + type lo + ip address 127.0.0.1/8 + ipv6 address ::1/128 + ! + } + canvas c0 + iconcoords {624 360} + labelcoords {624 396} + interface-peer {eth0 n1} + interface-peer {eth1 n2} + interface-peer {eth2 n3} + custom-configs { + custom-config-id default { + custom-command /bin/sh + config { + # --- IP --- + ip addr add 127.0.0.1/8 dev lo0 + ip addr add 172.16.2.254/24 dev eth0 + ip addr add 172.16.3.254/24 dev eth1 + ip addr add 45.45.45.254/21 dev eth2 + ip -6 addr add ::1/128 dev lo0 + + + # --- Forwarding --- + sysctl -w net.ipv4.ip_forward=1 + + + # --- ROUTES vers autres réseaux publics --- + ip route add 37.37.36.0/22 via 172.16.2.253 dev eth0 + ip route add 62.62.48.0/19 via 172.16.2.253 dev eth0 + + + # --- NAT --- + # S1/S2 -> Internet + iptables -t nat -A POSTROUTING \ + -s 172.16.1.0/24 -o eth2 \ + -j SNAT --to-source 45.45.45.254 + iptables -t nat -A POSTROUTING \ + -s 172.16.2.0/24 -o eth2 \ + -j SNAT --to-source 45.45.45.254 + + + # S2 <-> S3 + iptables -t nat -A POSTROUTING \ + -s 172.16.2.0/24 -d 172.16.3.0/24 \ + -j SNAT --to-source 172.16.3.254 + iptables -t nat -A POSTROUTING \ + -s 172.16.3.0/24 -d 172.16.2.0/24 \ + -j SNAT --to-source 172.16.2.254 + + + # --- FILTRAGE --- + # 1. Connexions établies + iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT + + + # 2. S2 <-> S3 : AUTORISÉ + iptables -A FORWARD -s 172.16.2.0/24 -d 172.16.3.0/24 -j ACCEPT + iptables -A FORWARD -s 172.16.3.0/24 -d 172.16.2.0/24 -j ACCEPT + + + # 3. S3 -> S1 : BLOQUÉ + iptables -A FORWARD -s 172.16.3.0/24 -d 172.16.1.0/24 -j DROP + + + # 4. S1/S2 -> Internet : AUTORISÉ + iptables -A FORWARD -s 172.16.1.0/24 -d 45.45.40.0/21 -j ACCEPT + iptables -A FORWARD -s 172.16.2.0/24 -d 45.45.40.0/21 -j ACCEPT + iptables -A FORWARD -s 172.16.1.0/24 -d 37.37.36.0/22 -j ACCEPT + iptables -A FORWARD -s 172.16.2.0/24 -d 37.37.36.0/22 -j ACCEPT + + + # 5. S3 -> Internet : BLOQUÉ + iptables -A FORWARD -s 172.16.3.0/24 -d 45.45.40.0/21 -j DROP + iptables -A FORWARD -s 172.16.3.0/24 -d 37.37.36.0/22 -j DROP + + + # 6. Politique par défaut + iptables -P FORWARD DROP + + + # Services + rpcbind + inetd + } + } + } + custom-enabled true + custom-selected default +} + + +I.4 Configuration des PCs (routes par défaut) +Exemple pour pc2 (n7) : +node n7 { + type pc + network-config { + hostname pc2 + ! + interface eth0 + ip address 172.16.2.2/24 + mac address 42:00:aa:00:00:05 + ! + interface lo0 + type lo + ip address 127.0.0.1/8 + ipv6 address ::1/128 + ! + # Route par défaut vers GW2 + ip route 0.0.0.0/0 172.16.2.254 + ! + } + # ... +} + + +(Le même principe s’applique aux autres PCs si nécessaire.) +I.5 Tests de connectivité +À lancer après démarrage de la topo : +# S1 -> public +sudo himage pc1 ping -c 1 37.37.37.1 + + +# S2 -> public +sudo himage pc2 ping -c 1 37.37.37.1 + + +# public -> public +sudo himage pc ping -c 1 45.45.45.2 + + +# même réseau public +sudo himage host1 ping -c 1 37.37.37.1 + + +# public -> privé (doit échouer) +sudo himage pc ping -c 1 172.16.2.2 +# -> Destination Net Unreachable + + +I.6 Analyse NAT avec tcpdump +Ping depuis pc2 vers l’hôte public : +# Sur pc (public) +sudo himage pc tcpdump -i eth0 -n icmp + + +# Sur pc2 (S2) +sudo himage pc2 tcpdump -i eth0 -n icmp + + +# Ping +sudo himage pc2 ping -c 2 37.37.37.1 + + + * Sur pc2 : tu vois 172.16.2.2 -> 37.37.37.1 + + * Sur pc : tu vois 45.45.45.254 -> 37.37.37.1 + + Le routeur GW2 fait du SNAT : il remplace la source privée 172.16.2.2 par son IP publique 45.45.45.254. +PARTIE II – Service FTP avec DNAT +II.1 Création de with-ftp-service.imn +cp with-routers.imn with-ftp-service.imn + + +II.2 Ajout du serveur FTP (n14) sur S2 +node n14 { + type host + network-config { + hostname FTP + ! + interface eth0 + ip address 172.16.2.10/24 + mac address 42:00:aa:00:00:0f + ! + interface lo0 + type lo + ip address 127.0.0.1/8 + ipv6 address ::1/128 + ! + } + canvas c0 + iconcoords {480 120} + labelcoords {480 156} + interface-peer {eth0 n1} # switch2 + custom-configs { + custom-config-id default { + custom-command /bin/sh + config { + # Démarrer le serveur FTP + /usr/sbin/in.ftpd & + # (ou autre commande selon l’image) + } + } + } + custom-enabled true + custom-selected default +} + + +link l14 { + nodes {n1 n14} + bandwidth 0 +} + + +II.3 DNAT sur GW2 pour exposer FTP +Dans la config de GW2 (n11), ajouter : +# --- DNAT FTP depuis Internet vers le serveur interne --- + + +# Port 21 (contrôle) +iptables -t nat -A PREROUTING \ + -d 45.45.45.254 -p tcp --dport 21 \ + -j DNAT --to-destination 172.16.2.10:21 + + +# Port 20 (données, mode actif) +iptables -t nat -A PREROUTING \ + -d 45.45.45.254 -p tcp --dport 20 \ + -j DNAT --to-destination 172.16.2.10:20 + + +# Autoriser le forwarding vers le serveur FTP +iptables -A FORWARD -d 172.16.2.10 -p tcp --dport 21 -j ACCEPT +iptables -A FORWARD -d 172.16.2.10 -p tcp --dport 20 -j ACCEPT + + +# Autoriser FTP depuis S1 et S2 (accès direct à 172.16.2.10) +iptables -A FORWARD -s 172.16.1.0/24 -d 172.16.2.10 -p tcp --dport 21 -j ACCEPT +iptables -A FORWARD -s 172.16.2.0/24 -d 172.16.2.10 -p tcp --dport 21 -j ACCEPT + + +Rappel : + * PREROUTING : avant le routage, on peut faire du DNAT (changer la destination). + + * Ici on publie le service FTP interne 172.16.2.10 sur l’IP publique 45.45.45.254. + +II.4 Vérification du serveur FTP +# Le service écoute bien sur 21/tcp +sudo himage FTP ss -na --tcp +# Doit montrer : LISTEN sur *:21 + + +# Port FTP dans /etc/services +sudo himage FTP cat /etc/services | grep ftp +# -> ftp 21/tcp + + +II.5 Tests d’accès FTP +# 1. Depuis pc (public) vers IP publique : OK +sudo himage pc ftp 45.45.45.254 + + +# 2. Depuis pc (public) vers IP privée : NON routable +sudo himage pc ftp 172.16.2.10 +# -> Network is unreachable + + +# 3. Depuis pc1 (S1) vers IP privée : OK +sudo himage pc1 ftp 172.16.2.10 + + +# 4. Depuis pc2 (S2) vers IP privée : OK +sudo himage pc2 ftp 172.16.2.10 + + +# 5. Depuis host1 (réseau public 45.45.45.0/21) : OK +sudo himage host1 ftp 45.45.45.254 + + +II.6 Analyse FTP avec tcpdump +# Sur pc (public) +sudo himage pc tcpdump -i eth0 -n tcp port 21 + + +# Sur FTP (serveur interne) +sudo himage FTP tcpdump -i eth0 -n tcp port 21 + + +# Connexion FTP +sudo himage pc ftp 45.45.45.254 + + + * Côté pc : connexion 37.37.37.1 -> 45.45.45.254:21 + + * Côté FTP : connexion 172.16.2.254 -> 172.16.2.10:21 + + GW2 fait : + * DNAT : 45.45.45.254:21 → 172.16.2.10:21 (destination modifiée) + + * SNAT : 37.37.37.1 → 172.16.2.254 (source modifiée pour que les réponses repartent bien via GW2) + +Récapitulatif des règles essentielles +Sur GW1 +# NAT S1 -> S2 +iptables -t nat -A POSTROUTING \ + -s 172.16.1.0/24 -d 172.16.2.0/24 \ + -j SNAT --to-source 172.16.2.253 + + +# Filtrage +iptables -A FORWARD -s 172.16.1.0/24 -d 172.16.2.0/24 -j ACCEPT # S1 -> S2 +iptables -A FORWARD -s 172.16.2.0/24 -d 172.16.1.0/24 -j ACCEPT # S2 -> S1 +iptables -A FORWARD -s 172.16.1.0/24 -d 172.16.3.0/24 -j DROP # S1 ->/ S3 + + +Sur GW2 +# NAT S1/S2 -> Internet +iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth2 \ + -j SNAT --to-source 45.45.45.254 +iptables -t nat -A POSTROUTING -s 172.16.2.0/24 -o eth2 \ + -j SNAT --to-source 45.45.45.254 + + +# DNAT FTP +iptables -t nat -A PREROUTING -d 45.45.45.254 -p tcp --dport 21 \ + -j DNAT --to-destination 172.16.2.10:21 + + +# Filtrage (extraits) +iptables -A FORWARD -s 172.16.2.0/24 -d 172.16.3.0/24 -j ACCEPT # S2 -> S3 +iptables -A FORWARD -s 172.16.3.0/24 -d 172.16.1.0/24 -j DROP # S3 ->/ S1 +iptables -A FORWARD -s 172.16.1.0/24 -d 45.45.40.0/21 -j ACCEPT # S1 -> Internet +iptables -A FORWARD -s 172.16.3.0/24 -d 45.45.40.0/21 -j DROP # S3 ->/ Internet \ No newline at end of file diff --git a/TP_SCR3.2/revision_scr3.2/TP3/Part1/TP03-1 .md b/TP_SCR3.2/revision_scr3.2/TP3/Part1/TP03-1 .md new file mode 100644 index 0000000..b8aa4d8 --- /dev/null +++ b/TP_SCR3.2/revision_scr3.2/TP3/Part1/TP03-1 .md @@ -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) + +L’idé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 l’autre 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 l’exemple 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` d’un nœud virtuel vers l’host, 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 l’host` +`sudo himage DHCPsrv cat /etc/dhcp/dhcpd.conf > IMUNES/SCR.3.2/TP03/dhcpd.conf` + +C’est **ce** fichier `IMUNES/SCR.3.2/TP03/dhcpd.conf` qu’on 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 d’adresses : 192.168.10.20 - 192.168.10.40` + `range 192.168.10.20 192.168.10.40;` + + `# (b) Route vers l’autre 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 d’atteindre 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 n’existe 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` + +S’il n’y a pas d’erreur 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 qu’il 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 l’IP & 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.20–192.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 n’est pas local vers GW, qui sait joindre l’autre 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 l’historique des baux obtenus / renouvelés. + diff --git a/TP_SCR3.2/revision_scr3.2/TP3/Part1/TP03-1 .pdf b/TP_SCR3.2/revision_scr3.2/TP3/Part1/TP03-1 .pdf new file mode 100644 index 0000000..a8d9656 Binary files /dev/null and b/TP_SCR3.2/revision_scr3.2/TP3/Part1/TP03-1 .pdf differ diff --git a/TP_SCR3.2/revision_scr3.2/TP3/Part1/TP03-1 .txt b/TP_SCR3.2/revision_scr3.2/TP3/Part1/TP03-1 .txt new file mode 100644 index 0000000..f173e82 --- /dev/null +++ b/TP_SCR3.2/revision_scr3.2/TP3/Part1/TP03-1 .txt @@ -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) + +L’idé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 l’autre 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 l’exemple 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 d’un nœud virtuel vers l’host, 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 l’host +sudo himage DHCPsrv cat /etc/dhcp/dhcpd.conf > IMUNES/SCR.3.2/TP03/dhcpd.conf + + +C’est ce fichier IMUNES/SCR.3.2/TP03/dhcpd.conf qu’on 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 d’adresses : 192.168.10.20 - 192.168.10.40 + range 192.168.10.20 192.168.10.40; + + + # (b) Route vers l’autre 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 d’atteindre 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 n’existe 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 + + +S’il n’y a pas d’erreur 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 qu’il 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 l’IP & 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.20–192.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 n’est pas local vers GW, qui sait joindre l’autre 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 l’historique des baux obtenus / renouvelés. \ No newline at end of file diff --git a/TP_SCR3.2/revision_scr3.2/TP3/Part2/TP03 - Partie II _ Configuration du service DHCP Relay.md b/TP_SCR3.2/revision_scr3.2/TP3/Part2/TP03 - Partie II _ Configuration du service DHCP Relay.md new file mode 100644 index 0000000..9a54367 --- /dev/null +++ b/TP_SCR3.2/revision_scr3.2/TP3/Part2/TP03 - Partie II _ Configuration du service DHCP Relay.md @@ -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 + diff --git a/TP_SCR3.2/revision_scr3.2/TP3/Part2/TP03 - Partie II _ Configuration du service DHCP Relay.pdf b/TP_SCR3.2/revision_scr3.2/TP3/Part2/TP03 - Partie II _ Configuration du service DHCP Relay.pdf new file mode 100644 index 0000000..461487d Binary files /dev/null and b/TP_SCR3.2/revision_scr3.2/TP3/Part2/TP03 - Partie II _ Configuration du service DHCP Relay.pdf differ diff --git a/TP_SCR3.2/revision_scr3.2/TP3/Part2/TP03 - Partie II _ Configuration du service DHCP Relay.txt b/TP_SCR3.2/revision_scr3.2/TP3/Part2/TP03 - Partie II _ Configuration du service DHCP Relay.txt new file mode 100644 index 0000000..16c0676 --- /dev/null +++ b/TP_SCR3.2/revision_scr3.2/TP3/Part2/TP03 - Partie II _ Configuration du service DHCP Relay.txt @@ -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 \ No newline at end of file diff --git a/TP_SCR3.2/revision_scr3.2/TP4/TP04 DNS clair — Créer la topologie ddns.md b/TP_SCR3.2/revision_scr3.2/TP4/TP04 DNS clair — Créer la topologie ddns.md new file mode 100644 index 0000000..742a0d0 --- /dev/null +++ b/TP_SCR3.2/revision_scr3.2/TP4/TP04 DNS clair — Créer la topologie ddns.md @@ -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` s’exécute en **user bind**, donc il n’a 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 d’abord 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** + diff --git a/TP_SCR3.2/revision_scr3.2/TP4/TP04 DNS clair — Créer la topologie ddns.pdf b/TP_SCR3.2/revision_scr3.2/TP4/TP04 DNS clair — Créer la topologie ddns.pdf new file mode 100644 index 0000000..b9b08a1 Binary files /dev/null and b/TP_SCR3.2/revision_scr3.2/TP4/TP04 DNS clair — Créer la topologie ddns.pdf differ diff --git a/TP_SCR3.2/revision_scr3.2/TP4/TP04 DNS clair — Créer la topologie ddns.txt b/TP_SCR3.2/revision_scr3.2/TP4/TP04 DNS clair — Créer la topologie ddns.txt new file mode 100644 index 0000000..53c4598 --- /dev/null +++ b/TP_SCR3.2/revision_scr3.2/TP4/TP04 DNS clair — Créer la topologie ddns.txt @@ -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 s’exécute en user bind, donc il n’a 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 d’abord 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 \ No newline at end of file diff --git a/TP_SCR3.2/revision_scr3.2/TP4/TP04 – Dynamic DNS — Organisation par GRANDES PARTIES.md b/TP_SCR3.2/revision_scr3.2/TP4/TP04 – Dynamic DNS — Organisation par GRANDES PARTIES.md new file mode 100644 index 0000000..9443a5a --- /dev/null +++ b/TP_SCR3.2/revision_scr3.2/TP4/TP04 – Dynamic DNS — Organisation par GRANDES PARTIES.md @@ -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 **n’a 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 l’utilisateur **bind**, + +* Il doit créer un fichier journal `.jnl` pour les mises à jour dynamiques, + +* `/etc/bind` n’est 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 n’accepte des updates **que du DHCP**, pas d’un 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 l’IP 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 l’exé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 d’IPv4, pas de DNS. + +--- + +### **2\. Demande d’adresse :** + +`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 l’IP DHCP, + +* l’IP résout vers le nom. + +--- + +# **PARTIE 8 — Cas d’erreur : 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 d’enregistrement. + +--- + +# **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 | + diff --git a/TP_SCR3.2/revision_scr3.2/TP4/TP04 – Dynamic DNS — Organisation par GRANDES PARTIES.pdf b/TP_SCR3.2/revision_scr3.2/TP4/TP04 – Dynamic DNS — Organisation par GRANDES PARTIES.pdf new file mode 100644 index 0000000..cd7a0a6 Binary files /dev/null and b/TP_SCR3.2/revision_scr3.2/TP4/TP04 – Dynamic DNS — Organisation par GRANDES PARTIES.pdf differ diff --git a/TP_SCR3.2/revision_scr3.2/TP4/TP04 – Dynamic DNS — Organisation par GRANDES PARTIES.txt b/TP_SCR3.2/revision_scr3.2/TP4/TP04 – Dynamic DNS — Organisation par GRANDES PARTIES.txt new file mode 100644 index 0000000..ea87686 --- /dev/null +++ b/TP_SCR3.2/revision_scr3.2/TP4/TP04 – Dynamic DNS — Organisation par GRANDES PARTIES.txt @@ -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 n’a 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 l’utilisateur bind, + + * Il doit créer un fichier journal .jnl pour les mises à jour dynamiques, + + * /etc/bind n’est 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 n’accepte des updates que du DHCP, pas d’un 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 l’IP 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 l’exé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 d’IPv4, pas de DNS. +________________ + + +2. Demande d’adresse : +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 l’IP DHCP, + + * l’IP résout vers le nom. + +________________ + + +PARTIE 8 — Cas d’erreur : 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 d’enregistrement. +________________ + + +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 \ No newline at end of file diff --git a/TP_SCR3.2/revision_scr3.2/scr-machine.md b/TP_SCR3.2/revision_scr3.2/scr-machine.md new file mode 100644 index 0000000..e5b5ced --- /dev/null +++ b/TP_SCR3.2/revision_scr3.2/scr-machine.md @@ -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 l’interface. + +* `-o eth1` : la règle ne s’applique qu’aux paquets sortant par l’interface eth1. + +* `-j SNAT` : l’action consiste à effectuer un Source NAT, c’est-à-dire modifier l’adresse 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 d’assurer 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 lorsqu’elle agit comme routeur. + +* `-s 172.16.1.0/24` : condition sur l’adresse source ; la règle s’applique uniquement aux paquets provenant du réseau 172.16.1.0/24. + +* `-d 172.16.3.0/24` : condition sur l’adresse 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 à l’expéditeur. + +* Effet global : tout trafic entre S1 et S3 dans ce sens est bloqué. + +## **1\. PREROUTING – DNAT (changer la destination)** + +C’est ce qu’on 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 \ No newline at end of file diff --git a/TP_SCR3.2/revision_scr3.2/scr-machine.pdf b/TP_SCR3.2/revision_scr3.2/scr-machine.pdf new file mode 100644 index 0000000..5622533 Binary files /dev/null and b/TP_SCR3.2/revision_scr3.2/scr-machine.pdf differ diff --git a/TP_SCR3.2/revision_scr3.2/scr-machine.txt b/TP_SCR3.2/revision_scr3.2/scr-machine.txt new file mode 100644 index 0000000..32ada6c --- /dev/null +++ b/TP_SCR3.2/revision_scr3.2/scr-machine.txt @@ -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 l’interface. + +* -o eth1 : la règle ne s’applique qu’aux paquets sortant par l’interface eth1. + +* -j SNAT : l’action consiste à effectuer un Source NAT, c’est-à-dire modifier l’adresse 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 d’assurer 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 lorsqu’elle agit comme routeur. + + * -s 172.16.1.0/24 : condition sur l’adresse source ; la règle s’applique uniquement aux paquets provenant du réseau 172.16.1.0/24. + + * -d 172.16.3.0/24 : condition sur l’adresse 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 à l’expéditeur. + + * Effet global : tout trafic entre S1 et S3 dans ce sens est bloqué. + +1. PREROUTING – DNAT (changer la destination) +C’est ce qu’on 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 \ No newline at end of file