En nuestra casa u oficina tenemos una conexión a Internet ADSL o por Cable, ahi mismo tenemos un servidor el cual diariamente ejecuta LogWatch para generar reportes de los logs de sistema y los envía al administrador por correo electrónico a una cuenta externa, por ejemplo: elmeildeladmin@hotmail.com.
El problema aquí es que las direcciones IP que asigna nuestro ISP aparece listadas en las listas negras de SPAM más usadas, por lo tanto, la mayoría de los dominios a quienes enviemos correo rechazarán nuestros correos (incluyendo hotmail) por proveenir de una direccion IP bloqueada.
Nosotros le podemos dar la vuelta al problema antes mencionado si utilizamos como servidor de salida a un servidor SMTP externo, por ejemplo en el servidor mail.dominioexterno.com ya nos crearon una cuenta y nos asignaron una contraseña para poder utilizarlo y hacer el relay, el problema aquí es que algunos proveedores de Internet (ISP) tiene bloqueada la salida del puerto 25 (incluyendo Telmex/Infinitum), puerto que por default utiliza el
protocolo SMTP. Para darle la vuelta a este problema, algunos administradores configuran un puerto adicional para el envío de correo o Submission, la mayoría de las veces utilizan el puerto TCP/587 como puerto alterno.
Configuraremos Postfix para que los correos salientes los envíe a traves de un servidor externo mail.dominioexterno.com en el cual ya tenemos una cuenta que nos permitirá el envío.
La cuenta para envío es:
Usuario SMTP: jorge@dominioexterno.com
Contraseña: 4llom3t0r3l4y
El servidor externo se llama smtp.dominioexterno.com y este servidor usa Autenticación SMTP (SMTP-AUTH) para autorizar el relay a los clientes.
Instalamos postfix, lo podemos hacer desde nuestro manejador de paquetes de la distribución. En Debian/Ubuntu instalamos el paquete postfix:
# aptitude install postfix
Despues agregamos las siguientes lineas al archivo /etc/postfix/main.cf
# vim /etc/postfix/main.cf
# Configuraciones para hacer relay por mail.dominioexterno.com en el puerto 587
# Especificamos la dirección del servidor y el puerto
relayhost = [mail.dominioexterno.com]:587
### Opciones de autenticación y seguridad para el cliente SMTP###
# Habilitamos la autenticación SASL para el cliente SMTP
smtp_sasl_auth_enable = yes
# Especificamos los metodos de seguridad para la autenticación
# del cliente SMTP
smtp_sasl_security_options = noanonymous
# Especificamos el archivo de mapas donde se encuentra la información
# para autenticarse al servidor mail.dominioexterno.com.
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
Guardamos el archivo main.cf y despues creamos el archivo /etc/postfix/sasl_passwd
# vim /etc/postfix/sasl_passwd
[mail.dominioexterno.com]:587 jorge@dominioexterno.com:4llom3t0r3l4y
Guardamos el archivo y configuramos los permisos de acceso apropiados para que solo el usuario root y grupo postfix puedan tener acceso a el:
# chown root:postfix /etc/postfix/sasl_passwd
# chmod 640 /etc/postfix/sasl_passwd
Ahora generamos el mapa:
# postmap /etc/postfix/sasl_passwd
Reiniciamos postfix:
# /etc/init.d/postfix restart
Probamos enviar un correo desde la consola:
# mail elmeildeladmin@hotmail.com
En los logs veremos:
postfix/pickup[4663]: BD7D82056: uid=0 from=<root>
postfix/cleanup[4671]: BD7D82056: message-id=<20081126182501.BD7D82056@server.dominiointerno.com>
postfix/qmgr[4667]: BD7D82056: from=<root@server.dominiointerno.com>, size=325, nrcpt=1 (queue active)
postfix/smtp[4673]: BD7D82056: to=<elmeildeladmin@hotmail.com>,
relay=mail.dominioexterno.com[61.65.151.233]:587, delay=0.4, delays=0.03/0.01/0.26/0.1, dsn=5.0.0
status=bounced (host mail.dominioexterno.com[61.65.151.233]:587 said: 554 <elmeildeladmin@hotmail.com>:
Relay access denied (in reply to RCPT TO command))
En este mensaje vemosque el servidor mail.dominioexterno.com no permite el relay a elmeildeladmin@hotmail.com, esto es debido a que el servidor mail.dominioexterno.com requiere que la autenticación sea establecida por un canal seguro, para eso el servidor cliente postfix debe de enviar el comando STARTTLS al servidor mail.dominioexterno.com para que se le permita el relay.
Para que el ciente SMTP utilice TLS agregaremos estas otas lineas al archivo main.cf
# El cliente smtp se autentica al servidor relay usando TLS (STARTTLS)
smtp_use_tls = yes
# No permitimos metodo de autenticación anonima para el cliente smtp/tls
smtp_sasl_tls_security_options = noanonymous
Reiniciamos postfix y al tratar de enviar de nuevo el correo veremos esto en los logs:
postfix/pickup[4768]: 8135E2056: uid=0 from=<root>
postfix/cleanup[4776]: 8135E2056: message-id=<20081126183105.8135E2056@server.dominiointerno.com>
postfix/qmgr[4772]: 8135E2056: from=<root@server.dominiointerno.com>, size=328, nrcpt=1 (queue active)
postfix/smtp[4778]: certificate verification failed for mail.dominioexterno.com[61.65.151.233]:587:
untrusted issuer /C=MX/ST=Mexico/L=Mexico DF/O=DOMINIOEXTERNO/CN=mail.dominioexterno.com/emailAddress=postmaster@dominioexterno.com
postfix/smtp[4778]: 8135E2056: to=<elmeildeladmin@hotmail.com>,
relay=mail.dominioexterno.com[61.65.151.233]:587, delay=1.2, delays=0.03/0.04/0.92/0.25, dsn=2.0.0,
status=sent (250 Ok: queued as 6336C27EC3B)
postfix/qmgr[4772]: 8135E2056: removed
Como podemos ver, ahora, despues de que postfix trata de validar el certificado del servidor mail.dominioexterno.com, el servidor ya nos permite hacer el relay y envia el correo al destinatario final.
Espero que este truco les sirva, incluso he usado gmail para enviar correos por los servidors de google
Saludos.