Sistema operatiu: Ubuntu 24.04 LTS
Tens una aplicació en un servidor domèstic (o de desenvolupament) que necessita enviar correus transaccionals — confirmacions de registre, notificacions, etc. — però no vols muntar tota la infraestructura de correu (DKIM, SPF, reputació IP) en aquell servidor. La solució és fer que els correus surtin pel teu servidor de producció, que ja té tot això configurat, a través del túnel WireGuard que ja tens entre els dos.
Prerequisits
- Servidor A: el servidor domèstic o de dev, amb Ubuntu 24.04, Postfix instal·lat i accés a internet limitat (ISP residencial o similar).
- Servidor B: el servidor de producció, amb Postfix + Dovecot funcionals, DKIM/SPF/DMARC configurats, i IP de datacenter amb bona reputació.
- Túnel WireGuard actiu entre tots dos. En aquest exemple, el servidor A té la IP
10.0.0.2dins el túnel.
Si el servidor A no té Postfix instal·lat:
sudo apt install postfix libsasl2-modules
Al diàleg d’instal·lació, tria Satellite system.
Configuració del servidor A (el que envia)
Forçar IPv4
Les connexions domèstiques sovint no tenen IPv6. Si és el cas, Postfix ho intentarà igualment i fallarà amb Network is unreachable. Cal forçar-lo explícitament:
sudo postconf -e "inet_protocols = ipv4"
sudo postconf -e "smtp_address_preference = ipv4"
Configurar el relay
sudo postconf -e "myhostname = dev.exemple.cat"
sudo postconf -e "myorigin = exemple.cat"
sudo postconf -e "relayhost = [exemple.cat]:587"
sudo postconf -e "inet_interfaces = loopback-only"
sudo postconf -e "mydestination = "
sudo postconf -e "smtp_tls_security_level = may"
inet_interfaces = loopback-only és important: fa que Postfix només escolti connexions locals i no estigui exposat a internet. mydestination buit evita que Postfix intenti entregar correus localment.
Actualitza també el mailname:
echo "exemple.cat" | sudo tee /etc/mailname
Reinicia
sudo systemctl restart postfix
Configuració del servidor B (el que fa de relay)
L’única cosa que cal fer aquí és afegir la IP WireGuard del servidor A a mynetworks, que és la llista de xarxes de confiança des de les quals Postfix accepta correus sense autenticació.
Primer comprova el valor actual per no perdre res:
sudo postconf mynetworks
Afegeix la IP del servidor A al resultat anterior:
sudo postconf -e "mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 10.0.0.2/32"
Adapta-ho al valor que hagis vist — el que importa és afegir 10.0.0.2/32 (o la IP que tingui el teu servidor A dins el túnel).
sudo systemctl reload postfix
No cal tocar Dovecot ni crear usuaris nous. El relay funciona per confiança de xarxa, no per autenticació.
Prova
Des del servidor A:
echo "Prova de relay" | mail -s "Test" tu@exemple.cat
sudo tail -20 /var/log/mail.log
Has de veure alguna cosa com:
status=sent (250 2.0.0 Ok: queued as XXXXXXX)
Si apareix Network is unreachable: comprova que inet_protocols = ipv4 està aplicat i que has reiniciat Postfix.
Si apareix relay=none: revisa que relayhost estigui ben configurat.
Configuració de l’aplicació
Un cop funciona, l’aplicació simplement apunta a localhost:25 sense autenticació:
MAIL_SERVER=localhost
MAIL_PORT=25
MAIL_FROM=noreply@exemple.cat
Postfix s’encarrega de tot el rest.
Per què funciona
El correu surt del servidor A cap al servidor B a través del túnel WireGuard (xifrat). El servidor B el rep com si vingués d’una IP de la xarxa de confiança i l’entrega a internet amb el seu DKIM i des de la seva IP de datacenter, que ja té bona reputació. El servidor A no és accessible des de l’exterior per SMTP, i el servidor B només accepta relay des de la IP WireGuard, no des d’internet en general.
És una configuració senzilla però robusta per a entorns on tens un servidor de producció ben configurat i vols reutilitzar-ne la infraestructura de correu des d’altres màquines de la mateixa xarxa privada.