Sistema de correo virtual con postfix
1.
Introducción
Para la mayoría de los usuarios de Gentoo, con un simple cliente de
correo y fetchmail bastaría. Sin embargo, si se está hospedando un
dominio en el sistema, se necesitará un MTA (Agente de Transporte de
Correo) de verdad. Y si se están hospedando varios dominios,
definitivamente se necesita algo más robusto para manejar todo el
correo de los usuarios. Este sistema fue diseñado para ser una
elegante solución a este problema.
Un sistema de correo virtual tiene que ser capaz de manejar correo de
numerosos dominios con diferentes usuarios sobre una variedad de
interfaces. Esto presenta algunos problemas con los que tendremos que
tratar. Por ejemplo, ¿qué ocurre si dos usuarios en diferentes
dominios quieren usar el mismo nombre de usuario? Si proveemos acceso
imap y smtp-auth, ¿cómo combinamos todos los demonios de autenticación
en un solo sistema? ¿Cómo proporcionar seguridad para los numerosos
componentes que componen el sistema? ¿Cómo lo maneja todo?
Este documento muestra cómo configurar un sistema capaz de manejar
correo para todos los dominios que el equipo pueda manejar, soporte de
usuarios virtuales que no necesiten cuentas de shell, que los nombres
sean específicos de cada dominio, que los clientes se puedan
autenticar por web, imap, smtp, y pop3 contra una base de datos,
utilizar ssl para la capa de transporte segura, que tenga una interfaz
web, que pueda manejar listas de correo para cualquiera de los
dominios, y sea controlado por una bonita, central y simple base de
datos mysql.
Hay gran variedad de formas para mantener un sistema de correo
virtual. Con tantas opciones, cualquier otra puede ser más adecuada
dependiendo de las necesidades que se tengan. Hay que considerar
investigar http://www.es.qmail.org/ y
http://www.exim.org/ para explorar otras opciones.
Los siguientes paquetes serán usados en este sistema: apache,
courier-imap, courier-authlib, postfix, mod_php, phpmyadmin,
squirrelmail, cyrus-sasl, mysql, php, y mailman.
Hay que asegurarse de activar las siguientes variables USE en
/etc/make.conf antes de compilar los paquetes:
USE="mysql imap libwww maildir sasl ssl". De otra forma se
necesitarán recompilar cosas para obtener soporte para todos los
protocolos. Además, es una buena idea desactivar cualquier otra
variable que tenga que ver con correo y red, como ipv6.
Importante:
Se necesita un nombre de dominio para ejecutar un servidor de correo
público, o al menos un registro MX para un dominio. Lo ideal sería
tener control sobre al menos dos dominios para beneficiarse del nuevo
sistema de correo virtual.
|
Importante:
Hay que asegurarse de que /etc/conf.d/hostname contiene el
nombre de máquina correcto del servidor de correo. Para que tomen efecto los
cambios hechos en este archivo ejecute /etc/init.d/hostname restart.
Verifique que esté correcto el nombre de su máquina con hostname.
También verifique que no hay entradas conflictivas en /etc/hosts.
|
Nota:
Se recomienda la lectura de este documento completo y la familiaridad
con todos los pasos antes de ponerse a instalarlo. Si se tienen
problemas con alguno de los pasos, puede comprobarse la guía de
problemas frecuentes al final de este documento. También, no todos los
paquetes aquí referenciados son necesarios, esto es para un sistema
muy flexible. Por ejemplo, si no se desea una interfaz web, puede
evitarse la sección de squirrelmail.
|
2.
Postfix Básico
Listado de Código 2.1: Instalar postfix |
# emerge postfix
|
Aviso:
Hay que verificar que no se ha instalado otro MTA, como ssmtp, exim, o
netqmail, o seguro que se tendrán GRANDES problemas.
|
Tras la instalación de postfix, es el momento de configurarlo. Vamos a
cambiar las siguientes opciones en
/etc/postfix/main.cf. Recuerde reemplazar las
$variables con sus propios nombres.
Listado de Código 2.2: /etc/postfix/main.cf |
myhostname = $host.domain.name
mydomain = $domain.name
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain $mydomain
mynetworks = my.ip.net.work/24, 127.0.0.0/8
home_mailbox = .maildir/
local_destination_concurrency_limit = 2
default_destination_concurrency_limit = 10
|
Lo siguiente es cambiar /etc/postfix/master.cf. Esto
activará que la salida sea detallada para poder depurar:
Listado de Código 2.3: /etc/postfix/master.cf |
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (50)
#
==========================================================================
smtp inet n - n - - smtpd -v
|
Lo siguiente es editar /etc/mail/aliases para añadir los
alias locales. Debe haber al menos un alias para root como: root:
your@email.address.
Listado de Código 2.4: Iniciar postfix por primera vez |
# /usr/bin/newaliases
# /etc/init.d/postfix start
|
Ahora que postfix está corriendo, se ejecuta el cliente de correo de
consola y nos enviamos un mensaje. Yo uso mutt para todo mi
email. Comprobamos que postfix está repartiendo el correo a los
usuarios locales, una vez esto esté hecho, pasaremos al siguiente
paso.
Nota:
Recomiendo que se verifique que esta configuración básica de postfix
está funcionando antes de dar el siguiente paso en esta guía.
|
3.
Courier-imap
Listado de Código 3.1: Instalar courier-imap |
# emerge courier-imap
|
Listado de Código 3.2: Configuración de Courier-imap |
# cd /etc/courier-imap
# nano -w /etc/courier-imap/pop3d.cnf
# nano -w /etc/courier-imap/imapd.cnf
# mkpop3dcert
# mkimapdcert
|
Listado de Código 3.3: Inicie los servicios de courier que necesite. |
# /etc/init.d/courier-imapd start
# /etc/init.d/courier-imapd-ssl start
# /etc/init.d/courier-pop3d start
# /etc/init.d/courier-pop3d-ssl start
|
Se ejecuta nuestro cliente de correo preferido y se comprueba que
todas las conexiones para mandar y recibir correo funcionan. Por
supuesto, no podrá hacer log on al estos servicios, porque la
autentificación no ha sido configurada, pero es buena idea revisar si
las conexiones en sí funcionan o no.
Ahora que lo básico funciona, vamos a seguir con el resto del manojo
de paquetes para que el sistema funcione. Y otra vez, hay que
comprobar que se ha instalado todo y que funciona antes de continuar.
4.
Cyrus-sasl
Ahora vamos a instalar cyrus-sasl. Sasl va a hacer la labor de pasar
las variables de autenticación a pam que pasará está información a
mysql para autenticar usuarios de smtp. Para este documento no vamos a
comprobar si sasl funciona hasta que mysql no esté configurado
correctamente con un usuario de prueba; lo que está bien, porque
siempre autenticaremos contra una base de datos mysql.
Listado de Código 4.1: Configurar e instalar el ebuild cyrus-sasl |
# emerge cyrus-sasl
|
Ahora, se edita /etc/sasl2/smtpd.conf.
Listado de Código 4.2: Iniciar sasl |
# nano -w /etc/sasl2/smtpd.conf
mech_list: PLAIN LOGIN
pwcheck_method: saslauthd
# nano -w /etc/conf.d/saslauthd
SASLAUTHD_OPTS="${SASLAUTH_MECH} -a rimap -r"
SASLAUTHD_OPTS="${SASLAUTHD_OPTS} -O localhost"
# /etc/init.d/saslauthd start
|
5.
Certificados SSL para Postfix y Apache
Ahora vamos a hacer los certificados SSL para postfix y apache.
Listado de Código 5.1: Certificados ssl |
# cd /etc/ssl/
# nano -w openssl.cnf
countryName_default
stateOrProvinceName_default
localityName_default
0.organizationName_default
commonName_default
emailAddress_default.
# cd misc
# ./CA.pl -newreq-nodes
# ./CA.pl -newca
# ./CA.pl -sign
# cp newcert.pem /etc/postfix
# cp newkey.pem /etc/postfix
# cp demoCA/cacert.pem /etc/postfix
# openssl req -new > new.cert.csr
# openssl rsa -in privkey.pem -out new.cert.key
# openssl x509 -in new.cert.csr -out new.cert.cert -req -signkey new.cert.key -days 365
|
6.
Añadir a Postfix soporte para SSL y SASL
Ahora se edita el fichero de configuración de Postfix para que utilice
ssl y sasl. Se añaden los siguientes parámetros al final del fichero
para que serán más sencillos de encontrar.
Listado de Código 6.1: /etc/postfix/main.cf |
# nano -w /etc/postfix/main.cf
smtpd_sasl_auth_enable = yes
smtpd_sasl2_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_local_domain =
smtpd_recipient_restrictions =
permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination
smtp_use_tls = yes
smtp_tls_note_starttls_offer = yes
smtpd_use_tls = yes
#smtpd_tls_auth_only = yes
smtpd_tls_key_file = /etc/postfix/newkey.pem
smtpd_tls_cert_file = /etc/postfix/newcert.pem
smtpd_tls_CAfile = /etc/postfix/cacert.pem
smtpd_tls_loglevel = 3
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom
# postfix reload
|
Ahora vamos a comprobar que la configuración es aceptada por
postfix. Para esto vamos a usar telnet (proporcionado, por
ejemplo, por net-misc/netkit-telnetd), aunque también se podría
usar nc (proporcionado por net-analyzer/netcat):
Listado de Código 6.2: Comprobar el soporte para sasl y tls |
# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mail.domain.com ESMTP Postfix
EHLO domain.com
250-mail.domain.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH LOGIN PLAIN OTP
250-AUTH=LOGIN PLAIN OTP
250-XVERP
250 8BITMIME
^]
telnet> quit
|
Se comprueba que aparecen las líneas AUTH y STARTTLS. Como dije antes,
tal y como está ahora AUTH no funcionará porque sasl intentará
autenticar contra sasldb en lugar de hacerlo con el shadow, por alguna
extraña razón, que nosotros no hemos configurado. Así que vamos a
instalar mysql para que guarde la información sobre autenticación y la
información de los dominios virtuales.
7.
El usuario vmail
Antes de configurar nuestro entorno virtual mailhosting, crearemos un
usuario bajo el cual los buzones virtuales serán almacenados. Para que
sea lo más claro posible, llamaremos a este usuario vmail:
Listado de Código 7.1: Agregando al usuario vmail |
# adduser -d /home/vmail -s /bin/false -m vmail
|
Ahora ha establecido la cuenta vmail. Puede crear múltiples cuentas si
lo desea (en caso de manejar una estructura en el conjunto de cuentas
virtuales de correo). Los id de usuario, de grupo y directorios home
son referenciados en las tablas de MySQL.
Junto con la cuenta del usuario, también necesitamos crear la
ubicación donde serán almacenados los buzones:
Listado de Código 7.2: Creando los buzones |
# mkdir -p /home/vmail/virt-domain.com/foo
# chown -R vmail:vmail /home/vmail/virt-domain.com
# maildirmake /home/vmail/virt-domain.com/foo/.maildir
|
8.
MySQL
Ahora vamos a instalar y configurar MySQL. Se necesitará el fichero
genericmailsql.sql
para este paso.
Listado de Código 8.1: Instalar y configurar MySQL |
# emerge mysql
# /usr/bin/mysql_install_db
# /etc/init.d/mysql start
# mysqladmin -u root -p create mailsql
# mysql -u root -p --opt mailsql < genericmailsql.sql
# mysql -u root -p mysql
mysql> GRANT SELECT,INSERT,UPDATE,DELETE
-> ON mailsql.*
-> TO mailsql@localhost
-> IDENTIFIED BY '$password';
Query OK, 0 rows affected (0.02 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql> quit
# mysql -u mailsql -p mailsql
|
La nueva base de datos tiene algunos valores por defecto para dos
dominios. Las siguientes tablas están incluidas:
- alias - información sobre los alias locales y los alias de mailman.
- relocated - mapas de direcciones de correo relocalizadas
-
transport - transporte de correo por defecto para todos los dominios que
se hospedan
- users - información sobre todos los usuarios
- virtual - información sobre los dominios virtuales
Listado de Código 8.2: Ejemplo de tabla alias |
id alias destination
1 root foo@bar.com
2 postmaster foo@bar.com
|
Listado de Código 8.3: Ejemplo de tabla user |
id email clear name uid gid homedir \
maildir quota postfix
10 foo@virt-domain.org $password realname virtid virtid /home/vmail \
/home/vmail/virt-bar.org/foo/.maildir/ y
13 foo@bar.com $password realname localid localid /home/foo \
/home/foo/.maildir/ y
|
Los valores del uid y gid en virtid deben ser los del usuario y
el grupo vmail.
Listado de Código 8.4: Ejemplo de tabla transport |
id domain destination
1 bar.com local:
2 virt-domain.org virtual:
|
Listado de Código 8.5: Ejemplo de tabla virtual |
id email destination
3 root@virt-domain.org other@email.address
|
9.
Apache y phpMyAdmin
Ahora vamos a configurar apache y una interfaz para trabajar con la
base de datos.
Listado de Código 9.1: Configurar apache y phpmyadmin |
# emerge apache phpmyadmin
|
Hay muchas guías sobre cómo configurar apache con php, incluyendo
guías porporcionadas por el Proyecto PHP
Gentoo. También hay muchos mensajes en
http://forums.gentoo.org con información detallada sobre
problemas comunes en la instalación (puede buscarse 'apache php'). Así
que, no lo cubriremos aquí. Después de instalar y configurar apache y
php, se puede continuar con esta guía. Ahora crearemos el .htaccess en
el directorio que esté phpMyAdmin. Si no se hace esto, los motores de
búsqueda entrarán e indexaran estas páginas y cualquiera podrá obtener
información sobre la base de datos buscando en google, lo que es
¡MALO!. Hay muchas guías acerca de esto, como por ejemplo:
http://www.csoft.net/docs/micro/htaccess.html.en.
Ahora vamos a instalar los certificados que hicimos para Apache. Las
directivas de Apache-SSL que se necesitan son las siguientes:
- SSLCertificateFile /path/to/certs/new.cert.cert
- SSLCertificateKeyFile /path/to/certs/new.cert.key
Listado de Código 9.2: Instalar los certificados SSL en Apache |
# cp /etc/ssl/misc/new.cert.cert /etc/apache2/ssl/
# cp /etc/ssl/misc/new.cert.key /etc/apache2//ssl/
# cd /etc/apache2/vhosts.d
# cp 00_default_vhost.conf ssl-vhost.conf
# nano -w ssl-vhost.conf
NameVirtualHost host.domain.name:443
<VirtualHost host.domain.name:443>
ServerName host.domain.name
ServerAdmin your@email.address
DocumentRoot "/var/www/localhost/htdocs/phpmyadmin";
<Directory "/var/www/localhost/htdocs/phpmyadmin">
...
</Directory>
SSLCertificateFile /etc/apache2/ssl/new.cert.cert
SSLCertificateKeyFile /etc/apache2/ssl/new.cert.key
SSLEngine on
...
</VirtualHost>
# nano -w /etc/conf.d/apache2
# /etc/init.d/apache2 restart
|
Ahora configuremos phpMyAdmin.
Listado de Código 9.3: Configurar phpMyAdmin |
# cd /var/www/localhost/htdocs/phpmyadmin
# cp config.sample.inc.php config.inc.php
# nano -w config.inc.php
$cfg['blowfish_secret'] = 'fraseclavesupersecreta';
$cfg['Servers'][$i]['host'] = 'localhost'; // nombre anfitrión MySQL
$cfg['Servers'][$i]['controluser'] = 'mailsql'; // configuración usuario de control MySQL
// (este usuario debe tener acceso solo
$cfg['Servers'][$i]['controlpass'] = '$password'; // lectura a las tablas "mysql/user"
// y "mysql/db")
$cfg['Servers'][$i]['user'] = 'mailsql'; // usuario MySQL
$cfg['Servers'][$i]['password'] = '$password'; // clave MySQL
|
Ahora navegue a la página de phpmyadmin y navegamos por las
tablas. Podremos añadir los alias locales, editar la tabla de usuarios
para añadir un usuario de prueba, y añadir la información sobre los
dominios. Por defecto, las tablas tienen unos valores que servirán de
guía. Hay que asegurarse de poner la información correcta en la base
de datos. Por ejemplo, hay que asegurarse de que los directorios de
los usuarios locales existen y que tienen los valores uid/gid
correctos. Los maildirs deberían ser creados automáticamente por
postfix cuando el usuario recibe su primer mensaje. Así que, en
general, es una buena idea mandar un mensaje de bienvenida tras crear
los nuevos usuarios de forma que .maildir sea creado.
10.
Configurar la autenticación MySQL y con dominios virtuales
Ahora vamos a reconfigurar nuestra autenticación para que use la base
de datos mailsql en courier-imap y en postfix. En todos los ejemplos
que siguen, hay que reemplazar $password por la contraseña que
se escogió a la hora de crear el usuario mailsql en MySQL.
Listado de Código 10.1: Configurar la autenticación |
# nano -w /etc/courier/authlib/authdaemonrc
authmodulelist="authmysql authpam"
# nano -w /etc/courier/authlib/authmysqlrc
MYSQL_SERVER localhost
MYSQL_USERNAME mailsql
MYSQL_PASSWORD $password
MYSQL_DATABASE mailsql
MYSQL_USER_TABLE users
#MYSQL_CRYPT_PWFIELD crypt
MYSQL_CLEAR_PWFIELD clear
MYSQL_UID_FIELD uid
MYSQL_GID_FIELD gid
MYSQL_LOGIN_FIELD email
MYSQL_HOME_FIELD homedir
MYSQL_NAME_FIELD name
MYSQL_MAILDIR_FIELD maildir
# /etc/init.d/courier-authlib restart
# /etc/init.d/saslauthd restart
|
¡Ya casi está! Ahora haremos las configuraciones necesarias para que
postfix interactúe con la base de datos para sus demás necesidades de
transporte. Recuerde reemplazar cada valor con el nombre del propio
usuario, user id, contraseña, alias, dirección de correo electrónico,
etc.
Listado de Código 10.2: /etc/postfix/mysql-aliases.cf |
# nano -w /etc/postfix/mysql-aliases.cf
# mysql-aliases.cf
user = mailsql
password = $password
dbname = mailsql
table = alias
select_field = destination
where_field = alias
hosts = unix:/var/run/mysqld/mysqld.sock
|
Listado de Código 10.3: /etc/postfix/mysql-relocated.cf |
# nano -w /etc/postfix/mysql-relocated.cf
# mysql-relocated.cf
user = mailsql
password = $password
dbname = mailsql
table = relocated
select_field = destination
where_field = email
hosts = unix:/var/run/mysqld/mysqld.sock
|
Listado de Código 10.4: /etc/postfix/mysql-transport.cf (opcional) |
# nano -w /etc/postfix/mysql-transport.cf
# mysql-transport.cf
user = mailsql
password = $password
dbname = mailsql
table = transport
select_field = destination
where_field = domain
hosts = unix:/var/run/mysqld/mysqld.sock
|
Listado de Código 10.5: /etc/postfix/mysql-virtual-gid.cf (opcional) |
# nano -w /etc/postfix/mysql-virtual-gid.cf
# mysql-virtual-gid.cf
user = mailsql
password = $password
dbname = mailsql
table = users
select_field = gid
where_field = email
additional_conditions = and postfix = 'y'
hosts = unix:/var/run/mysqld/mysqld.sock
|
Listado de Código 10.6: /etc/postfix/mysql-virtual-maps.cf |
# nano -w /etc/postfix/mysql-virtual-maps.cf
# mysql-virtual-maps.cf
user = mailsql
password = $password
dbname = mailsql
table = users
select_field = maildir
where_field = email
additional_conditions = and postfix = 'y'
hosts = unix:/var/run/mysqld/mysqld.sock
|
Listado de Código 10.7: /etc/postfix/mysql-virtual-uid.cf (opcional) |
# nano -w /etc/postfix/mysql-virtual-uid.cf
# mysql-virtual-uid.cf
user = mailsql
password = $password
dbname = mailsql
table = users
select_field = uid
where_field = email
additional_conditions = and postfix = 'y'
hosts = unix:/var/run/mysqld/mysqld.sock
|
Listado de Código 10.8: /etc/postfix/mysql-virtual.cf |
# nano -w /etc/postfix/mysql-virtual.cf
# mysql-virtual.cf
user = mailsql
password = $password
dbname = mailsql
table = virtual
select_field = destination
where_field = email
hosts = unix:/var/run/mysqld/mysqld.sock
|
Por último, hay que editar /etc/postfix/main.cf una vez
más.
Listado de Código 10.9: /etc/postfix/main.cf |
# nano -w /etc/postfix/main.cf
alias_maps = mysql:/etc/postfix/mysql-aliases.cf
relocated_maps = mysql:/etc/postfix/mysql-relocated.cf
local_transport = local
local_recipient_maps = $alias_maps $virtual_mailbox_maps unix:passwd.byname
virtual_transport = virtual
virtual_mailbox_domains = virt-domain.com, $other-virtual-domain.com
virtual_minimum_uid = 1000
virtual_gid_maps = static:$vmail-gid
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual.cf
virtual_uid_maps = static:$vmail-uid
virtual_mailbox_base = /
#virtual_mailbox_limit =
|
Por razones de seguridad es necesario cambiar los permisos de todos
los /etc/mail/mysql-*.cf:
Listado de Código 10.10: Cambiar los permisos de los archivos |
# chmod 640 /etc/postfix/mysql-*.cf
# chgrp postfix /etc/postfix/mysql-*.cf
|
En Postfix 2.0.x, hay cambios significativos desde 1.1.x. Destacando
que las tablas transport, virtual-gid y virtual-uid no son
necesarias. Las tablas aún se incluyen, por si se quieren usar.
Nota:
Se recomienda la lectura de VIRTUAL_README incluido en la
documentación de postfix para más información.
|
Listado de Código 10.11: Hacer a postfix recargar sus tablas |
# postfix reload
|
Ahora, si todo ha ido bien, se debería tener el sistema
funcionando. Los usuarios serán capaces de autenticarse contra la base
de datos sql, usando su dirección de email completa, para pop3, imap,
y smtp. Se recomienda comprobar que todo funciona correctamente en
este momento. Si se tienen problemas, siempre puede comprobarse la
sección de problemas frecuentes en esta guía.
11.
Squirrelmail
Listado de Código 11.1: Instalar squirrelmail |
# emerge squirrelmail
# webapp-config -I -h localhost -d /mail squirrelmail 1.4.3a-r2
# cd /var/www/localhost/htdocs/mail/config
# perl ./conf.pl
|
12.
Mailman
Último paso: mailman. La nueva versión de mailman tiene una buena
interfaz para soportar dominios virtuales, que es por lo que lo uso, y
sin mencionar que es un muy buen paquete. Para instalar este paquete y
hacer que funcione bien con dominios virtuales vamos a necesitar un
poco de hacking. Yo recomiendo leer toda la documentación de mailman,
incluyendo README.POSTFIX.gz, para entender qué se está haciendo aquí.
Listado de Código 12.1: Instalar mailman |
# emerge mailman
|
Listado de Código 12.2: Configurar los valores predeterminados: Mailman/Defaults.py |
# nano -w /usr/local/mailman/Mailman/Defaults.py
DEFAULT_EMAIL_HOST = 'domain.com'
DEFAULT_URL_HOST = 'www.domain.com'
|
Listado de Código 12.3: Configuración de mailman: mm_cfg.py |
# nano -w /usr/local/mailman/Mailman/mm_cfg.py
MTA = "Postfix"
POSTFIX_STYLE_VIRTUAL_DOMAINS = ['virt-domain.com', 'virt.domain2.com']
add_virtualhost('www.virt.domain.com', 'virt.domain.com')
add_virtualhost('www.virt.domain2.com', 'virt.domain2.com')
|
Listado de Código 12.4: Y por último, pero no menos importante |
# su mailman
# cd ~
# bin/newlist --urlhost='www.virt-domain.com' --emailhost='virt-domain.com' test
Enter the email of the person running the list: your@email.address
Initial test password:
Hit enter to continue with test owner notification...
# bin/genaliases
# nano -w data/aliases
# STANZA START: test
# CREATED:
test: "|/usr/local/mailman/mail/mailman post test"
test-admin: "|/usr/local/mailman/mail/mailman admin test"
test-bounces: "|/usr/local/mailman/mail/mailman bounces test"
test-confirm: "|/usr/local/mailman/mail/mailman confirm test"
test-join: "|/usr/local/mailman/mail/mailman join test"
test-leave: "|/usr/local/mailman/mail/mailman leave test"
test-owner: "|/usr/local/mailman/mail/mailman owner test"
test-request: "|/usr/local/mailman/mail/mailman request test"
test-subscribe: "|/usr/local/mailman/mail/mailman subscribe test"
test-unsubscribe: "|/usr/local/mailman/mail/mailman unsubscribe test"
# STANZA END: test
# ./bin/newlist mailman
# ./bin/genaliases
# exit
# /etc/init.d/mailman start
# rc-update add mailman default
|
Listado de Código 12.5: Añadir soporte de alias mailman en postfix |
# nano -w /etc/postfix/main.cf
owner_request_special = no
recipient_delimiter = +
alias_maps =
hash:/usr/local/mailman/data/aliases,
mysql:/etc/postfix/mysql-aliases.cf
virtual_alias_maps =
hash:/usr/local/mailman/data/virtual-mailman,
mysql:/etc/postfix/mysql-virtual.cf
|
Ahora se deberían poder configurar listas de correo para cualquier
dominio en la máquina. Como última nota sobre el asunto, hay que
asegurarse de que se ejecutan todos los comandos de mailman con el
usuario mailman (su mailman) o los permisos serán erróneos y
habrá que corregirlos. Hay que leer la documentación de mailman para
más información sobre cómo configurar y manejar listas de correo con
mailman.
13.
Filtrando el contenido y Anti-Virus
Para filtrado de contenido y anti-virus, se puede consultar la Guía Gentoo para el filtrado de
correo.
14.
Todo en uno
Ok, ya está todo, editamos /etc/postfix/master.cf y
quitamos el modo detallado (verbose) para el uso en
producción. Probablemente se quieran añadir los servicios al arranque
del sistema para que se inicien cada vez que se reinicie el
servidor. Hay que asegurarse de añadir todos los paquetes que se están
usando - apache, mysql, saslauthd, postfix, courier-imapd,
courier-imapd-ssl, courier-pop3d, y courier-pop3d-ssl, dependiendo de
los tipos de acceso que se quieran ofrecer. Normalmente yo los inicio
todos.
Listado de Código 14.1: Todo en uno |
# postfix reload
# rc-update add $service default
|
¡A disfrutarlo!
15.
Problemas frecuentes
Introducción
Lidiando con problemas: Esta es una pequeña guía para lidiar con los
posibles problemas que puedan surgir para la configuración que hemos
hecho. No es exhaustiva, pero puede ser un comienzo para empezar a
pelearse con los problemas. Con una configuración complicada como
esta, es necesario que se asigne correctamente el problema con el
componente que está fallando. En general para hacer esto sirve con
seguir los siguientes pasos. Empezar por la base del sistema y empezar
a ascender hasta conseguir dar con el componente que tiene el
problema.
Paso 1: Comprobar los ficheros de configuración
Los errores al escribir un fichero de configuración son mortales,
especialmente cuando se trata de sistemas de autenticación. Han de
comprobarse los ficheros de configuración y sql en busca de estos
errores. Se puede depurar todo lo que uno quiera, pero si no se le
está pasando la información correcta, el sistema de correo no va a
funcionar. Si se hace un cambio en un fichero de configuración para un
servicio, hay que asegurarse de reiniciar dicho servicio para que los
cambios en el fichero tengan efecto.
Listado de Código 15.1: Cómo reiniciar un servicio |
# /etc/init.d/servicio restart
|
Paso 2: ¿Los servicios necesarios están corriendo?
Si no están corriendo, hay que iniciarlos. Es tremendamente difícil
depurar un servicio que no está corriendo. A veces un servicio puede
actuar como si estuviera iniciado pero puede seguir sin funcionar. A
veces, cuando se tiene un fichero incorrecto, o una mala transmisión
entra en un componente de correo, el servicio abre un puerto para
evitar que sea usado por otro proceso. A veces se puede detectar esto
con netstat. Reiniciar la máquina limpiará la lista de puertos
abiertos por procesos que no están funcionando bien.
Listado de Código 15.2: Comprobar el estado de un servicio |
# /etc/init.d/$service status
# netstat -a | grep $service (o bien: $port)
|
Paso 3: ¿Están todos los servicios usando los últimos ficheros de
configuración?
Si se ha modificado alguno de los ficheros, hay que reiniciar ese
servicio para asegurarse de que está utilizando la última versión de
dicho fichero. Algunos programas como postfix volcarán su
configuración actual.
Listado de Código 15.3: Algunos servicios pueden mostrar su configuración actual |
# apachectl fullstatus (necesita lynx instalado)
# apachectl configtest (comprueba el fichero de configuración)
# postconf -n (mostrará los parámetros que está usando postfix)
# /etc/init.d/$service restart
|
Paso 4: Comprobación de bitácoras (log).
Las bitácoras son mis amigas. El siguiente paso son siempre las
bitácoras. A veces es muy útil provocar un fallo en el sistema de
correo para, tras esto, comprobar el error en los registros. Ver si
hay algo de información que nos ayude a diagnosticar el problema, o
quizá, mostrarnos qué componente está fallando.
Listado de Código 15.4: Comprobar las bitácoras |
# kill -USR1 `ps -C metalog -o pid=` (para deshabilitar el búfer de metalog)
# nano -w /var/log/mail/current
# cat /var/log/mysql/mysql.log
# tail /var/log/apache2/error_log
|
Se pueden encontrar útiles los parámetros de debug_peer en
main.cf. Añadiendo esto, se incrementará el nivel de depuración.
Listado de Código 15.5: Añadir soporte debug_peer |
# nano -w /etc/postfix/main.cf
debug_peer_level = 5
debug_peer_list = $host.domain.name
|
Paso 5: Hablar con el propio servicio.
SMTP, IMAP y POP3 responden a sesiones telnet. Tal y como vimos cuando
comprobamos la configuración de postfix. A veces es útil abrir una
sesión telnet a uno de los servicios para ver qué está pasando.
Listado de Código 15.6: Conectar a un servicio con telnet |
# telnet localhost $port
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
* OK Courier-IMAP ready. Copyright 1998-2002 Double Precision, Inc.
|
Paso 6: A veces las grandes armas nos dan la información que se
necesita: strace.
Debe tenerse este programa instalado. Es una herramienta muy buena
para depurar programas. Se pueden iniciar comandos desde la consola
con strace y ver las llamadas al sistema a la vez que ocurren. Muchas
veces vuelca una enorme cantidad de información, así que se tendrá que
ver en tiempo real mientras que intenta una transacción fallida con el
sistema de correo, o bien, mandar la salida a un fichero para luego
examinarlo.
Listado de Código 15.7: Usar strace |
# emerge strace
# strace $command
# strace -p `ps -C $service -o pid=`
|
Paso 7: Investigación
Una vez que se tiene la información, si se puede diagnosticar y
arreglar el problema, ¡bien! Si no, probablemente se necesite navegar
un poco por la red en busca de información que nos ayude a diagnosticar
y arreglar el problema. Aquí hay una lista de sitios donde se puede
comprobar si el problema ha sido resuelto. También hay una buena guía
para configurar smtp-auth que contiene buenas ideas sobre depuración.
|