Configuración de Servidor · 6 min read · Feb 14, 2026

Configuración del Servidor de Correo con Exim, MySQL, Cyrus-Imapd, Horde Webmail en Centos 5.1 - Página 2

Configuración

Configurar Apache

  • Habilitar el alojamiento virtual y crear el virtualhost por defecto, editar /etc/httpd/conf/httpd.conf y agregar al final NameVirtualHost *:80 ServerAdmin [email protected]
  • Crear el virtual host para horde webmail agregar esto debajo de lo anterior Servername mail.home.topdog-software.com DocumentRoot /usr/share/horde ErrorLog logs/mail-error_log CustomLog logs/mail-access_log common
  • Habilitar la configuración de seguridad de horde editar el archivo /etc/httpd/conf.d/horde.conf y establecer como a continuación #Alias /horde /usr/share/horde Options +FollowSymLinks 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 #php_admin_flag allow_url_fopen on php_value post_max_size 20M php_value upload_max_filesize 10M php_admin_value open_basedir "/usr/share/horde:/usr/share/horde/config:/usr/share/pear:/tmp" php_admin_flag register_globals off Order Deny,Allow Deny from all Order Deny,Allow Deny from all
  • Aumentar el límite de memoria de PHP editar /etc/php.ini y cambiar a continuación memory_limit = 64M
  • Habilitar horde bajo SSL editar /etc/httpd/conf.d/ssl.conf y agregar lo siguiente al virtualhost por defecto entre las etiquetas default:443> Servername mail.home.topdog-software.com:443 DocumentRoot /usr/share/horde

Configurar Exim

  • Cambiar el MTA a exim
 system-switch-mail (seleccionar exim)

Antivirus / Comprobaciones de Sanesecurity

  • Configurar Exim (/etc/exim/exim.conf) para usar clamav para escanear el correo entrante y rechazar correos electrónicos infectados por virus y spam de imágenes y pdf en el tiempo smtp
av_scanner = clamd:/var/run/clamav/clamd.sock

RBL’s

  • Configurar los RBL’s bajo acl_check_rcpt: drop message = REJECTED porque $sender_host_address está en una lista negra spamhaus.org dnslists = zen.spamhaus.org drop message = REJECTED porque $sender_host_address está en una lista negra en $dnslist_domain\n$dnslist_text dnslists = bl.spamcop.net drop message = REJECTED porque $sender_host_address está en una lista negra en $dnslist_domain\n$dnslist_text dnslists = dnsbl.sorbs.net

Anti Spam

  • Si deseas rechazar mensajes de servidores sin dns inverso agregar esto bajo acl_check_rcpt:, tiene una lista de excepciones a la que puedes agregar dominios donde la acl no debe aplicarse y trata de entregar un mensaje de prueba a la dirección de envío para verificar si el remitente es válido. drop message = REJECTED - No aceptamos mensajes de hosts sin DNS inverso log_message = No hay DNS inverso domains = ! lsearch;/etc/exim/checks_exempt_hosts !verify = reverse_host_lookup !verify = sender/callout=2m,defer_ok !condition = ${if eq{$sender_verify_failure}{} }
  • Para rechazar mensajes de clientes que no proporcionan un saludo HELO/EHLO agregar esto a acl_check_rcpt: drop message = REFUSED - no saludo HELO/EHLO log_message = el host remoto no presentó saludo condition = ${if def:sender_helo_name {false}{true}}
  • También puedes limitar la tasa de conexiones a tu servidor agregar esto a acl_check_connect: para hacerlo (lee la documentación de exim sobre los parámetros si deseas ajustarlo para tu sitio) deny ratelimit = 250 / 15m / strict message = Solo puedes enviar $sender_rate por $sender_rate_period log_message = TASA: $sender_rate/$sender_rate_period (máx $sender_rate_limit) accept
  • Detener bots de spam rebeldes de arruinar tu máquina smtp_accept_max_nonmail = 30 smtp_max_unknown_commands = 1
  • No publicitar el pipelining pipelining_advertise_hosts =
  • Habilitar comprobaciones de Spamassassin spamd_address = /var/run/spamassassin/spamd.sock
  • Rechazar todos los mensajes con puntuación superior a 6 en el tiempo smtp. (acl_check_data) accept condition = ${if >={$message_size}{100000} {1}} add_header = X-Spam-Note: SpamAssassin ejecución omitida debido al tamaño del mensaje warn spam = nobody/defer_ok add_header = X-Spam-Flag: YES accept condition = ${if !def:spam_score_int {1}} add_header = X-Spam-Note: La invocación de SpamAssassin falló warn add_header = X-Spam-Score: $spam_score ($spam_bar)\n\# X-Spam-Report: $spam_report drop condition = ${if >{$spam_score_int}{60} {1}} message = Tu mensaje obtuvo $spam_score puntos de SpamAssassin. El informe sigue:\n\ $spam_report

Enrutamiento de correo

  • Habilitar acceso a la base de datos Mysql hide mysql_servers = localhost/horde/horde/hordepassword
  • Modificar el enrutador de entrega local para entregar a cyrus pero verificar la dirección de correo electrónico del usuario antes de la entrega (en la sección de enrutadores de exim.conf) localuser: driver = accept local_parts = ${lookup mysql {SELECT REPLACE(user_uid,'${quote_mysql:@$domain}','') as user FROM horde_users WHERE user_uid='${quote_mysql:$local_part@$domain}'}{$value}} transport = local_delivery cannot_route_message = Usuario desconocido
  • Crear un transporte para entregar a cyrus a través del socket lmtp local_delivery: driver = lmtp socket = /var/lib/imap/socket/lmtp batch_max = 50 user = cyrus

Autenticación SMTP

  • Agregar lo siguiente a la sección de autenticación de /etc/exim/exim.conf plain: driver = plaintext public_name = PLAIN server_prompts = : server_set_id = $2 server_condition = ${if saslauthd{{$2}{$3}{pop}}{1}{0}} server_advertise_condition = true login: driver = plaintext public_name = LOGIN server_prompts = "Nombre de usuario:: : Contraseña::" server_condition = ${if saslauthd{{$1}{$2}{pop}}{1}{0}} server_set_id = $1 server_advertise_condition = true

Ejemplo completo de configuración

Descarga el archivo de configuración completo aquí.

Configurar Mysql

  • Deshabilitar la red TCP editar /etc/my.cnf y agregar lo siguiente en la sección mysqld skip-networking
  • Establecer la contraseña de root /usr/bin/mysqladmin -u root password ‘nueva-contraseña’
    /usr/bin/mysqladmin -u root -h your_host_name password ‘nueva-contraseña’ -p

Configurar Horde

  • Editar el archivo sql y cambiar la contraseña mysql para el usuario horde cp /usr/share/horde/scripts/sql/create.mysql.sql .
    vi create.mysql.sql REPLACE INTO user (host, user, password) VALUES ( 'localhost', 'horde', -- IMPORTANTE: Cambia esta contraseña! PASSWORD('hordepassword') );
  • Crear el usuario y poblar la base de datos horde mysql -p < create.mysql.sql
  • Crear las tablas para turba (libreta de direcciones) mysql -p horde < /usr/share/horde/turba/scripts/sql/turba_objects.mysql.sql
  • Crear las tablas para kronolith (calendario) mysql -p horde < /usr/share/horde/kronolith/scripts/sql/kronolith.mysql.sql

Configuración de Horde

  • Crear la configuración base de horde /usr/share/horde/config/conf.php
  • Establecer preferencias de horde para hacer que el correo web sea la aplicación predeterminada al iniciar sesión. Editar el archivo /usr/share/horde/config/prefs.php y modificar $prefs[‘initial_application’] para que se vea como a continuación ``` $_prefs[‘initial_application’] = array( ‘value’ => ‘imp’, ‘locked’ => true, ‘shared’ => true, ‘type’ => ‘select’, ‘desc’ => sprintf((“¿Qué aplicación debería %s mostrar después de iniciar sesión?”), $GLOBALS[‘registry’]->get(‘name’)) ); ```
  • Hacer que horde funcione desde dentro de la raíz predeterminada de los servidores web, editar /usr/share/horde/config/registry.php y modificar $this?applications[‘horde’] como a continuación $this->applications['horde'] = array( 'fileroot' => dirname(__FILE__) . '/..', 'webroot' => '', 'initial_page' => 'login.php', 'name' => _("Horde"), 'status' => 'active', 'templates' => dirname(__FILE__) . '/../templates', 'provides' => 'horde' );
Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.