TUTORIAL: Instalación y configuración de Postfix/Dovecot en CentOS

Bienvenid@ a elRulo.com
Si todavía no es miembro de la comunidad, regístrese aquí
Registro

VJ_ZamO

Administrador
Miembro del Staff
Registrado
21 Mar 2011
Mensejes
2.759
Puntos de reacción
10
Puntos
38
<p>Hola a todos, en este tutorial vamos a explicar <strong>paso a paso cómo instalar y configurar el servidor de correo con Postfix/Dovecot para que funcione sobre una distribución CentOS de Linux</strong>.
<p>La mayor parte de las personas estamos familiarizados con el correo electrónico. Pero, <strong>¿qué ocurre exactamente cuando se envía un email desde un cliente de correo o MUA?</strong> El proceso no es complicado si tenemos claros unos cuantos conceptos.
<h4>Introducción al servidor de correo</h4>
<p>En primer lugar, el cliente de correo o MUA -Mail User Agent- (como puede ser el Thunderbird/MS Outlook) de la persona que envía el correo envía el email al servidor SMTP o MTA -Mail Transport Agent- correspondiente al usuario logueado con sus credenciales STMP en el MUA. Una vez el email está en este servidor SMTP “saliente”, el servidor comprueba a qué otro servidor SMTP tiene que enviar el correo consultando los registros MX mediante una consulta DNS. En este momento, este primer servidor SMTP envía el email al segundo servidor SMTP donde se encuentra el buzón de correo de la dirección de correo electrónico a la que iba dirigido el email. Finalmente, el cliente de correo o MUA de la persona a la que va dirigido el correo recupera el email del buzón de este segundo servidor SMTP.
<p><img title="Funcionamiento email SMTP POP IMAP" alt="Funcionamiento email SMTP POP IMAP" src="http://www.webstorebox.com/wp-content/uploads/2011/03/smtp_pop3_diagram1.jpg" width="262" height="242"><strong>Resumiendo</strong>:
<ol>
<li>El cliente de correo (MUA) “A” envía el email al servidor SMTP “1″.
<li>El servidor SMTP (MTA) “1″ comprueba los registros MX mediante una consulta DNS y envía el email al servidor SMTP (MTA) “2″, donde se encuentra el buzón de correo de la persona a la que va dirigida el correo electrónico.
<li>El servidor SMTP (MTA) “2″ recibe el email y lo almacena en el buzón de correo electrónico del usuario correspondiente a la persona a la que va dirigido el correo electrónico.
<li>El cliente de correo (MUA) “B” recupera el email del buzón desde el servidor SMTP “2″ mediante IMAP o POP, permitiendo así la lectura del correo electrónico.</li></ol>
<p>Una vez introducidos los conceptos básicos del funcionamiento del correo electrónico, vamos a disponernos a instalar y configurar un servidor de correo nosotros mismos. Allá vamos.
<h4>Paso 1: Comprobar si los paquetes están ya instalados</h4>
<p>El primer paso que vamos a hacer es comprobar si los paquetes correspondientes están o no instalados en el sistema. Para esto instroducimos los siguientes comandos:</p><pre>$ sudo rpm -q postfix dovecot</pre>
<p>En caso de que los paquetes no estén instalados en el sistema se nos devolverá la siguiente salida:</p><pre>package postfix is not installed
package dovecot is not installed</pre>
<p>Bien, con esto hemos comprobado que <strong>los paquetes correspondientes a Postfix y Dovecot no están instalados en nuestro sistema Linux</strong>.
<h4>Paso 2: Instalación de los paquetes Postfix y Dovecot</h4>
<p>Una vez hecha la comprobación vamos a proceder a instalar los paquetes utilizando el <strong>gestor de paquetes yum</strong> de CentOS. Para esto introducimos los siguientes comandos:</p><pre>$ sudo yum install postfix dovecot</pre>
<p>Y pulsamos “y” cuando nos pregunte si queremos descargar los paquetes.
<p>El comando anterior nos instalará también las depencias en caso de que no las tengamos ya instaladas. Las dependencias de que se instalarán serán <em>mysql</em> y <em>perl-DBI</em>.
<h4>Paso 3: Seleccionar Postfix como MTA por defecto</h4>
<p>Ahora necesitamos decirle a CentOS que Postfix es el MTA por defecto, esto lo haremos empleando el comando <em>system-switch-mail</em> (conmutador del agente de transporte del correo). Introducimos el comando:</p><pre>$ sudo system-switch-mail-nox</pre>
<p>Si CentOS no ha encontrado el comando porque no está instalado el paquete, tendremos que instalarlo. Para esto, tendríamos que introducir los comandos:</p><pre>$ sudo yum install system-switch-mail
# ahora sí, ejecutaremos system-switch-mail exitosamente
$ sudo system-switch-mail-nox</pre>
<p>En la pantalla que nos saldrá, <strong>seleccionamos Postfix en lugar de Sendmail que es el MTA por defecto en CentOS</strong>. De esta forma, nuestro sistema CentOS empleará CentOS como MTA a partir de ahora.
<h4>Paso 4: Iniciar el servicio Postfix</h4>
<p>Iniciamos el servicio con el siguiente comando:</p><pre>$ sudo service postfix restart</pre>
<p>Con esto ya tenemos Postfix instalado e iniciado en nuestro servidor.
<h4>Paso 5: Logs de Postfix</h4>
<p>Podremos ver los logs que genera el servicio Postfix en el siguiente fichero:</p><pre>/var/log/maillog</pre>
<p>Podemos ver la actividad de los logs en tiempo real con los comandos tail y tail -f.</p><pre>$ sudo tail -f /var/log/maillog</pre>
<p>Para saber que Postfix se ha iniciado correctamente deben de aparecer las siguientes líneas en el log de postfix:</p><pre>Jan 9 12:12:44 localhost postfix/postfix-script: starting the Postfix mail system
Jan 9 12:12:44 localhost postfix/master[9379]: daemon started -- version 2.3.3, configuration /etc/postfix</pre>
<h4>Paso 6: Configuración de Postfix</h4>
<p>Los dos archivos principales de configuración de Postfix son los siguientes:</p><pre>/etc/postfix/main.cf
/etc/postfix/master.cf</pre>
<p><strong>El fichero main.cf</strong> contiene un subconjunto de la mayoría de las opciones de configuración que puede utilizarse para personalizar Postfix. Puedes añadir aquí más parámetros de configuración adicionales si lo necesitas.
<p>Por su parte, <strong>el fichero master.cf</strong> controla cómo se conectan los clientes al servidor. La mayoría de veces no necesitarás cambiar mucho este fichero. En este fichero podemos ver una lista de los demonios, servicios y procesos que pueden configurarse en Postfix.
<h5>El fichero main.cf: configuraciones generales de Postfix</h5>
<p>Como hemos comentado, el fichero <em>mail.cf</em> es donde se almacenan los valores de configuración de Postfix. Puedes ver los <strong>valores actuales de configuración</strong> de su Postfix (fichero main.cf) mediante el siguiente comando:</p><pre>$ sudo postconf</pre>
<p>Para ver los <strong>valores que han cambiado</strong> en relación a los valores de configuración por defecto de la instalación de Postfix, emplea el siguiente comando:</p><pre>$ sudo postconf -n</pre>
<p>Lo primero es decirle a Postfix qué dominios debe de utilizar para administrar su correo. Para ello <strong>modificamos la opción <em>mydestination</em> del archivo main.cf</strong>. Para hacer el cambio podemos usar el siguiente comando:</p><pre>$ sudo nano /etc/postfix/main.cf</pre>
<p>Dejamos la variable <em>mydestination</em> como se muestra:</p><pre>mydestination = mail.mi-dominio.com, localhost.localdomain, localhost, mi-dominio.com</pre>
<p>Ahora Postfix sabe que si el servidor de correo recibe un email destinado a una dirección de email perteneciente a uno de estos dominios (<strong>el campo <em>para</em> es una cuenta de correo de uno de estos dominios</strong>), el servidor de correo <strong>debe de aceptar el email y procesarlo</strong>. Por ejemplo, si recibe un correo que se debe enviar a la dirección de correo xxxx@mi-dominio.com (el campo <em>para</em> del email de xxxx@mi-dominio.com).
<p>Si queremos que Postfix también acepte correos dirigidos a otros dominios, deberemos de agregarlo al <em>mydestination</em>. Es <strong>importante</strong> que se encuentre <em>localhost</em> en <em>mydestination</em> para que Postfix acepte y procese el correo local utilizado por procesos del servidor.
<p>A continuacion necesitamos <strong>añadir las redes a la que está conectado el servidor en la variable de configuración <em>mynetworks</em></strong>. En este punto estableceremos las interfaces de red del servidor desde las cuales se aceptarán y procesarán correos:</p><pre>mynetworks = 127.0.0.0/8, 192.168.1.0/24</pre>
<p>Después de esto, reniciamos postfix con el siguiente comando:</p><pre>$ sudo service postfix reload</pre>
<p>y comprobamos que se haya reiniciado correctamente leyendo la salida del comando.
<h4>Paso 7: Abrir el puerto 25 en el firewall</h4>
<p>Lo que tenemos que hacer ahora es <strong>abrir el firewall</strong> para que acepte conexiones en el <strong>puerto 25</strong>. Este el puerto que emplea SMTP para enviar correo, por lo que tenemos que habilitarlo para que el servidor de correo sea útil y pueda enviar y recibir correo. Para ello, usamos el siguiente comando:</p><pre>$ sudo iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT</pre>
<p>Ahora para comprobar que Postfix está funcionando, podemos enviarnos un mail de prueba desde línea de comandos:</p><pre>$ echo "cuerpo del mensaje" > body.txt
$ mail -s "Asunto de prueba" usuario@mi-dominio.com < body.txt</pre>
<p>Si tratamos de enviar un mail con un usuario que no esté creado en el sistema, Postfix lo rechazará con un mensaje 550 como el siguiente:</p><pre>Recipient address rejected: User unknown in local recipient table</pre>
<p>El comando <em>mail</em> conectará con <em>localhost</em> por el puerto 25 y enviará el email. Podemos tratar de enviar otro email cambiando el asunto y el cuerpo del mensaje usando el mismo comando.
<h4>Paso 8: Cambiar el formato de buzón de Mailbox a Maildir</h4>
<p>Una vez enviado el email de prueba del paso anterior, vamos a analizar el email en:</p><pre>/var/spool/mail</pre>
<p>y veremos que en esta carpeta existe un fichero por cada usuario (dirección de correo electrónico) que emplea el servidor de correo.
<p>Si miramos el contenido del fichero al que hemos enviado un email veremos que <strong>aparecen todos los mails del usuario en el mismo fichero</strong>. Esto es así porque se está empleando el formato de buzón <strong><em>Mailbox</em> (también llamado <em>Mbox</em>).</strong> Este formato de buzón es poco práctico y puede corromperse con facilidad si se dan una serie de situaciones.
<p>Para un mejor desempeño, <strong>cambiaremos al formato de buzón a <em>Maildir</em>, que utiliza un fichero diferente por cada email</strong>. Para ello editamos otra vez el fichero <em>main.cf</em>. Modificamos las siguientes líneas de esta manera:</p><pre>home_mailbox=Maildir/
mailbox_command =</pre>
<p>y reiniciamos postfix:</p><pre>$ sudo service postfix restart</pre>
<p>Después de cambiar el formato de buzón, si volvemos a ejecutar el comando <em>mail</em> como anteriormente, deberiamos ver que <strong>se ha creado el siguiente directorio</strong>:</p><pre>/home/<em>usuario</em>/Maildir</pre>
<p>Dentro de este directorio vemos los <strong>directorios <em>new</em>, <em>cur</em> y <em>tmp</em></strong>. En el directorio <em>new</em> se alamcenan los emails no leidos, y en el directorio <em>cur</em> se almacenan los emails una vez se han leido. En el momento en que un email se lee, éste se mueve de la carpeta <em>new</em> a la carpeta<em>cur</em> en el buzón del usuario.
<h4>Paso 9: Autenticación</h4>
<p>Ahora vamos a configurar la autenticación de nuestro servidor de correo. En este punto del tutorial, los usuarios no podrán enviar correos desde redes que no estén configuradas en<em>mynetworks</em> del archivo <em>main.cf</em>. <strong>Para que los usuarios puedan enviar correos desde cualquier red manteniendo la seguridad del sistema</strong>, es necesario incluir un sistema de autenticación, que es lo que estamos viendo en este apartado.
<p>Tendremos que <strong>comprobar que Postfix soporta autenticación <em>SASL</em> con <em>Dovecot</em></strong>. Para ello ejecutamos el siguiente comando:</p><pre>$ sudo postconf -a</pre>
<p>La salida del comando deberá de ser la siguiente:</p><pre>cyrus
dovecot</pre>
<p>Este comando devuelve todos los plugins de autenticación SASL soportados por Postfix. Deberemos de buscar el plugin dovecot en la salida del comando anterior. En este caso si que aparece, ya que en el paso 2 del tutorial instalamos el paquete correspondiente.
<p>Ahora tenemos que editar el fichero de configuración de Dovecot:</p><pre>$ sudo nano /etc/dovecot.conf</pre>
<p>Tenemos que <strong>configurar las siguientes opciones</strong> tal como se muestran aquí:</p><pre>auth default{
mechanisms=plain login
passdb pam{
}
userdb passwd{
}
socket listen{
client{
path=/var/spool/postfix/private/auth
mode=0660
user=postfix
group=postfix
}
}
}</pre>
<p>Después <strong>reiniciamos</strong> el servicio <em>Dovecot</em>:</p><pre>$ sudo service dovecot restart</pre>
<p>Para <strong>confirmar que Dovecot se está ejecutando</strong>, hay que emplear los siguientes comandos. Este es el primero:</p><pre>$ sudo tail -f /var/log/maillog
# y verificar que en la salida del comando aparecen las líneas:
Jan  9 18:12:24 localhost dovecot: Dovecot v1.0.7 starting up
Jan  9 18:12:24 localhost dovecot: Generating Diffie-Hellman parameters for the first time. This may take a while..</pre>
<p>y este es el segundo:</p><pre>$ sudo ps -A | grep doveco
# verificamos que en la salida del comando aparecen las siguientes líneas
11698 ?        00:00:00 dovecot
11700 ?        00:00:00 dovecot-auth</pre>
<p>Ahora tendremos que volver a <strong>configurar el fichero <em>main.cf</em> de Postfix para que utilice el servicio <em>SASL</em> de Dovecot</strong>. Editamos el fichero main.cf para <strong>añadir</strong> las siguientes líneas:</p><pre>smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_tls_auth_only = no
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination</pre>
<p><strong>Reiniciamos Postfix</strong> para que los cambios tengan efecto:</p><pre>$ sudo service postfix restart</pre>
<p>Hasta ahora, nuestro servidor solamente permitía enviar correo a direcciones que no estuvieran dentro de <em>mydestination</em> si la IP desde donde se mandaba el mail venía de una red situada en <em>mynetworks</em>, una vez implementada la autenticación SASL, cualquier usuario que se haya autenticado podrá hacer relay.
<p>Con estos pasos tendríamos configurada la autenticación en nuestro servidor de correo.
<h4>Paso 10: Creación de buzones para direcciones de correo electrónico</h4>
<p>Como <strong>configuraciones previas para la correcta creación de los buzones</strong> de correo, deberemos ejecutar los siguientes comandos:</p><pre>sudo rpm -Uvh ftp://ftp.silfreed.net/repo/rhel/5/i386/silfreednet/RPMS/maildrop-2.0.4-1.el5.i386.rpm
$ sudo maildirmake /etc/skel/Maildir
$ sudo maildirmake -f Sent /etc/skel/Maildir
$ sudo maildirmake -f Trash /etc/skel/Maildir
$ sudo maildirmake -f Drafts /etc/skel/Maildir
$ sudo maildirmake -f Spam /etc/skel/Maildir</pre>
<p><strong>El primer comando instala <em>maildrop</em></strong>, que es un <em>MDA</em> que se encarga de almacenar los emails en su correspondiente buzón. De momento no utilizaremos maildrop como MDA, en futuros artículos veremos como implementar maildrop y como realizar filtros para ordenar nuestro email por carpetas y aplicaciones algo más avanzadas, como filtros antispam, etc…
<p>Los siguientes comandos <strong>crean una estructura de buzón de correo que servirán como plantilla para los bozones</strong> que se creen a partir de este momento. Según los comandos que hemos ejecutado, los buzones que se creen tendrán las carpetas Sent, Trash, Drafts y Spam.
<p>En el sistema que estamos implantando, <strong>los buzones de los usuarios del servidor de correo estarán en la carpeta <em>/home</em> de cada usuario</strong>. Tal como hemos comentado en puntos anteriores del tutorial, la carpeta home de cada usuario del servidor de correo estará compuesta de una <strong>carpeta Maildir (el buzón de correo)</strong> con las siguientes subcarpetas:
<ul>
<li>carpeta <strong>new</strong>: aquí se almacenan los emails que no han sido leídos.
<li>carpeta <strong>cur</strong>: aquí se almacenan los emails que ya han sido leídos. Cuando un email se lee se mueve de la carpeta new a la carpeta cur.
<li>carpeta <strong>tmp</strong>: esta carpeta la utiliza el servidor de correo internamente.</li></ul>
<p>Recuerda que para <strong>crear usuarios del sistema</strong> en CentOS (Linux) hay que ejecutar el siguiente comando:</p><pre>$ sudo useradd nombre-de-usuario</pre>
<p>En el momento que creemos el usuario se creará una carpeta en /home con el nombre de usuario, y el buzón con la estructura que acabamos de definir. <strong>El propietario de cada Maildir debe de ser sólo el usuario al que pertenece, y los permisos deben de ser 700</strong>. Recuerda que puedes usar los comandos <em>chown</em> y <em>chmod</em> para establecer el propietario y los permisos de los archivos y carpetas.
<p>Bueno, pues con esto está todo listo para poder usar nuestro servidor de correo. En futuras entregas veremos aspectos más avanzados sobre la base de este mismo servidor de correo que hemos instalado y configurado mediante los pasos de este tutorial.
<p>Esperamos que os haya servido, un saludo a todos.
 
C

cakos22

Guest
gracias por el aporte[FONT=arial, helvetica, sans-serif].[/FONT]