Autor: Joel Barrios Dueñas
Correo electrónico: darkshram en gmail punto com
Sitio de Red: http://www.alcancelibre.org/
Jabber ID: darkshram@jabber.org
Creative Commons Reconocimiento-NoComercial-CompartirIgual 2.1
© 1999-2010 Joel Barrios Dueñas. Usted es libre de copiar, distribuir y comunicar públicamente la obra y hacer obras derivadas bajo las condiciones siguientes: a) Debe reconocer y citar al autor original. b) No puede utilizar esta obra para fines comerciales (incluyendo su publicación, a través de cualquier medio, por entidades con fines de lucro). c) Si altera o transforma esta obra, o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Los derechos derivados de usos legítimos u otras limitaciones no se ven afectados por lo anterior. Licencia completa en castellano. La información contenida en este documento y los derivados de éste se proporcionan tal cual son y los autores no asumirán responsabilidad alguna si el usuario o lector hace mal uso de éstos.
Introducción.
Este documento permitirá configurar Postfix para utilizar múltiples dominios virtuales, utilizando los usuarios locales del sistema. Se requiere haber configurado previamente Postfix de la forma en que se describe en el documento titulado «Cómo instalar y configurar Postfix en CentOS 5 con soporte para TLS y autenticación.» Se recomienda leer, estudiar y aplicar también los procedimientos descritos en el documento titulado «Cómo instalar y configurar Amavisd-new con Postfix en CentOS 5.»
Procedimientos.
Configuración de SELinux.
Por lo general, la mayoría de los documentos disponibles en Internet recomiendan desactivar SELinux, sin mayores argumento o explicaciones. Sin embargo, hacer ésto implica renunciar a una magnífica protección que brinda al sistema esta importante implementación de seguridad. Tengo un lema personal que me gusta citar para explicar mi opinión respecto de SELinux:
Más vale tenerlo y jamás necesitarlo, que necesitarlo y carecer de éste.
Si es posible utilizar SELinux junto con dominios virtuales. Cuando se quiere implementar un servicio de hospedaje con dominios virtuales, y se utiliza /home para crear los directorios de inicio de los dominios virtuales, se requieren pocos o ningún ajuste en SELinux. Sin embargo, hay escenarios donde se utiliza /var/www para crear los directorios de inicio de los dominios virtuales. Sí se hace de este modo, y sí se quiere mantener SELinux activo, es necesario generar una política que permita a los servicios de Postfix o Sendmail, Dovecot, Pyzor y Spamassassin poder realizar lectura, escritura y otros atributos sobre directorios y archivos con contexto httpd_sys_content_t. El siguiente procedimiento sirve para crear la política necesaria.
Procedimiento para crear política.
Crear el directorio /usr/share/selinux/packages/virtualmail:
mkdir /usr/share/selinux/packages/virtualmail
|
Cambiarse al direcrtorio /usr/share/selinux/packages/virtualmail:
cd /usr/share/selinux/packages/virtualmail
|
Descargar desde Alcance Libre el archivo http://www.alcancelibre.org/linux/secrets/virtualmail.te:
Editar el archivo virtualmail.te:
Verificar que el archivo virtualmail.te tenga el siguiente contenido:
module virtualmail 1.0;
require {
type pyzor_t;
type sendmail_t;
type postfix_local_t;
type postfix_postdrop_t;
type postfix_master_t;
type procmail_t;
type spamc_t;
type dovecot_t;
type tmp_t;
type httpd_log_t;
type httpd_sys_content_t;
type httpd_config_t;
type spamd_t;
type system_mail_t;
class fifo_file write;
class file { read lock rename create write getattr link unlink append };
class dir { search read write getattr remove_name add_name };
}
#============= dovecot_t ==============
allow dovecot_t httpd_sys_content_t:dir { write search read remove_name getattr add_name };
allow dovecot_t httpd_sys_content_t:file { write getattr link rename read lock create unlink };
#============= postfix_local_t ==============
allow postfix_local_t httpd_sys_content_t:dir search;
#============= postfix_postdrop_t ==============
allow postfix_postdrop_t tmp_t:file { getattr append };
allow postfix_postdrop_t httpd_log_t:file getattr;
#============= postfix_master_t ==============
allow postfix_master_t httpd_config_t:dir search;
#============= procmail_t ==============
allow procmail_t httpd_sys_content_t:dir search;
#============= pyzor_t ==============
allow pyzor_t httpd_sys_content_t:dir { write search };
#============= spamc_t ==============
allow spamc_t sendmail_t:fifo_file write;
#============= spamd_t ==============
allow spamd_t httpd_sys_content_t:dir { write search getattr };
allow spamd_t httpd_sys_content_t:file { read getattr };
#============= system_mail_t ==============
allow system_mail_t httpd_sys_content_t:file append;
|
Crear el archivo de módulo virtualmail.mod a partir del archivo virtualmail.te:
checkmodule -M -m -o virtualmail.mod virtualmail.te
|
Crear el archivo de política virtualmail.pp a partir del archivo virtualmail.mod
semodule_package -o virtualmail.pp -m virtualmail.mod
|
Incluir la politica al sistema:
semodule -i /usr/share/selinux/packages/virtualmail/virtualmail.pp
|
Configuración de Postfix.
Archivo /etc/postfix/main.cf.
Editar el archivo /etc/postfix/main.cf:
Definir los siguientes parámetros:
# Establecer el valor de myhostname como localhost.localdomain
# También se puede definir cualquier otro dominio, siempre y cuando sea distinto
# a cualquiera de los definidos en los valores de virtual_alias_domains o en
# virtual_alias_maps.
myhostname = localhost.localdomain
# Definir el valor predeterminado para mydomain
mydomain = localhost.localdomain
# Definir los valores predeterminados para mydestination y relay_domains
mydestination = $myhostname, localhost.$mydomain, localhost
relay_domains = $mydestination
# Recomendado.
# Junto con virtual_alias_maps, reemplaza a virtual_maps
# Se utiliza para declarar los dominios virtuales.
# Se puede prescindir de éste si se añaden dominios en /etc/postfix/virtual.
virtual_alias_domains = $virtual_alias_maps
# Obligatorio.
# Junto con virtual_alias_domains, reemplaza a virtual_maps
# Se utiliza para declarar la reescritura de direcciones. Ejemplo:
# jbarrios@dominio.com joel
# Ejemplo hace que todo correo para joel@dominio.com se entregue a joel
# Si se quiere precindir de utilizar virtual_alias_domains, añadir también los
# dominios en este formato:
# dominio.com dominio.com
# otrodominio.net otrodominio.net
# otrodominio.org otrodominio.org
# Si se hace lo anterior, comentar virtual_alias_domains.
virtual_alias_maps = hash:/etc/postfix/virtual
# Recomendado.
# Es la contraparte de alias_database = /etc/aliases
# Se utiliza para reescritura de direcciones de salida. Ejemplo:
# joel joel.barrios
# Ejemplo hace que todo el correo de joel salga como joel.barrios
canonical_maps = hash:/etc/postfix/canonical
# Recomendado.
# Se utiliza solo para reescribir la dirección de salida de una cuenta.
# Ejemplo:
# joel jbarrios@dominio.com
# Ejemplo hace que todo el correo de joel salga como jbarrios@dominio.com
sender_canonical_maps = hash:/etc/postfix/sender_canonical
# Opcional.
# Poco utilizado. Utilizar virtual_alias_maps en su lugar.
# Considerar que se procesa antes que canonical_maps.
# Se utiliza solo para reescribir solo la dirección de entrada de una cuenta.
# Ejemplo:
# jbarrios@dominio.com joel
# Ejemplo hace que todo correo para jbarrios@dominio.com se entregue a joel
recipient_canonical_maps = hash:/etc/postfix/recipient_canonical
|
Todo lo anterios se puede realizar también ejecutando el mandato postconf para cada parámetro:
postconf -e 'myhostname = localhost.localdomain'
postconf -e 'mydomain = localhost.localdomain'
postconf -e 'mydestination = $myhostname, localhost.$mydomain, localhost'
postconf -e 'relay_domains = $mydestination'
postconf -e 'virtual_alias_domains = $virtual_alias_maps'
postconf -e 'virtual_alias_maps = hash:/etc/postfix/virtual'
postconf -e 'canonical_maps = hash:/etc/postfix/canonical'
postconf -e 'sender_canonical_maps = hash:/etc/postfix/sender_canonical'
postconf -e 'recipient_canonical_maps = hash:/etc/postfix/recipient_canonical'
|
Al terminar, genere los archivos /etc/postfix/sender_canonical y /etc/postfix/recipient_canonical:
touch /etc/postfix/sender_canonical
touch /etc/postfix/recipient_canonical
|
Archivos /etc/postfix/virtual y /etc/postfix/sender_canonical.
Editar el archivo /etc/postfix/virtual:
Crear la tabla de cuentas de correo electrónico virtuales de entrada, especificando a que cuenta de usuario local se entrega cada dirección.
dominio.com dominio.com
otrodominio.net otrodominio.net
otrodominio.org otrodominio.org
joel@dominio.com joel
juan@dominio.com juan
pablo@dominio.com pablo
pedro@dominio.com pedro
hugo@otrodominio.net hugo
luis@otrodominio.org luis
webmaster@dominio.com joel@dominio.com
webmaster@otrodominio.net hugo@otrodominio.net
webmaster@otrodominio.org luis@otrodominio.org
|
Editar el archivo /etc/postfix/sender_canonical:
vim /etc/postfix/sender_canonical
|
Crear la tabla de cuentas de correo electrónico virtuales de salida, especificando las direcciones de salida que utilizará cada usuario. Es decir, casi lo contrario a lo establecido en /etc/postfix/virtual, pero especificando un único usuario para cada cuenta de correo electrónico. Jamás se especifique más de un usuario por cuenta de correo electrónico, ni más de una cuenta de correo electrónico por usuario.
joel joel@dominio.com
juan juan@dominio.com
pablo pablo@dominio.com
pedro pedro@dominio.com
hugo hugo@otrodominio.net
luis luis@otrodominio.org
|
Utilizar el mandato postmap con los archivos /etc/postfix/canonical, /etc/postfix/recipient_canonical, /etc/postfix/sender_canonical y /etc/postfix/virtual a fin de generar los archivos .db correspondientes y que surtan efecto los cambios luego de reiniciar el servicio postfix:
postmap /etc/postfix/canonical
postmap /etc/postfix/recipient_canonical
postmap /etc/postfix/sender_canonical
postmap /etc/postfix/virtual
|
Reiniciar el servicio postfix.
A fin de que surtan efecto todos los cambios, se debe reiniciar el servicio postfix:
Comentarios Recientes