Envio de correo con Amazon Simple Email Services (AWS SES) y Postfix

Para enviar correo desde una instancia de Amazon, una opción es contratar Amazon Simple Email Services (SES). Para utilizar esta plataforma, debemos realizar una serie de cambios en nuestro equipo y solicitar verificación de los emails que originan los mensajes. Vamos a ello.

Lo primero que debemos hacer es bajar los scripts de Amazon SES (url externa de Amazon)

Una vez los tengamos en nuestra máquina, debemos descomprimirlos en un directorio, por ejemplo /usr/local/bin

Despues deberemos logarnos en nuestra cuenta de Amazon AWS (http://aws.amazon.com/es/account/) y procederemos a ir al enlace que pone Account arriba del todo.
Una vez hecho esto, haremos click en el apartado Credenciales de seguridad, que nos llevará a una página en la que disponemos de acceso a las claves de usuario propias de la API de amazon. Buscamos el apartado «Credenciales de Seguridad» de nuevo, y veremos 3 pestañas:

– Claves de Acceso
– Credenciales X.509
– Pares de Claves

La que nos interesa es la primera, claves de acceso. Vamos a crear un archivo en nuestra instancia AWS llamado, por ejemplo /etc/acceso-api-aws y dentro pondremos:

AWSAccessKeyId=ID de clave de acceso <- Esta la tenemos visible en la web en donde he indicado
AWSSecretKey=Clave de acceso secreta <- Esta la obtenemos al lado de ese panel, donde pone "pulsar para mostrar"

Una vez tenemos el archivo en su sitio, haremos que perteneza a un usuario sin privilegios y le daremos acceso de lectura para este usuario

chown usuariosinpriv:usuariosinpriv /etc/acceso-api-aws
chmod 400 /etc/acceso-api-aws

Para poder usar el servicio de envío de correo de Amazon, necesitamos dar de alta los remitentes de los correos. En mi caso suelo necesitar enviar correos desde una dirección tipo webmaster@dominio.tld, así que iremos a ello

Dar de alta un remitente en Amazon SES
Recordemos en que ruta teníamos los scripts de Amazon SES y ejecutaremos lo siguiente:

ses-verify-email-address.pl -k /etc/acceso-api-aws -v usuario@dominio.tld

Yo en usuario@dominio.tld pongo normalmente webmaster@dominio.loquesea, ya que es como envío los emails desde las webs.
El proceso de verificación tiene dos partes: La solicitud que acabamos de cursar y la verificación de el email. Nos enviarán desde Amazon SES un email con un link que deberemos pulsar para validar el remitente.

El siguiente paso será modificar parte de la configuración de postfix para poder usar Amazon SES como servicio SMTP. En /etc/postfix/master.cf, añadiremos estas dos lineas:

aws-email  unix  -       n       n       -       -       pipe
[2espacios]flags=R user=USUARIOSINPRIVS argv=/usr/local/bin/ses-send-email.pl -r -k /etc/acceso-api-aws -e https://email.us-east-1.amazonaws.com -f ${sender} ${recipient}

Debemos cambiar el USUARIOSINPRIVS que está en negrita por el que hemos usado anteriormente para el archivo de las credenciales. También hay que tener MUY PRESENTE que delante de «flags» hay 2 espacios!!! (sustituir [2 espacios] por 2 espacios reales)

Ahora tenemos un problema. El servidor web nos generará (yo uso ubuntu o debian) los emails con remitente www-data. Este remitente no es válido para AWS, porque hemos dado de alta webmaster@dominio en vez de www-data@dominio, con lo que vamos a hacer un poco de address rewriting en Postfix para poder cambiar el email de origen de www-data a lo que necesitamos.

Crearemos un archivo /etc/postfix/canonical y dentro meteremos la siguiente línea:

www-data webmaster@javierin.com

Ahora editamos /etc/postfix/main.conf y agregamos esta línea:

canonical_maps = hash:/etc/postfix/canonical

Finalmente ejecutamos

postmap /etc/postfix/canonical

y reiniciamos postfix con

service postfix reload

Con esto, si hemos seguido los pasos bien, deberíamos tener una instancia en Amazon capaz de enviar emails usando Amazon SES usando Postfix.