====== SMTP Serveur Centrale : Relais Postfix, Masquage IP & OpenDKIM ====== Ce tutoriel détaille la configuration d'une VM SMTP centrale sous Debian (IP publique : ''15.15.15.15''). Elle centralise les envois des VM du homelab via un réseau privé isolant, gère l'authentification externe, masque l'IP source résidentielle et signe les messages avec OpenDKIM. ===== 1. Architecture Réseau & Prérequis ===== * **Réseau privé (Proxmox vmbr1) :** Plage ''192.168.0.0/24'' * **VM SMTP (Centrale) :** ''192.168.0.10'' * **VM Clientes (Docker, dbackup...) :** Autorisées via leur IP privée sur le port 25 sans authentification. ===== 2. Installation de Postfix ===== Lancez l'installation : sudo apt update && sudo apt install -y postfix Lors des invites ''debconf'' (l'interface bleue), répondez : * **Type de configuration :** ''Site Internet'' * **Nom de courrier système :** ''smtp.mon-domaine.fr'' ===== 3. Configuration de Postfix (main.cf) ===== Éditez le fichier ''/etc/postfix/main.cf'' : sudo nano /etc/postfix/main.cf Remplacez ou ajustez les directives suivantes : # --- Écoute et Réseau --- inet_interfaces = all # Autoriser le localhost et tout le sous-réseau privé vmbr1 mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.0.0/24 # --- Règles de Relais --- smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, defer_unauth_destination # --- Routage Mailpit (Bounces) --- relay_domains = mon-domaine.fr transport_maps = hash:/etc/postfix/transport # --- Nettoyage des En-têtes (Anonymisation) --- header_checks = regexp:/etc/postfix/header_checks # --- Filtres Milter (OpenDKIM) --- smtpd_milters = local:opendkim/opendkim.sock non_smtpd_milters = local:opendkim/opendkim.sock milter_default_action = accept ===== 4. Anonymisation : Masquage de l'IP Source ===== Pour masquer l'IP publique résidentielle (ex: VotreBox) dans les en-têtes ''Received:'', créez le fichier ''header\_checks'' : sudo nano /etc/postfix/header_checks Ajoutez cette règle pour ignorer le premier saut de votre connexion domestique (si l'ip de votre box est 90.90.90.90 : /^Received: from .*(127\.0\.0\.1|90\.90\.90\.90)/ IGNORE ===== 5. Configuration d'OpenDKIM ===== ==== Installation ==== sudo apt install -y opendkim opendkim-tools ==== Configuration principale ==== Éditez ''/etc/opendkim.conf'' : sudo nano /etc/opendkim.conf Syslog yes RequiredHeaders yes UMask 002 Mode sv SubDomains no Socket local:/var/spool/postfix/opendkim/opendkim.sock KeyTable refile:/etc/opendkim/KeyTable SigningTable refile:/etc/opendkim/SigningTable ExternalIgnoreList refile:/etc/opendkim/TrustedHosts InternalHosts refile:/etc/opendkim/TrustedHosts ==== Tables de correspondances ==== Création du fichier **TrustedHosts** (IP de confiance autorisées à être signées) : sudo nano /etc/opendkim/TrustedHosts 127.0.0.1 localhost 192.168.0.0/24 Création du fichier **SigningTable** (Routage des adresses vers la clé racine) : sudo nano /etc/opendkim/SigningTable *@smtp.mon-domaine.fr default._domainkey.mon-domaine.fr *@mon-domaine.fr default._domainkey.mon-domaine.fr Création du fichier **KeyTable** (Emplacement de la clé privée) : sudo nano /etc/opendkim/KeyTable default._domainkey.mon-domaine.fr mon-domaine.fr:default:/etc/opendkim/keys/mon-domaine.fr/default.private ==== Génération de la clé DKIM ==== sudo mkdir -p /etc/opendkim/keys/mon-domaine.fr cd /etc/opendkim/keys/mon-domaine.fr sudo opendkim-genkey -s default -d mon-domaine.fr sudo chown -R opendkim:opendkim /etc/opendkim/keys ==== Liaison Postfix & Droits ==== Créez le dossier du socket dans le chroot de Postfix et ajoutez les permissions : sudo mkdir -p /var/spool/postfix/opendkim sudo chown opendkim:postfix /var/spool/postfix/opendkim sudo adduser postfix opendkim ===== 6. Finalisation et Redémarrage ===== Compilez la table de transport et relancez les services : sudo postmap /etc/postfix/transport sudo systemctl restart opendkim postfix ===== 7. Enregistrements DNS Publiques (Zone DNS) ===== Ajoutez ces trois entrées TXT chez votre registrar pour valider le combo SPF/DKIM/DMARC : ^ Type ^ Hôte / Nom ^ Valeur ^ | TXT | `@` | `v=spf1 ip4:15.15.15.15 ~all` | | TXT | `default._domainkey` | *(Contenu du fichier /etc/opendkim/keys/mon-domaine.fr/default.txt)* | | TXT | `_dmarc` | `v=DMARC1; p=quarantine; sp=REJECT;` | Testez la clé avec cette commande opendkim-testkey -d mon-domaine.fr -s default -vvv opendkim-testkey: using default configfile /etc/opendkim.conf opendkim-testkey: checking key 'default._domainkey.mon-domaine.fr' opendkim-testkey: key secure opendkim-testkey: key OK ===== 8. Tests et Débogage (Méthode Native Bash) ===== Si vous n'avez pas d'utilitaire comme ''nc'', ''telnet'' ou ''mailx'' installé sur une VM cliente (comme un conteneur Docker minimaliste), vous pouvez utiliser les descripteurs de fichiers natifs de Bash pour dialoguer directement avec le serveur SMTP. ==== Test d'ouverture de flux (Socket TCP) ==== Exécutez cette commande depuis n'importe quelle VM cliente pour vérifier si le port 25 répond : (true > /dev/tcp/192.168.0.10/25) && echo "Port Ouvert" || echo "Port Fermé" ==== Injection manuelle d'un e-mail en SMTP ==== Pour envoyer un e-mail complet en ligne de commande via `/dev/tcp`, ouvrez un descripteur de fichier (ici le numéro 3), injectez les commandes SMTP, puis fermez-le : # 1. Ouverture de la connexion sur le descripteur 3 exec 3<>/dev/tcp/192.168.0.10/25 # 2. Envoi du flux SMTP (adapter les adresses) echo -e "HELO ma-vm.local" >&3 echo -e "MAIL FROM:" >&3 echo -e "RCPT TO:" >&3 echo -e "DATA" >&3 echo -e "Subject: Test SMTP via /dev/tcp\n" >&3 echo -e "Ceci est un mail de test genere sans aucun outil tiers via le shell Bash." >&3 echo -e "." >&3 echo -e "QUIT" >&3 # 3. Fermeture du descripteur exec 3>&- ==== Analyse des logs en direct ==== Pendant l'envoi, surveillez le comportement du relais et d'OpenDKIM sur la **VM SMTP** : sudo journalctl -u opendkim -u postfix -f Une transaction réussie doit afficher : * ''milter ...: dkim_eom(): success'' -> OpenDKIM a correctement signé le message. * ''status=sent (250 2.0.0 OK ...)'' -> Google ou Mailpit a accepté le message.