Table of Contents

Usar un servidor SMTP externo:

Genérico (comprobado Jazztel)

Fuente: http://www.howtoforge.com/postfix_relaying_through_another_mailserver
A veces nos rechazan los correos porque al tener IP dinámica entran en listas negras, etc…
Lo mejor es usar un servidor de correo externo SMTP, por ejemplo el que nos da nuestra conexión a internet.
Es lo que se llama relay en otro servidor:

1. Instalamos postfix y otras cosillas

sudo aptitude update; sudo aptitude install libauthen-sasl-perl libsasl2-2 libsasl2-modules postfix

2. Teclear 'y' + 'enter'

3. Teclear 'y' + 'enter'

4. Seleccionar 'sitio de internet', seleccionar 'aceptar' y pulsar 'enter'

5. Teclear el nombre que tendrá el remitente de los correos enviados desde esa máquina, seleccionar 'aceptar' y pulsar 'enter'

6. Por si las moscas desinstalamos (si lo estuviera) exim4

sudo aptitude purge exim4

7. Lanzamos los siguientes comandos:

sudo postconf -e 'relayhost = smtp.servidorexterno.es'
sudo postconf -e 'smtp_sasl_auth_enable = yes'
sudo postconf -e 'smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd'
sudo postconf -e 'smtp_sasl_security_options ='
sudo echo "smtp.servidorexterno.es usuario.subdominio.jazztel.es:contrasenya" > /etc/postfix/sasl_passwd 
sudo chown root:root /etc/postfix/sasl_passwd
sudo chmod 600 /etc/postfix/sasl_passwd
sudo postmap hash:/etc/postfix/sasl_passwd
sudo postmap /etc/postfix/sasl_passwd

NOTA es importante (al menos en gmail) que se especifique el usuario en el formato 'usuario@gmail.com'

NOTA2 cada vez que se cambie la contraseña (archivo /etc/postfix/sasl_passwd) hay que:

sudo postmap hash:/etc/postfix/sasl_passwd
sudo postmap /etc/postfix/sasl_passwd

Cuando enviemos un correo, por ejemplo desde la linea de comandos:

sudo aptitude install mailutils
echo "cuerpo del mensaje" | mail -s "asunto" cuenta@dominio.com

Podemos comprobar en el log:

clear && cat /var/log/mail.log | tail

Salida:

Nov 27 01:27:54 maquina postfix/pickup[4730]: 5655B3ED4: uid=0 from=<root> 
Nov 27 01:27:54 maquina postfix/cleanup[4819]: 5655B3ED4: message-id=<20081127002754.5655B3ED4@maquina> 
Nov 27 01:27:54 maquina postfix/qmgr[4731]: 5655B3ED4: from=<root@maquina>, size=316, nrcpt=1 (queue active) 
Nov 27 01:27:54 maquina postfix/smtp[4821]: 5655B3ED4: to=<cuenta@dominio.com>,relay=smtp.servidorexterno.es [62.14.3.192]:25, delay=0.45, delays=0.02/0.01/0.29/0.14, dsn=2.0.0, status=sent (250 OK id=1L5Udy-0000f3-Rx)
Nov 27 01:27:54 maquina postfix/qmgr[4731]: 5655B3ED4: removed 

Gmail

Receta usando puerto 587

Esta receta ha sido validada el 12/Septiembre/2013

1. Instalar paquetes:

sudo aptitude install libgnutls26 libauthen-sasl-perl libsasl2-2 libsasl2-modules postfix

2. Editar:

sudo cp /etc/postfix/main.cf /etc/postfix/main.cf.bak
sudo vim /etc/postfix/main.cf

Con el siguiente contenido:

smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no

append_dot_mydomain = no

readme_directory = no

smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtp_tls_security_level = verify
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt

myhostname = test.example.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = test.example.com
relayhost = [smtp.gmail.com]:587
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options =

3. Editar:

sudo cp /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.bak
sudo vim /etc/postfix/sasl_passwd

Con el siguiente contenido:

[smtp.gmail.com]:587 user@gmail.com:cleartextpassword

4. Regenerar bas de datos de contrasenyas:

sudo postmap /etc/postfix/sasl_passwd

5. Recargar config de Postfix:

sudo postfix reload

Receta antigua

NOTA IMPORTANTE Desaconsejo esta opción, pues he detectado que cada x tiempo los correos no llegan, y es porque Gmail activa kaptcha para poder iniciar sesión con esa cuenta de correo.

Funciona.

Usuario:

nano /etc/postfix/sasl_passwd

Con la siguiente linea:

smtp.gmail.com usuario@gmail.com:contrasenya

Hay que editar:

nano /etc/postfix/main.cf

Y añadir/editar las siguientes lineas:

smtp_use_tls = yes
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous

Al menos tienen que estar presente las siguientes lineas:

smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous

Respecto al procedimiento anterior, dos diferencias:

1. Se necesita instalar un paquete adicional:

aptitude install libgnutls26

2. Detecto que cada X tiempo hay un error de autentificación. Si voy a la interfaz web, la contraseña es correcta, pero me pide un kaptcha, que al ser introducido, vuelve a dejar 'via libre' para el envío de correos desde linea de comandos.

Veamos en el log (/var/log/mail.info) dos ejemplos:

Correo no enviado por error de autentificación:

Mar 29 06:27:51 nombre_local postfix/qmgr[458]: 0EB085531B: from=<FaxMaster@dominio_local>, size=17250, nrcpt=1 (queue active)
Mar 29 06:27:51 nombre_local postfix/smtp[3379]: setting up TLS connection to smtp.gmail.com[74.125.79.109]:587
Mar 29 06:27:51 nombre_local postfix/smtp[3379]: certificate verification failed for smtp.gmail.com[74.125.79.109]:587: untrusted issuer /C=ZA/ST=Western Cape/L=Cape Town/O=Thawte Consulting cc/OU=Certification Services Division/CN=Thawte Premium Server CA/emailAddress=premium-server@thawte.com
Mar 29 06:27:51 nombre_local postfix/smtp[3379]: Untrusted TLS connection established to smtp.gmail.com[74.125.79.109]:587: TLSv1 with cipher RC4-MD5 (128/128 bits)
Mar 29 06:27:52 nombre_local postfix/smtp[3379]: 0EB085531B: SASL authentication failed; server smtp.gmail.com[74.125.79.109] said: 535-5.7.1 Username and Password not accepted. Learn more at                   ?535 5.7.1 http://mail.google.com/support/bin/answer.py?answer=14257 7sm3944467eyg.47
Mar 29 06:27:53 nombre_local postfix/smtp[3379]: setting up TLS connection to smtp.gmail.com[74.125.79.111]:587
Mar 29 06:27:53 nombre_local postfix/smtp[3379]: certificate verification failed for smtp.gmail.com[74.125.79.111]:587: untrusted issuer /C=ZA/ST=Western Cape/L=Cape Town/O=Thawte Consulting cc/OU=Certification Services Division/CN=Thawte Premium Server CA/emailAddress=premium-server@thawte.com
Mar 29 06:27:53 nombre_local postfix/smtp[3379]: Untrusted TLS connection established to smtp.gmail.com[74.125.79.111]:587: TLSv1 with cipher RC4-MD5 (128/128 bits)
Mar 29 06:27:54 nombre_local postfix/smtp[3379]: 0EB085531B: to=<cuenta@dominio.com>, relay=smtp.gmail.com[74.125.79.111]:587, delay=248170, delays=248167/0.01/2.7/0, dsn=4.7.1, status=deferred (SASL authentication failed; server smtp.gmail.com[74.125.79.111] said: 535-5.7.1 Username and Password not accepted. Learn more at                   ?535 5.7.1 http://mail.google.com/support/bin/answer.py?answer=14257 10sm3981758eyd.3)

Correo enviado correctamente:

Apr  3 09:45:02 nombre_local postfix/pickup[28227]: 41FB3550EB: uid=10 from=<FaxMaster>
Apr  3 09:45:02 nombre_local postfix/cleanup[28307]: 41FB3550EB: message-id=<20090403074502.41FB3550EB@nombre_local.localdomain>
Apr  3 09:45:02 nombre_local postfix/qmgr[458]: 41FB3550EB: from=<FaxMaster@nombre_local.localdomain>, size=1305, nrcpt=1 (queue active)
Apr  3 09:45:02 nombre_local postfix/smtp[28309]: setting up TLS connection to smtp.gmail.com[72.14.221.109]:587
Apr  3 09:45:02 nombre_local postfix/smtp[28309]: certificate verification failed for smtp.gmail.com[72.14.221.109]:587: untrusted issuer /C=ZA/ST=Western Cape/L=Cape Town/O=Thawte Consulting cc/OU=Certification Services Division/CN=Thawte Premium Server CA/emailAddress=premium-server@thawte.com
Apr  3 09:45:02 nombre_local postfix/smtp[28309]: Untrusted TLS connection established to smtp.gmail.com[72.14.221.109]:587: TLSv1 with cipher RC4-MD5 (128/128 bits)
Apr  3 09:45:05 nombre_local postfix/smtp[28309]: 41FB3550EB: to=<cuenta@dominio.com>, relay=smtp.gmail.com[72.14.221.109]:587, delay=3.1, delays=0.05/0.01/1.5/1.6, dsn=2.0.0, status=sent (250 2.0.0 OK 1238744926 d6sm3590039fga.17)
Apr  3 09:45:05 nombre_local postfix/qmgr[458]: 41FB3550EB: removed

Hay que ir revisando este tema

Ejemplo de /etc/postfix/main.cf

# See /usr/share/postfix/main.cf.dist for a commented, more complete version


# Debian specific:  Specifying a file name will cause the first
# line of that file to be used as the name.  The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h

readme_directory = no

# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.

myhostname = peluca
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination = peluca, servidor, localhost.localdomain, localhost
relayhost = smtp.gmail.com:587

#mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.1.2
mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = ipv4
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous

Errores

1. *Puerto okupado*

Vemos en el log (/var/log/mail.log) lo siguiente:

Aug 11 13:33:20 hp7700 postfix/master[30926]: fatal: bind 0.0.0.0 port 25: Address already in use

Diagnóstico: tenemos un residuo por ahí escuchando en el puerto 25. Veamos:

lsof -i :25
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sendmail- 3644 root    4u  IPv4   9361      0t0  TCP localhost:smtp (LISTEN)

Solución:

1. Mato el proceso:

kill -9 3644

2. Reinicio postfix:

/etc/init.d/postfix restart

3. Compruebo:

lsof -i :25
COMMAND   PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
master  31025 root   12u  IPv4 1401587      0t0  TCP *:smtp (LISTEN)

2. Usuario incorrecto o kaptcha

Jan 18 17:22:43 cntmalaga1 postfix/pickup[29942]: 1D968455AA: uid=1000 from=<usuario>
Jan 18 17:22:43 cntmalaga1 postfix/cleanup[29952]: 1D968455AA: message-id=<20110118162243.1D968455AA@cntmalaga.dyndns.org>
Jan 18 17:22:43 cntmalaga1 postfix/qmgr[29943]: 1D968455AA: from=<usuario@cntmalaga.dyndns.org>, size=335, nrcpt=1 (queue active)
Jan 18 17:22:44 cntmalaga1 postfix/smtp[29954]: certificate verification failed for smtp.gmail.com[209.85.227.109]:25: untrusted issuer /C=US/O=Equifax/OU=Equi
fax Secure Certificate Authority
Jan 18 17:22:47 cntmalaga1 postfix/smtp[29954]: 1D968455AA: to=<javi@legido.com>, relay=smtp.gmail.com[209.85.227.109]:25, delay=4.3, delays=0.02/0.03/4.2/0, d
sn=4.7.1, status=deferred (SASL authentication failed; server smtp.gmail.com[209.85.227.109] said: 535-5.7.1 Username and Password not accepted. Learn more at 
                  ?535 5.7.1 http://mail.google.com/support/bin/answer.py?answer=14257 t11sm3077219wes.17)
Jan 18 17:24:47 cntmalaga1 postfix/smtpd[29957]: connect from mail-wy0-f180.google.com[74.125.82.180]
Jan 18 17:24:47 cntmalaga1 postfix/smtpd[29957]: NOQUEUE: reject: RCPT from mail-wy0-f180.google.com[74.125.82.180]: 554 5.7.1 <afiliados@cntmalaga.dyndns.org>
: Relay access denied; from=<raba1981@gmail.com> to=<afiliados@cntmalaga.dyndns.org> proto=ESMTP helo=<mail-wy0-f180.google.com>
Jan 18 17:24:47 cntmalaga1 postfix/smtpd[29957]: disconnect from mail-wy0-f180.google.com[74.125.82.180]

3. No relay

TODO

Jan 18 17:38:25 cntmalaga1 postfix/smtpd[30532]: connect from mail-pv0-f180.google.com[74.125.83.180]
Jan 18 17:38:26 cntmalaga1 postfix/smtpd[30532]: NOQUEUE: reject: RCPT from mail-pv0-f180.google.com[74.125.83.180]: 554 5.7.1 <afiliados@cntmalaga.dyndns.org>: Relay access denied; from=<javilegido@gmail.com> to=<afiliados@cntmalaga.dyndns.org> proto=ESMTP helo=<mail-pv0-f180.google.com>
Jan 18 17:38:26 cntmalaga1 postfix/smtpd[30532]: disconnect from mail-pv0-f180.google.com[74.125.83.180]

Reenviar correo (relay) solo a determinadas direcciones

Escenario:

Servidor A con ip dinamica, una lista de correos instalada (milista) Servidor B con ip estatica

Problema:

Queremos usar Servidor B de relay, pero que solo envie correos a las direcciones contenidas en la lista de correos del Servidor A

Solucion:

Servidor A

1. Editar el archivo de configuracion de postfix:

sudo vim /etc/postfix/main.cf

Y poner el nombre de Servidor B como relay:

relayhost = servidorb.com

2. Reiniciar postfix:

sudo /etc/init.d/postfix restart

3. Sacar un listado de los usuarios que estan dados de alta en la lista 'milista'

sudo list_members mi_lista

La salida es algo asi:

cuenta1@hotmail.com
cuenta2@gmail.com

Servidor B

4. Crear un archivo que contenga los usuarios a los que servidorb SI reenviara los correos que le lleguen:

sudo vim /etc/postfix/destinos_permitidos

Con el siguiente contenido:

cuenta1@hotmail.com ok
cuenta2@gmail.com ok

5. Editar el archivo de configuracion de postfix:

sudo vim /etc/postfix/main.cf

Y anyadir la siguiente entrada:

smtpd_recipient_restrictions = hash:/etc/postfix/destinos_permitidos, reject

6. Generar el hash:

sudo postmap hash:/etc/postfix/destinos_permitidos 
sudo postmap /etc/postfix/destinos_permitidos

7. Reiniciar postfix:

sudo /etc/init.d/postfix restart

8. Probar. Desde Servidor A:

echo "cuerpo del mensaje" | mail -s "Prueba 1" cuenta1@hotmail.com

Ese correo deberia llegar a Servidor B, y este reenviarlo a cuenta1@hotmail.com

Errores

504 5.5.2

Ejemplo:

Apr 11 18:23:10 localhost postfix/smtp[8930]: 60AFB4258C: to=<javi@legido.com>, relay=mail.gandi.net[217.70.184.11]:587, delay=0.27, delays=0.01/0/0.14/0.12, dsn=5.5.2, status=bounced (host mail.gandi.net[217.70.184.11] said: 504 5.5.2 <ubuntu@localhost>: Sender address rejected: need fully-qualified address (in reply to RCPT TO command))

Quiza falta configuracion en el servidor, he seguido la receta de relay de gmail con 587, probar lo siguiente para el envio del correo de prueba desde linea de comandos:

echo "cuerpo del mensaje" | mail -s "postfix relay gandi 2" -a "From: tomegarbage@gmail.com" javi@legido.com