Sistemes - SMTP - Tutorials - Ubuntu - WireGuard - Xarxa

Relay de correu sortint via WireGuard amb Postfix

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.2 dins 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.

Avatar photo

De vegades escric tutorials

Deixa un comentari

L'adreça electrònica no es publicarà. Els camps necessaris estan marcats amb *