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

Anuncio
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
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 email 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”.
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.
A mi esposa
Índice General de Contenidos
Prólogo....................................................................................................................................VI
Implementación......................................................................................................................1
Esquema general...............................................................................................................................2
Pre-instalación, preparando el ambiente...........................................................................................3
Instalación de POSTFIX...................................................................................................................5
Configuración de SASL (saslauthd)...............................................................................................10
Encriptación TLS............................................................................................................................13
Configuración de Dovecot como servidor IMAP...........................................................................17
Instalación del SquirrelMail con una base de datos Mysql............................................................19
Instalación 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
[email protected]
Modificado el 18/12/09
Página V
Prólogo
En elaboración ....
Página VI
Implementación
Guía Práctica de Instalación de un Servidor de Correo
Esquema general
A continuación el esquema que tendrá el Servidor de Correo [28]
Página 2
Implementación
Ing. Adrián Francisconi
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
mi-dominio.com. 86400 IN
mi-dominio.com. 86400 IN
NS
NS
NS
dinamic3.cdmon.net.
dinamic1.cdmon.net.
dinamic2.cdmon.net.
;; ADDITIONAL SECTION:
[email protected]
Modificado el 13/08/10
Página 3
Guía Práctica de Instalación 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 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
Implementación
Instalación 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 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 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 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
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 IPv4
smtpd_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
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 adjuntos
mailbox_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
[email protected]
mi-otro-dominio.com
[email protected]
[email protected]
adrianfrancisconi
adrian
mi-otro-dominio
adrian
Modificado el 13/08/10
Página 7
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/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 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
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
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: saslauthd
mech_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 Servidor
smtpd_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
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 restart
service postfix restart
[email protected]
Modificado el 13/08/10
Página 11
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/ssl
cd /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ña
Verifying - 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
Implementación
openssl req -new -key smtpd.key -out smtpd.csr
Enter pass phrase for smtpd.key: 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]
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 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/emailAddress=adria
[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ña
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
[email protected]
Modificado el 13/08/10
Página 13
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ña
Verifying - 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 = 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 =
Página 14
Implementación
Ing. Adrián Francisconi
Implementación
/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
[email protected]
Modificado el 13/08/10
Página 15
Guía Práctica de Instalación de un Servidor de Correo
Configuración 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 más 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
Página 16
Implementación
Ing. Adrián Francisconi
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
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 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 código de caracteres por defecto de iso8859-1 a UTF-8
register_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
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 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
[email protected]
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
mail/
true
Papelera
Enviados
Borradores
true
true
true
true
true
true
true
true
2
1
true
false
false
Modificado el 13/08/10
Página 19
Guía Práctica de Instalación 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:contraseña@localhost/squirrelmail
2. Table for Address Book : address
Página 20
Implementación
Ing. Adrián Francisconi
Implementación
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:contraseña@localhost/squirrelmail
userprefs
user
prefkey
prefval
:
: global_abook
: false
: false
: es_ES
: es_ES.UTF-8
: 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/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
[email protected]
Modificado el 13/08/10
Página 21
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=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) 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
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 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 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
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 squirrelmail
O 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
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ón
Database
y luego se selecciona la opción
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
[email protected]
Modificado el 13/08/10
Página 25
Guía Práctica de Instalación de un Servidor de Correo
Instalación 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 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
-o smtp_data_done_timeout=1200
Página 26
-
2
smtp
Implementación
Ing. Adrián Francisconi
Implementación
-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
[email protected]
Modificado el 13/08/10
Página 27
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 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
Página 28
Implementación
Ing. Adrián Francisconi
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
Probando
el
Servidor de Correo
Guía Práctica de Instalación de un Servidor de Correo
Enviar un correo por medio de SMTP
Nos 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
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
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
Probando el Servidor de Correo
Probando Dovecot/IMAP
telnet 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
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
Probando el Servidor de Correo
[email protected]
Modificado el 13/08/10
Página 36
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.html
y 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
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
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-paraque-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
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
Descargar