Tutorial: Instalando Postfix, Dovecot y OpenDKIM (Di Hola al Inbox en Outlook) CentOS 6 y 7

  • Autor Autor BryCom
  • Fecha de inicio Fecha de inicio
B

BryCom

Beta
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
En este tutorial vamos a aprender a instalar OpenDKIM, Postfix y Dovecot en nuestro servidor basado en el sistema Operativo CentOS 6 y 7 y no solo eso, lean con atención por que aquí también aprenderemos a hacer que nuestros mensajes no vuelvan a caer mas en la bandeja de Spam de cualquier proovedor de correo electrónico con tal de seguirme al pie de la letra.

Aparte aprenderemos también a darnos cuenta cuando un IP esta en listas negras, unos consejos que le voy a dar sobre ciertas cosas y como proceder a sacar las IP's de las listas negras en las que esta afiliada por parte del proveedor y de una existencia antigua. Finalmente para comenzar también les mostrare como unirse a listas blancas.

Cualquier error, pregunta, dudas, problemas, etc, responder al tema o mandarme un mensaje privado!

Presten mucha atención y comencemos...

- A tener en cuenta, el IP principal del servidor tiene que tener correctamente configurado el Reverse DNS, en otras palabras el rDNS, por lo cual deberemos de ir al panel de nuestro proveedor en el que administramos los VPS/Dedicados y deberemos de actualizar el rDNS del IP principal del servidor por el Hostname que actualmente tiene puesto si no pues esto de que el IP tenga un Reverse DNs no valido puede afectar al IP al momento de enviar mensajes o inclusive puede que muchas listas negras tomen en cuenta este aspecto aparte de que asi las formula de evitar que los mensajes lleguen en Inbox siempre, no estaria garantizado del funcionamiento correspondiente.

1. Vamos a instalar Nano y los Repositorios Epel

- Bueno el editor Nano es mi preferido pero si ya tienen experiencia en usar otros pues bien.


Insertar CODE, HTML o PHP:
yum install nano epel-release -y
yum upgrade -y

- Vamos a eliminar cualquier otro proveedor de correo o cosas que puedan interferir.

Insertar CODE, HTML o PHP:
yum remove postfix* sendmail* dovecot* exim* -y

2. Vamos a consultar el ".arpa" con IntoDNS

- Cambiamos ejemplo por el dominio que ya tenemos alojado en el Servidor.

- Luego buscamos presionando F3 en su navegador o de la forma en la que aparezca el cuadro de búsqueda para usted buscar contenido en la misma pagina, escribimos en la búsqueda en pagina .arpa y inmediatamente le llevara abajo del Sitio Web directamente donde esta el ".arpa" que corresponde al IP del Servidor que esta configurado con el Sitio Web que tienes alojado en dicho servidor.


Insertar CODE, HTML o PHP:
intodns.com/EJEMPLO.COM

Ejemplo del ".arpa" de ForoBeta

Insertar CODE, HTML o PHP:
80.62.7.198.in-addr.arpa ->  mail.forobeta.com

- El "80.62.7.198.in-addr.arpa" es lo que vamos a tener en cuenta por que lo vamos a usar en el siguiente paso.

- Si por casualidad no aparece el ".arpa" ya sea por que no has configurado los Registros MX.


Insertar CODE, HTML o PHP:
yum install bind-utils -y

- Y ahora ponemos. Cambiamos los 0.0.0.0 por la IP del servidor.

Insertar CODE, HTML o PHP:
host 0.0.0.0

3. Agregando el ".arpa" al named.conf

Insertar CODE, HTML o PHP:
nano /etc/named.conf

- Vamos a buscar la siguiente linea.

Insertar CODE, HTML o PHP:
include "/etc/named.rf

- Arriba de la linea, oseas antes de esta vamos a pegar lo siguiente.

Insertar CODE, HTML o PHP:
zone "" IN {
        type master;
        file "";
        allow-update { none; };
};

- Ahora vamos a agregar el ".arpa" adentro de las entre comillas de zone "" y por igual en file, aunque en file, vamos a agregarle .db al final o .zone como ustedes tengan configurado los zones mas arriba si terminan en .db o en .zone. Y debería de quedar de la siguiente manera.

Ejemplo

Insertar CODE, HTML o PHP:
zone "0.0.0.0.in-addr.arpa" IN {
        type master;
        file "0.0.0.0.in-addr.arpa.db";
        allow-update { none; };
};

- Guardamos, "CTRL + O + ENTER".

- Luego, como ejemplo.


Insertar CODE, HTML o PHP:
nano /var/named/0.0.0.0.in-addr.arpa.db

- Recuerden que es su .arpa que vamos a editar, crear la zona y luego guardarla, no el ejemplo con todo y 0.0.0.0.

- Pegamos.


Insertar CODE, HTML o PHP:
$TTL 30
@ 30 IN SOA ns1.ejemplo.com. correo.ejemplo.com. (
2014120104;
2000;
300;
1209600;
300);
0.0.0.0.in-addr.arpa. 30 IN NS ns1.ejemplo.com.
0.0.0.0.in-addr.arpa. 30 IN NS ns2.ejemplo.com.
0.0.0.0.in-addr.arpa. IN MX 0 ns.ejemplo.com.
0.0.0.0.in-addr.arpa. 30 IN PTR ejemplo.com.
0.0.0.0.in-addr.arpa. 30 IN PTR www.ejemplo.com.
0.0.0.0.in-addr.arpa. 30 IN PTR ns.ejemplo.com.
0.0.0.0.in-addr.arpa. 30 IN PTR ns1.ejemplo.com.
0.0.0.0.in-addr.arpa. 30 IN PTR ns2.ejemplo.com.

- En lo que hemos pegado mas arriba vamos a cambiar los arpa por el nuestro incluyendo en el mismo orden, y los ejemplos por su dominio, finalmente ns1, ns2, son los dns y el ns sin números ese es el hostname del servidor que lo pueden cambiar por que es obligatorio.

- Una vez guardados los cambios y teniendo ya listo el ".arpa" debemos de actualizar el Registro MX por el Hostname del servidor, vamos a editar el archivo zone de nuestro dominio y cambiar el mx al hostname del servidor.


Insertar CODE, HTML o PHP:
nano /var/named/ejemplo.com.db

- Se podría parecer a este.

Insertar CODE, HTML o PHP:
ejemplo.com. IN MX 0 mail.ejemplo.com.

- Cambiamos donde dice mail.eldominio, por el Hostname del servidor incluyendo el punto al final.

- Y luego agregamos las siguientes lineas.


Insertar CODE, HTML o PHP:
ejemplo.com. IN TXT "v=spf1 +a +mx +ip4:0.0.0.0 ~all"
ejemplo.com. IN TXT "v=DMARC1; p=none; rua=mailto:correo@ejemplo.com"

- En las lineas que agregamos arriba vamos a cambiar los 0.0.0.0 por el IP del servidor y el correo por el nuestro, el ejemplo por el dominio y luego guardamos para seguir procediendo mas a fondo con la instalación de los componentes necesarios.

- Estas lineas que agregamos y todo el movimiento de los ".arpa" son objetivo principal por el cual si nuestro servidor no tiene esto bien configurado los mensajes de manera inmediata y obvia se dirigen a la bandeja de mensajes no deseados en proveedores como Outlook & Hotmail.

- Concluimos.


Insertar CODE, HTML o PHP:
service named restart

- Editamos el HOSTS.

Insertar CODE, HTML o PHP:
nano /etc/hosts

- Agregamos la siguiente linea abajo del 127.0.0.1, sin borrar nada claro!, y cambian en el mismo orden por el IP del servidor y el arpa.

Insertar CODE, HTML o PHP:
1.2.3.4 0.0.0.0.in-addr.arpa

- Finalizamos.

Insertar CODE, HTML o PHP:
service network restart

4. Instalando Postfix y Dovecot

Insertar CODE, HTML o PHP:
yum install postfix dovecot -y

-Ahora eliminaremos los siguientes archivos por que yo ya pre configure todo.

Insertar CODE, HTML o PHP:
rm -rf /etc/postfix/virtual
rm -rf /etc/postfix/main.cf
rm -rf /etc/postfix/master.cf
rm -rf /etc/dovecot/dovecot.conf
rm -rf /etc/dovecot/conf.d/10-auth.conf
rm -rf /etc/dovecot/conf.d/10-mail.conf
rm -rf /etc/dovecot/conf.d/10-master.conf
rm -rf /etc/dovecot/conf.d/10-ssl.conf

- Luego comenzaremos a pegar, con sus correspondientes archivos.

Por motivos que el foro permite solo 30 mil caracteres, y yo intente cargar unos 120 mil caracteres con estos códigos he decidido subirlos a Hastebin y Pastebin por que no caben en el tema jejeje.

nano /etc/postfix/virtual

Insertar CODE, HTML o PHP:
@ejemplo.com USUARIO
@ns.ejemplo.com USUARIO
@ns1.ejemplo.com USUARIO
@ns2.ejemplo.com USUARIO
 [MENTION=73732]localhost[/MENTION] USUARIO

nano /etc/postfix/main.cf

hastebin (ACTUALIZADO)
main.cf - Pastebin.com (Es el mismo, solo es por si borran uno) (ACTUALIZADO)

nano /etc/postfix/master.cf

hastebin
master.cf - Pastebin.com (Es el mismo, solo es por si borran uno)

nano /etc/dovecot/dovecot.conf

hastebin
http://pastebin.com/HRbLDd3U (Es el mismo, solo es por si borran uno)

nano /etc/dovecot/conf.d/10-auth.conf

http://hastebin.com/oderuladuz.vala
http://pastebin.com/WD9KXvX9 (Es el mismo, solo es por si borran uno)

nano /etc/dovecot/conf.d/10-mail.conf

http://hastebin.com/nitodunusa.vhdl
http://pastebin.com/zCyjJu90 (Es el mismo, solo es por si borran uno)

nano /etc/dovecot/conf.d/10-master.conf

http://hastebin.com/ocaqofalux.cs
http://pastebin.com/paqdjr6t (Es el mismo, solo es por si borran uno)

nano /etc/dovecot/conf.d/10-ssl.conf

http://hastebin.com/orowajobap.vala
http://pastebin.com/0GVCjyPt (Es el mismo, solo es por si borran uno)

- Creamos un usuario para el correo. Cambiar usuario por el usuario.

Insertar CODE, HTML o PHP:
useradd -m USUARIO -s /sbin/nologin

- Establecemos una contraseña a ese usuario.

Insertar CODE, HTML o PHP:
passwd USUARIO

- Abrimos.

Insertar CODE, HTML o PHP:
nano /etc/postfix/virtual

Insertar CODE, HTML o PHP:
@ejemplo.com USUARIO
@ns.ejemplo.com USUARIO
@ns1.ejemplo.com USUARIO
@ns2.ejemplo.com USUARIO
 [MENTION=73732]localhost[/MENTION] USUARIO

- Abrimos.

Insertar CODE, HTML o PHP:
nano /etc/postfix/main.cf

- Buscamos y corregimos, por nuestro dominio etc en el mismo orden.

Insertar CODE, HTML o PHP:
virtual_alias_domains = ejemplo.com ns.ejemplo.com ns1.ejemplo.com ns2.ejemplo.com localhost

- Buscamos y corregimos por el Hostname.

Insertar CODE, HTML o PHP:
myhostname = ns.ejemplo.com

- Buscamos y corregimos por el dominio.

Insertar CODE, HTML o PHP:
mydomain = ejemplo.com

- Guardamos y salimos, luego editamos.

Insertar CODE, HTML o PHP:
nano /etc/aliases

- Buscamos.

Insertar CODE, HTML o PHP:
# Person who should get root's mail
root:           USUARIO

- Cambiamos USUARIO por el usuario que habíamos de crear.

- Finalmente guardamos. Y ponemos a correr lo siguiente.


Insertar CODE, HTML o PHP:
service postfix start
newaliases
service postfix restart
service dovecot start
service named restart
postfix reload
postmap /etc/postfix/virtual
service postfix restart
service dovecot restart
chkconfig postfix on
chkconfig dovecot on

CentOS 7

Insertar CODE, HTML o PHP:
systemctl start postfix
newaliases
systemctl restart postfix
systemctl start dovecot
systemctl named restart
postfix reload
postmap /etc/postfix/virtual
systemctl restart postfix
systemctl restart dovecot
systemctl enable postfix.service
systemctl enable dovecot.service

- Concluimos.

Insertar CODE, HTML o PHP:
mkdir /home/USUARIO/Maildir
chmod 777 -R /home/USUARIO/Maildir

- Y ya tenemos nuestro correo funcionando, teniendo en cuenta que el nombre de usuario es el correo que vamos a utilizar para recibir los mensajes por USUARIO@ejemplo.com, al igual que los mensajes enviados a direcciones erróneas por ejemplo abc@ejemplo.com serán dirigidos al USUARIO al igual también que los mensajes del sistema enviados a root.

Inclusive ya pueden entrar a sus correos usando el puerto 143 para IMAP y 3777 para el SMTP desde cualquier cliente de correo para probar, aunque si no les llega en recibidos es por que aun nos falta un paso mas y como mono para el regalo los consejos que debemos tomar en cuenta.

5. A instalar OpenDKIM (Es muy importante)

- De nuevo actualizando el sistema e instalando Screen.


Insertar CODE, HTML o PHP:
yum upgrade -y
yum install screen -y

- Corriendo Screen.

Insertar CODE, HTML o PHP:
screen -U -S opendkim-screen

- Instalando OpenDKIM (Recuerda cambiar el ejemplo).

Insertar CODE, HTML o PHP:
yum install opendkim -y
export domain=ejemplo.com
mkdir /etc/opendkim/keys/$domain
cd /etc/opendkim/keys/$domain
opendkim-genkey -d $domain -s default
chown -R opendkim:opendkim /etc/opendkim/keys/$domain
echo "default._domainkey.$domain $domain:default:/etc/opendkim/keys/$domain/default.private" >> /etc/opendkim/KeyTable
echo "*@$domain default._domainkey.$domain" >> /etc/opendkim/SigningTable

- Gracias al código anterior me he ahorrado cientos de lineas, una vez corridos todos en orden vamos a lo siguiente.

- Eliminamos.


Insertar CODE, HTML o PHP:
rm -rf /etc/opendkim.conf

- Creamos.

Insertar CODE, HTML o PHP:
nano /etc/opendkim.conf

- Pegamos y cambiamos ejemplo.com por nuestro dominio.

Insertar CODE, HTML o PHP:
PidFile /var/run/opendkim/opendkim.pid
Mode    sv
Syslog  no
SyslogSuccess   no
LogWhy  no
UserID  opendkim:opendkim
Socket  inet:8891@localhost
Umask   002
Canonicalization        relaxed/relaxed
Domain ejemplo.com
Selector        default
MinimumKeyBits 1024
KeyFile /etc/opendkim/keys/default.private
KeyTable        /etc/opendkim/KeyTable
SigningTable    refile:/etc/opendkim/SigningTable
#ExternalIgnoreList     refile:/etc/opendkim/TrustedHosts
InternalHosts   refile:/etc/opendkim/TrustedHosts

- Ahora vamos a editar el TrustedHosts.

Insertar CODE, HTML o PHP:
nano /etc/opendkim/TrustedHosts

- Agregamos al final de todo y cambiamos los ejemplos.

Insertar CODE, HTML o PHP:
ns.ejemplo.com
192.168.1.0/24
192.168.0.0/24
ejemplo.com
ns1.ejemplo.com
ns2.ejemplo.com
*.ejemplo.com

- Finalmente guardamos.

Insertar CODE, HTML o PHP:
service opendkim restart

- Esto que acabamos de hacer es instalar un generador de firmas validas para los mensajes que enviamos por que esto es una de las cosas principales de la cual si nuestro sitio web no dispone de una firma valida el mensaje puede tener el riesgo de llegar en Spam, las firmas son firmas seguras que confirman que lo envían de maneras autorizada y supervisada y genera confianza en servidores de correo.

6. A firmar mensajes por ultimo

cat /etc/opendkim/keys/$domain/default.txt >> /var/named/ejemplo.com.db (ya saben lo que deben de poner).


- Y para implementarla a cada una de sus respectivas zonas vamos a agregarlas a loz zones de los dominios.

Ejemplo

Insertar CODE, HTML o PHP:
nano /var/named/ejemplo.com.db (o posiblemente .zone en vez de .db)

- Este código de ejemplo.

Insertar CODE, HTML o PHP:
default._domainkey      IN      TXT     ( "v=DKIM1; k=rsa; "
          "p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDFjvqmRgAP+AtMycF4XklZLguKcqxKnq9c3R6McE86fRBFMYpxfoqzSKeIHYwlfcy13Dsn5EHxucnC6SFFphBeuUs5DdUCciJkQJ8CPOyBfogZslz6haAjAB0Ov1Mb+gbLU2/VekYVP5GYb8OtKXp60VkMkVqeza7B2KKA06Pa9wIDAQAB" )  ; ----- DKIM key default for ejemplo.com

- Lo vamos a poner de ultimo reflejándose de la siguiente manera.

Insertar CODE, HTML o PHP:
default._domainkey IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDFjvqmRgAP+AtMycF4XklZLguKcqxKnq9c3R6McE86fRBFMYpxfoqzSKeIHYwlfcy13Dsn5EHxucnC6SFFphBeuUs5DdUCciJkQJ8CPOyBfogZslz6haAjAB0Ov1Mb+gbLU2/VekYVP5GYb8OtKXp60VkMkVqeza7B2KKA06Pa9wIDAQAB;"

- Y finalmente guardamos el archivo zone ya sea .db o .zone. SI ya existe un default._domainkey en su archivo zone deben borrarlo y reemplazarlo por este pero solo el domainkey, no vayan a borrar otras cosas no vaya a ser y dejen el sitio sin funcionamiento.

- Activamos.


Insertar CODE, HTML o PHP:
chkconfig opendkim on
service opendkim restart
service named reload

CentOS 7

Insertar CODE, HTML o PHP:
systemctl enable opendkim.service
systemctl restart opendkim.service

Terminando el tema

Yo les puedo garantizar que de ahora en adelante los mensajes van a llegar en recibidos y no mas en Spam en ningún otro proveedor a no ser que la IP tenga una mala reputación o a no ser que este en listas negras a los que haya que limpiar y esperar cierto tiempo. También es muy recomendable unirse a programas como "Smart Network Data Services" de Microsft presentado en el siguiente enlace https://postmaster.live.com/snds/ acceder con su cuenta de Outlook & Hotmail y agregar su IP a este servicio lo cual es de manera gratuita y no demora mas que segundos y una confirmación.

Listas negras

Es recomendable revisar su el IP esta metido en listas negras por parte de que ya otra persona en el pasado la uso para mal, por lo cual ustedes lo pueden hacer consultando la IP en el siguiente enlace http://multirbl.valli.org/ es el único servicio que recomiendo que dispone de un numero de listas negras increíbles para analizar, ya después de ahí sabrán ustedes como la podrán sacar o retirar de ahí guiándose de las instrucciones de cada proveedor de DNSBL o alternativa.

Listas blancas

Es recomendable agregar su IP a listas blancas, pues las únicas que hasta el momento conozco es http://trmail.triumf.ca/cgi-bin/wbl/ esta http://mailhosts.org/ipwl/ y por ultimo http://www.dnswl.org/ que son las que agregan IP's de momento. Mas Whitelist's se pueden consultar también en el enlace que mencione en la parte de listas negras.

Consejos de envió de mensajes

No envíes mensajes sin establecer un nombre al remitente, osea tu correo tiene que tener un nombre formal o largo, ejemplo Equipo ForoBeta, Admin ForoBeta, o tu nombre por ej Carlos Arrelola, no debe contener campos como los de empresa que establecen los clientes de correo que a veces ponen "Empresa" y ese campo en realidad nunca es visualizado en los mensajes por lo cual se clasifica Spam, siempre redacta los mensajes en texto plano no en HTML y si tienes la obligación de redactar en HTML pues que tenga el menor consumo de códigos posible, por parte nunca redactes mensajes con títulos en mayúsculas, solo la inicial va en mayúsculas después no pongas mas nada en mayúscula por que puede ser considerado Spam, los mensajes no los redactes en mayúsculas tampoco pongas sub títulos mayúsculas por que se toman en cuenta, no incluyas a los mensajes palabras claves como Paypal, banco, entre otras que puedan ser clasificadas como Spam, palabras también como gratis, gratuito, o poner signos como !!!!, a ningún proveedor de correo le gustan las exageraciones son casi igual que las reglas del foro de ForoBeta que si no las cumples vas a Spam.

Por ultimo nunca envíes mensajes muy cortos siempre envía mensajes con títulos de mas de 10 dígitos, con contenido de 50 a 100 dígitos y no pongas enlaces en el mensaje, si es necesario incluirlos no le pongas el "http", has que el usuario tenga que copiarlo y pegarlo en el navegador, no le pongas a los títulos de los mensajes el nombre del sitio web y en los mensajes no incluyas el nombre del sitio web por que se puede tomar como Spam aunque no lo crean.

Ah, y no traten nunca de enviar mensajes usando como identificación una dirección de correo de un proveedor como gmail, yandex, yahoo, outlook, o hasta un dominio en otro servidor ni alternativa por que se puede tomar directamente y seriamente como falsificación de identidad y fraude.

CCO (Proteger la privacidad)

Siempre pon en CCO las direcciones a las que envías los mensajes, esto es forma de proteger la privacidad de todos los contactos a los cuales les envías mensajes y no solo eso, evitas problemas con las leyes de ciertos países y evitas que el mensaje sea tomado como Spam.

Certificado SSL

Es bueno que su servidor tenga un Certificado SSL instalado, mas adelante mostrare el como hacerlo!, esto da confianza en proveedores.

Ahora

Si el mensaje no llega en Inbox puede ser que el dominio sea muy nuevo (no tenga ni 15 o 30 días de registrado), lo hayas usado paras enviar mensajes no solicitados, algunas personas lo hayan marcado como spam ya los mensajes que envías entre otras razones pero este tema te garantiza totalmente que los mensajes llegaran al inbox sin problemas.

Muchísimas gracias por su atención,
Un saludo y pasen buenas.
 
Última edición:
Después de publicar este tutorial me han reportado muchos errores con el archivo main.cf en alguno servidores pero ya esta solucionado, he actualizado el tutorial por completo y he solucionado todos los problemas. :encouragement:

13/12/2014
 
Atrás
Arriba