Outils pour utilisateurs

Outils du site


Panneau latéral

linux:smtp (lu 13 fois)

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:<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>&-

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.
linux/smtp.txt · Dernière modification : de edmc73