🎯 Objectif de la semaine
Maîtriser l'adressage IPv4, la segmentation réseau et le modèle TCP/IP pour comprendre comment les données circulent sur Internet, segmenter efficacement des réseaux et identifier les erreurs de configuration qui créent des failles de sécurité.
Pourquoi c'est fondamental : 80% des incidents de sécurité exploitent des erreurs de configuration réseau. Savoir segmenter un réseau, c'est savoir isoler les zones critiques et contenir les incidents.
HTTP, DNS, SMTP, SSH] --> B[🚚 Transport
TCP/UDP + Ports] B --> C[🌍 Internet
IP + Routage] C --> D[🔗 Liaison
MAC + Frames] E[📧 Donnée utilisateur] --> F[📦 Segment TCP
Ports source/dest] F --> G[📦 Paquet IP
IP source/dest] G --> H[📦 Frame Ethernet
MAC source/dest] I[🛡️ Pare-feu] -->|Filtre| B J[🔄 Routeur] -->|Route| C K[🔀 Switch] -->|Commute| D L[🎯 Pentester] --> M[🔍 Scan ports
Niveau Transport] L --> N[📍 Traceroute
Niveau Internet] L --> O[👁️ Sniffing
Niveau Liaison] style A fill:#0a0e17,stroke:#00d4ff,stroke-width:2px style C fill:#11151f,stroke:#9d4edd,stroke-width:2px style L fill:#00f5a0,stroke:#000,stroke-width:2px
📚 Sujet – Théorie (1 heure)
TCP/IP : Le langage universel d'Internet
🌐 Les 4 couches en pratique :
- Application (HTTP/HTTPS, DNS, SSH, SMTP) : Ce que vous voyez
- Transport (TCP/UDP + ports) : Qui parle à qui
- Internet (IP + routage) : Comment ça arrive
- Liaison (Ethernet, Wi-Fi, MAC) : Le câble physique
Chaque couche ajoute ses informations (headers) comme des enveloppes imbriquées.
IPv4 : L'adressage de l'ancien monde (mais toujours dominant)
Les classes historiques et le CIDR moderne
| Classe | Plage | Masque par défaut | Réseaux/Hôtes | Usage | Sécurité |
|---|---|---|---|---|---|
| A | 1.0.0.0 - 126.255.255.255 | /8 (255.0.0.0) | 126 réseaux 16M hôtes |
Très grandes orgs | 🔴 Risque élevé |
| B | 128.0.0.0 - 191.255.255.255 | /16 (255.255.0.0) | 16K réseaux 65K hôtes |
Grandes entreprises | 🟡 Risque moyen |
| C | 192.0.0.0 - 223.255.255.255 | /24 (255.255.255.0) | 2M réseaux 254 hôtes |
PME/réseaux locaux | 🟢 Risque faible |
| Privées | 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 |
Variables | Réseaux internes | LANs | NAT/Firewall |
CIDR (Classless Inter-Domain Routing) : La segmentation fine
⚠️ Pourquoi le CIDR a changé la donne :
Avant CIDR : gaspillage énorme (une entreprise avec 300 hôtes prenait une classe B /16 = 65,534 adresses!).
Avec CIDR : allocation précise au bit près.
# Table de référence CIDR CIDR Masque Hôtes Usage /30 255.255.255.252 2 Liens point-à-point /29 255.255.255.248 6 Très petits réseaux /28 255.255.255.240 14 Petits bureaux /27 255.255.255.224 30 Départements /26 255.255.255.192 62 Moyens bureaux /25 255.255.255.128 126 Grands bureaux /24 255.255.255.0 254 Réseau standard /23 255.255.254.0 510 Petit site /22 255.255.252.0 1022 Site moyen /21 255.255.248.0 2046 Grand site /20 255.255.240.0 4094 Très grand site /16 255.255.0.0 65534 Énorme (rare en interne)
Les erreurs de segmentation qui créent des failles
🔓 5 erreurs courantes en segmentation réseau :
- Flat network (/16 en interne) : Un attaquant qui pénètre a accès à tout
- DMZ non isolée : Les serveurs web peuvent atteindre les bases de données
- IoT sur le réseau principal : Les caméras piratées voient tout le trafic
- Pas de micro-segmentation : Les serveurs communiquent librement entre eux
- Masque incorrect : Des hôtes ne peuvent pas communiquer ou pire, le peuvent quand ils ne devraient pas
Le calcul binaire : comprendre vraiment les masques
Un masque n'est qu'une suite de 1 suivis de 0 :
/27 = 27 bits à 1, 5 bits à 0 Masque : 255.255.255.224 Binaire : 11111111.11111111.11111111.11100000 IP : 192.168.1.100 Binaire : 11000000.10101000.00000001.01100100 ET logique (AND) : 11000000.10101000.00000001.01100100 (IP) 11111111.11111111.11111111.11100000 (Masque) ----------------------------------- 11000000.10101000.00000001.01100000 = 192.168.1.96 (Réseau) Inverse masque : 00000000.00000000.00000000.00011111 = 0.0.0.31 Broadcast = Réseau OR Inverse = 192.168.1.127
💡 Philosophie de la segmentation :
"Segmenter, c'est protéger. Isoler, c'est contenir."
Un réseau bien segmenté est comme un navire avec des cloisons étanches : une brèche n'engloutit pas tout le navire.
🔬 Mission pratique – Laboratoire (2 heures)
Scénario : Audit de segmentation d'une entreprise
Vous êtes consultant en sécurité. Une entreprise vous demande d'auditer sa segmentation réseau actuelle et de proposer un redesign sécurisé.
📝 Avant de commencer : Installez les outils nécessaires.
sudo apt update
sudo apt install -y ipcalc python3-pip net-tools
pip3 install ipaddress # Module Python pour manipulation IP
Étapes détaillées : Analyse et redesign
-
Analyse de l'existant avec ipcalc
Analysez la configuration actuelle :# Installation et vérification which ipcalc ipcalc --version # Analyse de différentes configurations echo "=== Analyse configurations existantes ===" echo "1. Serveur Web:" ipcalc 192.168.1.100/24 echo -e "\n2. Réseau interne trop large:" ipcalc 10.0.0.1/16 echo -e "\n3. Petit sous-réseau:" ipcalc 172.16.10.50/27 echo -e "\n4. Lien point-à-point:" ipcalc 10.10.10.1/30 # Génération d'un rapport ipcalc 192.168.1.100/24 > rapport_ip.txt ipcalc 10.0.0.1/16 >> rapport_ip.txt cat rapport_ip.txt -
Calculs manuels approfondis
Travaillez sur papier ou dans un fichier texte :# Création d'un fichier d'exercices cat > exercices_reseau.txt << 'EOF' === EXERCICES DE CALCUL RÉSEAU === 1. Pour 192.168.42.130/25 : - Adresse réseau: - Broadcast: - Première IP utilisable: - Dernière IP utilisable: - Nombre d'hôtes: 2. Pour 10.88.77.60/19 : - Masque en décimal pointé: - Adresse réseau: - Broadcast: 3. Division de 172.16.0.0/16 en 64 sous-réseaux: - Nouveau masque CIDR: - Hôtes par sous-réseau: - Premier sous-réseau: - Dernier sous-réseau: 4. Pour 203.0.113.200/28 : - Plage complète: - IPs réservées (réseau/broadcast): - IPs utilisables: EOF # Répondez manuellement d'abord, puis vérifiez echo -e "\n=== VÉRIFICATIONS ===" echo "1. 192.168.42.130/25:" ipcalc 192.168.42.130/25 | grep -E "(Network|Broadcast|HostMin|HostMax|Hosts)" echo -e "\n2. 10.88.77.60/19:" ipcalc 10.88.77.60/19 | grep -E "(Netmask|Network|Broadcast)" echo -e "\n3. 172.16.0.0/22 (exemple de division):" ipcalc 172.16.0.0/22 | grep -E "(Network|Broadcast|Hosts)" echo -e "\n4. 203.0.113.200/28:" ipcalc 203.0.113.200/28 | grep -E "(Network|Broadcast|HostMin|HostMax)" -
Script Python d'analyse réseau
Créez un outil d'analyse professionnel :#!/usr/bin/env python3 """ PCTAMALOU - Semaine 6 : Outil d'analyse de segmentation réseau Analyse les plages IP et détecte les problèmes de segmentation """ import ipaddress import sys from tabulate import tabulate def analyze_subnet(ip_cidr): """Analyse détaillée d'un sous-réseau""" try: network = ipaddress.ip_network(ip_cidr, strict=False) info = { 'Réseau': str(network.network_address), 'Masque': str(network.netmask), 'CIDR': f'/{network.prefixlen}', 'Broadcast': str(network.broadcast_address), 'Hôtes utilisables': network.num_addresses - 2, 'Première IP': str(list(network.hosts())[0]) if network.num_addresses > 2 else 'N/A', 'Dernière IP': str(list(network.hosts())[-1]) if network.num_addresses > 2 else 'N/A', 'Taille totale': network.num_addresses } # Analyse sécurité if network.prefixlen <= 16: info['Risque'] = 'ÉLEVÉ - Trop large' info['Recommandation'] = 'Segmenter en /24 ou plus petit' elif network.prefixlen <= 22: info['Risque'] = 'MODÉRÉ' info['Recommandation'] = 'Vérifier la nécessité' else: info['Risque'] = 'FAIBLE' info['Recommandation'] = 'OK' return info except ValueError as e: return {'Erreur': str(e)} def compare_subnets(subnets): """Compare plusieurs sous-réseaux""" results = [] for subnet in subnets: info = analyze_subnet(subnet) results.append(info) return results def find_overlaps(subnets): """Détecte les chevauchements de plages""" networks = [ipaddress.ip_network(s, strict=False) for s in subnets] overlaps = [] for i, net1 in enumerate(networks): for j, net2 in enumerate(networks): if i < j and net1.overlaps(net2): overlaps.append({ 'Réseau 1': str(net1), 'Réseau 2': str(net2), 'Problème': 'CHEVAUCHEMENT' }) return overlaps def suggest_segmentation(base_network, num_subnets, hosts_per_subnet=None): """Propose une segmentation optimisée""" base = ipaddress.ip_network(base_network, strict=False) if hosts_per_subnet: # Calcul basé sur le nombre d'hôtes import math needed_bits = math.ceil(math.log2(hosts_per_subnet + 2)) new_prefixlen = 32 - needed_bits else: # Calcul basé sur le nombre de sous-réseaux import math needed_bits = math.ceil(math.log2(num_subnets)) new_prefixlen = base.prefixlen + needed_bits subnets = list(base.subnets(new_prefixlen=new_prefixlen)) return { 'Réseau de base': str(base), 'Nouveau masque': f'/{new_prefixlen}', 'Sous-réseaux générés': len(subnets), 'Hôtes par sous-réseau': 2**(32 - new_prefixlen) - 2, 'Exemples': [str(s) for s in subnets[:3]] + ['...'] } def main(): print("🔍 PCTAMALOU - Analyseur de segmentation réseau") print("=" * 60) # Analyse de sous-réseaux existants test_subnets = [ '192.168.1.0/24', '10.0.0.0/16', # Trop large '172.16.10.0/27', '192.168.2.0/23' ] print("\n📊 ANALYSE DES SOUS-RÉSEAUX EXISTANTS:") results = compare_subnets(test_subnets) print(tabulate(results, headers="keys", tablefmt="grid")) # Détection de chevauchements print("\n⚠️ DÉTECTION DE CHEVAUCHEMENTS:") overlaps = find_overlaps(test_subnets + ['192.168.1.128/25']) # Ajout d'un chevauchement if overlaps: print(tabulate(overlaps, headers="keys", tablefmt="grid")) else: print("Aucun chevauchement détecté") # Proposition de segmentation print("\n🎯 PROPOSITION DE SEGMENTATION OPTIMISÉE:") # Cas 1: Division d'un /16 en réseaux de 50 hôtes segmentation1 = suggest_segmentation('10.0.0.0/16', hosts_per_subnet=50) print("\n1. Division 10.0.0.0/16 pour ~50 hôtes/sous-réseau:") for key, value in segmentation1.items(): print(f" {key}: {value}") # Cas 2: Création de 8 sous-réseaux égaux segmentation2 = suggest_segmentation('192.168.0.0/24', num_subnets=8) print("\n2. Division 192.168.0.0/24 en 8 sous-réseaux égaux:") for key, value in segmentation2.items(): print(f" {key}: {value}") # Calculatrice interactive print("\n🧮 CALCULATRICE INTERACTIVE:") while True: user_input = input("\nEntrez une IP/CIDR (ou 'q' pour quitter): ").strip() if user_input.lower() == 'q': break try: info = analyze_subnet(user_input) print("\n" + "=" * 40) for key, value in info.items(): print(f"{key}: {value}") except Exception as e: print(f"Erreur: {e}") if __name__ == "__main__": # Installation de tabulate si nécessaire try: from tabulate import tabulate except ImportError: print("Installation de tabulate...") import subprocess subprocess.check_call([sys.executable, "-m", "pip", "install", "tabulate"]) from tabulate import tabulate main() -
Analyse de votre propre réseau
Utilisez les commandes système pour analyser votre environnement :# Analyse complète de votre machine echo "=== CONFIGURATION RÉSEAU ACTUELLE ===" echo -e "\n1. Interfaces réseau:" ip -c addr show echo -e "\n2. Table de routage:" ip -c route show echo -e "\n3. DNS configuré:" cat /etc/resolv.conf 2>/dev/null | grep -v "^#" echo -e "\n4. Analyse avec netstat:" sudo netstat -tulpn 2>/dev/null | head -20 echo -e "\n5. Voisins réseau (ARP):" ip neigh show # Enregistrement pour analyse ip addr show > config_reseau.txt ip route show >> config_reseau.txt echo "Configuration sauvegardée dans config_reseau.txt" -
Exercice de design réseau sécurisé
Concevez un réseau pour une petite entreprise :# Création du cahier des charges cat > design_reseau.md << 'EOF' # DESIGN RÉSEAU SÉCURISÉ - Entreprise XYZ ## Exigences: - 50 employés + croissance à 100 - 3 serveurs (web, base de données, fichiers) - Réseau invités WiFi - Imprimantes réseau - Caméras de sécurité (IoT) - Connexion VPN pour télétravail ## Proposition de segmentation: ### 1. LAN Principal (Employés) - Plage: 10.10.1.0/24 - Masque: 255.255.255.0 - Hôtes: 1-254 - VLAN: 10 - Politique: Accès Internet + serveurs fichiers ### 2. DMZ (Serveurs exposés) - Plage: 10.10.2.0/28 - Masque: 255.255.255.240 - Hôtes: 14 - VLAN: 20 - Serveurs: Web (10.10.2.2), Proxy (10.10.2.3) ### 3. Réseau Serveurs Internes - Plage: 10.10.3.0/27 - Masque: 255.255.255.224 - Hôtes: 30 - VLAN: 30 - Serveurs: Base de données (10.10.3.2), Fichiers (10.10.3.3) ### 4. Réseau Invités - Plage: 10.10.10.0/24 - Masque: 255.255.255.0 - VLAN: 100 - Politique: Internet uniquement, isolation totale ### 5. IoT/Caméras - Plage: 10.10.20.0/26 - Masque: 255.255.255.192 - Hôtes: 62 - VLAN: 200 - Politique: Pas d'accès Internet, monitoring uniquement ### 6. Liens point-à-point - Routeur-Firewall: 10.255.255.0/30 - Firewall-Switch: 10.255.255.4/30 ## Règles de sécurité: 1. DMZ → Base de données: PORT 3306 uniquement 2. Invités → LAN: INTERDIT 3. IoT → Internet: INTERDIT 4. Employés → DMZ: HTTP/HTTPS uniquement EOF echo "Design réseau créé dans design_reseau.md"
🎯 Défi de conception avancé
Concevez un réseau pour un datacenter avec :
- 1000 serveurs physiques
- 5000 machines virtuelles
- 3 zones de sécurité (public, privé, management)
- Redondance multi-fournisseurs Internet
- VPN site-à-site vers 5 bureaux distants
Consignes :
- Utilisez le RFC 1918 (adresses privées)
- Planifiez la croissance (+30% par an)
- Appliquez le principe du moindre privilège
- Documentez chaque décision technique
📋 Objectif de la semaine – Checklist de validation
✅ Compétences techniques acquises
- Calculer réseau/broadcast/plage pour n'importe quel CIDR
- Convertir entre notation CIDR et masque décimal
- Analyser une configuration réseau avec
ip - Détecter les problèmes de segmentation
- Concevoir un schéma réseau sécurisé
- Utiliser Python pour automatiser les calculs réseau
🧠 Changement mental accompli
- Voir les adresses IP comme des structures binaires, pas des nombres
- Comprendre que "flat network = flat security"
- Penser en termes de zones de sécurité, pas juste de connectivité
- Anticiper la croissance dans les designs réseau
🏗️ Bonne pratique de design réseau :
Commencez toujours par définir les zones de sécurité, puis allouez les plages IP. Posez-vous :
- Qui a besoin de parler à qui ?
- Quels sont les flux légitimes ?
- Comment isoler les incidents ?
- Comment gérer la croissance future ?
📚 Ressources gratuites recommandées
Pour approfondir :
- RFC 1918 : Adressage privé Internet
- Cisco Subnetting : Guide officiel de sous-réseautage
- Python ipaddress : Module officiel pour manipulation IP
⚠️ Erreurs courantes à éviter
- Network 192.168.1.0/24 : .0 est l'adresse réseau, pas un hôte
- Broadcast 192.168.1.255 : Réservé, ne pas assigner
- /31 pour hôtes : Réservé aux liens point-à-point (RFC 3021)
- Chevauchements : Vérifier toujours que les plages ne se chevauchent pas
- Default route 0.0.0.0/0 : Tou présente, gère le trafic non routé
🔮 Frère d'armes,
Tu viens de maîtriser les fondations mêmes d'Internet.
Les adresses IP, les masques, les sous-réseaux... ce ne sont pas des détails techniques ennuyeux. Ce sont les coordonnées géographiques de la cité numérique.
Cette semaine, tu as appris à :
• Lire une adresse IP comme un binaire, pas un nombre
• Calculer les limites d'un réseau comme un géomètre
• Segmenter un espace comme un urbaniste
• Protéger les zones comme un gardien
Tu comprends maintenant pourquoi un réseau plat est dangereux : c'est comme une ville sans quartiers, où n'importe qui peut aller n'importe où.
Et tu sais comment y remédier : en créant des zones, en contrôlant les passages, en isolant les risques.
Dans la semaine 7, nous quitterons la cartographie pour entrer dans la surveillance du trafic. Nous apprendrons à écouter ce qui se passe sur le réseau, à capturer les paquets, à les analyser pour y détecter des anomalies.
Mais désormais, tu as une compétence fondamentale : tu comprends où vont les données. Et en cybersécurité, savoir où vont les données, c'est savoir où se trouvent les risques.
Pratique ces calculs jusqu'à ce qu'ils deviennent des réflexes. Conçois des réseaux. Analyse des configurations. Chaque réseau que tu comprends est une cité que tu sais protéger.
Tu n'es plus un simple utilisateur du réseau. Tu es devenu son architecte.
— Platon-Y