Métodos de pago Abuse

Servidor de correo en CentOS 7. Instalación de Dovecot + Exim + Roundcube

13.03.2023, 23:01

Instalar un servidor de correo en CentOS 7 puede hacerse de varias maneras, pero una de las más comunes es utilizar una combinación de Postfix y Dovecot.

Postfix es un software remitente y es uno de los servidores de correo más populares del mundo. Dovecot, por su parte, es un servidor de correo que se utiliza para recibir correo electrónico mediante el protocolo IMAP o POP.

¿Qué es Exim?

Exim es un agente de transferencia de correo (MTA) que se utiliza habitualmente en sistemas operativos tipo Unix. Exim es un software gratuito distribuido bajo los términos de la GNU (General Public Licence) y es una herramienta de correo electrónico versátil y flexible con amplias funciones para comprobar el correo electrónico entrante.

¿Qué es Dovecot?

Dovecot es un servidor de correo IMAP y POP3 de código abierto para sistemas Linux/UNIX. La seguridad ha sido la piedra angular de este producto centrado en la flexibilidad y la velocidad.

¿Qué es Roundcube?

Roundcube es una interfaz de correo electrónico basada en web que ofrece la posibilidad de trabajar con sus buzones de correo utilizando IMAP y SMTP. La aplicación tiene una potente funcionalidad y es comparable en capacidades a los clientes de correo electrónico de escritorio como Outlook Express o Mozilla Thunderbird.

Instalación de Apache + MySQL + PHP

Inicie sesión a través de SSH en su servidor virtual.

A continuación debe actualizar el sistema, introduzca el comando:

# sudo yum update -y

Después de actualizar el sistema, aparecerá un mensaje como este.

Instalar Apache

Para instalar Apache en su servidor virtual, introduzca el comando:

# sudo yum install httpd -y

Después de la instalación, inicie Apache:

# sudo systemctl start httpd.service

Después de eso, vaya a - http://ServerIP/ y compruebe que Apache funciona correctamente

Si todo funciona correctamente, introduzca el comando para autoejecutar Apache en el servidor virtual:

# sudo systemctl enable httpd.service

Instalar MySQL (MariaDB)

Para descargar, utilice el comando

# sudo yum install mariadb-server mariadb -y

Una vez finalizada la descarga y la instalación, deberá ejecutar MariaDB:

# sudo systemctl start mariadb

Ejecute el script de instalación segura, que eliminará la configuración insegura:

# sudo mysql_secure_installation

Introduzca la contraseña de root, ya que acaba de crear la base de datos, está vacía por defecto. A continuación, acepte la configuración, introduzca"Y" en todas partes. Introduzca una nueva contraseña, confírmela, y de nuevo acepte los cambios"Y".

MariaDB ya está instalada.

Instalar PHP

Para instalar PHP, introduzca el comando:

# sudo yum install php php-mysql -y

A continuación, reinicia Apache para que pueda ejecutar PHP:

# sudo systemctl restart httpd.service

Para probar cómo funciona PHP, introduzca usted necesita para hacer un archivo, como index.php utilizando este comando:

# echo "<?php phpinfo(); ?>" > /var/www/html/index.php

Ahora abre el enlace en tu navegador - http://ServerIP/index.php Deberías ver una página con parámetros PHP.

A continuación, tiene que instalar el paquete para apoyar MariaDB en PHP:

# sudo yum -y install php-mysql php-gd php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-snmp php-soap curl curl-devel

Después de eso reinicia Apache:

# sudo systemctl restart httpd.service

Listo. Has instalado Apache, MySQL y PHP en el servidor virtual.

Conectando repositorios adicionales

Necesitará conectar un repositorio adicional para instalar todos los componentes.

# sudo yum install epel-release

Creación de una base de datos vexim

Para crear una conexión entre todos los componentes de la cadena es necesario utilizar una base de datos. Conéctese al servidor MySQL:

# mysql -u root -p

Crear una base de datos, debe especificar su propia contraseña:

CREATE DATABASE vexim;  
GRANT ALL ON vexim.* to vexim@localhost identified by 'password';  
quit

Instalar Postfixadmin

En caso de que no todos los módulos PHP estén instalados, se requiere una instalación adicional.

# yum -y install php-imap php-mbstring php-pdo php-mysql php-cli

Descargue Postfixadmin e instálelo en la carpeta /var/www/html/postfixadmin.

# wget http://sourceforge.net/projects/postfixadmin/files/postfixadmin/postfixadmin-3.0/postfixadmin-3.0.tar.gz
# tar xpf postfixadmin-3.0.tar.gz
# mv postfixadmin-3.0 /var/www/html/postfixadmin
# chown -R apache:apache /var/www/html/postfixadmin
# rm postfixadmin-3.0.tar.gz
# cd /var/www/html/postfixadmin > # vi config.inc.php

Edite el archivo de configuración config .inc.php:

Instalando Dovecot

# yum -y install dovecot dovecot-mysql

Renombra la configuración por defecto para que podamos volver a ella si es necesario:

# mv /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf-orig
# vi /etc/dovecot/dovecot.conf

Guarde las siguientes entradas en el archivo de configuración dovecot.conf:

## Dovecot configuration file

base_dir = /var/run/dovecot/  

auth_default_realm = site.com 

auth_mechanisms = plain login cram-md5 

protocols = imap pop3  

listen = *  

disable_plaintext_auth = no  

dotlock_use_excl = yes  

first_valid_gid = 5  

first_valid_uid = 25  

mail_location = maildir:/var/vmail/%d/%u  

mail_privileged_group = mail  

passdb {  

  args = /etc/dovecot/dovecot-mysql.conf  

  driver = sql  

}   

service auth {  

  unix_listener auth-client {  

    group = exim  

    mode = 0660  

    user = exim  

  }  

  unix_listener auth-master {  

    group = exim  

    mode = 0600  

    user = exim  

  }  

  user = root  

}  

ssl = no  

userdb {  

  args = /etc/dovecot/dovecot-mysql.conf  

  driver = sql  

}  

verbose_proctitle = yes

protocol imap {  

  imap_client_workarounds = delay-newmail tb-extra-mailbox-sep  

}  

protocol pop3 {  

  pop3_client_workarounds = outlook-no-nuls oe-ns-eoh  

  pop3_uidl_format = %08Xu%08Xv  

}  

protocol lda {  

  auth_socket_path = /var/run/dovecot/auth-master  

  postmaster_address = info@site.com

}

Para configurar el acceso a la base de datos, cree un fichero de configuración separado dovecot-mysql.conf

# vi /etc/dovecot/dovecot-mysql.conf

e introduzca en él la siguiente configuración:

## Dovecot database configuration

driver = mysql  

connect = host=localhost dbname=vexim user=vexim password=password  

default_pass_scheme = CRAM-MD5  

password_query = SELECT `username` as `user`, `password` FROM  `mailbox` WHERE `username` = '%n@%d' AND `active`='1'  

user_query = SELECT 93 AS `uid`, 93 AS `gid` FROM `mailbox` WHERE `username` = '%n@%d' AND `active`='1'

Instalación de Exim

# yum -y install exim exim-mysql cyrus-sasl
# mv /etc/exim/exim.conf /etc/exim/exim.conf-orig
# vi /etc/exim/exim.conf

Modifique la configuración por defecto guardando una copia de seguridad.

######################################################################

#                    MAIN CONFIGURATION SETTINGS                     #

######################################################################

primary_hostname = mail.site.com

hide mysql_servers = localhost/vexim/vexim/password  

domainlist local_domains = ${lookup mysql{SELECT `domain`   

                            FROM `domain` WHERE   

                            `domain`='${quote_mysql:$domain}' AND   

                            `active`='1'}}  

domainlist relay_to_domains = ${lookup mysql{SELECT `domain`   

                            FROM `domain` WHERE   

                            `domain`='${quote_mysql:$domain}' AND   

                            `active`='1'}}  

hostlist relay_from_hosts = localhost:127.0.0.0/8:192.168.1.0/24

auth_advertise_hosts = *

acl_not_smtp = acl_not_smtp  

acl_smtp_rcpt = acl_check_rcpt  

acl_smtp_data = acl_check_data  

qualify_domain = site.com  

qualify_recipient = site.com

allow_domain_literals = true  

exim_user = exim  

exim_group = exim  

never_users = root  

rfc1413_query_timeout = 0s  

sender_unqualified_hosts = +relay_from_hosts  

recipient_unqualified_hosts = +relay_from_hosts  

ignore_bounce_errors_after = 45m  

timeout_frozen_after = 15d  

helo_accept_junk_hosts = 192.168.1.0/24  

auto_thaw = 1h  

smtp_banner = "$primary_hostname, ESMTP EXIM $version_number"  

smtp_accept_max = 50  

smtp_accept_max_per_connection = 25  

smtp_connect_backlog = 30  

smtp_accept_max_per_host = 20  

split_spool_directory = true  

remote_max_parallel = 15  

return_size_limit = 70k  

message_size_limit = 64M  

helo_allow_chars = _  

smtp_enforce_sync = true  

log_selector =   

    +all_parents   

    +connection_reject   

    +incoming_interface   

    +lost_incoming_connection   

    +received_sender   

    +received_recipients   

    +smtp_confirmation   

    +smtp_syntax_error   

    +smtp_protocol_error   

    -queue_run  

syslog_timestamp = no  

######################################################################

#                       ACL CONFIGURATION                            #

#         Specifies access control lists for incoming SMTP mail      #

######################################################################

begin acl  

acl_not_smtp:  

        deny message = Sender rate overlimit - $sender_rate / $sender_rate_period  

        ratelimit = 50 / 1h / strict  

        accept  

acl_check_rcpt:  

  deny    message          = "Lookup failed"  

          condition = ${if eq{$host_lookup_failed}{1}}  

  accept  hosts = :  

  deny    message       = "incorrect symbol in address"  

          domains       = +local_domains  

          local_parts   = ^[.] : ^.*[@%!/|]  

  deny    message       = "incorrect symbol in address"  

          domains       = !+local_domains  

          local_parts   = ^[./|] : ^.*[@%!] : ^.*/\.\./  

  accept  local_parts   = postmaster  

          domains       = +local_domains  

  deny    message       = "HELO/EHLO required by SMTP RFC"  

          condition     = ${if eq{$sender_helo_name}{}{yes}{no}}  

  accept  authenticated = *   

  deny    condition     = ${if eq{$sender_helo_name}  

    {$interface_address}{yes}{no}}  

          hosts         = !127.0.0.1 : !localhost : *  

          message       = "My IP in your HELO! Access denied!"  

  deny    condition     = ${if match{$sender_helo_name}  

    {N^d+$N}{yes}{no}}  

          hosts         = !127.0.0.1 : !localhost : *  

          message       = "Incorrect HELO string"  

  warn  

        set acl_m0 = 30s  

  warn  

        hosts = +relay_from_hosts:4.3.2.1/32:192.168.1.0/24 #disable waits for 'friendly' hosts  

        set acl_m0 = 0s  

  warn  

        logwrite = Delay $acl_m0 for $sender_host_name   

[$sender_host_address] with HELO=$sender_helo_name. Mail   

from $sender_address to $local_part@$domain.  

        delay = $acl_m0  

  accept  domains       = +local_domains  

          endpass  

          message       = "No such user"  

          verify        = recipient  

  accept  domains       = +relay_to_domains  

          endpass  

          message       = "i don't know how to relay to this address"  

          verify        = recipient  

  deny    message       = "you in blacklist - $dnslist_domain n $dnslist_text"  

          dnslists      = opm.blitzed.org :   

                          cbl.abuseat.org :   

                          bl.csma.biz   

accept  hosts         = +relay_from_hosts  

deny    message       = "Homo hominus lupus est"  

acl_check_dаta:  

deny malware = */defer_ok  

message = "Your message contains viruses: $malware_name"  

accept  

######################################################################

#                      ROUTERS CONFIGURATION                         #

#               Specifies how addresses are handled                  #

######################################################################

#     THE ORDER IN WHICH THE ROUTERS ARE DEFINED IS IMPORTANT!       #

# An address is passed to each router in turn until it is accepted.  #

######################################################################

begin routers  

dnslookup:  

  driver = dnslookup  

  domains = ! +local_domains  

  transport = remote_smtp  

  ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8  

  no_more  

system_aliases:  

    driver      = redirect  

    allow_fail  

    allow_defer  

    data = ${lookup mysql{SELECT `goto` FROM `alias` WHERE   

            `address`='${quote_mysql:$local_part@$domain}' OR   

                `address`='${quote_mysql:@$domain}'}}  

dovecot_user:  

  driver = accept  

  condition = ${lookup mysql{SELECT `goto` FROM   

  `alias` WHERE   

  `address`='${quote_mysql:$local_part@$domain}' OR   

  `address`='${quote_mysql:@$domain}'}{yes}{no}}  

  transport = dovecot_delivery  

######################################################################

#                      TRANSPORTS CONFIGURATION                      #

######################################################################

#                       ORDER DOES NOT MATTER                        #

#     Only one appropriate transport is called for each delivery.    #

######################################################################

begin transports 

remote_smtp:  

  driver = smtp 

dovecot_delivery:  

  driver = pipe  

  command = /usr/libexec/dovecot/deliver -d $local_part@$domain  

  message_prefix =  

  message_suffix =  

  delivery_date_add  

  envelope_to_add  

  return_path_add  

  log_output  

  user = exim  

address_pipe:  

  driver = pipe  

  return_output  

address_reply:  

  driver = autoreply  

######################################################################

#                      RETRY CONFIGURATION                           #

###################################################################### 

begin retry  

*                    *       F,2h,15m; G,16h,1h,1.5; F,4d,6h  

######################################################################

#                      REWRITE CONFIGURATION                         #

###################################################################### 

begin rewrite  

######################################################################

#                   AUTHENTICATION CONFIGURATION                     #

######################################################################  

begin authenticators  

auth_plain:  

     driver = dovecot  

     public_name = PLAIN  

     server_socket = /var/run/dovecot/auth-client  

     server_set_id = $auth1  

auth_login:  

     driver = dovecot  

     public_name = LOGIN  

     server_socket = /var/run/dovecot/auth-client  

     server_set_id = $auth1  

auth_cram_md5:  

     driver = dovecot  

     public_name = CRAM-MD5  

     server_socket = /var/run/dovecot/auth-client  

     server_set_id = $auth1

Desinstalar Postfix

# alternatives --config mta
# systemctl disable postfix
# systemctl stop postfix
# yum -y remove postfix

Configurar Postfixadmin

Vaya a http://server_ip/postfixadmin/setup.php y siga las instrucciones de instalación. Después de crear el superadmin, el instalador le dará un código hash de contraseña:

Debe ser reemplazado en el archivo config.inc.php (en la raíz del directorio postfixadmin) en lugar de esta línea:

A continuación, debe iniciar sesión en los datos creados, añadir los dominios y buzones de correo necesarios.

Instalación de Roundcube

# yum -y install roundcubemail

Después de la instalación necesitas añadir la configuración al servidor web para que el script se abra en http://server_ip/roundcubemail/.

# vi /etc/httpd/conf.d/roundcubemail.conf

Guarde los siguientes datos:

#

# Round Cube Webmail is a browser-based multilingual IMAP client

#

Alias /roundcubemail /usr/share/roundcubemail

Alias /webmail /usr/share/roundcubemail

<Directory /usr/share/roundcubemail/>

        Options none

        AllowOverride Limit

        Require all granted

</Directory>

<Directory /usr/share/roundcubemail/installer>

        Options none

        AllowOverride Limit

        Require all granted

</Directory>

# Those directories should not be viewed by Web clients.

<Directory /usr/share/roundcubemail/bin/>

    Order Allow,Deny

    Deny from all

</Directory>

<Directory /usr/share/roundcubemail/plugins/enigma/home/>

    Order Allow,Deny

    Deny from all

</Directory>

Apache debe reiniciarse después de escribir:

# systemctl restart httpd.service

Para continuar con la instalación cree una base de datos, para ello conéctese a MySQL:

# mysql -u root -p

y ejecute consultas (especifique sus propios datos):

CREATE DATABASE roundcubedb;

CREATE USER roundcubeuser@localhost IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES on roundcubedb.* to roundcubeuser@localhost ;

FLUSH PRIVILEGES;

quit

A continuación debe abrir el instalador http://server_ip/roundcubemail/installer y configurar.

Esto completa la configuración, vaya a Roundcube http://server_ip/roundcubemail/, inicie sesión en el cuadro creado anteriormente (en Postfixadmin), hacer ajustes y uso.