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.
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.
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.
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.
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.
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
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.
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
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
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
:
# 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'
# 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
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.