[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Postfix sobre squeezy. Pasitos de bebé.



Hola,

Estamos haciendo ensayos con postfix sobre squeezy en una lan con solo dos máquinas y empleamos como guía, entre otros documentos, algo que nos pasaron de una web del sitio esdebian. Hemos ejecutado todos los pasos de esta guía pero al levantar roundcube para empezar con las pruebas de nuestro minilaboratorio obtenemos el mensaje:

'La conexión con el servidor IMAP falló'

Creemos estar no muy lejos de la verdad pero, como somos bebé en esto, no tenemos ni idea de por donde tirar :)

Detallamos los pasos ejecutados pues tal vez algún experto en el tema pueda darse cuenta fácilmente de nuestro problema.

Servidor de correo con Postfix, Courier-IMAP, MySQL, Spamassassin y Rondcube.
-------------------------------------------------------------------------------

- Instalación de postfix y mysql
#aptitude install postfix mysql-server postfix-mysql

- Configuración de Postfix para que funcione con MySQL(/etc/postfix/main.cf y /etc/postfix/master.cf).
(solo las variables que modificamos según las sugerencias de la guía)

myhostname = samaria.ciudades-antiguas.com

mydomain = ciudades-antiguas.com

myorigin = $mydomain
#alias_maps = hash:/etc/aliases
#alias_database = hash:/etc/aliases

#################################
#   Usuarios Virtuales
################################
home_mailbox = Maildir/
virtual_mailbox_base = /var/spool/mail/
virtual_mailbox_maps = mysql:/etc/postfix/mysql_m_maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql_transport.cf
virtual_alias_maps = mysql:/etc/postfix/mysql_a_maps.cf
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_transport = virtual
local_transport = virtual
local_recipient_maps = $virtual_mailbox_maps, $virtual_alias_maps
#################################
#   Autenticación
#################################
smtpd_sasl_auth_enable = yes
smtpd_sasl2_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination
smtpd_delay_reject = yes
################################
#   OTROS
################################
disable_vrfy_command = yes
maximal_queue_lifetime = 1d
strict_rfc821_envelopes = yes
message_size_limit = 10240000
disable_dns_lookups = no
#default_transport = error
#relay_transport = error

De todo el fichero, podemos destacar una sección importante, la de virtualización, ya que el resto se puede configurar al gusto del consumidor, pero lo más interesante que buscamos es que utilice MySQL para las cuentas de usuario (buzones) y redirecciones.

Dicho de otro modo, en lugar de indicar la ubicación de un fichero real donde leer la configuración, le indicamos la ubicación de un fichero con las indicaciones necesarias para que lo consulte en MySQL.

Por lo tanto, paso a detallar los ficheros de acceso a mysql:

Ficheros de Configuración para usuarios virtuales en postfix:

/etc/postfix/mysql_a_maps.cf

user=<usuario>
password=<clave>
dbname=<base de datos>
table=virtual
hosts=127.0.0.1
select_field=goto
where_field=address

Este fichero permite asignar alias a algunas direcciones de correo que dispongamos. Funciona como cuando el sistema operativo le envía notificaciones al root mediante mails y estos son recibidos también por el usuario predeterminado del sistema.

/etc/postfix/mysql_transport.cf

user=<usuario>
password=<clave>
dbname=<base de datos>
table=transport
hosts=127.0.0.1
select_field=transport
where_field=domain
/etc/postfix/mysql_m_maps.cf

Primero se debe aclarar que es chroot. Chroot permite configurar el sistema de forma tal que se puedan lanzar procesos confinados dentro de un determinado directorio. Para ellos y sus procesos hijos, dicho directorio será el "/" (la raíz). Cualquier fichero o directorio que esté fuera del CHROOT les quedará inaccesible.

Ahora bien, postfix tiene su chroot en /var/spool/postfix/ y para poder acceder al servicio de mysql, es necesario usar un archivo mysqld.sock que se encuentra en /var/run/mysqld/mysqld.sock. Para lograr que postfix se comunique correctamente con mysql, es necesario crear un enlace simbólico a dicho archivo.

# cd /var/spool/postfix
# mkdir -p var/run/mysqld/
# cd var/run/mysqld/
# ln -s /var/run/mysqld/mysqld.sock mysqld.sock

Por qué hacer esto (opinión personal), sencillamente porque de no hacerlo postfix no podrá conectarse a mysql para consultar a los usuarios. En esta parte me pude sacar una buenas canas, gastar un buen número de tazas de café y 2 noches sin dormir.

- Configurar Autenticación de Postfix con SASL
# apt-get install libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin

Después de instalados estos paquetes, dentro de la ruta /etc/postfix se podrá encontrar una carpeta con el nombre sasl dentro de la cual tendremos que crear un archivo llamado smtpd.conf:

pwcheck_method: auxprop
auxprop_plugin: sql
sql_engine: mysql
mech_list: LOGIN PLAIN
sql_hostnames: 127.0.0.1
sql_user: <usuario>
sql_passwd: <clave>
sql_database: <base de datos>
sql_select: SELECT clear FROM usuarios WHERE address = '%u@%r'
log_level: 7

Este archivo tiene todo lo necesario para que postfix, mediante el servicio de SASL pueda consultar en la base de datos la información relacionada con los usuarios registrados en ella. La ultima linea es muy util para revisar los logs del sistema en busca de fallas en la configuración empleada. Fue lo que me ayudó a identificar los problemas de acceso de postfix a mysql. Obviamente es recomendable que una vez se logre satisfactoriamente la configuración, que se baje el nivel de registro en logs por razones de seguridad.

El otro archivo que hay que cambiar es /etc/default/saslauthd en cual hay que cambiar la siguiente linea:

START=yes
Esto para que el servicio SASL arranque con el sistema.

- Base de datos MySQL y usuario

CREATE DATABASE 'mail' DEFAULT CHARACTER SET latin1;

CREATE TABLE virtual(address VARCHAR(255) NOT NULL PRIMARY KEY,
    goto VARCHAR(255) NOT NULL) ENGINE=MyISAM DEFAULT CHARSET=latin1;
CREATE TABLE transport(domain VARCHAR(128) NOT NULL PRIMARY KEY,
    transport VARCHAR(128) NOT NULL) ENGINE=MyISAM DEFAULT CHARSET=latin1;
CREATE TABLE usuarios(address VARCHAR(255) NOT NULL PRIMARY KEY,
    clear VARCHAR(20) NOT NULL,
    uid INT(5) UNSIGNED DEFAULT 5000,
    gid INT(5) UNSIGNED DEFAULT 5000,
    name VARCHAR(128) NOT NULL,
    home VARCHAR(128) NOT NULL '/var/spool/mail',
    domain VARCHAR(128) NOT NULL,
    maildir VARCHAR(255) NOT NULL,
    active CHAR(1) NOT NULL DEFAULT '1')ENGINE=MyISAM DEFAULT CHARSET=latin1;

CREATE USER 'postfix'@'localhost' IDENTIFIED BY 'postfix';
GRANT ALL PRIVILEGES ON mail.* TO 'postfix'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES ;

El usuario es postfix, con clave postfix, la base de datos es mail y las tablas de la base de datos, transport, virtual y usuarios.

- Instalación y conf de Spamassassin para que nos identifique los emails no deseados.

#aptitude install spamssassin

En /etc/spamassassin/local.cf descomentamos,

rewrite_header Subject *****SPAM*****

Para que spamssassin funcnione como un demonio, para lo cual le creamos un usuario y un grupo:

#groupadd -g 5001 spamd
#useradd -u 5001 -g spamd -s /sbin/nologin -d /var/lib/spamassassin spamd
#mkdir /var/lib/spamassassin
#chown spamd:spamd /var/lib/spamassassin

/etc/default/spamassassin para que que tenga las siguientes opciones,

ENABLED=1
SAHOME="/var/lib/spamassassin/"
OPTIONS="--create-prefs --max-children 5 --username spamd --helper-home-dir ${SAHOME} -s ${SAHOME}spamd.log"
PIDFILE="${SAHOME}spamd.pid"

#/etc/init.d/spamassassin start

5.2 Configuración de Postfix para que use Spamassassin

/etc/postfix/master.cf para que Postfix utilice Spamassassin, buscando la línea:

smtp      inet  n       -       -       -       -       smtpd

y modificándola para que quede así:

smtp      inet  n       -       -       -       -       smtpd -o content_filter=spamassassin

Y al final del fichero añadir asegurándose que no lo este ya, lo siguiente:

spamassassin unix -     n       n       -       -       pipe
        user=spamd argv=/usr/bin/spamc -f -e
        /usr/sbin/sendmail -oi -f ${sender} ${recipient}

con esto conseguimos que postfix utilice Spamassassin para marcar los emails no deseados.

- Servicio IMAP/POP

#aptitude install courier-imap courier-pop courier-authdaemon courier-authlib-mysql

- Para que courier para que consute a MySQL(/etc/courier/authdaemonrc y /etc/courier/authmysqlrc)

En /etc/courier/authdaemonrc

authmodulelist="authmysql"

En el fichero /etc/courier/authmysqlrc

#Datos de conexión al Servidor MySQL
MYSQL_SERVER            localhost
MYSQL_USERNAME          <usuario>
MYSQL_PASSWORD          <clave>
MYSQL_SOCKET            /var/run/mysqld/mysqld.sock
MYSQL_PORT              3306
MYSQL_DATABASE          <base de datos>
MYSQL_USER_TABLE        usuarios
MYSQL_CLEAR_PWFIELD     clear
MYSQL_UID_FIELD         uid
MYSQL_GID_FIELD         gid
MYSQL_LOGIN_FIELD       name
MYSQL_HOME_FIELD        home
MYSQL_NAME_FIELD        name
MYSQL_MAILDIR_FIELD     maildir

#/etc/init.d/courier-imap restart
#/etc/init.d/courier-authdaemon restart
#/etc/init.d/courier-pop restart

ya deberíamos poder consultar nuestro correo mediante cualquier quiente compatible con IMAP (kmail, outlook, etc)

- Primer buzón de prueba,

Vamos a ver los pasos para la creación de un Buzón.

para las pruebas de envío y recepción de correo se han empleado dos casillas, una de ellas es esteban@ciudades-antiguas.com y admin@ciudades-antiguas.com

Tabla transport:
+ - - - - - - - - + - - - - - - - - +
|  domain         |  transport      |
+ - - - - - - - - + - - - - - - - - +
|  ciudades-antiguas.com  |  local:         |
+ - - - - - - - - + - - - - - - - - +

Tabla virtual
+ - - - - - - + - - - - - +
|  address    |  goto     |
+ - - - - - - + - - - - - +
|  root       |  admin    |
+ - - - - - - + - - - - - +

Tabla usuarios:
+ - - - - - - - - - - - - + - - - - - + - - - - + - - - - + - - - - - - - - - +
|  address                |  clear    |  uid    |  gid    |  name             |
+ - - - - - - - - - - - - + - - - - - + - - - - + - - - - + - - - - - - - - - +
|  esteban@ciudades-antiguas.com  |  123456   |  5000   |  5000   | esteban  |
+ - - - - - - - - - - - - + - - - - - + - - - - - - - - - + - - - - - - - - - + - - - - - - - - - - + - - - - - - - - + - - - - - - - - - - - - - + - - - - - - +
home               |  dominio        |  maildir                  |  activo     |
- - - - - - - - - - + - - - - - - - - + - - - - - - - - - - - - - + - - - - - - +
/var/spool/mail    |  ciudades-antiguas.com   |  midominio.com/esteban/   |  1          |
- - - - - - - - - - + - - - - - - - - + - - - - - - - - - - - - - + - - - - - - + + - - - - - - - - - - - - + - - - - - + - - - - + - - - - + - - - - - - - - - +
|  admin@ciudades-antiguas.com  |  123456   |  5000   |  5000   | admin  |
+ - - - - - - - - - - - - + - - - - - + - - - - - - - - - + - - - - - - - - - + - - - - - - - - - - + - - - - - - - - + - - - - - - - - - - - - - + - - - - - - +
home               |  dominio        |  maildir                  |  activo     |
- - - - - - - - - - + - - - - - - - - + - - - - - - - - - - - - - + - - - - - - +
/var/spool/mail    |  ciudades-antiguas.com   |  midominio.com/admin/   |  1          |
- - - - - - - - - - + - - - - - - - - + - - - - - - - - - - - - - + - - - - - - +

- Hay que crear un usuario y grupo de usuarios para que sean propietarios de la carpeta donde se manejará toda la parte de almacenaje de los usuarios.

# groupadd -g 5000 vmail
# useradd -u 5000 -g vmail -s /bin/false vmail

- Creamos el arbol de directorios para la casilla de correo de los usuarios esteban y admin.

# cd /var/spool/mail
# mkdir ciudades-antiguas.com
# cd midominio.com
# maildirmake -S esteban
# maildirmake -S admin
#chown -R vmail:vmail /var/spool/mail/ciudades-antiguas.com/
#chmod -R 700 /var/spool/mail/ciudades-antiguas.com/

#/etc/init.d/postfix restart

- Roundcube

#apt-get install rouncube

en main.inc.php:
$rcmail_config['default_host'] = 'ciudades-antiguas.com';

Ahora solo nos queda acceder a nuestro buzón poniendo en el navegador la URL: http://localhost/rouncube.

Por ultimo para que funcione correctamente hay que crear un enlace simbólico a la carpeta de acceso a roundcube en la ruta donde se leen las páginas en Apache, lo cual podría ser de esta forma:

# cd /var/www/
# ln -s /usr/share/roundcube roundcube
(con lo cual ya estaría listo para trabajar)

si por alguna razón se presenta el error de "Server error (Not Found)" al entrar en la sesión de roundcube, es probable que halla que cambiar una variable en php. Esto se puede hacer en el archivo /etc/php5/apache2/conf.d/suhosin.ini cambiando el valor de suhosin.session.encrypt en off.

También hice esto y nada
--
Saludos,

Luis Esteban de Dios Núñez

--

Este mensaje le ha llegado mediante el servicio de correo electronico que ofrece Infomed para respaldar el cumplimiento de las misiones del Sistema Nacional de Salud. La persona que envia este correo asume el compromiso de usar el servicio a tales fines y cumplir con las regulaciones establecidas

Infomed: http://www.sld.cu/


Reply to: