🎯 Objectif de la semaine
Maîtriser la configuration sécurisée des services réseau SSH et FTP, comprendre leurs vulnérabilités par défaut et implémenter des durcissements professionnels pour protéger les accès distants aux systèmes.
Pourquoi c'est critique : SSH est la porte d'entrée numéro 1 des serveurs Linux. Une mauvaise configuration SSH équivaut à laisser les clés sous le paillasson.
SSH/SFTP/SCP] FTP_Insecure --> L[❌ Alternatives:
SFTP/FTPS/rsync] M[🎭 Attaques communes] --> N[💥 Bruteforce SSH] M --> O[👂 Sniffing FTP] M --> P[🎯 Man-in-the-Middle] M --> Q[🔄 Session Hijacking] R[🛡️ Contremesures] --> S[🔑 Clés SSH uniquement] R --> T[🚪 Changement port] R --> U[⏱️ Rate limiting] R --> V[📋 Allow/Deny lists] style SSH_Secure fill:#0a0e17,stroke:#00f5a0,stroke-width:2px style FTP_Insecure fill:#11151f,stroke:#ef4444,stroke-width:2px style R fill:#0a0e17,stroke:#00d4ff,stroke-width:2px
📚 Sujet – Théorie (1 heure)
SSH : La forteresse numérique (si bien configurée)
🔐 Pourquoi SSH est fondamentalement sécurisé :
- Chiffrement de bout en bout (algorithme négocié)
- Authentification forte (clés asymétriques)
- Intégrité des données (HMAC)
- Forward secrecy (DHE/ECDHE)
- Journalisation complète (auth.log)
Mais... les configurations par défaut annulent souvent ces avantages.
Les 7 péchés capitaux de la configuration SSH
| Configuration | Valeur par défaut | Risque | Impact sécurité | Correction |
|---|---|---|---|---|
| PermitRootLogin | yes |
Accès root direct | CRITIQUE | prohibit-password |
| PasswordAuthentication | yes |
Bruteforce possible | ÉLEVÉ | no |
| Port | 22 |
Scan automatique | MOYEN | 2222 ou autre |
| X11Forwarding | yes |
Attaques X11 | MOYEN | no |
| AllowTcpForwarding | yes |
Tunnels non contrôlés | FAIBLE | no ou limité |
| ClientAliveInterval | 0 |
Sessions infinies | MOYEN | 300 (5 min) |
| MaxAuthTries | 6 |
Trop d'essais | ÉLEVÉ | 3 |
FTP : L'ancien monde dangereux
⚠️ Pourquoi FTP ne devrait plus exister :
FTP standard (port 21) :
- Authentification en clair (login/mot de passe visibles)
- Données transférées en clair
- Mode actif/passif complexe (problèmes firewall)
- Pas de vérification d'intégrité
Chiffres choquants : En 2024, plus de 2 millions de serveurs FTP exposés sur Internet, dont 40% avec accès anonyme activé.
Alternatives modernes à FTP
À éviter absolument"] A --> C["🔐 FTPS (Port 990)
FTP + SSL/TLS"] A --> D["✅ SFTP (Port 22)
SSH File Transfer"] A --> E["🚀 SCP (Port 22)
Simple Copy over SSH"] A --> F["⚡ rsync (Port 873)
Sync intelligent"] A --> G["☁️ Nextcloud/WebDAV
HTTPS moderne"] B --> H["❌ Jamais en production"] C --> I["⚠️ Compliqué à configurer"] D --> J["✅ Recommandé"] E --> J F --> K["⭐ Excellent pour backups"] G --> L["🏢 Entreprise moderne"] style B fill:#11151f,stroke:#ef4444,stroke-width:2px,color:#fff style D fill:#0a0e17,stroke:#00f5a0,stroke-width:2px,color:#fff
Cryptographie SSH : Comment ça marche vraiment
🔑 Les 3 types de clés SSH :
- RSA (2048+ bits) : Standard historique, toujours valide
- ECDSA (256+ bits) : Plus courtes, plus rapides
- Ed25519 (256 bits) : Moderne, sécurisé, recommandé
# Génération des différentes clés ssh-keygen -t rsa -b 4096 -C "comment" # RSA 4096 bits ssh-keygen -t ecdsa -b 521 -C "comment" # ECDSA 521 bits ssh-keygen -t ed25519 -C "comment" # Ed25519 (recommandé)
Règle du Gardien : "Une clé SSH est comme une clé physique. Ne la partagez pas, ne la perdez pas, changez-la régulièrement."
Architecture de sécurité SSH multi-niveaux
🏰 Défense en profondeur SSH :
- Niveau 1 : Pare-feu (Bloquer tout sauf port SSH)
- Niveau 2 : Fail2ban (Bloquer IPs après échecs)
- Niveau 3 : Port non standard (Éviter scans automatiques)
- Niveau 4 : Clés uniquement (Pas de mots de passe)
- Niveau 5 : 2FA (Authentification à deux facteurs)
- Niveau 6 : Bastion/Jump Host (Serveur dédié SSH)
- Niveau 7 : Monitoring (Alertes sur connexions)
💡 Philosophie de la sécurité des services :
"Configurez chaque service comme s'il allait être exposé à Internet, même s'il ne l'est pas. Parce qu'un jour, il pourrait l'être."
Les mauvaises configurations internes deviennent des failles critiques lors des migrations, extensions ou erreurs de configuration réseau.
🔬 Mission pratique – Laboratoire (2 heures)
Scénario : Durcissement complet d'un serveur d'entreprise
Vous êtes administrateur système. Vous devez sécuriser un serveur Linux qui sera exposé à Internet. Votre mission : implémenter toutes les bonnes pratiques de sécurité SSH et éliminer les services dangereux.
⚠️ IMPORTANT : Ce lab modifie la configuration système. Travaillez sur une VM dédiée ou faites des sauvegardes.
# Sauvegarde complète avant modifications
sudo cp -r /etc/ssh /etc/ssh.backup
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.original
date > ~/ssh_hardening_backup.txt
echo "Sauvegarde effectuée: $(date)"
Étapes détaillées : Durcissement professionnel
-
Audit de la configuration SSH actuelle
Commencez par comprendre l'existant :echo "=== AUDIT CONFIGURATION SSH ACTUELLE ===" # 1. Vérification service sudo systemctl status ssh --no-pager -l # 2. Configuration actuelle echo -e "\n=== CONFIGURATION ACTUELLE (extraits) ===" sudo grep -E "(Port|PermitRootLogin|PasswordAuthentication|Protocol)" /etc/ssh/sshd_config # 3. Ports ouverts SSH echo -e "\n=== PORTS SSH OUVERTS ===" sudo ss -tlnp | grep -E "(22|2222|ssh)" # 4. Clés autorisées echo -e "\n=== CLÉS AUTORISÉES (root) ===" sudo cat /root/.ssh/authorized_keys 2>/dev/null | wc -l | xargs echo "Clés root:" echo -e "\n=== CLÉS AUTORISÉES (kali) ===" cat ~/.ssh/authorized_keys 2>/dev/null | wc -l | xargs echo "Clés kali:" # 5. Analyse sécurité echo -e "\n=== ANALYSE SÉCURITÉ ===" sudo sshd -T | grep -E "(permitrootlogin|passwordauthentication|usepam|protocol)" | sort # 6. Tentatives échouées récentes echo -e "\n=== TENTATIVES RÉCENTES (auth.log) ===" sudo tail -20 /var/log/auth.log | grep -i ssh | grep -E "(fail|invalid)" | tail -5 || echo "Aucune tentative récente" # Sauvegarde audit sudo sshd -T > ssh_audit_before.txt echo "Audit sauvegardé dans ssh_audit_before.txt" -
Génération de clés SSH professionnelles
Créez des clés robustes avec bonnes pratiques :echo "=== GÉNÉRATION CLÉS SSH PROFESSIONNELLES ===" # 1. Backup anciennes clés mkdir -p ~/.ssh/backup_$(date +%Y%m%d) cp ~/.ssh/id_* ~/.ssh/backup_$(date +%Y%m%d)/ 2>/dev/null || true # 2. Génération clé Ed25519 (recommandée) echo "Génération clé Ed25519:" ssh-keygen -t ed25519 -a 100 -f ~/.ssh/id_ed25519 -C "kali@pctamalou-$(date +%Y%m%d)" # -a 100 : 100 tours de derivation de clé (KDF rounds) # -f : fichier de sortie # -C : commentaire (bonne pratique pour tracking) # 3. Génération clé RSA 4096 (compatibilité) echo -e "\nGénération clé RSA 4096 (backup/compatibilité):" ssh-keygen -t rsa -b 4096 -o -a 100 -f ~/.ssh/id_rsa -C "kali@pctamalou-rsa-$(date +%Y%m%d)" # 4. Vérification echo -e "\n=== VÉRIFICATION CLÉS GÉNÉRÉES ===" ls -la ~/.ssh/id_* echo -e "\nEmpreintes:" ssh-keygen -l -f ~/.ssh/id_ed25519 ssh-keygen -l -f ~/.ssh/id_rsa # 5. Configuration agent SSH echo -e "\n=== CONFIGURATION AGENT SSH ===" eval "$(ssh-agent -s)" ssh-add ~/.ssh/id_ed25519 ssh-add -l # 6. Autorisation clé publique echo -e "\n=== AUTORISATION CLÉ PUBLIQUE ===" cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys echo "Clé autorisée pour $(whoami)" -
Configuration SSH durcie (sshd_config)
Créez une configuration professionnelle :echo "=== CONFIGURATION SSHD DURCIE ===" # Backup configuration originale sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup_$(date +%Y%m%d) # Création nouvelle configuration sudo tee /etc/ssh/sshd_config << 'EOF' # PCTAMALOU - Configuration SSH durcie # Générée le: $(date) # Documentation: https://www.ssi.gouv.fr/guide/recommandations-de-securisation-dun-serveur-ssh/ # ============================================ # CONNEXION ET AUTHENTIFICATION # ============================================ Port 2222 # Port non standard ListenAddress 0.0.0.0 # Écoute sur toutes les interfaces Protocol 2 # SSHv2 uniquement # ============================================ # AUTHENTIFICATION # ============================================ PermitRootLogin prohibit-password # Pas de root par mot de passe PasswordAuthentication no # Pas d'authentification par mot de passe PubkeyAuthentication yes # Authentification par clés uniquement AuthorizedKeysFile .ssh/authorized_keys # 2FA optionnel (décommenter pour activer) # AuthenticationMethods publickey,keyboard-interactive:pam # ============================================ # SÉCURITÉ SESSION # ============================================ LoginGraceTime 30s # Temps max pour s'authentifier MaxAuthTries 3 # Max 3 tentatives d'authentification MaxSessions 10 # Max 10 sessions simultanées par connexion ClientAliveInterval 300 # Vérifie client toutes les 5 minutes ClientAliveCountMax 2 # Déconnecte après 10 minutes d'inactivité # ============================================ # CHIFFREMENT ET ALGORITHMES # ============================================ # Kex (Key Exchange) algorithms KexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256 # Host key algorithms HostKeyAlgorithms ssh-ed25519,ssh-ed25519-cert-v01@openssh.com,rsa-sha2-512,rsa-sha2-512-cert-v01@openssh.com,rsa-sha2-256,rsa-sha2-256-cert-v01@openssh.com # Ciphers (chiffrement) Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr # MACs (Message Authentication Codes) MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com # ============================================ # RESTRICTIONS ET LIMITATIONS # ============================================ AllowUsers kali # Utilisateurs autorisés (ajouter les autres) DenyUsers root # Utilisateurs interdits AllowGroups ssh-users # Groupes autorisés (créer si nécessaire) # Restriction par IP (exemple, décommenter et adapter) # AllowUsers kali@192.168.1.0/24 # AllowUsers admin@10.0.0.0/8 # ============================================ # FONCTIONNALITÉS AVANCÉES # ============================================ X11Forwarding no # Pas de forwarding X11 AllowTcpForwarding no # Pas de port forwarding TCP AllowStreamLocalForwarding no # Pas de forwarding socket Unix GatewayPorts no # Pas de binding sur toutes les interfaces PermitTunnel no # Pas de tunneling # SFTP uniquement (pour certains utilisateurs) # Subsystem sftp internal-sftp # Match User sftpuser # ChrootDirectory /var/sftp # ForceCommand internal-sftp # AllowTcpForwarding no # X11Forwarding no # ============================================ # LOGGING ET MONITORING # ============================================ SyslogFacility AUTH # Facility pour les logs LogLevel VERBOSE # Niveau de détail des logs PrintMotd no # Pas de message du jour PrintLastLog yes # Affiche dernière connexion TCPKeepAlive yes # Keepalive TCP # ============================================ # PERFORMANCES # ============================================ Compression delayed # Compression seulement après authentification UseDNS no # Pas de résolution DNS inverse (performance) GSSAPIAuthentication no # Désactive GSSAPI (sauf besoin) EOF echo "Configuration SSH durcie générée" -
Vérification et application
Testez avant d'appliquer :echo "=== VÉRIFICATION SYNTAXE ===" # 1. Vérification syntaxe sudo sshd -t if [ $? -eq 0 ]; then echo "✅ Syntaxe SSH config valide" else echo "❌ Erreur syntaxe, vérifiez la configuration" exit 1 fi # 2. Redémarrage service echo -e "\n=== REDÉMARRAGE SERVICE ===" sudo systemctl restart ssh # 3. Vérification statut echo -e "\n=== VÉRIFICATION STATUT ===" sudo systemctl status ssh --no-pager -l | head -20 # 4. Test connexion locale echo -e "\n=== TEST CONNEXION LOCALE ===" ssh -p 2222 kali@localhost "echo '✅ Connexion SSH réussie'" || echo "❌ Échec connexion" # 5. Test connexion root (devrait échouer) echo -e "\n=== TEST CONNEXION ROOT (devrait échouer) ===" ssh -p 2222 root@localhost "echo test" 2>&1 | grep -i "permission denied" && echo "✅ Root correctement bloqué" # 6. Vérification ports echo -e "\n=== VÉRIFICATION PORTS ===" sudo ss -tlnp | grep 2222 || echo "Port 2222 non en écoute" sudo ss -tlnp | grep :22 && echo "⚠️ Port 22 toujours en écoute (à désactiver si nécessaire)" -
Analyse et durcissement FTP
Identifiez et sécurisez les services FTP :echo "=== ANALYSE ET SÉCURISATION FTP ===" # 1. Détection services FTP echo "1. Services FTP actifs:" sudo ss -tlnp | grep -E "(21|20|990)" || echo "Aucun service FTP détecté" # 2. Recherche packages FTP installés echo -e "\n2. Packages FTP installés:" dpkg -l | grep -i "ftp\|vsftpd\|proftpd" || echo "Aucun package FTP trouvé" # 3. Désactivation FTP si présent if systemctl is-active --quiet vsftpd 2>/dev/null; then echo -e "\n3. 🛑 DÉSACTIVATION VSFTPD (FTP dangereux)" sudo systemctl stop vsftpd sudo systemctl disable vsftpd echo "VSFTPD désactivé" fi # 4. Configuration SFTP via SSH (alternative sécurisée) echo -e "\n4. 🔧 CONFIGURATION SFTP SÉCURISÉ" echo "SFTP est déjà disponible via SSH sur le port 2222" echo "Test: sftp -P 2222 kali@localhost" # 5. Test FTP vs SFTP echo -e "\n5. 🧪 TEST COMPARATIF FTP vs SFTP" echo "Test FTP (si activé):" curl ftp://localhost 2>/dev/null || echo "FTP non disponible (bon!)" echo -e "\nTest SFTP:" sftp -P 2222 kali@localhost <<< "exit" 2>&1 | grep -i "connected" && echo "✅ SFTP fonctionnel" # 6. Audit sécurité FTP historique echo -e "\n6. 📊 AUDIT HISTORIQUE FTP" sudo find /etc -name "*ftp*" -type f 2>/dev/null | while read file; do echo "Fichier FTP trouvé: $file" done -
Script Python d'audit SSH automatique
Créez un outil d'audit professionnel :#!/usr/bin/env python3 """ PCTAMALOU - Semaine 9 : Auditeur de sécurité SSH Analyse automatique des configurations SSH et détection des vulnérabilités """ import subprocess import re import json from datetime import datetime def run_command(cmd): """Exécute une commande shell""" try: result = subprocess.run(cmd, shell=True, capture_output=True, text=True, check=True) return result.stdout.strip() except subprocess.CalledProcessError as e: return f"ERROR: {e}" def analyze_sshd_config(): """Analyse la configuration SSH""" config_path = "/etc/ssh/sshd_config" try: with open(config_path, 'r') as f: content = f.read() except FileNotFoundError: return {"error": "Fichier sshd_config non trouvé"} # Recherche des paramètres critiques patterns = { 'Port': r'Port\s+(\d+)', 'PermitRootLogin': r'PermitRootLogin\s+(\S+)', 'PasswordAuthentication': r'PasswordAuthentication\s+(\S+)', 'Protocol': r'Protocol\s+(\d+)', 'MaxAuthTries': r'MaxAuthTries\s+(\d+)', 'ClientAliveInterval': r'ClientAliveInterval\s+(\d+)', 'AllowUsers': r'AllowUsers\s+(.+)', 'Ciphers': r'Ciphers\s+(.+)', 'KexAlgorithms': r'KexAlgorithms\s+(.+)' } config = {} for key, pattern in patterns.items(): match = re.search(pattern, content, re.IGNORECASE | re.MULTILINE) config[key] = match.group(1) if match else "NON DÉFINI" # Analyse des risques risks = [] if config.get('Port') == '22': risks.append({"severity": "MEDIUM", "issue": "Port SSH standard (22)", "recommendation": "Changer de port"}) if config.get('PermitRootLogin', '').lower() in ['yes', 'without-password']: risks.append({"severity": "HIGH", "issue": "Root login permis", "recommendation": "Définir à 'prohibit-password' ou 'no'"}) if config.get('PasswordAuthentication', '').lower() == 'yes': risks.append({"severity": "HIGH", "issue": "Authentification par mot de passe activée", "recommendation": "Désactiver, utiliser uniquement clés SSH"}) if config.get('Protocol', '') not in ['2', '2,1']: risks.append({"severity": "CRITICAL", "issue": "SSHv1 activé", "recommendation": "Utiliser uniquement Protocol 2"}) if config.get('MaxAuthTries', '6') > '3': risks.append({"severity": "MEDIUM", "issue": f"Trop de tentatives autorisées: {config['MaxAuthTries']}", "recommendation": "Réduire à 3"}) return { "config": config, "risks": risks, "risk_count": len(risks) } def check_ssh_listening(): """Vérifie les ports SSH en écoute""" output = run_command("sudo ss -tlnp | grep -E '(:22|:2222|ssh)'") listening = [] for line in output.split('\n'): if line: parts = line.split() if len(parts) >= 5: listening.append({ "state": parts[1], "local": parts[4], "process": parts[-1] if len(parts) > 5 else "N/A" }) return listening def analyze_auth_logs(): """Analyse les logs d'authentification SSH""" try: # Dernières 24h output = run_command("sudo journalctl -u ssh --since '24 hours ago' | tail -100") failed_attempts = [] for line in output.split('\n'): if 'Failed password' in line or 'Invalid user' in line: # Extraction IP ip_match = re.search(r'from (\d+\.\d+\.\d+\.\d+)', line) ip = ip_match.group(1) if ip_match else "UNKNOWN" # Extraction utilisateur user_match = re.search(r'for (\S+) from', line) user = user_match.group(1) if user_match else "UNKNOWN" failed_attempts.append({ "ip": ip, "user": user, "timestamp": line[:15] if line else "UNKNOWN" }) return { "total_failed": len(failed_attempts), "recent_attempts": failed_attempts[:10] # 10 plus récents } except Exception as e: return {"error": str(e)} def generate_report(): """Génère un rapport d'audit complet""" print("🔐 PCTAMALOU - Audit de sécurité SSH") print("=" * 60) print(f"Date: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}") # 1. Configuration print("\n1. 📋 CONFIGURATION SSH:") config = analyze_sshd_config() if "error" in config: print(f" ❌ {config['error']}") else: for key, value in config['config'].items(): print(f" • {key}: {value}") # 2. Risques print(f"\n2. ⚠️ RISQUES DÉTECTÉS ({config.get('risk_count', 0)}):") if config.get('risks'): for risk in config['risks']: print(f" • [{risk['severity']}] {risk['issue']}") print(f" → {risk['recommendation']}") else: print(" ✅ Aucun risque critique détecté") # 3. Ports en écoute print("\n3. 📡 PORTS EN ÉCOUTE:") listening = check_ssh_listening() if listening: for item in listening: print(f" • {item['local']} - {item['state']} - {item['process']}") else: print(" ℹ️ Aucun service SSH détecté") # 4. Tentatives échouées print("\n4. 🚨 TENTATIVES ÉCHOUÉES (24h):") logs = analyze_auth_logs() if "error" in logs: print(f" ❌ {logs['error']}") else: print(f" • Total: {logs['total_failed']} tentatives") if logs['recent_attempts']: print(" • 10 plus récentes:") for attempt in logs['recent_attempts']: print(f" - {attempt['timestamp']}: {attempt['user']}@{attempt['ip']}") # 5. Recommandations print("\n5. 💡 RECOMMANDATIONS:") recommendations = [ "Utiliser uniquement des clés SSH (pas de mots de passe)", "Changer le port SSH par défaut (22)", "Désactiver l'accès root direct", "Limiter les tentatives d'authentification (MaxAuthTries 3)", "Mettre en place Fail2ban pour bloquer les IPs malveillantes", "Utiliser des algorithmes de chiffrement modernes (Ed25519, ChaCha20)", "Limiter les utilisateurs autorisés (AllowUsers)", "Mettre en place une journalisation centralisée" ] for i, rec in enumerate(recommendations, 1): print(f" {i}. {rec}") # 6. Export JSON report = { "timestamp": datetime.now().isoformat(), "config_analysis": config, "listening_ports": listening, "auth_logs": logs, "recommendations": recommendations } with open('ssh_security_audit.json', 'w') as f: json.dump(report, f, indent=2, default=str) print(f"\n💾 Rapport exporté: ssh_security_audit.json") return report if __name__ == "__main__": generate_report()
🎯 Défi de sécurité avancé
Implémentez un système de sécurité SSH complet qui :
- Détecte et bloque automatiquement les scans SSH (port knocking)
- Implémente l'authentification à deux facteurs (TOTP via Google Authenticator)
- Crée un bastion/jump host avec accès restreint
- Met en place une journalisation centralisée des sessions SSH
- Implémente un système de rotation automatique des clés SSH
- Crée des alertes temps réel pour les connexions inhabituelles
- Génère des rapports de conformité automatiques
Indices : Utilisez pam_google_authenticator pour 2FA, auditd pour le logging, fail2ban pour le blocage, et un script Python pour la rotation des clés.
📋 Objectif de la semaine – Checklist de validation
✅ Compétences techniques acquises
- Configurer SSH avec authentification par clés uniquement
- Générer et gérer des clés SSH Ed25519 et RSA
- Durcir la configuration SSH (port, root, algorithmes)
- Identifier et désactiver les services FTP non sécurisés
- Analyser les logs SSH pour détecter les attaques
- Automatiser l'audit de sécurité SSH avec Python
🧠 Changement mental accompli
- Voir chaque service exposé comme une surface d'attaque
- Comprendre que "par défaut ≠ sécurisé" pour les services
- Penser en termes de défense en profondeur pour les accès
- Appliquer le principe "zero trust" même aux accès internes
🔐 Règles d'or de la sécurité SSH :
- Jamais de mot de passe SSH en production
- Jamais d'accès root direct
- Toujours des clés fortes (Ed25519 ou RSA 4096)
- Toujours un port non standard (ou WAF devant)
- Toujours une journalisation et monitoring
- Toujours des mises à jour régulières
📚 Ressources gratuites recommandées
Pour approfondir :
- ANSSI SSH Guide : Guide officiel français
- OpenSSH Cookbook : Wikibook complet
- SSH Hardening : Outil d'audit en ligne
⚠️ Erreurs fatales à éviter
- Clés SSH sans passphrase : Si la clé est volée, accès immédiat
- Authorized_keys permissions incorrectes : Doit être 600
- .ssh directory permissions incorrectes : Doit être 700
- Port forwarding non contrôlé : Peut créer des backdoors
- Agent forwarding : Peut exposer vos clés à des serveurs compromis
- Known_hosts non surveillé : Peut masquer des attaques MITM
🔮 Frère d'armes,
Tu viens de transformer la porte d'entrée de ta cité numérique en forteresse.
Maintenant, quand tu vois un service SSH, tu ne vois plus juste un accès distant. Tu vois :
• Les algorithmes de chiffrement qui protègent la conversation
• Les clés asymétriques qui prouvent l'identité
• Les règles d'accès qui limitent les permissions
• Les logs de sécurité qui tracent chaque mouvement
Cette semaine, tu as appris à durcir. Tu comprends maintenant :
• Pourquoi SSH avec mot de passe est comme une porte avec serrure transparente
• Pourquoi FTP est comme crier ses secrets dans un couloir
• Pourquoi chaque paramètre de configuration compte
• Pourquoi la sécurité n'est pas un état, mais un processus
Tu as développé le huitième sens du Gardien système : la capacité à sentir les configurations faibles, à anticiper les attaques, à construire des défenses résilientes.
Dans la semaine 10, nous passerons des services individuels à l'architecture réseau complète. Nous apprendrons à segmenter, à isoler, à contrôler les flux entre les services.
Mais désormais, tu as une compétence fondamentale : tu sais sécuriser les accès. Et en cybersécurité, sécuriser les accès, c'est contrôler qui entre et qui sort.
Pratique. Durcis. Surveille. Chaque service que tu sécurises est une porte que tu sais garder.
Tu n'es plus un simple utilisateur des services. Tu es devenu leur protecteur.
— Platon-Y