Guía Práctica de Instalación de un Servidor de Correo Ing. Hugo Adrián Francisconi adrianfrancisconi@yahoo.com.ar 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: adrianfrancisconi@yahoo.com.ar 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: adrianfrancisconi@yahoo.com.ar, 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 adrianfrancisconi@yahoo.com.ar 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: adrianfrancisconi@yahoo.com.ar 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). adrianfrancisconi@yahoo.com.ar 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 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 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 adrianfrancisconi@yahoo.com.ar 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 adrianfrancisconi@yahoo.com.ar 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 []: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 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 n@mi-dominio.com 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 adrianfrancisconi@yahoo.com.ar 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 []: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 = 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 adrianfrancisconi@yahoo.com.ar 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. adrianfrancisconi@yahoo.com.ar 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 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 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 adrianfrancisconi@yahoo.com.ar 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: adrianfrancisconi@yahoo.com.ar 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 adrianfrancisconi@yahoo.com.ar 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 adrianfrancisconi@yahoo.com.ar 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 adrianfrancisconi@yahoo.com.ar 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 (adrian@mi-dominio.com). A menudo el dominio ha de ser uno válido, pues ciertos servidores comprueban la existencia del mismo: MAIL FROM:<adrian@mi-dominio.com> 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:<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 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 <adrianfrancisconi@yahoo.com.ar>: 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: adrianfrancisconi@yahoo.com.ar 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=<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" 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 adrianfrancisconi@yahoo.com.ar 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: <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, 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 adrianfrancisconi@yahoo.com.ar 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 adrianfrancisconi@yahoo.com.ar 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/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] 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 adrianfrancisconi@yahoo.com.ar Modificado el 13/08/10 Página 40