![]()
Se otorga permiso para copiar, distribuir y/o modificar este documento bajo los términos de la Licencia de Documentación Libre GNU, Versión 1.3 o cualquier versión posterior publicada por la Fundación de Software Libre (FSF); sin Secciones Invariantes, con los Textos de Tapa listados debajo, y sin Textos de Contra-tapa.
Servidor de correo con dominios virtuales
(C) 2009 Martin Andres Gomez Gimenez
Este documento explica cómo configurar un sistema que utilizando Gentoo Linux posea capacidad para manejar múltiples dominios de correo electrónico, soporte de cuentas virtuales sin necesidad de recurrir al uso de cuentas de shell, autenticación vía Web, IMAP, SMTP, y POP3, utilización de SSL (Secure Socket Layer), administración de cuentas centralizada por medio de una interfaz web y el empleo de una base de datos MySQL y manejo de listas de correo, entre otras cosas.
Aunque existe una gran variedad de aplicaciones para tener un sistema de correo virtual, nos centraremos en los siguientes paquetes:
Gentoo es un sistema operativo libre que puede estar basado tanto en Linux como en FreeBSD y tiene la capacidad de ser optimizado y personalizado automáticamente para cualquier aplicación o necesidad. La configurabilidad extrema, el rendimiento y una comunidad de usuarios y desarrolladores de primerísima son todas características de la experiencia Gentoo.
Gracias a una tecnología denominada Portage, Gentoo Linux puede emplearse como un servidor seguro, una estación de trabajo para desarrollo, un escritorio profesional, un sistema para juegos, una solución encastrada y mucho más. Dada su casi ilimitada adaptabilidad, Gentoo Linux es denominado como una metadistribución.
Para más información acerca de Gentoo Linux refiérase a la siguiente URL:
El documento titulado “Manual Gentoo” abarca la instalación utilizando un CD de instalación de Gentoo o, en algunos casos, instalación por red. La instalación asume que usted quiere instalar la última versión de cada paquete. El mismo puede consultarse desde:
http://www.gentoo.org/doc/es/handbook/index.xml
A continuación se definen algunos lineamientos acerca de como debe configurarse Gentoo Linux para funcionar como servidor de correo.
Cada parámetro USE es una palabra clave que incorpora información de soporte y dependencias para un paquete o grupo de paquetes en particular. Si define un determinado parámetro USE, Portage sabrá que el usuario desea soporte para la palabra clave escogida, incidiendo en las dependencias de un paquete. A continuación se listan los parámetros USE a utilizar en el archivo /etc/make.conf:
USE = "7zip acl apache2 atm authdaemond authfile bash-completion big-tables
bzip2 calendar caps cgi clamdtop courier ctype curl custom-cflags
device-mapper diskio dkim doc elf exif extensions extra-tools
extraengine fam fastcgi filter fontconfig fpx ftp gd gdbm glep
glibc-compat20 glibc-omitfp gnutls graphviz gs guile hardened
hardenedphp hash hdri idn imagemagick imap ipv6 jadetex jbig jpeg
jpeg2k json lcms ldap libssh2 linuxthreads-tls logrotate lzma lzo
max-idx-128 maxsysuid md5sum mfd-rewrites mhash mime multilib multiuser
mysql nagios-dns nagios-game nagios-ntp nagios-ping nagios-ssh ncurses
netboot nethack network-cron networking nptl nptlonly nss openct
openntpd overlays pcsc-lite perl pic plugins png posix profile python
resolvconf rrdcgi sasl sendmail sensord sharedext slang smux snmp
sockets softquota spamassassin spell spoof-source srp sse sse2 sse3 ssh
suexec syslog sysvipc targrey threads tidy tiff tokenizer tools
truetype underscores unicode urandom usb utf8 vda xattr xml xmlreader
xmlrpc xmlwriter xsl yaz zip -cracklib -cups"
El particionado debe hacerse en forma manual desde la utilidad cfdisk. La configuración del servidor de correo requiere la creación de las siguientes particiones:
Se recomienda crear una partición primaria y el resto particiones lógicas. Por ejemplo si la unidad o array de discos es reconocida como /dev/sda, las particiones deberían ser:
/dev/sda1 / /dev/sda5 swap /dev/sda6 /home /dev/sda7 /tmp /dev/sda8 /usr /dev/sda9 /var
Se recomienda el uso del sistema de archivos EXT4 en todas las particiones, a excepción de la partición swap. Para mas información refiérase al tutorial titulado Sistema de archivos ext4
Si la unidad o array de disco es reconocida como /dev/sda, esto puede hacerse mediante los siguientes comandos:
mkfs.ext4 /dev/sda1 mkswap /dev/sda5 mkfs.ext4 /dev/sda6 mkfs.ext4 /dev/sda7 mkfs.ext4 /dev/sda8 mkfs.ext4 /dev/sda9
El archivo /etc/fstab, una vez instalado el sistema debe ser editado de la siguiente manera:
# /etc/fstab - configuration file for mount filesystems /dev/sda1 / ext4 noatime 1 1 /dev/sda5 swap swap defaults 0 2 /dev/sda6 /home ext4 noatime,nodev,nosuid 0 2 /dev/sda7 /tmp ext4 noatime,nodev,nosuid,noexec 0 2 /dev/sda8 /usr ext4 noatime 0 2 /dev/sda9 /var ext4 noatime 0 2 # Unidades extraibles /dev/cdrom0 /mnt/cdrom iso9660 noauto,nouser,ro,noatime 0 0 # Montajes críticos para iniciar el sistema none /proc proc defaults 0 0 none /dev/shm tmpfs defaults 0 0 # Optional mount points for chroots /var/log /var/chroot/dhcp/var/log auto nodev,bind 0 0 /var/log/named /var/chroot/dns/var/log/named auto nodev,bind 0 0
Para instalar MySQL es necesario ejecutar el siguiente comando:
emerge dev-db/mysql
Una vez instalado mysql es necesario inicializar el motor de base de datos con el comando y seguir los pasos:
/usr/bin/mysql_install_db
Para iniciar el servicio y agregarlo al listado de servicios que deben ejecutarse por defecto es necesario ejecutar los siguientes comandos:
/etc/init.d/mysql start rc-update add mysql default
Para gestionar las cuentas y dominios de correo electrónico mediante la interfaz denominada PostfixAdmin es necesario crear en el motor de bases de datos MySQL una base de datos y un usuario con privilegios para modificar esa base de datos:
La base de datos puede crearse desde el shell de MySQL de la siguiente manera:
Conectarse como root al motor de base de datos MySQL:
shell> mysql –user=root mysql
Crear un el usuario “postfix” y asignarle privilegios globales:
mysql> CREATE USER 'postfix'@'localhost' IDENTIFIED BY 'password' mysql> GRANT USAGE ON *.* TO 'postfix'@'localhost';
Crear la base de datos “postfix”:
mysql> CREATE DATABASE postfix;
Asignar privilegios al usuario “postfix” sobre la base de datos “postfix”:
mysql> GRANT ALL ON postfix.* TO 'postfix@'localhost';
Para gestionar los dominios y usuarios de correo vía interfaz web mediante PostfixAdmin es necesario instalar el servidor web Apache.
La instalación de Apache se realiza mediante el siguiente comando:
emerge www-servers/apache
La configuración del servidor de correo exige el uso de conexiones seguras y debido a estos los accesos mediante HTTP son redireccionados a HTTPS. Para configurar esta característica deberá crearse el archivo /etc/apache2/vhosts.d/hostname.conf con el siguiente contenido:
<VirtualHost *:80> ServerName hostname.com.ar CustomLog /var/log/apache2/hostname.com.ar-access_log vhost Include /etc/apache2/vhosts.d/hostname.com.ar.include Redirect permanent / https://hostname.com.ar/ </VirtualHost>
Para configurar el acceso mediante HTTPS es necesario crear el archivo /etc/apache2/vhosts.d/hostname_ssl.conf con el siguiente contenido:
<IfDefine SSL> <IfModule ssl_module> <VirtualHost *:443> ServerName hostname.com.ar UseCanonicalName On SSLEngine on SSLCertificateFile /etc/apache2/ssl/hostname_cert.pem SSLCertificateKeyFile /etc/apache2/ssl/hostname_privatekey.pem SSLCipherSuite HIGH SSLProtocol all -SSLv2 CustomLog /var/log/apache2/hostname.com.ar-access_log vhost Include /etc/apache2/vhosts.d/hostname.com.ar.include </VirtualHost> </IfModule> </IfDefine>
El archivo /etc/apache2/vhosts.d/hostname.include contiene configuraciones en común utilizadas por los archivos /etc/apache2/vhosts.d/hostname.conf y /etc/apache2/vhosts.d/hostname_ssl.conf:
# ServerAdmin: Your address, where problems with the server should be
# e-mailed. This address appears on some server-generated pages, such
# as error documents. e.g. admin@your-domain.com
ServerAdmin administrador@hostname.com.ar
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations
#
# If you change this to something that isn't under /var/www then suexec
# will no longer work.
DocumentRoot "/var/www/localhost/htdocs"
# This should be changed to whatever you set DocumentRoot to.
<Directory "/var/www/localhost/htdocs">
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
Alias /phpmyadmin /var/www/localhost/htdocs/phpmyadmin
Alias /postfixadmin /var/www/localhost/htdocs/postfixadmin
Alias /webmail /var/www/localhost/htdocs/squirrelmail
<Directory "/var/www/localhost/htdocs/phpmyadmin">
Options Indexes
AllowOverride None
Order allow,deny
Allow from all
</Directory>
<Directory "/var/www/localhost/htdocs/postfixadmin/admin">
Options Indexes
AllowOverride AuthConfig
Order allow,deny
Allow from all
</Directory>
<Directory "/var/www/localhost/htdocs/squirrelmail">
Options All
AllowOverride None
Order allow,deny
Allow from all
</Directory>
<Location "/horde/admin/setup/config.php">
<IfModule security2_module>
SecRuleRemoveById 950005
</IfModule>
</Location>
El archivo /etc/apache2/vhosts.d/ports.conf se utiliza para configurar los puerto y direcciones en los que Apache debe escuchar:
ServerName hostname.com.ar Listen 80 NameVirtualHost *:80 <IfDefine SSL> <IfModule ssl_module> Listen 443 NameVirtualHost *:443 </IfModule> </IfDefine>
La habilitación de los módulos de Apache se realiza desde el archivo /etc/conf.d/apache2, el cual deberá tener la siguiente línea:
APACHE2_OPTS="-D INFO -D LANGUAGE -D SSL -D ERRORDOCS -D MANUAL -D PHP5 -D MAILMAN -D SUEXEC -D CACHE -D MEM_CACHE -D SECURITY"
Los certificados SSL se utilizan para las conexiones seguras por TLS y SASL.
A continuación se describe como generar certificados para Postix.
Es necesario editar el archivo /etc/ssl/openssl.cnf, para ello desde una terminal o consola haremos lo siguiente:
# cd /etc/ssl/ # nano -w openssl.cnf
Hay que ajustar los siguientes valores por defecto para nuestro dominio:
countryName_default stateOrProvinceName_default localityName_default 0.organizationName_default commonName_default emailAddress_default
En el caso de que las variables anteriores no estén presentes, habrá que añadirlas.
# 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
A continuación se describe como generar certificados para Apache.
# 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
A continuación se describe como configurar cada componente para el filtrado del correo electrónico.
p0f es un sistema de de identificación de sistemas operativos (O. S. fingerprinting) que actúa en modo pasivo. Este sistema es capaz de identificar la versión de un sistema operativo a partir de los paquetes TCP/IP que analiza, de manera similar a
Amavis-new puede utilizar p0f al momento de filtrar un nuevo correo entrante, para identificar la versión del sistema operativo del sistema remoto que envío el correo y de esta manera pueda utilizar esa información a la hora de evaluar si el correo entrante es spam o no.
En Gentoo Linux solo basta con ejecutar el siguiente comando para instalar net-analyzer/p0f:
emerge --ask --verbose net-analyzer/p0f
Es necesario crear los archivos /etc/conf.d/p0f-analyzer y /etc/init.d/p0f-analyzer, para ello refierase a http://bugs.gentoo.org/show_bug.cgi?id=173603
Una vez instalado es necesario editar el archivo /etc/conf.d/p0f-analyzer para configurar el puerto en el que escuchará p0f-analizer y luego ejecutar los siguientes comandos para iniciar el servicio:
rc-update add p0f-analizer default /etc/init.d/p0f-analizer start
Para configurar Amavis-new para que funcione con p0f es necesario editar el archivo /etc/amavisd.conf y agregar la siguientes lineas:
$os_fingerprint_method = 'p0f:127.0.0.1:2345';
Luego es necesario reiniciar Amavis-new con el siguiente comando:
/etc/init.d/amavisd restart
Para verificar si la extensión "os_fingerprint_method" fue cargada correctamente debemos buscar la siguiente línea en el archivo /var/log/mail.log
Nov 8 15:20:42 localhost amavis[26316]: OS_Fingerprint code loaded
Para que el sistema trabaje evaluando la información obtenida con p0f es necesario configurar spamassassing. Amavis envía la información obtenida mediante p0f a spamassassin añadiendo la cabecera X-Amavis-OS-Fingerprint al correo. Esta cabecera se utiliza internamente, con lo cual es necesario configurar en el archivo /etc/spamassassin/local.cf las siguientes líneas:
# Set score for different client OS # Needs p0f-analyzer up and running header P0F_WindowsXP X-Amavis-OS-Fingerprint =~ /^Windows XP/ header P0F_Windows X-Amavis-OS-Fingerprint =~ /^Windows(?! XP)/ header P0F_Unknown X-Amavis-OS-Fingerprint =~ /^UNKNOWN/ header P0F_Unix X-Amavis-OS-Fingerprint =~ /^Linux|((Free|Open|Net)BSD)|Solaris|HP-UX|Tru64/ score P0F_WindowsXP 3.5 score P0F_Windows 1.7 score P0F_Unknown 0.8 score P0F_Unix -0.5