Sie sind auf Seite 1von 16

PeruLinux S.A.C.

: Curso: Experto en Linux

Configuración de Servidor de Correo


Postfix con SASL y Dovecot, Web Mail Horde.

Autor: Joel Barrios Dueñas


Licencia Creative Commons

Introducción
Postfix es un servidor de Correo Electrónico (MTA) muy funcional y sencillo de configurar, cuenta
con múltiples funcionalidades para el envío y recepción de correo y configuración de cuentas y
dominios virtuales, permite integrarse con filtros de correo antispan y antivirus y con cuentas de
un servidor de directorio (ldap).

Software requerido:

yum install postfix cyrus-sasl cyrus-sasl-plain cyrus-sasl-md5 dovecot

Configurar Postfix en Arranque automático.

service sendmail stop


chkconfig sendmail off
service postfix start
chkconfig postfix on

SASL.

¿Que es SASL?
SASL es el acrónimo de "Simple Authentication and Security Layer" que significa "Capa de
Seguridad y Autenticación Simple". SASL es un método para añadir soporte para autenticación a los
protocolos como SMTP.

Procedimientos
Edite /usr/lib/sasl/smtpd.conf y verifique que esté el siguiente contenido:

pwcheck_method: saslauthd

Para activar el soporte SASL, se debe asignar al menos una contraseña a cualquier cuenta de
usuario en el sistema.

/usr/sbin/saslpasswd2 -c alumno@dominio.com

Debido a que Postfix gtrabaja por defecto con chroot(), y es conveniente que siga haciendolo así,
es perferible mover /etc/sasldb2 hacia la ruta acequible para postfix que corresponde a
/var/spool/postfix/etc/sasldb2:

mv /etc/sasldb2 /var/spool/postfix/etc/sasldb2

A fin de mantener un nivel de seguridad aceptable y permitir al mismo tiempo que ostfix pueda
acceder al fichero de contraseñas, debemos asignar nuevos permisos a
/var/spool/postfix/etc/sasldb2:

chmod 640 /var/spool/postfix/etc/sasldb2


chgrp postfix /var/spool/postfix/etc/sasldb2

Lo anterior designa permisos de lectura y escritura para root y de solo lectura para el usuario
postfix.
Crear enlace simbólico para poder utilizar el mandato saslpasswd normalmente y no tener que
realizar el tedioso procedimiento de tener que copiar de nuevo dicho fichero cada vez que se de
da alta o se modifique una cuenta.

ln -s /var/spool/postfix/etc/sasldb2 /etc/

De de alta todas las cuentas de usuario restantes:

/usr/sbin/saslpasswd2 -c usuario2@dominio.com
/usr/sbin/saslpasswd2 -c usuario3@dominio.com
Etc.

Levantar el demonio saslauthd y añadirlo a los servicios activos:

/sbin/service saslauthd start


/sbin/chkconfig saslauthd on

DOVECOT IMAP y POP3


Configuraremos de una vez el protocolo mediante el cual el usuario recuperará su correo.

vi /etc/dovecot.conf
protocols = imap pop3
listen = [::]

chkconfig dovecot on

Postfix.

¿Que es Postfix?
Postfix es un MTA, que es acrónimo de "Mail Transport Agent" y que a su vez significa "Agente de
Transporte de Correo". Postfix fue desarrollado como un reemplazo para Sendmail. Postfix es la
versión libre de Secure Mailer de IBM cuyo desarrollo fue iniciado por Wietse Vename en el T.J.
Research Lab propiedad de IBM.
Postfix es una magnífica alternativa hacia Sendmail, el cual desafortunadamente posee un pésimo
historial de seguridad. ¿Por que se sigue usando Sendmail? Porque viene incluido como MTA por
defecto en la mayoría de las distribuciones de Linux y otros sabores de UNIX. Postfix es menos
complicado de configurar, es más rápido, fácil de administrar y seguro.
Postfix trabaja por defecto dentro de una jaula (chroot) localizada en /var/spoo/postfix, y por tal
motivo es todavía más seguro reduciendo enormemente los riesgos para el sistema en el caso del
surgimiento de una vulnerabilidad.

Procedimientos.
Editar al final del fichero /etc/postfix/aliases la línea que por defecto especifica como alias de root
a postfix, lo cual se debe cambiar y definir en su lugar una cuenta de usuario válida. ¡Eso es algo
muy importante!
root: usuario

Al terminar, ejecute el mandato newaliases a fin de convertir /etc/postfix/aliases en /etc/postfix/


aliases.db.

newaliases

Editar /etc/postfix/main.cf y donde se definirán algunas variables.


Redundar el nombre del servidor, el cual también debe ser un nombre de dominio completamente
resuelto por un DNS:

myhostname = mail.midominio.com

Definase además el dominio a utilizar.

mydomain = midominio.com

Redundar el dominio a utilizar para los mensajes salientes. Por defecto se añade $myhostname,
pero si así se desea, pude establecerse $mydomain.

myorigin = $myhostname

En Red Hat Enterprise Linux y sistemas operativos derivados se establece localhost como única
interfaz para escuchar peticiones. Puede comentarse la línea, puesto que Postfix escuchará
peticiones por todas las interfaces por defecto:

# inet_interfaces = localhost

Defina los dominios a administrar:

mydestination = $myhostname, localhost.$mydomain, dominio.virtual

Defina los equipos a los que se permitirá enviar libremente el correo a través de postfix:

mynetworks = 192.168.0.0/24, 127.0.0.0/8

Si desea incrementar el nivel de seguridad o bien simplemente le interesa utilizar el método de


autenticación que se explica más adelante, puede definir una lista de IP contenida en un fichero, el
cual incluirá además de las IP propias del servidor y las de aquellos equipos a los que
verdaderamente se permitirá enviar correo libremente a través de postfix:

mynetworks = $config_directory/mynetworks

Un ejemplo del contenido de mynetworks sería:

127.0.0.0/8
192.168.0.254

Si se utiliza una dirección IP pública, como por ejemplo 148.240.39.174, nunca se defina el
segmento de este en mynetworks (148.240.39.0/24), ya que de otro modo cualquier otro equipo
de dicha red tendría permitido hacer uso del servidor de correo.
Redundemos los dominios que se permite para enviar correo designando la variable
$mydestination:

relay_domains = $mydestination

A fin de poder aprovechar las funciones de filtrado y administración del correo que posee
procmail, defina en la ruta donde se localiza éste:

mailbox_command = /usr/bin/procmail

Si se va a utilizar autenticación, debe definirse lo siguiente:

smtpd_sasl_auth_enable = yes
smtp_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
smtp_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtp_sasl_password_maps = hash:/etc/postfix/saslpass
smtpd_recipient_restrictions = permit_sasl_authenticated,
permit_mynetworks,
reject_unknown_client,
check_relay_domains

Crear el fichero /etc/postfix/saslpass y definir una cuenta específica por cada dominio
administrado que además deberá autenticar escribiendo la contraseña correspondiente y que
previamente se asignó con el mandato saslpasswd2.

mail.midominio.com dominio1@mail.midominio.com:clave-del-usuario
dominio.virtual dominio2@dominio.virtual:clave-del-usuario

Se deben crear cuentas en el sistema para este fin particular, y no olvidar que a fin de poder ser
utilizadas por Postfix, se asignan las contraseñas para dichas cuentas con el mandato
saslpasswd2.
Se debe convertir /etc/postfix/saslpass a /etc/postfix/saslpass.db

postmap /etc/postfix/saslpass

Asignar permisos apropiados a /etc/postfix/saslpass y /etc/postfix/saslpass.db

chmod 600 /etc/postfix/saslpass*

La configuración ha concluido, y solo resta arrancar o reiniciar Postfix.

service postfix restart

Alta de las cuentas de correo.


Las cuentas de correo deben de darse de alta sin acceso a intérprete de mandatos, recordando
que, a diferencia de los protocolos IMAP o POP3, al acceso hacia el protocolo SMTP le será
asignado una contraseña con el mandato saslpasswd2 en lugar del mandato passwd.

useradd -s /bin/false -c "Nombre del usuario" usuario


saslpasswd2 -c usuario

Si necesita cambiar la contraseña a cualquier usuario, utilice el mandato saslpasswd sin


parámetros adicionales:

saslpasswd2 usuario

Si desea dar de baja la contraseña de cualquier usuario, utilice el siguiente mandato:

saslpasswd2 -d usuario
Finalmente, para poder recuperar el correo ya sea a través de IMAP o POP3, si será necesario
asignar una contraseña con el mandato passwd:

passwd usuario

Probando el servicio SMTP.

telnet mail.midominio.com 25

Lo anterior devuelve la siguiente salida:

Trying 192.168.0.254...
Connected to mail.midominio.com.
Escape character is '^]'.
220 mail.midominio.com ESMTP Postfix

Verifique mandato "helo" para el dominio

helo mail.midominio.com

Lo anterior devuelve lo siguiente:

250 mail.midominio.com

Verifique funciones del servidor con mandato "ehlo"

ehlo mail.midominio.com

Lo anterior debe devolver algo como lo siguiente.

250-mail.midominio.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH PLAIN LOGIN DIGEST-MD5 CRAM-MD5
250-AUTH=PLAIN LOGIN DIGEST-MD5 CRAM-MD5
250-XVERP
250 8BITMIME

Note las dos líneas que especifican los métodos de autenticación.

250-AUTH PLAIN LOGIN DIGEST-MD5 CRAM-MD5


250-AUTH=PLAIN LOGIN DIGEST-MD5 CRAM-MD5

Ambas especifican los métodos soportados. La segunda particularmente se utiliza para los clientes
de correo electrónico que autentican con errores o bien con el viejo y obsoleto protocolo
"AUTH=PLAIN", como sería el caso de Outlook Express 4.
Para salir del intérprete de mandatos ejecute el mandato "quit".
Solo resta probar la configuraciñon del servidor de correo con cualquier cliente de correo
electrónico, el cual deberá de configurarse con soporte para autenticación para el protocolo SMTP.
Puede seleccionarse PLAIN, LOGIN, DIGEST-MD5 o CRAM-MD5 como método de autenticación.
Parámetros adicionales para Postfix.
Hay algunos parámetros adicionales para /etc/postfix/main.cf que permitirán controlar mejor el
comportamiento del servidor de correo de manera sencilla.

mailbox_size_limit
Si se desea limitar el tamaño máximo de los buzones de correo, puede hacerse a través de
mailbox_size_limit asignando cualquier valor deseado en bytes. Por ejemplo, si se quiere limitar el
tamaño de los buzones de correo a 20 MB, por supuesto factorizando por 1024, se utilizaría la
siguiente línea:

mailbox_size_limit = 20480000

message_size_limit
Si se desea limitar el tamaño máximo de un mensaje de correo electrónico, puede hacerse a través
de message_size_limit. Por ejemplo, si se quiere limitar el tamaño máximo de un mensaje a 5 MB,
se utilizaría la siguiente línea:

message_size_limit = 5120000

recipient_canonical_maps
Si se desea transformar las direcciones de correo externas en direcciones de correo internas, se
debe añadir la siguiente línea:

recipient_canonical_maps = hash:/etc/postfix/recipient_canonical

Si por ejemplo, entregar el correo para webmaster@midominio.com en la cuenta local pepe y


webmaster@dominio.virtual en la cuenta local pedro, dentro de /etc/postfix/sender_canonical
debería ponerse lo siguiente:
webmaster@midominio.com pepe
webmaster@dominio.virtual pedro

Al terminar de editar el fichero, se debe ejecutar el siguiente mandato para convertir


/etc/postfix/recipient_canonical en /etc/postfix/recipient_canonical.db:

postmap /etc/postfix/recipient_canonical

sender_canonical_maps
Si se desea transformar direcciones de correo internas en direcciones de correo externas, se debe
añadir la siguiente línea:

sender_canonical_maps = hash:/etc/postfix/sender_canonical

Por ejemplo, si se tiene un dominio inválido o no registrado como sería miredlocal.org, y se desea
que el correo emitido desde la cuenta julio salga como soporte@midominio.com, y se desea que el
correo emitido por pablo salga como soporte@dominio.virtual, /etc/postfix/recipient_canonical
debería ponerse lo siguiente:

julio soporte@midominio.com
pablo soporte@dominio.virtual

Al terminar de editar el fichero, se debe ejecutar el siguiente mandato para convertir


/etc/postfix/sender_canonical en /etc/postfix/sender_canonical.db:

postmap /etc/postfix/sender_canonical

Manejo del Spam y correo proveniente de fuentes indeseables.

check_client_access
Hay varias formas de hacer frente al Spam y correo proveniente de fuentes indeseables. Una es a
través del parámetro check_client_access, con el cual se define la localización del fichero que
contendrá las tablas de de control de acceso.

check_client_access = hash:/etc/postfix/access

/etc/postfix/access contendrá una lista de direcciones IP, nombres de dominios, nombres de


equipos y direcciones de correo electrónico. Puede definirse si se accepta o de rechaza
explícitamente el correo proveniente de los elementos de dicha lista. A continuación se muestran
distintos ejemplos:
El valor "OK" específica aceptar explícitamente correo.

amigo@algundominio.com OK
otroamigo@otrodominio.com OK

El valor "REJECT" rechaza todo el correo proveniente y dirigido hacia las direcciones especificadas:

#Rechaza correo de las siguientes direcciones y dominios


spammer@productoinutil.com REJECT
dominiohostil.net REJECT
enviosmasivos.com REJECT
masivo.com REJECT
209.61.129.8 REJECT
#rechaza el correo proveniente de todo el segmento 172.16.18
172.16.18 REJECT

Cualquier código "5xx" significa error fatal e indica al cliente de correo electrónico no intentar de
nuevo. A diferencia de REJECT, que rechaza la entrega del mensaje, un código 550, por ejemplo,
rebota el mensaje incluyendo una parte del contenido original.

proveedor@necio.com 550 No me interesan sus productos


holgazan@flojo.com 554 Ponte a hacer algo util

Cualquier código "4xx" significa que el cliente de correo electrónico debe reintentar más tarde.

lista-de-correo@undominio.org 450 Estamos realizando mantenimiento

smtpd_client_restrictions y listas negra de servicio de nombres de dominio (DNSBL)


Anteriormente se había establecido la variable smtpd_client_restrictions con los valores
permit_sasl_authenticated, permit_mynetworks y check_relay_domains, los cuales son necesarios
para un nivel de seguridad aceptable si se utiliza autenticación para el servicio de SMTP. Pueden
añadirse más restricciones, como por ejemplo reject_maps_rbl, que espcifica la consulta de listas
negras ofrecidas por distintos servicios como mail-abuse.org, spamhaus.org o spamcop.com. Se
requiere entonces añadir reject_maps_rbl a la variable smtpd_client_restrictions:

smtpd_client_restrictions = permit_sasl_authenticated,
permit_mynetworks,
check_relay_domains,
reject_unknown_client, reject_maps_rbl

A continuación se añaden las definiciones para las listas negras que se desee utilizar o las que se
hayan contratado:

maps_rbl_domains =
sbl.spamhaus.org,
opm.blitzed.org,
list.dsbl.org,
relays.mail-abuse.org,
cbl.abuseat.org

Agregar muchas listas ciertamente garantiza un mínimo de Spam, pero significa también que el
correo tardará mucho más tiempo en validarse y entregarse en los buzones de correo. Pude llegar
a demorar hasta varios minutos después de el envío desde el cliente de correo electrónico.
Recomendamos elegir dos o tres listas negras a lo sumo.

smtpd_helo_required y stmpd_helo_restrictions
Por lo general los programas utilizados para enviar spam nunca envían mandato helo al
conectarse al servidor, o bien lo hacen desde servidores sin un registro MX o A en un DNS. Por tal
motivo es buena idea habilitar las restricciones que negarán el acceso a cualquier cliente de correo
que no envíe mandato helo

smtpd_helo_required = yes
stmpd_helo_restrictions = reject_unknown_hostname

Nota: Es importante no caer en el error común de confundir stmpd_helo_restrictions =


reject_unknown_hostname con smtpd_client_restrictions = reject_unknown_client.
Postfix + dominios virtuales
Es muy habitual que un servidor SMTP aloje y dé servicios a mas de un dominio. Este documento trata de
aclarar un poco la configuracion de Postfix
para que pueda implementar esta funcionalidad. Por su puesto, la lectura de este documento debe
complemetarse con la consulta de la documentación oficial del desarrollador de Postfix.

La mayor parte de lo que aquí se expone proviene de la documentación html que incluye el paquete postfix
y del directorio de ejemplos de configuración que suele encontrarse en el directorio /etc/postfix tras la
instalación.

Los usuarios de Sendmail que estén acostumbrados a manejar dominios virtuales a través de virtusertable
no deben tener dificultad alguna para migrar esa funcionalidad a Postfix.

En general, hay dos formas de manejar los dominios virtuales en postfix: con el Estilo Postfix y con el
Estilo Sendmail

Estilo Postfix
Los alias, usuarios locales y listas de correos no son visibles en un dominio virtual (mas abajo explico qué
es eso). Para especificar ese estilo, tenemos que incluir en '/etc/postfix/virtual' líneas como las siguientes:

mi_dominio.virtual Y aqui ponemos cualquier cosa, no importa.


usuario1@mi_dominio.virtual direccion1
usuario2@mi_dominio.virtual direccion2, direccion3, ...
usuario3 direccion4, direccion5, ...
@mi_dominio.virtual direccion6, ....

En general, la forma de las líneas es

patrón resultado

cuando uno de los patrones es reconocido en una dirección de correo, entonces ésta última es sustituida
por el resultado.

En el ejemplo, la primera linea es obligatoria para especificar el estilo postfix, las otras líneas ilustran las
distintas posibilidades. Nótese que podemos redirigir a una o más direcciones.

La segunda línea redirigira todo correo cuyo destinatario es usuario1@mi_dominio.virtual a direccion1.

La tercera línea muestra el hecho de que se puede redirigir a más de una dirección.

En la cuarta línea, usuario3@algun.dominio es redirigida a direccion4, direccion5 ... cuando 'algun.dominio'


figura en alguno de los parametros de
configuracion $myorigin, $mydestination o $inet_interfaces.

El la quinta linea, redirigirá todo el correo de cualquier usuario de mi_dominio.virtual a direccion6 ...

En cuanto a las direcciones de reenvio, las que tienen forma '@otro_dominio ' son expandidas al mismo
usuario de 'otro_dominio', pero esa expansión solo funciona en la primera direccion de la lista (puede haber
más, como se muestra en los ejemplos anteriores).

Como se ha dicho en un principio, el servidor postfix aceptará correo de cualquier usuario conocido en
mi_dominio.virtual y rechazará como imposible cualquier usuario no conocido en ese dominio. Aquí radica la
diferencia en el estilo sendmail. Los usuarios locales NO son reconocidos a no ser que se adapten a
algunas de las condiciones del fichero virtual dentro de ese dominio. Los alias definidos en /etc/aliases
TAMPOCO son reconocidos en este estilo. Hay que utilizar el estilo sendmail para poder utilizar
implicitamente alias y usuarios locales.
Estilo Sendmail
Para fijar ese estilo tenemos que añadir en /etc/postfix/main.cf el nombre del dominio virtual al parámetro
de configuración $mydestination:

mydestination= $myhostname localhost.$mydomain $mydomain


mi_dominio.virtual

En el fichero /etc/postfix/virtual ahora NO debemos incluir la primera línea del ejemplo del estilo postfix. Es
decir, ahora quedaría:

usuario1@mi_dominio.virtual direccion1
usuario2@mi_dominio.virtual direccion2, direccion3, ...
usuario3 direccion4, direccion5, ...
@mi_dominio.virtual direccion6, ....

con el mismo significado y posibilidades. Ahora bien, la diferencia respecto al estilo postfix es que ahora
son utilizables los alias, usuarios locales y listas de correos. Ejemplo, supongamos que tenemos definido el
usuario local usuariolocal y que en el fichero aliases tenemos también el alias,

mi_alias: usuariolocal

Ahora postfix SI que redirigirá el correo a destinatarios como mi_alias@mi_dominio.virtual o


usuariolocal@mi_dominio.virtual a usuariolocal@mi_dominio.local aunque no aparezcan explícitamente en
el fichero. Evidentemente, si tampoco el usuario es reconocido como alias o usuario local, es mensaje es
devuelto.

Por si todas estas posibilidades no fueran pocas, en amboos estilos se pueden incluir también expresiones
regulares.

Para generar el fichero /etc/postfix/virtual.db o /etc/postfix/virtual.dbm , una vez editado


/etc/postfix/virtualhay que ejecutar postmap

#) postmap hash: /etc/postfix/virtual

También hay que incluir en '/ect/postfix/main.cf' la linea

virtual_maps = hash:/etc/postfix/virtual

Con lo que postfix lo utilizara al cabo de alrededor de un minuto, o inmediatamente tras

#) service postfix restart

En este ejemplo se ha utilizado el fichero /etc/postfix/virtual, pero podríamos haber editado otro, en cuyo
caso deberíamos incluirlo en $virtual_maps

Cómo se incluye más de un dominio virtual


Pues depende del estilo de modelo virtual que se adopte. Si se utiliza el estilo sendmail entonces se debe
incluir los dominios en main.cf cuando
se defina el parametro $mydestination

mydestination= $myhostname localhost.$mydomain $mydomain


mi_dominio.virtual1 mi_dominio.virtual2 ...

En caso de utilizar estilo postfix entonces se deber incluir en el fichero definido en $virtual_maps una
seccion por cada dominio virtual.

mi_dominio.virtual1 cualquier cosa


.....
mi_dominio.virtual2 cualquier cosa
.....
Lo habitual es que desemos, asimismo, distribuir el correo que venga de los dominios virtuales al resto de la
red (hacer relay). Como le valor por defecto de $relay_domains es $mydestination, si ya hemos incluido
todos los dominios en los que queremos hacer relay en $mydestination, no hace falta incluirlos en
$relay_domains. En caso contrario, por ejemplo si se utiliza el estilo postfix, habria que incluirlos:

relay_domains = $mydestination
mi_dominio.virtual1
mi_dominio.virtual2

Installing Horde Groupware Webmail Edition on CentOS 5


Horde Groupware Webmail Edition is a free, enterprise ready, browser based communication suite. Users
can read, send and organize email messages and manage and share calendars, contacts, tasks and notes
with the standards compliant components from the Horde Project. Horde Groupware Webmail Edition
bundles the separately available applications IMP, Ingo, Kronolith, Turba, Nag and Mnemo.

Versions
• CentOS 5.0 i386 (OS)
• Horde Groupware Webmail Edition 1.0.3 (October 2 2007)
• Apache 2.2.3 (http server)
• MySQL 5.0.22 (db server)
• Postfix 2.3.3 (mail server)
• Dovecot 1.0 (IMAP server)

Set up your host name and address


This is only necessary if you didn't do it at installation.
Use system-config-network-tui to set up IP, Netmask and Gateway:
system-config-network-tui

Edit /etc/sysconfig/network and set your hostname:


NETWORKING=yes
NETWORKING_IPV6=yes
HOSTNAME=yourhostname.yourdomain.com

Edit /etc/resolv.conf and add your DNS servers:


nameserver 208.67.222.222
nameserver 208.67.220.220

Edit /etc/hosts to something like this, according to your system settings:


# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost.localdomain localhost
192.168.0.100 yourhostname.yourdomain.com yourhostname
::1 localhost6.localdomain6 localhost6

Restart network:
service network restart

If your using GUI interface (like gnome), you may need to restart it:
init 6

Installing prerequisites
yum install -y gettext httpd mysql mysql-server dovecot postfix system-switch-mail perl
yum install -y php php-mysql php-xml php-imap php-mbstring php-mcrypt php-pecl-Fileinfo php-pecl-
memcache \
php-pear-DB php-pear-File php-pear-Log php-pear-Mail-Mime php-pear-Auth-SASL php-pear-
Date \
php-pear-HTTP-Request php-pear-Mail php-pear-Net-Sieve php-pear-Net-Socket php-pear-Net-
SMTP

yum install -y php-pear-Date-Holidays <-- (for now, this package is available in the EPEL repo)

yum install -y openssl mod_ssl crypto-utils perl-Net-SSLeay <--(for https secure browsing)

yum install -y php-devel gcc <--(if you want to install extra pecl modules - PS: use 'pear install
pecl/modulename')

Configuring Postfix and Dovecot


Turn off sendmail:
service sendmail stop
chkconfig sendmail off

system-switch-mail
(select postfix)

Configure Postfix:
postconf -e 'home_mailbox = Maildir/'

Edit /etc/dovecot.conf and add the following to the end of the file:
# to allow the creation of mail subfolders
mail_location = maildir:~/Maildir

# Enable IMAP protocol


protocols = imap

If using CentOS x86_64, temporary fix for this bug


login_process_size = 64

To configure the rest of postfix, such as domain name and secure connections, take a look at this nice
tutorial: http://fedorasolved.org/server-solutions/postfix-mail-server

Start services
service httpd restart
chkconfig httpd on

service postfix restart


chkconfig postfix on

service dovecot restart


chkconfig dovecot on

service mysqld restart


chkconfig mysqld on

Configure mysqld root password:


/usr/bin/mysqladmin -u root password 'new-password'
/usr/bin/mysqladmin -u root -h yourhostname.yourdomain.com password 'new-password'
Download Horde Groupware Webmail Edition and extract it
Get the latest stable version of Horde Groupware Webmail Edition from
http://www.horde.org/download/app/?app=webmail.
Extract files and rename folder:
tar zxf horde-webmail-*.tar.gz -C /var/www/html/
mv /var/www/html/horde-*/ /var/www/html/horde/

Creating database and tables in MySQL

Run the setup.php script:


cd /var/www/html/horde/scripts/
./setup.php

If asked, choose /horde.


Press 1; choose mysql; Persistent connection: 0; Username horde; Choose a password for mysql-user-
horde; Unix sockets; Location null; DB name horde;
Press 2; yes; root; root-mysql-password.
Press 3; specify an existing IMAP user to have horde administration permissions (i.e. your current linux
user).

Create user horde in MySQL and grant horde DB the proper permissions
Edit a text file and change the password for the same as in Step 1 above:
USE mysql;

REPLACE INTO user (host, user, password)


VALUES (
'localhost',
'horde',
-- IMPORTANT: Change this password!
PASSWORD('password_for_mysql_horde_user')
);

REPLACE INTO db (host, db, user, select_priv, insert_priv, update_priv,


delete_priv, create_priv, drop_priv, index_priv)
VALUES (
'localhost',
'horde',
'horde',
'Y', 'Y', 'Y', 'Y',
'Y', 'Y', 'Y'
);

-- Make sure that priviliges are reloaded.


FLUSH PRIVILEGES;

Save the file as createuser.mysql (or something else) and load it as mysql stdin:
mysql --user=root --password=mysqlrootpassword < createuser.mysql

Configure Apache and PHP


Add a "horde.conf" file to /etc/httpd/conf.d:
#
# Horde
#

Alias /horde /var/www/html/horde

<Directory /var/www/html/horde>
# Uncomment the following 3 lines to make Horde locally accessible only
#Order Deny,Allow
#Deny from all
#Allow from 127.0.0.1

Options +FollowSymLinks

# horde.org's recommended PHP settings:


php_admin_flag safe_mode off
php_admin_flag magic_quotes_runtime off
php_flag session.use_trans_sid off
php_flag session.auto_start off
php_admin_flag file_uploads on
# Optional - required for weather block in Horde to function
php_admin_flag allow_url_fopen on

# If horde dies while trying to handle large email file attachments,


# you are probably hitting PHP's memory limit. Raise that limit here,
# but use caution
# Set to your preference - memory_limit should be at least 32M
# and be greater than the value set for post_max_size
#php_value memory_limit 32M
#php_value post_max_size 20M
#php_value upload_max_filesize 10M

# /usr/share/pear is needed for PEAR. /var/www/html/horde is needed for Horde itself


# TODO: Set an appropriate include_path, too. Might even increase speed a bit.
php_admin_value open_basedir "/var/www/html/horde:/var/www/html/horde/config:/usr/share/pear:/tmp"
php_admin_flag register_globals off
</Directory>

<Directory /var/www/html/horde/config>
Order Deny,Allow
Deny from all
</Directory>

# Deny access to files that are not served directly by the webserver
<DirectoryMatch "^/var/www/html/horde/(.*/)?(config|lib|locale|po|scripts|templates)/(.*)?">
Order Deny,Allow
Deny from all
</DirectoryMatch>

# Deny access to the test.php files except from localhost


<LocationMatch "^/horde/(.*/)?test.php">
Order Deny,Allow
Deny from all
Allow from 127.0.0.1
</LocationMatch>

Change horde.conf permission:


chmod 0644 -v /etc/httpd/conf.d/horde.conf

Increase memory_limit option in /etc/php.ini to 32MB:


memory_limit = 32M

Restart httpd:
service httpd restart

Check if everything is alright


Open the following address in your browser:
http://localhost.localdomain/horde/test.php

Security configuration
Secure config files:
chown apache:root -R /var/www/html/horde/config
chown apache:root -R /var/www/html/horde/*/config
chmod -R go-rwx /var/www/html/horde/config
chmod -R go-rwx /var/www/html/horde/*/config

Secure scripts:
chown -R root:root /var/www/html/horde/scripts
chown -R root:root /var/www/html/horde/*/scripts
chmod -R go-rwx /var/www/html/horde/scripts
chmod -R go-rwx /var/www/html/horde/*/scripts

Secure test.php:
chmod a-rwx /var/www/html/horde/test.php
chmod a-rwx /var/www/html/horde/*/test.php

Finishing configuration
Open the following url in your browser and log into horde with the administrator user (defined above in
Option 2 when creating databases):
http://localhost.localdomain/horde

(PS: use full URL address, with host and domain name)
(PS2: Remember to check $conf['cookie']['path'] = '/horde'; in horde/config/conf.php to match the path you
use to access horde on your server)
Fell free to change other options, as you like. The good thing about Horde Groupware Webmail Edition is it
comes pretty much configured and ready for use!
Remember to restart httpd after you make changes:
service httpd restart
Configurando SpamAssassin, y Clamav con Mailbox y Procmail

Para configurar clamav y spamassin con Mailbox haremos uso de procmail


Primero instalaremos los paquetes de clamav de rpmforge y el spamassassin

$> yum --enablerepo=rpmforge install clamav clamd spamassasin unzip bzip2 unrar

actualizamos el antivirus
$> freshclam

Luego editamos el archivo de configuración de postfix para que haga uso de procmail para procesar los
correos

$> vim /etc/postfix/main.cf


mailbox_command = /usr/bin/procmail

Creamos el script de procmail que procese los correos e invoque al antivirus y antispam

$> vim /etc/procmail

SHELL=/bin/sh

AV_REPORT=`clamdscan --stdout --disable-summary - | cut -d: -f 2`


VIRUS=`if [ "$AV_REPORT" != " OK" ]; then echo Yes; else echo No;fi`

:0fw
| formail -i "X-Virus: $VIRUS"

:0fw
* ^X-Virus: Yes
| formail -i "Virus: $AV_REPORT" -i "Subject: MENSAJE CON VIRUS: $AV_REPORT"

:0fw
| spamc -f -s 100000 -u $LOGNAME

:0:
${DEFAULT}

Editamos el archivo de configuración de Spamassassin

$>vim /etc/mail/spamassassin/local.cf

required_hits 3
report_safe 0
rewrite_subject 1
rewrite_header Subject [SPAM]
score UPPERCASE_75_100 0

reiniciamos postfix e iniciamos clamd y spamassassin

$> service postfix restart


$> service clamd start
$> service spamassassin start

Habilitamos el arranque automático de clamd y spamassassin


$> chkconfig clamd on
$> chkconfig spamassassin on