Inicio arrow Artículos arrow Linux arrow Sistema de correo con Postfix, Cyrus y MySQL (VI - Postfix)
Menú Principal
Lo más leído
Consigue Firefox
Usuarios
993 registrados
1 hoy
5 esta semana
138 este mes
Último: gabity...
Formulario de acceso



... Regenerar clave
... Registro
Sistema de correo con Postfix, Cyrus y MySQL (VI - Postfix) Imprimir E-Mail
jueves, 06 de abril de 2006

En el proceso de configuración del programa postfix atenderemos a los dos ficheros fundamentales que hacen que toda la maquinaria de este MTA engrane de forma perfecta : main.cf y master.cf .

El fichero /etc/postfix/master.cf

Ya que es nuestra intención aprovecharnos de las ventajas que nos ofrece Sieve en las tareas de filtrado, será necesario utilizar LMTP para la comunicación entre postfix y cyrus. Tal y como veremos en un capítulo posterior dedicado a la confiuración de Cyrus, habilitaremos el servicio lmtpunix sobre el fichero de configuración /etc/cyrus.conf. Aunque nuestra configuración del sistema de correo se está basando principalmente en sistema Fedora y los permisos ya se aplican con las instalaciones de los paquetes, no está de más comentar que el socket creado por el servicio de lmtpunix (en Fedora Core /var/lib/imap/socket/lmtp) tendrá que ser accesible por postfix.
Por otro lado, ya que cyrus requiere que todas las entregas por LMTP se autentiquen, considerará que toda entrega que se haga a través de un socket será de confianza, estableciendo que sea el usuario postman el que las realiza. Abriremos por tanto el fichero /etc/postfix/master.cf y observaremos que una línea como esta está presente:

lmtp unix - - n - - lmtp

Para terminar, nos fijaremos en otra línea de configuración posterior:

# The Cyrus deliver program has changed incompatibly, multiple times.
old-cyrus unix - n n - - pipe
flags=R user=cyrus argv=/usr/lib/cyrus-imapd/deliver -e -m ${extension} ${user}

Hay que prestar especial atención a la ruta apuntada por el parámetro argv pues en alguna ocasión no refleja bien la situación del programa deliver y las entregas de correo pueden llegar a no efectuarse.

 

El fichero /etc/postfix/main.cf

Lo primero que hay que hacer al abrir por primera vez el fichero /etc/postfix/main.cf, es establecer de forma correcta los parámetros de nuestro servidor de correo. Para empezar, cambiaremos el nombre del host:

myhostname = foo.bar.org

Continuaremos con el parámetro mydestination, que igualaremos a los nombres de todos los dominios que consideremos locales (similar al fichero sendmail.cw de configuración de sendmail) . Cada uno de los dominios, si es que hay más de uno, irá separado por comas:

mydestination = foo.bar.org, liberaliatempus.com, furchbar-grausam.ch, whatever.domain.tld, mysql:/etc/postfix/mysql-mydestination.cf

En algún caso, nos veremos en la necesidad de utilizar los servicios de un proveedor para procesar el envío de correo. En este caso, igualaremos el parámetro relayhost a cada uno de los proveedores de servicios que nos interesen. Si el parámetro queda en blanco, el correo saliente será procesado directamente por el servicio de smtp que se haya establecido por defecto:

relayhost = relay01.foobar.net relay02.foobar.net relay03.foobar.net

Otro parámetro importante a tener en cuenta es el referente al mailtransport, o el programa que se encargará de transportar el correo de un programa a otro. Para nuestros propósitos, deberíamos usar como programa de procesamiento a cyrus, para lo cual igualamos el parámetro mailbox_transport de la siguiente manera:

mailbox_transport = cyrus

Si, por ejemplo, preferimos usar lmtp, igualaríamos el parámetro al socket correspondiente:

mailbox_transport = lmtp:unix:/var/lib/imap/socket/lmtp

Finalmente estableceremos bajo postfix el sistema de dominios virtuales y su procesamiento correcto. Para esto, utilizaremos distintos ficheros de configuración que informarán a postfix del lugar en la base de datos de mysql en el cual se encuentran los dominios virtuales correspondientes y los alias de usuario:

virtual_alias_maps = mysql:/etc/postfix/mysql-virtual.cf
sender_canonical_maps = mysql:/etc/postfix/mysql-canonical.cf

virtual_alias_maps establece la configuración de acceso a los alias virtuales, mientras que sender_canonical_maps se encarga de reescribir la dirección de correo a su formato correcto. Este último parámetro es necesario para el uso de un interface web, ya que los usuarios se crean habitualmente del modo test001, sin la dirección completa.

Para el correcto funcionamiento de esta última configuración, crearemos los ficheros correspondientes ...

/etc/postfix/mysql-virtual.cf

# Usuario y password de acceso al servidor mysql
hosts = localhost
user = mail
password = password

# El nombre de la base de datos
dbname = mail

# El nombre de la tabla
table = virtual

#
select_field = dest
where_field = alias
additional_conditions = and status = '1'

/etc/postfix/mysql-canonical.cf

# Usuario y password de acceso al servidor mysql
hosts = localhost
user = mail
password = password

# El nombre de la base de datos
dbname = mail

# El nombre de la tabla
table = virtual
#
select_field = alias
where_field = username
#Devuelve la primera ocurrencia
additional_conditions = and status = '1' limit 1

/etc/postfix/mysql-mydestination.cf

# Nombre de usuario y contraseña del servidor mysql
hosts = localhost
user = mail
password = password

# Nombre de la base de datos
dbname = mail

# Nombre de la tabla
table = domain
#
select_field = domain_name
where_field = domain_name

 

SMTP con autenticación SASL y la seguridad de PAM

Antes de comenzar con la activación en postfix de SASL, vamos a comprobar que todo lo que hemos hecho hasta ahora se comporta de manera correcta. Para ello, veremos ante todo que cada uno de los servicios está a la escucha en su lugar correspondiente:

# netstat −an|grep LISTEN
tcp 0 0 0.0.0.0:143 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:2000 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN

Sobre el puerto 25 tenemos el servicio smtp, en el 2000 se encuentra sieve y en el 143 escucha el servicio imap (a configurar en el siguiente capítulo). Si alguno de los servicios no aparece activado, esperaremos a la configuración correcta de Cyrus y a un capítulo posterior para hacer todas las comprobaciones. A priori, si los tres servicios están activos, ya se podría mandar correo, por ejemplo, a un buzón local (en negrita los comandos a teclear):

# telnet localhost 25
Trying 127.0.0.1...
Connected to webmail.mailserver.com (127.0.0.1).
Escape character is '^]'.
220 webmail.mailserver.com ESMTP Postfix (Fedora)
HELO localhost
250 webmail.mailserver.com
MAIL FROM: < Esta dirección de correo electrónico está protegida contra los robots de spam, necesita tener Javascript activado para poder verla >
250 Ok
RCPT TO: < Esta dirección de correo electrónico está protegida contra los robots de spam, necesita tener Javascript activado para poder verla >
250 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
Este es un mensaje de pruebas enviado a traves de telnet.
.

250 Ok: queued as 5F496BEE9
QUIT
221 Bye
Connection closed by foreign host.

Para ver un log bastante detallado del proceso de envío de correo, añadiremos el parámetro -v al fichero /etc/postfix/master.cf, sobre la línea correspondiente al servicio de smtp:

smtp inet n - n - - smtpd -v

Sabiendo que el log queda alojado en /var/log/maillog en los sistemas con Fedora.

Procedamos, ahora sí, a activar SASL sobre postfix. Autenticaremos a los clientes conectados mediante smtp para que puedan hacer relay sobre el servidor de correo. Para ello modificaremos la opción smtpd_recipient_restrictions del fichero /etc/postfix/main.cf:

smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain =
broken_sasl_auth_clients = yes

Con esto, los clientes sin autoridad podrán hacer relay sobre el servidor siempre que pertenezcan a las redes indicadas en mynetworks. Todo lo demás será rechazado. Más adelante, aseguraremos la conexión mediante TLS. Si smtpd_sasl_local_domain se iguala a algo, forzaremos la comprobación del usuario entrando en /etc/sasldb2 con [usuario@dominio al que se iguala la opción]. Para nuestros propósitos de autenticación bajo mysql, dejaremos la opción igualada a nada.

Tendremos que indicar seguidamente el mecanismo a usar a través de SASL y para ello dejaremos, si no lo está ya, el fichero /usr/lib/sasl2/smtpd.conf con una única línea:

pwcheck_method: saslauthd

Y, sobre todo en sistemas con RedHat o con Fedora, hay que cambiar el método de autenticación con que saslauthd se inicia por defecto. Esto lo haremos sobre el fichero /etc/sysconfig/saslauthd, donde cambiaremos el mecanismo por defecto (habitualmente shadow) para igualarlo a pam:

MECH=pam

Para sistemas que no sean Fedora, hay que indicar al sistema dónde se encuentra el socket saslauthd y para esto habrá que crear un enlace hacia la posición deseada. Habitualmente, quedará como sigue, aunque siempre dependerá de la distribución en uso:

# mv /var/run/sasl2 /var/run/sasl2-old
# ln -s /var/run/saslauthd /var/run/sasl2

Una vez realizados los cambios, potenciaremos la seguridad en postfix mediante diferentes opciones que iremos añadiendo a smtpd_recipient_restrictions, amén de utilizar opciones como smtpd_helo_required = yes para verificar el uso correcto de nuestro servidor de correo. Aunque es necesaria la lectura de la documentación de postfix a este respecto, el fichero /etc/postfix/main.cf podría quedar de esta manera en lo referente a los filtros de autenticación:

smtpd_helo_required = yes
disable_vrfy_command = yes
smtpd_recipient_restrictions = reject_invalid_hostname,
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unknown_sender_domain,
reject_unknown_recipient_domain,
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination,
check_helo_access hash:/etc/postfix/helo_check
smtpd_data_restrictions = reject_unauth_pipelining, permit

Por último, echemos un vistazo al fichero de configuración /etc/postfix/main.cf al completo, incluyendo opciones que veremos más adelante, como el soporte para TLS o el filtrado con amavisd-new:

#CONFIGURACIÓN PRINCIPAL POSTFIX
setgid_group = postdrop
smtpd_banner = $myhostname ESMTP $mail_name (Fedora)
biff = no
append_dot_mydomain = no
delay_warning_time = 4h
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
program_directory = /usr/libexec/postfix
myhostname = webmail.mailserver.com
mydomain = mailserver.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination = $myhostname,
$mydomain,
localhost.$mydomain,
localhost,
mysql:/etc/postfix/mysql-mydestination.cf
myorigin = $myhostname
mynetworks = 127.0.0.0/8, 192.168.0.0/24
relay_domains = $mydestination
mailbox_size_limit = 0
recipient_delimiter = +
#mailbox_transport = lmtp:unix:/var/lib/imap/socket/lmtp
mailbox_transport = cyrus

#SOPORTE SASL
smtp_sasl_auth_enable = no
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
#smtpd_sasl_local_domain = $myhostname
smtpd_sasl_local_domain =
broken_sasl_auth_clients = yes
#smtp_sasl_password_maps = hash:/etc/postfix/sasl/saslpass

#AUTENTICACIÓN VÁLIDA
smtpd_helo_required = yes
disable_vrfy_command = yes
smtpd_recipient_restrictions = reject_invalid_hostname,
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unknown_sender_domain,
reject_unknown_recipient_domain,
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination,
check_helo_access hash:/etc/postfix/helo_check
smtpd_data_restrictions = reject_unauth_pipelining, permit

#SOPORTE TLS
smtpd_use_tls = yes
smtpd_tls_auth_only = yes
smtpd_tls_key_file = /etc/postfix/ssl/newreq.pem
smtpd_tls_cert_file = /etc/postfix/ssl/newcert.pem
smtpd_tls_CAfile = /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

#Amavisd-New
content_filter = smtp-amavis:[localhost]:700024
sendmail_path = /usr/sbin/sendmail
html_directory = no
manpage_directory = /usr/share/man
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
queue_directory = /var/spool/postfix
mail_owner = postfix

unknown_local_recipient_reject_code = 450
smtp_host_lookup = dns, native

#OTHERS
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual.cf
sender_canonical_maps = mysql:/etc/postfix/mysql-canonical.cf
message_size_limit = 20480000

 

 

Comentario[s]
netstat -an|grep LISTEN
Escrito por COCOLIZO el 2006-05-12 20:28:01
Hola Mira, cundo aplico este comendo la unica linea que me coincide es tcp 0 0 0.0.0:143 
el resto no me sale, pero si veo lo siguiente: 
 
tcp 0 0 0.0.0.0:993 0.0.0.0:* LISTEN 
tcp 0 0 0.0.0.0:995 0.0.0.0:* LISTEN 
tcp 0 0 0.0.0.0:34342 0.0.0.0:* LISTEN 
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 
tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN 
tcp 0 0 0.0.0.0:143 0.0.0.0:* LISTEN 
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 
tcp 0 0 0.0.0.0:10000 0.0.0.0:* LISTEN 
tcp 0 0 0.0.0.0:2000 0.0.0.0:* LISTEN 
tcp 0 0 127.0.0.1:50000 0.0.0.0:* LISTEN 
tcp 0 0 127.0.0.1:50002 0.0.0.0:* LISTEN 
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTE
Escrito por admin el 2006-05-12 22:50:33
La salida del ejemplo sólo muestra lo que nos interesa., habiéndose eliminado todo lo demás. 
Tú tienes los tres servicios corriendo en sus puertos, el 25, el 143 y el 2000 (menos importante). 
Te aconsejo que leas el siguiente capítulo y montes el servidor imap, ya que todo tiene relación.
Tengo problemas con helo_check
Escrito por raulgy el 2006-06-25 03:46:49
Estoy en el punto seis y cuando llego a la configuración de main.cf me está marcando un ERROR FATAL con el helo_check.db. 
 
Podrían aydarme a pasar de este punto.
helo_check
Escrito por mhbeyle el 2006-07-30 14:22:56
El helo_check es un fichero que tiene que generarse en formato Berkeley DB. Se explica con detalle en el Capítulo XI de este manual: 
Cap. XI
Asunto: Undelivered Mail Returned to Sen
Escrito por phqr58 el 2006-12-12 16:58:05
Apreciados Amigos: 
 
Alguien sabe de que se trata este mensaje? 
 
con frecuencia aparece este mensaje en el /var/log/mail y el correo se regresa: 
Asunto: Undelivered Mail Returned to Sender 
 
Tendrá que ver con cuotas de correo de CYRUS-IMAP? 
 
Este es el log 
> -----Original Message----- 
> From: Mail Delivery System [mailto: Esta dirección de correo electrónico está protegida contra los robots de spam, necesita tener Javascript activado para poder verla
> Sent: Lunes, 11 de Diciembre de 2006 13:57 
> To: Esta dirección de correo electrónico está protegida contra los robots de spam, necesita tener Javascript activado para poder verla  
> Subject: Undelivered Mail Returned to Sender 

> This is the Postfix program at host mail.la-llave.com. 

> I'm sorry to have to inform you that your message could not 
> be delivered to one or more recipients. It's attached below. 

> For further assistance, please send mail to  

> If you do so, please include this problem report. You can 
> delete your own text from the attached returned message. 

> The Postfix program 

> : host 
> /var/lib/imap/socket/lmtp[/var/lib/imap/socket/lmtp] said: 250 2.1.5 ok 
> (in 
> reply to DATA command) 
 
mi sistema es: 
SUSE LINUX ENTERPRISE 10 
Postfix 
cyrus-imap 
Amavis 
Clamav 
Spamassassin 
Por Favor AYUDA con urgencia
Escrito por JUANCARLOSQC el 2007-04-09 17:48:58
Cordial saludo, espero que alguien me pueda ayudar. 
 
El problema es el siguiente al ejecutar el comando: netstat −an|grep LISTEN no me aprece el puerto 25 como dice aqui, y hasta ahora he seguido todas las indicaciones no entiendo que pasa, alguien que me oriente
no me funciona el telnet
Escrito por juan35912 el 2007-10-04 00:05:36
HOla Amigos soy nuevo en estas configuraciones, quisiera saber porque no me funciona el telnet, ya que cuando hago netstat - an | grep LISTEN me sale esto 
tcp 0 0 127.0.0.1:2208 0.0.0.0:* LISTEN 
tcp 0 0 0.0.0.0:960 0.0.0.0:* LISTEN 
tcp 0 0 0.0.0.0:993 0.0.0.0:* LISTEN 
tcp 0 0 0.0.0.0:995 0.0.0.0:* LISTEN 
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 
tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN 
tcp 0 0 127.0.0.1:143 0.0.0.0:* LISTEN 
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 
tcp 0 0 0.0.0.0:10000 0.0.0.0:* LISTEN 
tcp 0 0 0.0.0.0:2000 0.0.0.0:* LISTEN 
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 
tcp 0 0 127.0.0.1:2207 0.0.0.0:* LISTEN 
tcp 0 0 :::993 :::* LISTEN 
tcp 0 0 :::995 :::* LISTEN 
tcp 0 0 :::110 :::* LISTEN 
tcp 0 0 :::2000 :::* LISTEN 
tcp 0 0 :::22 :::* LISTEN 
 
por fabor ayudenme

Sólo los usuarios registrados pueden escribir comentarios.
Por favor, valídate o regístrate.

Powered by AkoComment 2.0!

 
< Anterior   Siguiente >