← Accueil

PCTAMALOU

Semaine 6 : Les Fondations de la Cité Numérique

Par Platon-Y – pctamalou.fr & e-of-h.fr

🎯 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.

flowchart TD A[🌐 Application
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 :

  1. Application (HTTP/HTTPS, DNS, SSH, SMTP) : Ce que vous voyez
  2. Transport (TCP/UDP + ports) : Qui parle à qui
  3. Internet (IP + routage) : Comment ça arrive
  4. 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)

graph LR A["32 bits = 4 octets"] --> B["192 . 168 . 1 . 100"] B --> C["11000000 . 10101000 . 00000001 . 01100100"] D["/24 = 255.255.255.0"] --> E["Réseau: 192.168.1.0"] D --> F["Hôte: 100"] D --> G["Broadcast: 192.168.1.255"] D --> H["Utilisables: 192.168.1.1-254"] style B fill:#11151f,stroke:#00d4ff,stroke-width:2px,color:#fff style D fill:#0a0e17,stroke:#9d4edd,stroke-width:2px,color:#fff

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 :

  1. Flat network (/16 en interne) : Un attaquant qui pénètre a accès à tout
  2. DMZ non isolée : Les serveurs web peuvent atteindre les bases de données
  3. IoT sur le réseau principal : Les caméras piratées voient tout le trafic
  4. Pas de micro-segmentation : Les serveurs communiquent librement entre eux
  5. 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

  1. 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
  2. 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)"
  3. 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()
  4. 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"
  5. 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 :

  1. 1000 serveurs physiques
  2. 5000 machines virtuelles
  3. 3 zones de sécurité (public, privé, management)
  4. Redondance multi-fournisseurs Internet
  5. 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 :

  1. Qui a besoin de parler à qui ?
  2. Quels sont les flux légitimes ?
  3. Comment isoler les incidents ?
  4. Comment gérer la croissance future ?

📚 Ressources gratuites recommandées

Pour approfondir :

⚠️ 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