Professional Documents
Culture Documents
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:
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:
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/
/usr/sbin/saslpasswd2 -c usuario2@dominio.com
/usr/sbin/saslpasswd2 -c usuario3@dominio.com
Etc.
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
newaliases
myhostname = mail.midominio.com
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 equipos a los que se permitirá enviar libremente el correo a través de postfix:
mynetworks = $config_directory/mynetworks
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
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
saslpasswd2 usuario
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
telnet mail.midominio.com 25
Trying 192.168.0.254...
Connected to mail.midominio.com.
Escape character is '^]'.
220 mail.midominio.com ESMTP Postfix
helo mail.midominio.com
250 mail.midominio.com
ehlo mail.midominio.com
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
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
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
postmap /etc/postfix/sender_canonical
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
amigo@algundominio.com OK
otroamigo@otrodominio.com OK
El valor "REJECT" rechaza todo el correo proveniente y dirigido hacia las direcciones especificadas:
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.
Cualquier código "4xx" significa que el cliente de correo electrónico debe reintentar más tarde.
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
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:
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 tercera línea muestra el hecho de que se puede redirigir a más de una dirección.
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:
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
Por si todas estas posibilidades no fueran pocas, en amboos estilos se pueden incluir también expresiones
regulares.
virtual_maps = hash:/etc/postfix/virtual
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
En caso de utilizar estilo postfix entonces se deber incluir en el fichero definido en $virtual_maps una
seccion por cada dominio virtual.
relay_domains = $mydestination
mi_dominio.virtual1
mi_dominio.virtual2
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)
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')
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
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
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;
Save the file as createuser.mysql (or something else) and load it as mysql stdin:
mysql --user=root --password=mysqlrootpassword < createuser.mysql
<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
<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>
Restart httpd:
service httpd restart
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
$> 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
Creamos el script de procmail que procese los correos e invoque al antivirus y antispam
SHELL=/bin/sh
: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}
$>vim /etc/mail/spamassassin/local.cf
required_hits 3
report_safe 0
rewrite_subject 1
rewrite_header Subject [SPAM]
score UPPERCASE_75_100 0