Outils pour utilisateurs

Outils du site


Panneau latéral

linux:smtp (lu 50 fois)

**Ceci est une ancienne révision du document !**

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 headerchecks : <code> sudo nano /etc/postfix/header_checks </code> Ajoutez cette règle pour ignorer le premier saut de votre connexion domestique (si l’ip de votre box est 90.90.90.90 : <code> /^Received: from .*(127.0.0.1|90.90.90.90)/ IGNORE </code> ===== 5. Configuration d’OpenDKIM ===== ==== Installation ==== <code> sudo apt install -y opendkim opendkim-tools </code> ==== Configuration principale ==== Éditez /etc/opendkim.conf : <code> sudo nano /etc/opendkim.conf </code> <code ini> 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 </code> ==== Tables de correspondances ==== 1. Create du fichier TrustedHosts (IP de confiance autorisées à être signées) : <code> sudo nano /etc/opendkim/TrustedHosts </code> <code> 127.0.0.1 localhost 192.168.0.0/24 </code> 2. Création du fichier SigningTable (Routage des adresses vers la clé racine) : <code> sudo nano /etc/opendkim/SigningTable </code> <code> @smtp.mon-domaine.fr default.domainkey.mon-domaine.fr *@mon-domaine.fr default.domainkey.mon-domaine.fr </code> 3. Création du fichier KeyTable (Emplacement de la clé privée) : <code> sudo nano /etc/opendkim/KeyTable </code> <code> default._domainkey.mon-domaine.fr mon-domaine.fr:default:/etc/opendkim/keys/mon-domaine.fr/default.private </code> ==== Génération de la clé DKIM ==== <code> 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 </code> ==== Liaison Postfix & Droits ==== Créez le dossier du socket dans le chroot de Postfix et ajoutez les permissions : <code> sudo mkdir -p /var/spool/postfix/opendkim sudo chown opendkim:postfix /var/spool/postfix/opendkim sudo adduser postfix opendkim </code> ===== 6. Finalisation et Redémarrage ===== Compilez la table de transport et relancez les services : <code> sudo postmap /etc/postfix/transport sudo systemctl restart opendkim postfix </code> ===== 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; | ===== 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 : <code> (true > /dev/tcp/192.168.0.10/25) && echo “Port Ouvert” || echo “Port Fermé” </code> ==== 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 : <code> # 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:noreply@smtp.mon-domaine.fr” >&3 echo -e “RCPT TO:moi@mon-mail.com” >&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>&- </code> ==== Analyse des logs en direct ==== Pendant l’envoi, surveillez le comportement du relais et d’OpenDKIM sur la VM SMTP : <code> sudo journalctl -u opendkim -u postfix -f </code> Une transaction réussie doit afficher : * milter …: dkimeom(): success → OpenDKIM a correctement signé le message.

  • status=sent (250 2.0.0 OK …) → Google ou Mailpit a accepté le message.
linux/smtp.1779721098.txt.gz · Dernière modification : de edmc73