· 2016-02-06 · Author: Facultad Created Date: 8/13/2010 2:15:20 AM

46
Guía Práctica de Instalación de un Servidor de Correo Ing. Hugo Adrián Francisconi [email protected] Primera Edición - (en elaboración) Última Modificación el 13/08/10

Transcript of  · 2016-02-06 · Author: Facultad Created Date: 8/13/2010 2:15:20 AM

Page 1:  · 2016-02-06 · Author: Facultad Created Date: 8/13/2010 2:15:20 AM

Guía Práctica de Instalación de un

Servidor de Correo

Ing. Hugo Adrián Francisconi

[email protected]

Primera Edición - (en elaboración)

Última Modificación el 13/08/10

Page 2:  · 2016-02-06 · Author: Facultad Created Date: 8/13/2010 2:15:20 AM

Datos del Autor/Editor de Esta Obra

Nombre y Apellido del Autor: Ing. Hugo Adrián Francisconi Domicilio: Av. Las Américas, Edf. Las Américas, Puerto Ordaz, Guayana, Bolívar, Venezuela Código Postal: 8050 Tel: +58-0424-9540201 E-mail: [email protected]

Derechos de Copyright sobre esta Obra

©2009 del Ing. Hugo Adrián Francisconi. Todos los derechos reservados.

El espíritu de este libro es que sea de libre y gratuita distribución, pero debido al "plagio" y para preservar su integridad es que:

Se concederá derechos para, copiar, hacer obras derivadas y comunicar públicamente la obra bajo cualquier soporte siempre que se tenga permiso expreso del autor, para ello solo vasta con enviarme un e-mail a: [email protected], que seguramente no dudare en concederte permisos. Solo se concederá permiso de distribución de esta obra solo bajo las circunstancias que el autor pueda comprobar que no se esta lucrando con ello (por ejemplo en páginas webs de universidades, gubernamentales, o webs sin publicidad).

QUEDA PROHIBIDA SU VENTA Y/O LUCRO TOTAL Y/O PARCIAL DE ESTA OBRA.

Elaborado, editado e impreso “en proceso”.Fecha de elaboración, edición e impresión “en proceso”.

Page 3:  · 2016-02-06 · Author: Facultad Created Date: 8/13/2010 2:15:20 AM

Marcas Comerciales

Todos los términos en este libro que correspondan a Marcas Comerciales o marcas de Servicio, el autor no puede certificar la exactitud de la información. No debe considerarse que el uso de un término en este libro afecte a la validez de cualquier marca comercial o marca de servicio. Las marcas comerciales y demás marcas denominadas son propiedad de sus respectivos titulares.

Advertencia y Renuncia a Derechos

Se ha realizado el máximo esfuerzo para hacer de este libro una obra tan completa y precisa como sea posible, pero no se ofrece ninguna garantía implícita de adecuación a un fin en particular.

La información se suministra "tal como está". El autor no será responsable ante cualquier persona o entidad con respecto a cualquier pérdida o daño que pudiera resultar emergente de la información contenida en este libro.

Las opiniones expresadas en este libro pertenecen al autor.

Page 4:  · 2016-02-06 · Author: Facultad Created Date: 8/13/2010 2:15:20 AM

A mi esposa

Page 5:  · 2016-02-06 · Author: Facultad Created Date: 8/13/2010 2:15:20 AM

Índice General de Contenidos

Prólogo....................................................................................................................................VI

Implementación......................................................................................................................1

Esquema general...............................................................................................................................2Pre-instalación, preparando el ambiente...........................................................................................3Instalación de POSTFIX...................................................................................................................5Configuración de SASL (saslauthd)...............................................................................................10Encriptación TLS............................................................................................................................13Configuración de Dovecot como servidor IMAP...........................................................................17Instalación del SquirrelMail con una base de datos Mysql............................................................19Instalación de Amavisd-New, Clamav y Mailman.........................................................................27

Probando el Servidor de Correo.........................................................................................31

Enviar un correo por medio de SMTP............................................................................................32Probando Dovecot/IMAP...............................................................................................................35Prueba de SMTP autentificado.......................................................................................................38

Referencias............................................................................................................................40

[email protected] Modificado el 18/12/09 Página V

Page 6:  · 2016-02-06 · Author: Facultad Created Date: 8/13/2010 2:15:20 AM

Prólogo

En elaboración ....

Página VI

Page 7:  · 2016-02-06 · Author: Facultad Created Date: 8/13/2010 2:15:20 AM

Implementación

Page 8:  · 2016-02-06 · Author: Facultad Created Date: 8/13/2010 2:15:20 AM

Guía Práctica de Instalación de un Servidor de Correo

Esquema generalA continuación el esquema que tendrá el Servidor de Correo [28]

Página 2 Implementación Ing. Adrián Francisconi

Page 9:  · 2016-02-06 · Author: Facultad Created Date: 8/13/2010 2:15:20 AM

Implementación

Pre-instalación, preparando el ambiente

A) Deshabilitar SELinux [1]. Deshabilitar SELinux editando el archivo /etc/sysconfig/selinux, encontrando la línea: SELINUX=

y cambiándola a:SELINUX=disabled

Luego de realizar los cambios, reinicie la maquina.

B) Existen requisitos en el nombramiento para un servidor e-mail. En dos lugares el nombre del servidor se debe establecer y ser el mismo en cada lugar. Los lugares son:

El archivo /etc/sysconfig/network: NETWORKING=yes HOSTNAME=mi_servidor.mi-dominio.com

El archivo /etc/hosts debe tener la misma entrada: 127.0.0.1 localhost.localdomain localhost 192.168.1.100 mi_servidor.mi-dominio.com mi_servidor

C) Otro requerimiento para un servidor es tener un registro DNS MX para el dominio. Usted (o su ISP) necesitara agregar un registro MX para su dominio. Aquí se presenta una verificación con el comando dig para el registro MX de mi-dominio.com $ dig -t mx mi-dominio.com

; <<>> DiG 9.5.1-P2 <<>> -t mx mi-dominio.com ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10626 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 3

;; QUESTION SECTION: ;mi-dominio.com. IN MX

;; ANSWER SECTION: mi-dominio.com. 60 IN MX 10 mi_servidor.mi-dominio.com.

;; AUTHORITY SECTION: mi-dominio.com. 86400 IN NS dinamic3.cdmon.net. mi-dominio.com. 86400 IN NS dinamic1.cdmon.net. mi-dominio.com. 86400 IN NS dinamic2.cdmon.net.

;; ADDITIONAL SECTION:

[email protected] Modificado el 13/08/10 Página 3

Page 10:  · 2016-02-06 · Author: Facultad Created Date: 8/13/2010 2:15:20 AM

Guía Práctica de Instalación de un Servidor de Correo

dinamic1.cdmon.net. 439 IN A 212.36.75.139 dinamic2.cdmon.net. 129287 IN A 212.36.74.139 dinamic3.cdmon.net. 129287 IN A 72.46.157.14

;; Query time: 424 msec ;; SERVER: 172.25.214.110#53(172.25.214.110) ;; WHEN: Wed Oct 14 16:13:00 2009 ;; MSG SIZE rcvd: 190

La pregunta en la sección QUESTION es, cual es el registro MX del dominio mi-dominio.com y en la sección ANSWER (respuesta) dice que el servidor mail del dominio mi-dominio.com es el nodo mi_servidor.mi-dominio.com

Página 4 Implementación Ing. Adrián Francisconi

Page 11:  · 2016-02-06 · Author: Facultad Created Date: 8/13/2010 2:15:20 AM

Implementación

Instalación de POSTFIX1) Necesitamos quitar sendmail, porque ahora nuestro MTA (Agente de Trasferencia de Correo) sera Postfix.

rpm -e sendmail -nodeps

2) Instalaremos todos los paquetes necesarios para la configuración de Postfix y de todos los demás complementos, para luego configurarlos:

yum install postfix postfix-pflogsumm dovecot cyrus-sasl cyrus-sasl-gssapi cyrus-sasl-md5 cyrus-sasl-ntlm cyrus-sasl-plain cyrus-sasl-devel cyrus-sasl-sql

Los paquetes cyrus-sasl-devel y cyrus-sasl-sql son opcionales, pero serán utilizados después si usted instala MailScanner y ClamAV.

3) Configuramos Postfix como el MTA por defecto, ejecutando:

alternatives --config mta

…seleccione postfix

4) Editaremos el archivo /etc/postfix/main.cf y configuraremos los parámetros importantes. Solamente se presentan los parámetros por defecto que se deben cambiar [11]:

myhostname = mi_servidor.mi-dominio.com Especifica el nombre del nodo en formato FQDN que actuará como MTA.

mydomain = mi-dominio.com Especifica el nombre de dominio de este sistema de correo.

myorigin = $mydomain Especifica el nombre de dominio que se anexa a una dirección de destinatario sin el @midoninio.com, es decir enviará mensajes como "usuario @ $ myhostname" [16].

inet_interfaces = all Especifica la interfaz de red a través de la cual el sistema recibe el correo. Si este parámetro se configura inadecuadamente Postfix no iniciará o no recibirá correo entrante (localhost).

[email protected] Modificado el 13/08/10 Página 5

Page 12:  · 2016-02-06 · Author: Facultad Created Date: 8/13/2010 2:15:20 AM

Guía Práctica de Instalación de un Servidor de Correo

mydestination = $myhostname, localhost.$mydomain, localhost Especifica una lista de nodos y nombres de dominio,

para los cuales este servidor aceptará y procesara correo. Con $mydomain estoy diciendo que este servidor aceptara y procesara correos para todo el dominio $mydomain [17].

local_recipient_maps = unix:passwd.byname $alias_maps Tablas de consulta con todos los nombres o

direcciones de los destinatarios locales (una dirección de destinatario es local, cuando su dominio coincide con $mydestination) [16], por ende el servidor SMTP Postfix rechace correo para usuarios locales desconocidos (si esto no es lo que se requiere especifique "local_recipient_maps =")

mynetworks = 127.0.0.0/8 Con este parámetro defines tu red local. [18]relay_domains = No permite usar nuestro servidor para realizar relay, ni

localmente, ni para nuestros dominios [16].mail_spool_directory = /var/spool/mail El directorio donde los buzones locales se mantienen.mydestination = mihost.dominio.com, localhost.dominio.com, localhost, hash:/etc/postfix/virtual

Para activar los Servidores virtuales, editar el archivo /etc/postfix/virtual y colocar los servidores virtuales [2]

relayhost = Aquí se establece en nombre del nodo que reenviara “todo” nuestro correo; esto se usa en casos en que queramos enviar e-mail a nodos que bloquean correo de IPs dinámicas (como es el caso de CVG). Seria mejor dejarlo vacío e intentar usar un smarthost condicional. [3][4][5]

transport_maps = hash:/etc/postfix/transport Con esto podemos usar smarthost condicional editando el archivo /etc/postfix/transport [13][14][15], (esto se realizará en uno de los paso más adelante).

alias_maps = hash:/etc/aliases Especifica el archivo de alias, de la base de datos usada por el agente de entrega local. Por ejemplo en el archivo /etc/aliases se especifica el alias adrian para root

inet_protocols = ipv4 Por seguridad solamente uso Postfix bajo IPv4smtpd_banner = $myhostname ESMTP $mail_name ($mail_version) El saludos que aparece en la conexión SMTP, algunas

veces por seguridad se deshabilita.

Página 6 Implementación Ing. Adrián Francisconi

Page 13:  · 2016-02-06 · Author: Facultad Created Date: 8/13/2010 2:15:20 AM

Implementación

Añadido para configurar el tamaño máximo del buzón de mensajes y el de los archivos adjuntos

message_size_limit = 20971520 Máximo de 20MB para archivos adjuntosmailbox_size_limit = 2147483648 Máximo de 2GB para el buzón de mensajes

5) Aplicando smarthost condicional (transport_maps)

En /etc/postfix/main.cf descomentamos (o creamos) la linea [11]:

transport_maps = hash:/etc/postfix/transport

El archivo /etc/postfix/transport podemos especificar que direcciones deben ser aceptadas como locales y cuales no, también es posible especificar a través de que servicio SMTP debe salir (que es nuestro caso) un mensaje o que tipo de protocolo debe utilizar [12]. En nuestro caso lo editamos para realizar smarthost condicional, incluyendo lineas del tipo [13]:

dominiodedestino.com smtp:[mta.derelay.com:puerto]

Para cada dominio, que nos cause problemas por que no admita por ejemplo IPs dinámicas. Mi ISP es CANTV, y uno de los dominios con los que tenía problemas era cvg.com (por que no acepta correo de servidores con IP dinámicas), así que añadí la siguiente linea:

# El correo dirigido a direcciones tipo @cvg.com se enrute a través mail.cantv.net cvg.com smtp:mail.cantv.net

Si no consignes dar con tu ISP, puedes ver como configurar Postfix para que envíe correo a través del SMTP de GMail en [15].

En el caso que se requiera relay autenticado ver [14]. Para enrutear "TODO" el trafico (también el de los correos locales, ej. el de root) es mejor utilizar el parámetro relayhost en main.cf.

6) Luego de ellos se debe crear las tablas de búsqueda de Postfix, el fichero de la base de datos (*.db) ejecutamos:

postmap /etc/postfix/transport && postfix reload 7) La lista de servidores virtuales, con sus correspondientes direcciones de e-mail (principales) se establecen en /etc/postfix/virtual [2]:

mi-dominio.com adrianfrancisconi [email protected] adrian

mi-otro-dominio.com [email protected] adrian

[email protected] Modificado el 13/08/10 Página 7

Page 14:  · 2016-02-06 · Author: Facultad Created Date: 8/13/2010 2:15:20 AM

Guía Práctica de Instalación de un Servidor de Correo

8) Siempre que se realicen cambios en /etc/postfix/virtual debemos ejecutar:

cd /etc/postfix && postmap virtual && postfix reload

En entornos Red Had sera:

sudo postmap /etc/postfix/virtualsudo /etc/init.d/postfix restart

Con lo cual hemos actualizado la base de datos de servidores virtuales, y luego recargamos Postfix.

9) Ahora agregue un usuario al sistema, distinto a su usuario actual (con el que enviara y recibirá e-mail frecuentemente), de la siguiente manera:

useradd pepe

10) Le asignamos una contraseña.

passwd pepe

11) Colocamos al usuario creado (pepe) en un shell restringido como /bin/false, así no se le permite conectarse al servidor por medio de SSH. Mediante el siguiente comando:

usermod -s /bin/false pepe

7) Para poder recibir el correo de root y del usuario habitual del sistema (adrian) incorporamos el alias en /etc/aliases

root: adrian adrian: pepe

Esto se realiza por seguridad, así el acceso se realiza por una cuenta que tiene shell /bin/false, en vez de por la cuanta principal del usuario (adrian) del administrador del sistema. Esto sucede porque usaremos PAM, con lo que todo usuario que reciba correo debe tener una cuanta unix.

8) Para actualizar el archivo aliases.db y que recargue postfix ejecutamos:

newaliases && postfix reload

Página 8 Implementación Ing. Adrián Francisconi

Page 15:  · 2016-02-06 · Author: Facultad Created Date: 8/13/2010 2:15:20 AM

Implementación

Configuración de SASL (saslauthd)

La autentificación se hará a través del demonio saslauthd, por ende se estará limitado a la trasmisión de contraseñas en texto plano y a la autentificación vía login, pero podemos usar PAM [17].

Como usaremos PAM (Pluggable Authentication Modules) el cual no es en sí una Base de Datos de Contraseñas, sino que su configuración le indica al sistema cómo realizar la autentificación (proporciona una interfaz entre las aplicaciones de usuario y los diferentes métodos de autentificación), PAM es el mecanismo por defecto para la autentificación en Linux (Normalmente, implica el uso del módulo pam_unix.so, el cual autentifica al usuario con el archivo de contraseñas shadow). Esto implica que cada persona que reciba correo por este servidor debe tener una cuanta de usuario, debido a que usaremos PAM, como nuestro método de autentificación SMTP.

Para soportar usuarios que no necesita acceder al archivo de contraseñas del sistema (shadow), alguna de las opciones son: LDAP [26], Mysql [18], sasldb, Kerberos, etc., en estos caso el demonio saslauthd ya no se requerirá, por que SASL ya no necesita acceder al archivo de contraseñas del sistema (shadow).

De los métodos antes sitiados LDAP es el más robusto y escalable, pero tiene la limitación de que usa contraseñas en texto plano (al igual que PAM), pero para solucionar este problema, generalmente se usa TLS para encriptar las contraseñas y trasmitirlas desde el cliente al servidor.

1) Primero comprueba que el servidor soporte la autentificación vía PAM:

saslauthd -v saslauthd 2.1.22 authentication mechanisms: getpwent kerberos4 kerberos5 pam rimap shadow ldap 2) Una vez comprobado de que se tiene soporte para PAM, detengo el servicio, elijo a PAM como mi método de validación y lo inicio nuevamente:

service saslauthd stop

saslauthd -a pam

service saslauthd start

[email protected] Modificado el 13/08/10 Página 9

Page 16:  · 2016-02-06 · Author: Facultad Created Date: 8/13/2010 2:15:20 AM

Guía Práctica de Instalación de un Servidor de Correo

3) Verifico que tomo a PAM como mi método de validación, por que el archivo /etc/sysconfig/saslauthd tendrá la variable MECH con el valor pam:

MECH=pam

4) Como especificamos que para verificar las credenciales del usuario, lo haremos a través del demonio saslauthd, debido a que usamos PAM y los procesos sin privilegios (como Postfix) no tienen acceso a los archivos de contraseñas, necesitamos indicarle al demonio saslauthd que el debe manejar las peticiones por Postfix, editando el archivo /usr/lib/sasl2/smtpd.conf y configurarlo de la siguiente manera: pwcheck_method: saslauthdmech_list: plain login

Debido a que usaremos PAM, como nuestro método de autentificación SMTP, sólo los mecanismos de autentificación en "texto plano" se pueden utilizar [21] (si decide usar el meto de autentificación Mysql o sasldb cambie saslauthd por auxprop) esto se especifica en la linea (mech_list: plain login)

5) Reiniciamos el demonio saslauthd para que los cambios tengan efecto:

service saslauthd restart

6) Prueba de funcionamiento de saslauthd

testsaslauthd -f /var/run/saslauthd/mux -u usuario -p contraseña -s smtp

Si esto no devuelve:

0: OK "Success."

Quiera decir que esta correctamente configurado, en cualquier otro caso debemos revisar la configuración.

7) Para permitir a un cliente autentificar al servidor (y viceversa), emplearemos SASL, bajo el protocolo ESMTP (el cual es una Extensión del Protocolo SMTP – Protocolo Simple de Trasporte de Correo). Con esto nos aseguramos que solo los usuarios con las credenciales adecuadas pueden hacer uso de nuestro servidor SMT [17]. Para ello añadidos al final del archivo /etc/postfix/main.cf lo siguiente [11]:

smtpd_sasl_auth_enable = yes Habilita la autentificación SMTP en el Servidorsmtpd_sasl_type = dovecot Tipo de plug-in que el servidor Postfix SMTP debe

utilizar para la autenticación (Para averiguar los plug-

Página 10 Implementación Ing. Adrián Francisconi

Page 17:  · 2016-02-06 · Author: Facultad Created Date: 8/13/2010 2:15:20 AM

Implementación

in disponible se puede ejecutar: postconf -a). En este caso le estamos diciendo que Postfix le pregunte al servidor Dovecot para verificar el nombre de usuario y la contraseña.

smtpd_sasl_path = /var/spool/postfix/private/auth Información de la implementación especifica que el

servidor Postfix pasara a Dovecot (a través del plug-in SASL)

smtpd_sasl_security_options = noanonymous Este parámetro permite controlar los métodos de autentificación (que se asestaran o no), la lista de funciones disponibles depende de la implementación del servidor SASL que se selecciona con smtpd_sasl_type. En este caso se deshabilita los métodos de autenticación que permiten la autenticación anónima.

smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination

Las restricciones de acceso que el servidor SMTP Postfix aplica, en el contexto del comando RCPT TO. En este caso, Postfix acepta un mensaje sólo si coincide con uno de los siguientes criterios, (aplicados en el orden tal como se especifican):Si el usuario está autentificado (permit_sasl_authenticated), o si el usuario está en la red local (permit_mynetworks), o si el mensaje se destina a un usuario de un dominio que es local o virtual en este nodo (reject_unauth_destination).

8) Por último debemos reiniciar los demonios saslauthd y postfix para que los cambios tengan efecto:

service saslauthd restartservice postfix restart

[email protected] Modificado el 13/08/10 Página 11

Page 18:  · 2016-02-06 · Author: Facultad Created Date: 8/13/2010 2:15:20 AM

Guía Práctica de Instalación de un Servidor de Correo

Encriptación TLS

Mientras que la sección de SASL maneja la autentificación (que determina quien tiene derecho a enviar correos). Esta sección tratara la protección de contraseñas, para asegurar que los intrusos no pueden leer las contraseñas secretas de los usuarios [17]. Para proteger la autentificación, implementaremos con Postfix TLS (Transport layer Security), un protocolo mejor que el SSL (Serure Sokets Layer)

Para ello se generaran dos certificados (*.crt) y dos claves de encriptación (*.key). Necesita una clave primaria que nadie debe conocer y una clave pública (que permitirá a los clientes enviarle credenciales seguras).

1) Empezamos por crear un directorio para las certificados SSL y entrando en el:

mkdir /etc/postfix/sslcd /etc/postfix/ssl

2) Ahora creamos la clave primaria con la siguiente instrucción, en la que se nos pedirá que ingresemos una contraseña para poder generarla:

openssl genrsa -des3 -rand /etc/hosts -out smtpd.key 1024 249 semi-random bytes loaded Generating RSA private key, 1024 bit long modulus ........++++++ ........++++++ e is 65537 (0x10001) Enter pass phrase for smtpd.key: contraseñaVerifying - Enter pass phrase for smtpd.key: contraseña

Con lo cual se ha creado el archivo: smtpd.key

3) Cambia los permisos del archivo resultante que contiene la clave OpenSSL del servidor (es decir la clave primaria) para que sea accesible solo por root.

chmod 600 smtpd.key

4) Ahora generaremos con la clave primaria, un certificado (smtpd.csr), con lo cual tendremos que introducir la contraseña que introducimos en la generación del archivo smtpd.key y responder algunas preguntas, para la generación del certificado:

Página 12 Implementación Ing. Adrián Francisconi

Page 19:  · 2016-02-06 · Author: Facultad Created Date: 8/13/2010 2:15:20 AM

Implementación

openssl req -new -key smtpd.key -out smtpd.csr Enter pass phrase for smtpd.key: contraseñaYou are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [GB]:VE State or Province Name (full name) [Berkshire]:Bolivar Locality Name (eg, city) [Newbury]:Guayana Organization Name (eg, company) [My Company Ltd]:Francisconi Organizational Unit Name (eg, section) []:Adrian Common Name (eg, your name or your server's hostname) []:mi_servidor Email Address []:[email protected] Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: lo dejo en blancoAn optional company name []: lo dejo en blanco

Con lo cual se ha creado el archivo: smtpd.csr

5) A continuación generamos el archivo de certificado ejecutando:

openssl x509 -req -days 36500 -in smtpd.csr -signkey smtpd.key -out smtpd.crt Signature ok subject=/C=VE/ST=Bolivar/L=Guayana/O=Francisconi/OU=Adrian/CN=mi_servidor/[email protected] Getting Private key Enter pass phrase for smtpd.key:contraseña (del paso 2)

Con lo cual se ha creado el archivo: smtpd.crt

El archivo de certificado (smtpd.crt) puede ser legible por cualquiera, ya que no contiene nada sensible, de hecho es enviado a cada cliente en la conexión SSL para que pueda cifrar la información.

6) A continuación generamos una nueva clave primaria, par luego cambiarla por la clave existente (smtpd.key) ejecutando:

openssl rsa -in smtpd.key -out smtpd.key.unencrypted Enter pass phrase for smtpd.key: contraseñawriting RSA key

Con lo cual se ha creado el archivo: smtpd.key.unencrypted

7) Procedemos a remplazar la clave existente (smtpd.key) por la nueva (smtpd.key.unencrypted):

mv -f smtpd.key.unencrypted smtpd.key

[email protected] Modificado el 13/08/10 Página 13

Page 20:  · 2016-02-06 · Author: Facultad Created Date: 8/13/2010 2:15:20 AM

Guía Práctica de Instalación de un Servidor de Correo

8) Cualquiera que contenga este archivo podrá descifrar los mensajes, por eso es que procedemos a cambiarle los permisos:

chmod 600 smtpd.key

9) Con lo cual ya contamos con una clave (smtpd.key) más fuerte con la que podemos proceder a generar los certificados, con el siguiente comando:

openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 36500 Generating a 1024 bit RSA private key ...............++++++ .....++++++ writing new private key to 'cakey.pem' Enter PEM pass phrase: otra-contraseñaVerifying - Enter PEM pass phrase: otra-contraseña----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [GB]:VE State or Province Name (full name) [Berkshire]:Bolivar Locality Name (eg, city) [Newbury]:Guayana Organization Name (eg, company) [My Company Ltd]:Francisconi Organizational Unit Name (eg, section) []:Adrian Common Name (eg, your name or your server's hostname) []:mi_servidor Email Address []:[email protected]

Con lo cual se han generado los siguientes archivos: cacert.pem y cakey.pem

10) Para indicarle a Postfix las claves y certificados editamos el archivo /etc/postfix/main.cf y colocamos al fina de este lo siguiente [27] [11]:

smtpd_tls_auth_only = nosmtp_use_tls = yessmtpd_use_tls = yessmtp_tls_note_starttls_offer = yessmtpd_tls_key_file = /etc/postfix/ssl/smtpd.keysmtpd_tls_cert_file = /etc/postfix/ssl/smtpd.crtsmtpd_tls_CAfile =

Página 14 Implementación Ing. Adrián Francisconi

Page 21:  · 2016-02-06 · Author: Facultad Created Date: 8/13/2010 2:15:20 AM

Implementación

/etc/postfix/ssl/cacert.pemsmtpd_tls_loglevel = 1smtpd_tls_received_header = yessmtpd_tls_session_cache_timeout = 3600stls_random_source = dev:/dev/urandom

11) Por último debemos reiniciar Postfix para que los cambios tomen efecto:

service postfix restart

[email protected] Modificado el 13/08/10 Página 15

Page 22:  · 2016-02-06 · Author: Facultad Created Date: 8/13/2010 2:15:20 AM

Guía Práctica de Instalación de un Servidor de Correo

Configuración de Dovecot como servidor IMAP1) Antes de instalar Dovecot compruebo que el servidor Postfix tenga habilitado el modulo ejecutando [20]:

postconf -a cyrus dovecot

Como se ve tiene el modulo dovecot habilitado

2) Ahora activaremos el servicio de IMAP de Dovecot; esto es para que se puedan leer y recibir e-mail, desde Evolution, Thunderbird, etc. Para ello se instalara Dovecot como nuestro demonio de IMAP, en vez de utilizar cyrus-imap. Para ello edite el archivo /etc/dovecot.conf y elimine su contenido (previo backup) y coloque [24] [20] [25]:leer el archivo /etc/dovecot.conf para más opciones

protocols = imap imaps

ssl_cert_file = /etc/postfix/ssl/smtpd.crtssl_key_file = /etc/postfix/ssl/smtpd.keyssl_ca_file = /etc/postfix/ssl/cacert.pem

protocol imap { listen = * ssl_listen = * }

auth default { mechanisms = plain login passdb pam { } userdb passwd { } socket listen { client { # Assuming the default Postfix $queue_directory setting path = /var/spool/postfix/private/auth mode = 0660 # Assuming the default Postfix user and group user = postfix group = postfix } } }

mail_location = mbox:~/mail:INBOX=/var/mail/%u

Página 16 Implementación Ing. Adrián Francisconi

Page 23:  · 2016-02-06 · Author: Facultad Created Date: 8/13/2010 2:15:20 AM

Implementación

log_timestamp = "%b %d %H:%M:%S "log_path = /var/log/dovecot.log info_log_path = /var/log/dovecot-info.log

3) Si queremos que clientes como Evolution o Outlook conecten correctamente de forma segura con nuestro servidor SMTP, tenemos que descomentar las siguientes lineas en /etc/postfix/master.cf [28]:

# Abre el puerto 465 para SMTPS (usado por Outlook o Evolution para conexiones seguras)smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes

4) Si tienes activado IPtables, puede ajustar los puertos abiertos con el siguiente comando:

system-config-firewall

Usted necesitara abrir los puestos imap:tcp, https:tcp, como también habilitar ssh y www. En vez de ejecutar el comando anterior también se pueden abrir los puertos directamente editando el archivo/etc/sysconfig/iptables

5) Reiniciamos los servicio saslauthd, postfix y dovecot:

service saslauthd restart service postfix restart service dovecot restart

6) Ahora debemos estar seguros de que postfix, dovecot y saslauthd se iniciaran en cada reinicio al menos en los runlevels 3 y 5 …para realizar esto ejecute el siguiente comando:

chkconfig --list | grep postfix

La salida debe ser similar a esto: postfix 0:off 1:off 2:on 3:on 4:on 5:on 6:off en caso que no sea así debe hacer que el demonio de postfix se inicie cuando la maquina se inicia en los niveles 2, 3, y 5, esto se hace ejecutando:

chkconfig postfix on

Esto se debe repetir para los servicios saslauthd y dovecot.

[email protected] Modificado el 13/08/10 Página 17

Page 24:  · 2016-02-06 · Author: Facultad Created Date: 8/13/2010 2:15:20 AM

Guía Práctica de Instalación de un Servidor de Correo

Instalación del SquirrelMail con una base de datos Mysql

Ahora seguiremos con la instalación del SquirrelMail con una base de datos Mysql para que los usuarios puedan tener una libreta de direcciones.

1) Primero instalaremos los nuevos paquetes :

yum install squirrelmail php httpd curl

2) Instalar los PEAR (consiste en una lista bastante grande de bibliotecas de código PHP que permiten hacer ciertas tareas de manera más rápida y eficiente reutilizando código escrito previamente por otras personas.), necesarios para instalar agenda para SquirrelMail:

yum install php-pear php-pear-HTML-Common php-pear-DB php-pear-HTML_Javascript php-pear-HTTP

3) Edite el archivo /etc/php.ini [6].

date.timezone = "America/Caracas" Configuro la zona Horaria [7]default_charset = "UTF-8" Cambio la código de caracteres por defecto de iso-

8859-1 a UTF-8register_globals = Of Permite registrar autómaticamente (o no) las variables

EGPCS como globales. Por razones de seguridad se recomienda desactivar el registro (Of).

upload_max_filesize = 20M Define el tamaño máximo del archivo para subir al servidor

post_max_size = 20M Modifico el tamaño máximo de los datos que PHP aceptará por el método POST de 8M a 20M

memory_limit = 20M Modifico el tamaño máximo de memoria en bytes que se permite reclamar a un script. Así se evita que script mal escritos se coman toda la memoria disponible de un servidor de 8M a 20M

Página 18 Implementación Ing. Adrián Francisconi

Page 25:  · 2016-02-06 · Author: Facultad Created Date: 8/13/2010 2:15:20 AM

Implementación

;include_path = ".:/php/includes" Para agregar la ruta para los PEAR cámbiela por include_path = ".:/php/includes:/usr/share/pear"

[mbstring]mbstring.* Si bien en [8] recomienda configurar los mbstring,

esto causa conflictos con SquirrelMail como los expresan sus desarrolladores. Por que no sepodra utilizar las llaves o los corchetes para acceder a caracteres individuales (es decir, no podrás hacer cosas como $cadena[3]), pero podrás utilizar substr en su lugar.

4) Ahora necesitamos configurar el SquirrelMail para eso ejecutamos lo siguiente: cd /usr/share/squirrelmail/config perl ./conf.pl

En primera instancia se aconseja quitar el color con la opción "C". Después se configura como:

Organization Preferences1. Organization Name : mi-dominio.com2. Organization Logo : ../images/sm_logo.png3. Org. Logo Width/Height : (308/111)4. Organization Title : Bienvenido al Webmail de mi-dominio.com5. Signout Page :6. Top Frame : _top7. Provider link : http://mi-dominio.com/8. Provider name : Ing. Adrian Francisconi

Server Settings1. Domain : mi-dominio.com2. Invert Time : false3. Sendmail or SMTP : SMTP

A. Update IMAP Settings : mi_servidor.mi-dominio.com:143 (dovecot)B. Update SMTP Settings : localhost:25

Folder Defaults1. Default Folder Prefix : mail/2. Show Folder Prefix Option : true3. Trash Folder : Papelera4. Sent Folder : Enviados5. Drafts Folder : Borradores6. By default, move to trash : true7. By default, save sent messages : true8. By default, save as draft : true9. List Special Folders First : true10. Show Special Folders Color : true11. Auto Expunge : true12. Default Sub. of INBOX : true13. Show 'Contain Sub.' Option : true14. Default Unseen Notify : 215. Default Unseen Type : 116. Auto Create Special Folders : true17. Folder Delete Bypasses Trash : false18. Enable /NoSelect folder fix : false

[email protected] Modificado el 13/08/10 Página 19

Page 26:  · 2016-02-06 · Author: Facultad Created Date: 8/13/2010 2:15:20 AM

Guía Práctica de Instalación de un Servidor de Correo

General Options1. Data Directory : /var/lib/squirrelmail/prefs/2. Attachment Directory : /var/spool/squirrelmail/attach/3. Directory Hash Level : 04. Default Left Size : 1505. Usernames in Lowercase : true6. Allow use of priority : true7. Hide SM attributions : false8. Allow use of receipts : true9. Allow editing of identity : true Allow editing of name : true Remove username from header : false10. Allow server thread sort : true11. Allow server-side sorting : true12. Allow server charset search : true13. Enable UID support : true14. PHP session name : SQMSESSID15. Location base :16. Only secure cookies if poss. : true17. Disable secure forms : false18. Page referal requirement :

Address Books1. Change LDAP Servers2. Use Javascript Address Book Search : false3. Global file address book :4. Allow writing into global file address book : false5. Allow listing of global file address book : true6. Allowed address book line length : 2048

Plugins Installed Plugins 1. delete_move_next 2. squirrelspell 3. newmail 4. translate 5. calendar 6. mail_fetch 7. sent_subfolders 8. filters 9. administrator 10. fortune 11. info 12. listcommands 13. message_details 14. spamcop 15. virtual_hosts 16. show_user_and_ip 17. msg_flags

Available Plugins: 18. addgraphics 19. bug_report 20. change_passwd 21. compatibility 22. test 23. vlogin

Database1. DSN for Address Book : mysql://usuario:contraseña@localhost/squirrelmail2. Table for Address Book : address

Página 20 Implementación Ing. Adrián Francisconi

Page 27:  · 2016-02-06 · Author: Facultad Created Date: 8/13/2010 2:15:20 AM

Implementación

3. DSN for Preferences : mysql://usuario:contraseña@localhost/squirrelmail4. Table for Preferences : userprefs5. Field for username : user6. Field for prefs key : prefkey7. Field for prefs value : prefval

8. DSN for Global Address Book :9. Table for Global Address Book : global_abook10. Allow writing into Global Address Book : false11. Allow listing of Global Address Book : false

Language preferences1. Default Language : es_ES2. Default Charset : es_ES.UTF-83. Enable lossy encoding : false

Otra forma de configurarlo sería directamente editando el archivo /etc/squirrelmail/config.php

Algunos plugins que se activaron (como por ejemplo virtual_hosts) hay que descargarlo de [9] y descomprimirlo en /usr/share/squirrelmail/plugins, como por ejemplo sería:

cd /usr/share/squirrelmail/pluginswget http://squirrelmail.org/plugins.php....tar zxvf virtual_hosts...

Entre los plugins se puede estacar:Plugins - HTML Mail (http://squirrelmail.org/plugin_view.php?id=209): el cual nos permite componer los mensajes usando FCKeditor

5) Hay que configurar el servidor web para que cada vez que el nodo reinicie poder ocupar SquirrelMail para eso tenemos que hacer:chkconfig httpd on

Luego reiniciamos el servidor web service httpd start

6) Se puede conectar a SquirrelMail con la url:

http://suservidor/webmail/

7) Para comprobar que esta todo perfectamente instalado y configurado clocar esta direcion url en su navegador:

http://suservidor/webmail/src/configtest.php

[email protected] Modificado el 13/08/10 Página 21

Page 28:  · 2016-02-06 · Author: Facultad Created Date: 8/13/2010 2:15:20 AM

Guía Práctica de Instalación de un Servidor de Correo

Lo cual realiza un chequeo

8) Necesitamos instalar Mysql para agenda para SquirrelMail, para ello también instalaremos phpMyadmin para facilitar las tares de configuración

yum install php-mysql mysql mod_auth_mysql mysql-server phpmyadmin

9) Despues de instalar hacemos que el mysql inicie cada vez que se prenda la maquina chkconfig mysqld on

10) Configurar Mysql para UTF-8, editamos el fichero de configuración de Mysql /etc/my.cnf y colocamos al final de este:

[mysqld]default_character_set=utf8character_set_server=utf8character_set_client=utf8default_collation=utf8_spanish_cicharacter_set_filesystem=utf8init-connect='SET NAMES utf8'# character_set_database=utf8

[mysqldump]default_character_set=utf8

[client]default_character_set=utf8

y reiniciamos el servicio Mysql service mysqld restart 11) Después de reiniciar el servicio y conectarnos a Mysql y comprobamos que tomo los parámetros correctamente [10] [8].

mysql

Se nos abre la consola de comando Mysql y ejecutamos:

mysql> SHOW VARIABLES LIKE 'character_set%';+--------------------------+----------------------------+| Variable_name | Value |+--------------------------+----------------------------+| character_set_client | utf8 || character_set_connection | utf8 || character_set_database | utf8 || character_set_filesystem | utf8 || character_set_results | utf8 || character_set_server | utf8 || character_set_system | utf8 || character_sets_dir | /usr/share/mysql/charsets/ |+--------------------------+----------------------------+

Página 22 Implementación Ing. Adrián Francisconi

Page 29:  · 2016-02-06 · Author: Facultad Created Date: 8/13/2010 2:15:20 AM

Implementación

También comprobamos

mysql> SHOW VARIABLES LIKE 'collation%';+----------------------+-----------------+| Variable_name | Value |+----------------------+-----------------+| collation_connection | utf8_general_ci || collation_database | utf8_spanish_ci || collation_server | utf8_spanish_ci |+----------------------+-----------------+

Si se quiere comprobar una en particular se puede ejecutar por ejemplomysql> SHOW VARIABLES LIKE 'character_set_system';+----------------------+-------+| Variable_name | Value |+----------------------+-------+| character_set_system | utf8 |+----------------------+-------+

Cualquier problema podemos revisar el log de Mysql ejecutando:tail -f /var/log/mysqld.log

12) Para iniciar phpMyAdmin, basta con colocar el en navegador la url

http://127.0.0.1/phpmyadmin/ (o localhost puede funcionar )

Luego nos pedirá el usuario y contraseña que es el mismo que se usa para acceder a Mysql

Si no lo encontramos en su archivo de configuración que se encuentra en:

/etc/phpMyAdmin/config.inc.php

También si quieres acceder desde otro nodo que no sea el local recuerda editar el archivo /etc/httpd/conf.d/phpMyAdmin.conf y colocar

Alias /phpmyadmin /usr/share/phpMyAdmin<Directory /usr/share/phpMyAdmin/> order deny,allow deny from all allow from 127.0.0.1 allow from ::1 allow from IPdesdeDondeQuieroacceder </Directory>

o también podría ser, para mi red local solamente:

[email protected] Modificado el 13/08/10 Página 23

Page 30:  · 2016-02-06 · Author: Facultad Created Date: 8/13/2010 2:15:20 AM

Guía Práctica de Instalación de un Servidor de Correo

allow from 192.168.1.0/24

13) Ahora necesitamos crear la base de datos en mysql (yo la llame squirrelmail) con este comando:

mysqladmin -u root -p create squirrelmailO bien la podemos crear mediante phpMyAdmin

14) Después creamos un usuario para la base de datos, para que pueda realizar todas las funciones necesarias, para eso ejecutamos:

mysql -u root -p lo que nos mostrar:

mysql>

aquí ejecutaremos el siguiente comando

mysql> GRANT select,insert,update,delete ON squirrelmail.* TO squirreluser@localhost IDENTIFIED BY 'sqpassword';

Se puedes cambiar el usuario y clave por los que sean mas cómodos. Ahora crearemos las tablas para guardar la información, pero primero tenemos que decirle que base de datos vamos a ocupar, eso lo hacemos ejecutando:

mysql> use squirrelmail;

Ahora creamos las tablas pegando el siguiente código en el prompt de mysql:

CREATE TABLE address ( owner varchar(128) DEFAULT '' NOT NULL, nickname varchar(16) DEFAULT '' NOT NULL, firstname varchar(128) DEFAULT '' NOT NULL, lastname varchar(128) DEFAULT '' NOT NULL, email varchar(128) DEFAULT '' NOT NULL, label varchar(255), PRIMARY KEY (owner,nickname), KEY firstname (firstname,lastname) );

y luego copiamos y pegamos este también en el prompt de mysql :

mysql> CREATE TABLE userprefs ( user varchar(128) DEFAULT '' NOT NULL, prefkey varchar(64) DEFAULT '' NOT NULL, prefval BLOB DEFAULT '' NOT NULL, PRIMARY KEY (user,prefkey) );

Página 24 Implementación Ing. Adrián Francisconi

Page 31:  · 2016-02-06 · Author: Facultad Created Date: 8/13/2010 2:15:20 AM

Implementación

Ahora dejamos Mysql ejecutando quit;

15) Ahora configuramos el SquirelMail para que apunte a la base de datos recién creada ejecutando: cd /usr/share/squirrelmail/config./conf.pl

en el menú se selecciona la opciónDatabase

y luego se selecciona la opciónDSN for AddressBook

y se debe entrar lo siguiente mysql://squirreluser:sqpassword@localhost/squirrelmail

Ahora seleccioneDSN for Preferences

y escriba mysql://squirreluser:sqpassword@localhost/squirrelmail

no olvide que squirreluser y sqpassword son el nombre de usuario y clave que tienes acceso a la base de datos y que la base de datos es SquirrelMail (si usted cambio alguno de estos datos cuando creo la base de datos o el usuario que tiene acceso a ella debe mantener la consistencia) Luego selecciones Save data ("S") y Quit ("Q")

16) Reiniciar el servidor web con el comando service httpd restart

[email protected] Modificado el 13/08/10 Página 25

Page 32:  · 2016-02-06 · Author: Facultad Created Date: 8/13/2010 2:15:20 AM

Guía Práctica de Instalación de un Servidor de Correo

Instalación de Amavisd-New, Clamav y Mailman1) Tenemos que agregar un repositorio al CentOS ya que no trae estos paquetes por defecto por lo que hay que crear un archivo llamado /etc/yum.repos.d/dag.repo que contenga: [dag] name=Dag-RHEL-Yum baseurl=http://dag.linux.iastate.edu/dag/redhat/el$releasever/en/$basearch/dag http://www.mirrorservice.org/sites/apt.sw.be/redhat/el$releasever/en/$basearch/dag http://mirrors.ircam.fr/pub/dag/redhat/el$releasever/en/$basearch/dag http://apt.sw.be/redhat/el$releasever/en/$basearch/dag enabled=1 gpgcheck=1

2) Hay que importar la llave de dag rpm --import http://dag.wieers.com/packages/RPM-GPG-KEY.dag.txt

3) Ahora hay que actualizar la versión de CentOS yum update

4) Instalar Amavisd-New yum install amavisd-new

Lo primero vamos a probar el el amavis esta funciona correctamente. Para ello hacemos telnet 127.0.0.1 10024 y nos tiene que dar por resultado Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. 220 [127.0.0.1] ESMTP amavisd-new service ready después escribimos quit y nos da como resultado 221 Bye Connection closed by foreign host.

Con esto ya sabemos que esta funcionando el amavis y podemos seguir con la configuración Para configurar amavis en postfix tenemos que agregar lo siguiente en al archivo /etc/postfix/master.cf

smtp-amavis unix - - n - 2 smtp -o smtp_data_done_timeout=1200

Página 26 Implementación Ing. Adrián Francisconi

Page 33:  · 2016-02-06 · Author: Facultad Created Date: 8/13/2010 2:15:20 AM

Implementación

-o smtp_send_xforward_command=yes -o disable_dns_lookups=yes -o max_use=20127.0.0.1:10025 inet n - n - - smtpd -o content_filter= -o local_recipient_maps= -o relay_recipient_maps= -o smtpd_restriction_classes= -o smtpd_delay_reject=no -o smtpd_client_restrictions=permit_mynetworks,reject -o smtpd_helo_restrictions= -o smtpd_sender_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,reject -o mynetworks_style=host -o mynetworks=127.0.0.0/8 -o strict_rfc821_envelopes=yes -o smtpd_error_sleep_time=0 -o smtpd_soft_error_limit=1001 -o smtpd_hard_error_limit=1000 -o smtpd_client_connection_count_limit=0 -o smtpd_client_connection_rate_limit=0 -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks

Una vez agregadas esas lineas tenemos que reiniciar el servicio del postfix service postfix restart

Probamos que este funcionando todo haciendo

$ telnet 127.0.0.1 10025 y nos debe dar como resultado Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. 220 yourhost.example.com ESMTP Postfix ahí escribimos quit y nos da como resultado 221 Bye Connection closed by foreign host. Ahora tenemos que decirle al postfix que todos los mails que reciba se los envie al amavis para ser filtrados. Para eso tenemos que agregar al final del archivo /etc/postfix/main.cf la siguiente linea

content_filter=smtp-amavis:[127.0.0.1]:10024

y tenemos que reiniciar el postfix nuevamente con service postfix restart

5) Volver a actualizar todo yum update

[email protected] Modificado el 13/08/10 Página 27

Page 34:  · 2016-02-06 · Author: Facultad Created Date: 8/13/2010 2:15:20 AM

Guía Práctica de Instalación de un Servidor de Correo

6) Instalar clamv yum install clamav clamd clamav-db Una vez instalado hay que ir al archivo de configuración del clamav que es /etc/clamd.conf y comentar las siguientes lineas TCPSocket 3310 TCPAddr 127.0.0.1 tiene que quedar # TCPSocket 3310 #TCPAddr 127.0.0.1

Ahora que fijarse que lo que dice la siguiente linea para despues ponerlo en el LocalSocket /var/run/clamav/clamd.sock lo aconsejable es copiar la dirección y el nombre de archivo en al cual apunta para despues ponerla en el amavis Ahora tenemos que configurar amavis para que ocupe el clamav Para eso editamos el archivo /etc/amavisd.conf y buscamos la linea que diga: # http://www.clamav.net/

tenemos que descomentar las siguientes lineas y fijarnos que el archivo apuntado aqui sea el mismo que estaba en clamd.conf como LocalSocket, sino es asi ahi que preocuparse que sean iguales quedando de la siguiente manera: ['ClamAV-clamd', \&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd.sock"], qr/\bOK$/, qr/\bFOUND$/, qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ], # NOTE: the easiest is to run clamd under the same user as amavisd; match the # socket name (LocalSocket) in clamav.conf to the socket name in this entry # When running chrooted one may prefer: ["CONTSCAN {}\n","$MYHOME/clamd"], ### http://www.clamav.net/ and CPAN (memory-hungry! clamd is preferred) ['Mail::ClamAV', \&ask_clamav, "*", [0], [1], qr/^INFECTED: (.+)/],

una vez hecho esto hay reiniciar el servicio de amavis y clam service amavisd restart service clamd restart

7) Instalar mailman para poder utilizar listas de correoyum install mailman

con esto queda instalado el mailman ahora tenemos que modificar el archivo de postfix /etc/postfix/main.cf, donde hay que fijarse que las siguientes opciones tengan los valores que aquí se especifican, en caso de estar comentadas dichas lineas hay que descomentarlas:

owner_request_special = no recipient_delimiter = + unknown_local_recipient_reject_code = 550

Una vez que hemos hecho debemos reiniciar postfix con el comando

Página 28 Implementación Ing. Adrián Francisconi

Page 35:  · 2016-02-06 · Author: Facultad Created Date: 8/13/2010 2:15:20 AM

Implementación

service postfix restart

y queda funcionando mailman con postfix, ahora bien sería bueno poder hacer que mailman se encargara el mismo de actualizar el aliases cada vez que creamos una lista, para eso es necesario hacer lo siguiente:

Primero que nada hay que decirle al mailman que vamos a ocupar postfix, esto lo hacemos en el archivo /etc/mailman/mm_cfg.py, al final de dicho archivo agregamos la siguiente linea MTA = 'Postfix'

Ahora si queremos que mailman tenga por defecto el idioma español debemos agregar también la linea que dice:DEFAULT_SERVER_LANGUAGE='es'

ya con esto le hemos dicho al mailman que vamos a ocupar postfix y que el lenguaje es español. Ahora ahi que generar la lista de aliases del mailman, esto lo hacemos ejecutando el siguiente comando:

/usr/lib/mailman/bin/genaliases esto debe generar los archivos /etc/mailman/aliases y /etc/mailman/aliases.db una vez generados estos archivos debemos volver a editar el archivo /etc/postfix/main.cf y debemos cambiar la siguiente linea alias_map = hash:/etc/aliases por alias_map = hash:/etc/aliases, hash:/etc/mailman/aliases y finalmente debemos reiniciar el postfix service postfix restart service mailman restart

con esto hemos dejado todo instalado y funcionando

[email protected] Modificado el 13/08/10 Página 29

Page 36:  · 2016-02-06 · Author: Facultad Created Date: 8/13/2010 2:15:20 AM

Probando el

Servidor de Correo

Page 37:  · 2016-02-06 · Author: Facultad Created Date: 8/13/2010 2:15:20 AM

Guía Práctica de Instalación de un Servidor de Correo

Enviar un correo por medio de SMTPNos conectamos vía telnet al servidor [18]:

telnet mi-dominio.com smtp

El servidor debería responder:

Trying 190.74.57.213... Connected to mi-dominio.com (190.74.57.213). Escape character is '^]'. 220 mi_servidor.mi-dominio.com ESMTP Postfix (2.5.6)

Primero debemos abrir la transmisión con el comando EHLO (los clientes SMTP deben usar el comando HELO). El argumento de este campo contiene el nombre del servidor emisor SMTP

EHLO mi-dominio.com

El servidor nos envíe una lista de las Extensiones del protocolo SMTP (ESMTP) que soporta. Por ejemplo soporta la exención VRFY [nombre] que confirma de que [nombre] es un usuario del MTA del receptor, también como se ve soporta la extensión AUTH [Metodo] que sirve para autentificarse ante el servidor, empleando el [Metodo] indicado, para cifrar el usuario y la contraseña.

250-mi_servidor.mi-dominio.com 250-PIPELINING 250-SIZE 20971520 250-VRFY 250-ETRN 250-STARTTLS 250-AUTH PLAIN LOGIN 250-AUTH=PLAIN LOGIN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN

Para comenzar una nueva transacción para el envío de mensaje usamos MAIL FROM: [usuario@dominio] indicándole el remitente del mensaje ([email protected]). A menudo el dominio ha de ser uno válido, pues ciertos servidores comprueban la existencia del mismo:

MAIL FROM:<[email protected]>

Página 31 Probando el Servidor de Correo Ing. Adrián Francisconi

Page 38:  · 2016-02-06 · Author: Facultad Created Date: 8/13/2010 2:15:20 AM

Probando el Servidor de Correo

La identifica del remitente del mensaje es apestada (nos devuelve códigos que empiezan por "2" [23]):

250 2.1.0 OK

Dile a Postfix quién va a recibir el mensaje: Con este comando especifica el receptor (o receptores, pues el comando puede ser repetido tantas veces como receptores haya), del mensaje enviado. Es importante tener en cuenta que ciertos servidores poseen una tabla de dominios a los que pueden entregar el correo, es seguro usar el servidor de correo del dominio al cual pertenece el correo de la persona a la que va dirigida el mensaje

RCPT TO:<[email protected]>

Postfix no lo acepta:

554 5.7.1 <[email protected]>: Relay access denied

¿Por que? Por que el comando MAIL FROM: correo@dominio especifica el destinatario del mensaje (o destinatarios, pues el comando puede ser repetido tantas veces como receptores haya), del mensaje enviado. Es importante tener en cuenta que ciertos servidores poseen una tabla de dominios a los que pueden entregar el correo, es seguro usar el servidor de correo del dominio al cual pertenece el correo de la persona a la que va dirigida el mensaje. Es lógico, me estoy conectando vía telnet como un nodo cualquiera de internet, si me dejara conectar y encima me dejara enviar e-mail sin autentificarme, el servidor seria un “open relay”.

Pruebo nuevamente pero esta ves de otro nodo que no sea el servidor y con la IP local del servidor de correo:

telnet 192.168.1.100 smtp

Repito los pasos y si nuevamente Postfix no lo acepta:

554 5.7.1 <[email protected]>: Relay access denied

Es por que esta configurado (el parámetro mynetworks = 127.0.0.0/8 en /etc/postfix/main.cf) para que solo desde el servidor se pueda enviar e-mail sin autentificarse, que seria lo más seguro.

Pruebo nuevamente pero esta vez, desde el servidor:

telnet localhost smtp

Repito los pasos y esta ves lo acepta:

[email protected] Modificado el 13/08/10 Página 32

Page 39:  · 2016-02-06 · Author: Facultad Created Date: 8/13/2010 2:15:20 AM

Guía Práctica de Instalación de un Servidor de Correo

250 2.1.5 OK

Ahora estamos preparados para enviar un mensaje real:

DATA

Postfix está de acuerdo y nos dice que ahora podemos enviar el mensaje real:

354 End data with <CR><LF>.<CR><LF>

Vale, pues escribimos un mensaje: Hola John, sólo quería dejarte una nota. .

Postfix nos dice que ha recibido el mensaje y lo pone en cola bajo un ID:

250 2.0.0 Ok: queued as A9D64379C4

Gracias, Postfix, esto es todo:

QUIT

Comprobando los registros

Ahora échale un vistazo al archivo /var/log/maillog deberías ver algo parecido a esto: postfix/smtpd[...]: connect from localhost[127.0.0.1] postfix/smtpd[...]: 5FF712A6: client=localhost[127.0.0.1] postfix/cleanup[...]: 5FF712A6: message-id=<...> postfix/qmgr[...]: 5FF712A6: from=<[email protected]>, size=364, nrcpt=1 (queue active) postfix/pipe[...]: 5FF712A6: to=<[email protected]>, relay=dovecot, ..., status=sent (delivered via dovecot service) postfix/qmgr[...]: 5FF712A6: removed postfix/smtpd[...]: disconnect from localhost[127.0.0.1]

La entrega se ha efectuado. Postfix ha determinado correctamente que el dominio de destino es un dominio virtual y ha reenviado el mensaje al servicio "Dovecot"

Página 33 Probando el Servidor de Correo Ing. Adrián Francisconi

Page 40:  · 2016-02-06 · Author: Facultad Created Date: 8/13/2010 2:15:20 AM

Probando el Servidor de Correo

Probando Dovecot/IMAPtelnet localhost 143

Deberías conseguir conectarte al puerto 143 (imap2) [22] [18]: Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. * OK Dovecot ready.

Los comandos IMAP siempre empiezan por un número y la respuesta a ese comando también empieza por el mismo número. Así que los siguientes comandos deben teclearse con el número al principio de cada línea. Inicia sesión con el nombre de usuario y la contraseña:

1 login usuario contraseña

Dovecot te inicia la sesión:

1 OK Logged in.

Pregúntale a Dovecot por la lista de carpetas de correo de John:

2 list "" "*"

Y te muestra la lista: * LIST (\HasNoChildren) "." "INBOX" 2 OK List completed.

Selecciona la bandeja de entrada:

3 select "INBOX"

Dovecot te da toda clase de información sobre esa carpeta:

* FLAGS (\Answered \Flagged \Deleted \Seen \Draft) * OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft \*)] Flags permitted. * 1 EXISTS * 0 RECENT * OK [UIDVALIDITY 1180039205] UIDs valid * OK [UIDNEXT 3] Predicted next UID

[email protected] Modificado el 13/08/10 Página 34

Page 41:  · 2016-02-06 · Author: Facultad Created Date: 8/13/2010 2:15:20 AM

Guía Práctica de Instalación de un Servidor de Correo

3 OK [READ-WRITE] Select completed.

Y ves que tienes un mensaje. Recógelo:

4 fetch 1 all

IMAP sólo te proporcionará información básica del mensaje: * 1 FETCH (FLAGS (\Seen) INTERNALDATE ......... 4 OK Fetch completed.

Para realmente leer el mensaje necesitas recogerlo explícitamente:

5 fetch 1 body[]

Y aquí está:

* 1 FETCH (BODY[] {474} Return-Path: <[email protected]> X-Original-To: [email protected] Delivered-To: [email protected] Received: from example.com (localhost [127.0.0.1]) by ... (Postfix) with ESMTP id 692DF379C7 for <[email protected]>; Fri, 18 May 2007 22:59:31 +0200 (CEST) Message-Id: <...> Date: Fri, 18 May 2007 22:59:31 +0200 (CEST) From: [email protected] To: undisclosed-recipients:;

Hola John,

sólo quería dejarte una nota. ) 5 OK Fetch completed.

Desconéctate del servidor:

6 logout

Y Dovecot te desconecta:

* BYE Logging out 6 OK Logout completed. Connection closed by foreign host.

La forma más rápida de probar las conexiones es, usando mutt:

Página 35 Probando el Servidor de Correo Ing. Adrián Francisconi

Page 42:  · 2016-02-06 · Author: Facultad Created Date: 8/13/2010 2:15:20 AM

Probando el Servidor de Correo

[email protected] Modificado el 13/08/10 Página 36

Page 43:  · 2016-02-06 · Author: Facultad Created Date: 8/13/2010 2:15:20 AM

Guía Práctica de Instalación de un Servidor de Correo

Prueba de SMTP autentificado

Con el fin de generar la información de autentificación codificada en base64 puede utilizar uno de los siguientes comandos [19]:

printf '\0username\0password' | mmencode AHVzZXJuYW1lAHBhc3N3b3Jk

Para el caso de Fedora 11, necesitas descargar e instalar:http://rpm.pbone.net/index.php3/stat/4/idpl/1034752/com/libtermcap2-2.0.8-36sls.i586.rpm.htmly http://rpm.pbone.net/index.php3/stat/4/idpl/2294293/com/metamail-2.7-2.i386.rpm.html, (el cual contiene la aplicación mmencode) o sino también se puede usar el siguiente comando:

perl -MMIME::Base64 -e 'print encode_base64("\0username\0password");' AHVzZXJuYW1lAHBhc3N3b3Jk

Lo cual en ambos casos nos arrojo la sig. cadena cifraba:

AHVzZXJuYW1lAHBhc3N3b3Jk

Ahora iniciamos telnet par ver si funciona la autentificación:

$ telnet 172.25.214.100 smtp

Trying 172.25.214.100... Connected to 172.25.214.100. Escape character is '^]'. 220 correo.com ESMTP Postfix (Debian/GNU)

A continuación escribe:EHLO correo.com

250-correo.com 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-STARTTLS 250-AUTH PLAIN LOGIN 250-AUTH=PLAIN LOGIN

Página 37 Probando el Servidor de Correo Ing. Adrián Francisconi

Page 44:  · 2016-02-06 · Author: Facultad Created Date: 8/13/2010 2:15:20 AM

Probando el Servidor de Correo

250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN

Como se ve soporta la extensión AUTH PLAIN que es la extensión que nos permite usar la autentificación con el protocolo SMTP en texto plano (cifrado el usuario y la contraseña en base 64), como es requerido para usar PAM. Envía la cadena de autentificación con la contraseña cifrada en base 64:

AUTH PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk

El servidor debería aceptar la autentificación:

235 2.0.0 Authentication successful

Desconéctate de Postfix:

quit

[email protected] Modificado el 13/08/10 Página 38

Page 45:  · 2016-02-06 · Author: Facultad Created Date: 8/13/2010 2:15:20 AM

Guía Práctica de Instalación de un Servidor de Correo

Referencias

[1] http://terremotomental.spaces.live.com/blog/cns!3457113FAD38B7F7!283.entry

[2] http://www.servitux.org/view.php/page/postfix[3] http://www.servitux.org/view.php/page/postfix[4] http://www.uco.es/ccc/sistemas/postfix/intro.html#d0e319[5] http://www.mail-archive.com/[email protected]/msg08855.html[6] http://www.ignside.net/man/servidores/phpini.php[7] http://www.php.net/manual/en/timezones.america.php[8] http://forums.mysql.com/read.php?71,224332,225034[9] http://squirrelmail.org/plugins.php[10] http://dev.mysql.com/doc/refman/5.0/es/charset-metadata.htm[11] http://www.postfix.org/postconf.5.html [12] http://www.postfix.org/transport.5.html [13] http://www.bulma.net/body.phtml?nIdNoticia=2233 [14] http://wiki.fjra.es/wiki/Relay_Autenticado_con_Postfix[15] http://pacoros.wordpress.com/2008/04/14/configurar-postfix-para-

que-envie-correo-a-traves-del-smtp-de-gmail/[16] http://www.postfix.org/BASIC_CONFIGURATION_README.html[17] Administración de Sistemas Linux 2007, Anaya O' Reilly, Tom

Adelstein – Bill Lubanovic, ISBN 978-84415-2234-3[18] http://www.esdebian.org/wiki/tutorial-ispmail-debian-50-lenny-0[19] http://www.postfix.org/SASL_README.html#server_test[20] http://wiki.dovecot.org/HowTo/PostfixAndDovecotSASL[21] http://wiki.dovecot.org/PasswordDatabase/PAM

Página 39 Referencias Ing. Adrián Francisconi

Page 46:  · 2016-02-06 · Author: Facultad Created Date: 8/13/2010 2:15:20 AM

Referencias

[22] http://wiki.dovecot.org/TestInstallation[23] http://www.septeto.com/documentos/smtp.html[24] http://wiki.dovecot.org/SSL/DovecotConfiguration[25] http://wiki.dovecot.org/HowTo/SimpleVirtualInstall[26] http://www.tuxjm.net/docs/mailserver-howto/ch04s04.html[27] http://www.postfix.org/TLS_README.html[28] http://www.marblestation.com/?p=549

[email protected] Modificado el 13/08/10 Página 40