Está en la página 1de 46

Gua Prctica de

Instalacin de un
Servidor de Correo
Ing. Hugo Adrin Francisconi
adrianfrancisconi@yahoo.com.ar

Primera Edicin - (en elaboracin)


ltima Modificacin el 13/08/10

Datos del Autor/Editor de Esta Obra


Nombre y Apellido del Autor: Ing. Hugo Adrin Francisconi
Domicilio: Av. Las Amricas, Edf. Las Amricas, Puerto Ordaz, Guayana, Bolvar, Venezuela
Cdigo Postal: 8050
Tel: +58-0424-9540201
E-mail: adrianfrancisconi@yahoo.com.ar

Derechos de Copyright sobre esta Obra


2009 del Ing. Hugo Adrin Francisconi. Todos los derechos reservados.
El espritu de este libro es que sea de libre y gratuita distribucin, pero debido al "plagio" y para
preservar su integridad es que:
Se conceder derechos para, copiar, hacer obras derivadas y comunicar pblicamente la obra bajo
cualquier soporte siempre que se tenga permiso expreso del autor, para ello solo vasta con enviarme un email a: adrianfrancisconi@yahoo.com.ar, que seguramente no dudare en concederte permisos. Solo se
conceder permiso de distribucin de esta obra solo bajo las circunstancias que el autor pueda comprobar
que no se esta lucrando con ello (por ejemplo en pginas 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 elaboracin, edicin e impresin en proceso.

Marcas Comerciales
Todos los trminos en este libro que correspondan a Marcas Comerciales o marcas de Servicio, el
autor no puede certificar la exactitud de la informacin. No debe considerarse que el uso de un trmino en
este libro afecte a la validez de cualquier marca comercial o marca de servicio. Las marcas comerciales y
dems marcas denominadas son propiedad de sus respectivos titulares.

Advertencia y Renuncia a Derechos


Se ha realizado el mximo esfuerzo para hacer de este libro una obra tan completa y precisa como sea
posible, pero no se ofrece ninguna garanta implcita de adecuacin a un fin en particular.
La informacin se suministra "tal como est". El autor no ser responsable ante cualquier persona o
entidad con respecto a cualquier prdida o dao que pudiera resultar emergente de la informacin
contenida en este libro.
Las opiniones expresadas en este libro pertenecen al autor.

A mi esposa

ndice General de Contenidos


Prlogo....................................................................................................................................VI
Implementacin......................................................................................................................1
Esquema general...............................................................................................................................2
Pre-instalacin, preparando el ambiente...........................................................................................3
Instalacin de POSTFIX...................................................................................................................5
Configuracin de SASL (saslauthd)...............................................................................................10
Encriptacin TLS............................................................................................................................13
Configuracin de Dovecot como servidor IMAP...........................................................................17
Instalacin del SquirrelMail con una base de datos Mysql............................................................19
Instalacin de Amavisd-New, Clamav y Mailman.........................................................................27

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


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

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

adrianfrancisconi@yahoo.com.ar

Modificado el 18/12/09

Pgina V

Prlogo
En elaboracin ....

Pgina VI

Implementacin

Gua Prctica de Instalacin de un Servidor de Correo

Esquema general
A continuacin el esquema que tendr el Servidor de Correo [28]

Pgina 2

Implementacin

Ing. Adrin Francisconi

Implementacin

Pre-instalacin, preparando el ambiente


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

y cambindola 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 verificacin 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
mi-dominio.com. 86400 IN
mi-dominio.com. 86400 IN

NS
NS
NS

dinamic3.cdmon.net.
dinamic1.cdmon.net.
dinamic2.cdmon.net.

;; ADDITIONAL SECTION:

adrianfrancisconi@yahoo.com.ar

Modificado el 13/08/10

Pgina 3

Gua Prctica de Instalacin de un Servidor de Correo

dinamic1.cdmon.net.
dinamic2.cdmon.net.
dinamic3.cdmon.net.
;;
;;
;;
;;

439
IN
129287 IN
129287 IN

A
A
A

212.36.75.139
212.36.74.139
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 seccin QUESTION es, cual es el registro MX del dominio mi-dominio.com y en la


seccin ANSWER (respuesta) dice que el servidor mail del dominio mi-dominio.com es el nodo
mi_servidor.mi-dominio.com

Pgina 4

Implementacin

Ing. Adrin Francisconi

Implementacin

Instalacin de POSTFIX
1) 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 configuracin de Postfix y de todos los dems
complementos, para luego configurarlos:
yum install postfix postfix-pflogsumm dovecot cyrus-sasl cyrus-sasl-gssapi cyrussasl-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 sern utilizados despus 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 parmetros importantes.
Solamente se presentan los parmetros 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


direccin de destinatario sin el @midoninio.com, es
decir enviar mensajes como "usuario @ $
myhostname" [16].

inet_interfaces = all

Especifica la interfaz de red a travs de la cual el


sistema recibe el correo. Si este parmetro se configura
inadecuadamente Postfix no iniciar o no recibir
correo entrante (localhost).

adrianfrancisconi@yahoo.com.ar

Modificado el 13/08/10

Pgina 5

Gua Prctica de Instalacin 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 direccin
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 parmetro 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 dinmicas (como es el caso de CVG). Seria
mejor dejarlo vaco 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 ms
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 IPv4

smtpd_banner = $myhostname ESMTP $mail_name


($mail_version)

El saludos que aparece en la conexin SMTP, algunas


veces por seguridad se deshabilita.

Pgina 6

Implementacin

Ing. Adrin Francisconi

Implementacin

Aadido para configurar el tamao mximo del buzn de mensajes y el de los archivos adjuntos
message_size_limit = 20971520

Mximo de 20MB para archivos adjuntos

mailbox_size_limit = 2147483648

Mximo de 2GB para el buzn 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, tambin es posible especificar a travs 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 dinmicas. Mi ISP es
CANTV, y uno de los dominios con los que tena problemas era cvg.com (por que no acepta correo de
servidores con IP dinmicas), as que aad la siguiente linea:
# El correo dirigido a direcciones tipo @cvg.com se enrute a travs mail.cantv.net
cvg.com
smtp:mail.cantv.net

Si no consignes dar con tu ISP, puedes ver como configurar Postfix para que enve correo a travs del
SMTP de GMail en [15].
En el caso que se requiera relay autenticado ver [14]. Para enrutear "TODO" el trafico (tambin el de
los correos locales, ej. el de root) es mejor utilizar el parmetro relayhost en main.cf.
6) Luego de ellos se debe crear las tablas de bsqueda 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
adrian@mi-dominio.com
mi-otro-dominio.com
adrian@mi-otro-dominio.com

adrianfrancisconi@yahoo.com.ar

adrianfrancisconi
adrian
mi-otro-dominio
adrian

Modificado el 13/08/10

Pgina 7

Gua Prctica de Instalacin 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/virtual
sudo /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 email frecuentemente), de la siguiente manera:
useradd pepe

10) Le asignamos una contrasea.


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

Pgina 8

Implementacin

Ing. Adrin Francisconi

Implementacin

Configuracin de SASL (saslauthd)


La autentificacin se har a travs del demonio saslauthd, por ende se estar limitado a la trasmisin
de contraseas en texto plano y a la autentificacin va login, pero podemos usar PAM [17].
Como usaremos PAM (Pluggable Authentication Modules) el cual no es en s una Base de Datos de
Contraseas, sino que su configuracin le indica al sistema cmo realizar la autentificacin
(proporciona una interfaz entre las aplicaciones de usuario y los diferentes mtodos de autentificacin),
PAM es el mecanismo por defecto para la autentificacin en Linux (Normalmente, implica el uso del
mdulo pam_unix.so, el cual autentifica al usuario con el archivo de contraseas 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 mtodo de autentificacin SMTP.
Para soportar usuarios que no necesita acceder al archivo de contraseas 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 contraseas del
sistema (shadow).
De los mtodos antes sitiados LDAP es el ms robusto y escalable, pero tiene la limitacin de que usa
contraseas en texto plano (al igual que PAM), pero para solucionar este problema, generalmente se
usa TLS para encriptar las contraseas y trasmitirlas desde el cliente al servidor.
1) Primero comprueba que el servidor soporte la autentificacin va 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
mtodo de validacin y lo inicio nuevamente:
service saslauthd stop
saslauthd -a pam
service saslauthd start

adrianfrancisconi@yahoo.com.ar

Modificado el 13/08/10

Pgina 9

Gua Prctica de Instalacin de un Servidor de Correo

3) Verifico que tomo a PAM como mi mtodo de validacin, 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 travs del demonio
saslauthd, debido a que usamos PAM y los procesos sin privilegios (como Postfix) no tienen acceso a
los archivos de contraseas, 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: saslauthd
mech_list: plain login

Debido a que usaremos PAM, como nuestro mtodo de autentificacin SMTP, slo los mecanismos de
autentificacin en "texto plano" se pueden utilizar [21] (si decide usar el meto de autentificacin 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 contrasea -s smtp

Si esto no devuelve:
0: OK "Success."

Quiera decir que esta correctamente configurado, en cualquier otro caso debemos revisar la
configuracin.
7) Para permitir a un cliente autentificar al servidor (y viceversa), emplearemos SASL, bajo el
protocolo ESMTP (el cual es una Extensin 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 aadidos al final del archivo /etc/postfix/main.cf lo
siguiente [11]:
smtpd_sasl_auth_enable = yes

Habilita la autentificacin SMTP en el Servidor

smtpd_sasl_type = dovecot

Tipo de plug-in que el servidor Postfix SMTP debe


utilizar para la autenticacin (Para averiguar los plug-

Pgina 10

Implementacin

Ing. Adrin Francisconi

Implementacin

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 contrasea.
smtpd_sasl_path =
/var/spool/postfix/private/auth

Informacin de la implementacin especifica que el


servidor Postfix pasara a Dovecot (a travs del plug-in
SASL)

smtpd_sasl_security_options = noanonymous

Este parmetro permite controlar los mtodos de


autentificacin (que se asestaran o no), la lista de
funciones disponibles depende de la implementacin
del servidor SASL que se selecciona con
smtpd_sasl_type. En este caso se deshabilita los
mtodos de autenticacin que permiten la
autenticacin annima.

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 slo 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 restart
service postfix restart

adrianfrancisconi@yahoo.com.ar

Modificado el 13/08/10

Pgina 11

Gua Prctica de Instalacin de un Servidor de Correo

Encriptacin TLS
Mientras que la seccin de SASL maneja la autentificacin (que determina quien tiene derecho a enviar
correos). Esta seccin tratara la proteccin de contraseas, para asegurar que los intrusos no pueden
leer las contraseas secretas de los usuarios [17]. Para proteger la autentificacin, 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 encriptacin (*.key). Necesita una
clave primaria que nadie debe conocer y una clave pblica (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/ssl
cd /etc/postfix/ssl

2) Ahora creamos la clave primaria con la siguiente instruccin, en la que se nos pedir que
ingresemos una contrasea 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: contrasea
Verifying - Enter pass phrase for smtpd.key: contrasea

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 contrasea que introducimos en la generacin del archivo smtpd.key y responder algunas
preguntas, para la generacin del certificado:

Pgina 12

Implementacin

Ing. Adrin Francisconi

Implementacin

openssl req -new -key smtpd.key -out smtpd.csr


Enter pass phrase for smtpd.key: contrasea
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 []:adrian@mi-dominio.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: lo dejo en blanco
An optional company name []: lo dejo en blanco

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


5) A continuacin 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/emailAddress=adria
n@mi-dominio.com
Getting Private key
Enter pass phrase for smtpd.key:contrasea (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 conexin SSL para que pueda cifrar la informacin.
6) A continuacin 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: contrasea
writing 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

adrianfrancisconi@yahoo.com.ar

Modificado el 13/08/10

Pgina 13

Gua Prctica de Instalacin 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) ms 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-contrasea
Verifying - Enter PEM pass phrase: otra-contrasea
----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 []:adrian@mi-dominio.com

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 = no
smtp_use_tls = yes
smtpd_use_tls = yes
smtp_tls_note_starttls_offer = yes
smtpd_tls_key_file =
/etc/postfix/ssl/smtpd.key
smtpd_tls_cert_file =
/etc/postfix/ssl/smtpd.crt
smtpd_tls_CAfile =

Pgina 14

Implementacin

Ing. Adrin Francisconi

Implementacin

/etc/postfix/ssl/cacert.pem
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout =
3600s
tls_random_source = dev:/dev/urandom

11) Por ltimo debemos reiniciar Postfix para que los cambios tomen efecto:
service postfix restart

adrianfrancisconi@yahoo.com.ar

Modificado el 13/08/10

Pgina 15

Gua Prctica de Instalacin de un Servidor de Correo

Configuracin de Dovecot como servidor IMAP


1) 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 ms opciones
protocols = imap imaps
ssl_cert_file = /etc/postfix/ssl/smtpd.crt
ssl_key_file = /etc/postfix/ssl/smtpd.key
ssl_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

Pgina 16

Implementacin

Ing. Adrin Francisconi

Implementacin

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 tambin habilitar ssh y www. En vez de
ejecutar el comando anterior tambin 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.

adrianfrancisconi@yahoo.com.ar

Modificado el 13/08/10

Pgina 17

Gua Prctica de Instalacin de un Servidor de Correo

Instalacin del SquirrelMail con una base de datos


Mysql
Ahora seguiremos con la instalacin 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 cdigo PHP que permiten
hacer ciertas tareas de manera ms rpida y eficiente reutilizando cdigo 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 phppear-HTTP

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


date.timezone = "America/Caracas"

Configuro la zona Horaria [7]

default_charset = "UTF-8"

Cambio la cdigo de caracteres por defecto de iso8859-1 a UTF-8

register_globals = Of

Permite registrar autmaticamente (o no) las variables


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

upload_max_filesize = 20M

Define el tamao mximo del archivo para subir al


servidor

post_max_size = 20M

Modifico el tamao mximo de los datos que PHP


aceptar por el mtodo POST de 8M a 20M

memory_limit = 20M

Modifico el tamao mximo 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

Pgina 18

Implementacin

Ing. Adrin Francisconi

Implementacin

;include_path = ".:/php/includes"

Para agregar la ruta para los PEAR cmbiela 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 podrs hacer cosas
como $cadena[3]), pero podrs 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 opcin "C". Despus se configura como:
Organization Preferences
1. Organization Name
2. Organization Logo
3. Org. Logo Width/Height
4. Organization Title
5. Signout Page
6. Top Frame
7. Provider link
8. Provider name

:
:
:
:
:
:
:
:

Server Settings
1. Domain
2. Invert Time
3. Sendmail or SMTP

: mi-dominio.com
: false
: SMTP

A.
B.

: mi_servidor.mi-dominio.com:143 (dovecot)
: localhost:25

Update IMAP Settings


Update SMTP Settings

mi-dominio.com
../images/sm_logo.png
(308/111)
Bienvenido al Webmail de mi-dominio.com
_top
http://mi-dominio.com/
Ing. Adrian Francisconi

Folder Defaults
1. Default Folder Prefix
2. Show Folder Prefix Option
3. Trash Folder
4. Sent Folder
5. Drafts Folder
6. By default, move to trash
7. By default, save sent messages
8. By default, save as draft
9. List Special Folders First
10. Show Special Folders Color
11. Auto Expunge
12. Default Sub. of INBOX
13. Show 'Contain Sub.' Option
14. Default Unseen Notify
15. Default Unseen Type
16. Auto Create Special Folders
17. Folder Delete Bypasses Trash
18. Enable /NoSelect folder fix

adrianfrancisconi@yahoo.com.ar

:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:

mail/
true
Papelera
Enviados
Borradores
true
true
true
true
true
true
true
true
2
1
true
false
false

Modificado el 13/08/10

Pgina 19

Gua Prctica de Instalacin de un Servidor de Correo

General Options
1. Data Directory
2. Attachment Directory
3. Directory Hash Level
4. Default Left Size
5. Usernames in Lowercase
6. Allow use of priority
7. Hide SM attributions
8. Allow use of receipts
9. Allow editing of identity
Allow editing of name
Remove username from header
10. Allow server thread sort
11. Allow server-side sorting
12. Allow server charset search
13. Enable UID support
14. PHP session name
15. Location base
16. Only secure cookies if poss.
17. Disable secure forms
18. Page referal requirement

:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:

/var/lib/squirrelmail/prefs/
/var/spool/squirrelmail/attach/
0
150
true
true
false
true
true
true
false
true
true
true
true
SQMSESSID
true
false

Address Books
1. Change LDAP Servers
2. Use Javascript Address Book Search
3. Global file address book
4. Allow writing into global file address book
5. Allow listing of global file address book
6. Allowed address book line length

:
:
:
:
:

false
false
true
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
Database
1. DSN for Address Book
: mysql://usuario:contrasea@localhost/squirrelmail
2. Table for Address Book : address

Pgina 20

Implementacin

Ing. Adrin Francisconi

Implementacin

3.
4.
5.
6.
7.

DSN for Preferences


Table for Preferences
Field for username
Field for prefs key
Field for prefs value

8.
9.
10.
11.

DSN for Global Address Book


Table for Global Address Book
Allow writing into Global Address Book
Allow listing of Global Address Book

Language preferences
1. Default Language
2. Default Charset
3. Enable lossy encoding

:
:
:
:
:

mysql://usuario:contrasea@localhost/squirrelmail
userprefs
user
prefkey
prefval
:
: global_abook
: false
: false

: es_ES
: es_ES.UTF-8
: false

Otra forma de configurarlo sera 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 sera:
cd /usr/share/squirrelmail/plugins
wget 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

adrianfrancisconi@yahoo.com.ar

Modificado el 13/08/10

Pgina 21

Gua Prctica de Instalacin de un Servidor de Correo

Lo cual realiza un chequeo


8) Necesitamos instalar Mysql para agenda para SquirrelMail, para ello tambin instalaremos
phpMyadmin para facilitar las tares de configuracin
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 configuracin de Mysql /etc/my.cnf y
colocamos al final de este:
[mysqld]
default_character_set=utf8
character_set_server=utf8
character_set_client=utf8
default_collation=utf8_spanish_ci
character_set_filesystem=utf8
init-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) Despus de reiniciar el servicio y conectarnos a Mysql y comprobamos que tomo los parmetros
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/ |
+--------------------------+----------------------------+

Pgina 22

Implementacin

Ing. Adrin Francisconi

Implementacin

Tambin 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 ejemplo


mysql> 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 contrasea que es el mismo que se usa para acceder a Mysql
Si no lo encontramos en su archivo de configuracin que se encuentra en:
/etc/phpMyAdmin/config.inc.php

Tambin 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 tambin podra ser, para mi red local solamente:

adrianfrancisconi@yahoo.com.ar

Modificado el 13/08/10

Pgina 23

Gua Prctica de Instalacin 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 squirrelmail

O bien la podemos crear mediante phpMyAdmin


14) Despus 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 cmodos. Ahora crearemos las tablas para
guardar la informacin, 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 cdigo 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 tambin 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)
);

Pgina 24

Implementacin

Ing. Adrin Francisconi

Implementacin

Ahora dejamos Mysql ejecutando


quit;

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

en el men se selecciona la opcin


Database

y luego se selecciona la opcin


DSN for AddressBook

y se debe entrar lo siguiente

mysql://squirreluser:sqpassword@localhost/squirrelmail

Ahora seleccione
DSN 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

adrianfrancisconi@yahoo.com.ar

Modificado el 13/08/10

Pgina 25

Gua Prctica de Instalacin de un Servidor de Correo

Instalacin de Amavisd-New, Clamav y Mailman


1) 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 versin 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

despus 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 configuracin
Para configurar amavis en postfix tenemos que agregar lo siguiente en al archivo
/etc/postfix/master.cf

smtp-amavis unix n
-o smtp_data_done_timeout=1200

Pgina 26

smtp

Implementacin

Ing. Adrin Francisconi

Implementacin

-o smtp_send_xforward_command=yes
-o disable_dns_lookups=yes
-o max_use=20
127.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

adrianfrancisconi@yahoo.com.ar

Modificado el 13/08/10

Pgina 27

Gua Prctica de Instalacin de un Servidor de Correo

6) Instalar clamv
yum install clamav clamd clamav-db

Una vez instalado hay que ir al archivo de configuracin 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 direccin 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 correo


yum 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

Pgina 28

Implementacin

Ing. Adrin Francisconi

Implementacin

service postfix restart

y queda funcionando mailman con postfix, ahora bien sera 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 espaol debemos agregar tambin 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 espaol.
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

adrianfrancisconi@yahoo.com.ar

Modificado el 13/08/10

Pgina 29

Probando
el
Servidor de Correo

Gua Prctica de Instalacin de un Servidor de Correo

Enviar un correo por medio de SMTP


Nos conectamos va telnet al servidor [18]:
telnet mi-dominio.com smtp

El servidor debera 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 transmisin 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 enve una lista de las Extensiones del protocolo SMTP (ESMTP) que soporta. Por
ejemplo soporta la exencin VRFY [nombre] que confirma de que [nombre] es un usuario del MTA
del receptor, tambin como se ve soporta la extensin AUTH [Metodo] que sirve para autentificarse
ante el servidor, empleando el [Metodo] indicado, para cifrar el usuario y la contrasea.
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 transaccin para el envo de mensaje usamos MAIL FROM:
[usuario@dominio] indicndole el remitente del mensaje (adrian@mi-dominio.com). A menudo el
dominio ha de ser uno vlido, pues ciertos servidores comprueban la existencia del mismo:
MAIL FROM:<adrian@mi-dominio.com>

Pgina 31

Probando el Servidor de Correo

Ing. Adrin Francisconi

Probando el Servidor de Correo

La identifica del remitente del mensaje es apestada (nos devuelve cdigos que empiezan por "2" [23]):
250 2.1.0 OK

Dile a Postfix quin 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:<adrianfrancisconi@yahoo.com.ar>

Postfix no lo acepta:
554 5.7.1 <adrianfrancisconi@yahoo.com.ar>: 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 lgico, me estoy conectando va 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 <adrianfrancisconi@yahoo.com.ar>: Relay access denied

Es por que esta configurado (el parmetro 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 ms seguro.
Pruebo nuevamente pero esta vez, desde el servidor:
telnet localhost smtp

Repito los pasos y esta ves lo acepta:

adrianfrancisconi@yahoo.com.ar

Modificado el 13/08/10

Pgina 32

Gua Prctica de Instalacin 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,
slo quera 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 deberas 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=<steve@example.com>, size=364, nrcpt=1 (queue active)
postfix/pipe[...]: 5FF712A6: to=<john@example.com>, 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"

Pgina 33

Probando el Servidor de Correo

Ing. Adrin Francisconi

Probando el Servidor de Correo

Probando Dovecot/IMAP
telnet localhost 143

Deberas 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 nmero y la respuesta a ese comando tambin empieza
por el mismo nmero. As que los siguientes comandos deben teclearse con el nmero al principio de
cada lnea. Inicia sesin con el nombre de usuario y la contrasea:
1 login usuario contrasea

Dovecot te inicia la sesin:


1 OK Logged in.

Pregntale 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 informacin 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

adrianfrancisconi@yahoo.com.ar

Modificado el 13/08/10

Pgina 34

Gua Prctica de Instalacin de un Servidor de Correo

3 OK [READ-WRITE] Select completed.

Y ves que tienes un mensaje. Recgelo:


4 fetch 1 all

IMAP slo te proporcionar informacin bsica del mensaje:


* 1 FETCH (FLAGS (\Seen) INTERNALDATE .........
4 OK Fetch completed.

Para realmente leer el mensaje necesitas recogerlo explcitamente:


5 fetch 1 body[]

Y aqu est:
* 1 FETCH (BODY[] {474}
Return-Path: <steve@example.com>
X-Original-To: john@example.com
Delivered-To: john@example.com
Received: from example.com (localhost [127.0.0.1])
by ... (Postfix) with ESMTP id 692DF379C7
for <john@example.com>; Fri, 18 May 2007 22:59:31 +0200 (CEST)
Message-Id: <...>
Date: Fri, 18 May 2007 22:59:31 +0200 (CEST)
From: steve@example.com
To: undisclosed-recipients:;
Hola John,
slo quera dejarte una nota.
)
5 OK Fetch completed.

Desconctate del servidor:


6 logout

Y Dovecot te desconecta:
* BYE Logging out
6 OK Logout completed.
Connection closed by foreign host.

La forma ms rpida de probar las conexiones es, usando mutt:

Pgina 35

Probando el Servidor de Correo

Ing. Adrin Francisconi

Probando el Servidor de Correo

adrianfrancisconi@yahoo.com.ar

Modificado el 13/08/10

Pgina 36

Gua Prctica de Instalacin de un Servidor de Correo

Prueba de SMTP autentificado


Con el fin de generar la informacin de autentificacin 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.html
y http://rpm.pbone.net/index.php3/stat/4/idpl/2294293/com/metamail-2.7-2.i386.rpm.html, (el cual
contiene la aplicacin mmencode) o sino tambin 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 autentificacin:


$ 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 continuacin 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

Pgina 37

Probando el Servidor de Correo

Ing. Adrin Francisconi

Probando el Servidor de Correo

250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN

Como se ve soporta la extensin AUTH PLAIN que es la extensin que nos permite usar la
autentificacin con el protocolo SMTP en texto plano (cifrado el usuario y la contrasea en base 64),
como es requerido para usar PAM. Enva la cadena de autentificacin con la contrasea cifrada en base
64:
AUTH PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk

El servidor debera aceptar la autentificacin:


235 2.0.0 Authentication successful

Desconctate de Postfix:
quit

adrianfrancisconi@yahoo.com.ar

Modificado el 13/08/10

Pgina 38

Gua Prctica de Instalacin 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/trilug@trilug.org/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-paraque-envie-correo-a-traves-del-smtp-de-gmail/

[16]

http://www.postfix.org/BASIC_CONFIGURATION_README.html

[17]

Administracin 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

Pgina 39

Referencias

Ing. Adrin Francisconi

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

adrianfrancisconi@yahoo.com.ar

Modificado el 13/08/10

Pgina 40

También podría gustarte