Servidor de Correo – Casillas y usuarios virtuales

Instalación de Roundcube

Instalación de Roundcube

Creamos un directorio y nos ubicamos allí:

mkdir /srv/roundcube
cd /srv/roundcube

Descargamos y descomprimimos el tar.gz de RoundCube:

wget https://github.com/roundcube/roundcubemail/releases/download/1.4.10/roundcubemail-1.4.10-complete.tar.gz
tar xfz roundcubemail-1.4.10-complete.tar.gz

Los archivos de RoundCube ahora están en la carpeta /srv/roundcube/roundcubemail-1.4.10. El próximo paso es moverlos un nivel hacia arriba a /srv/roundcube.

mv roundcubemail-1.4.10/* .
mv roundcubemail-1.4.10/.htaccess .

El punto al final de ambos comandos es requerida y parte de la sentencia, ¡no lo olvides! Eliminamos el directorio y el archivo tar.gz.

rmdir roundcubemail-1.4.10
rm roundcubemail-1.4.10-complete.tar.gz

Cambiamos la propiedad de todos los archivos al usuario que está utilizando el Apache.

chown -R www-data:www-data /srv/roundcube

Instalamos la base de datos de RoundCube

Roundcube requiere una base de datos para almacenar la configuración de la casilla de correo, contactos, etc. Vamos a crear una base de datos con el nombre “roundcubemail” y un usuario con el mismo nombre “roundcube” en MariaDB.

Ingresamos a la consola de MariaDB con el siguiente comando:

mysql --defaults-file=/etc/mysql/debian.cnf

Luego ejecutamos los siguientes comandos para crear la base de datos y el usuario. Reemplazando “clavesecreta” con la contraseña que prefieras.

CREATE DATABASE roundcubemail;
GRANT ALL PRIVILEGES ON roundcubemail.* TO roundcube@localhost IDENTIFIED BY 'clavesecreta';
FLUSH PRIVILEGES;
QUIT

Ahora importaremos las tablas de RoundCube desde el archivo mysql.initial.sql en nuestra nueva base de datos. Para ello ejecutamos el comando en la consola de Linux:

mysql --defaults-file=/etc/mysql/debian.cnf roundcubemail < /srv/roundcube/SQL/mysql.initial.sql

Configure RoundCube and Apache

En este paso, vamos a configurar los detalles de la base de datos en RoundCube y también a agregar un archivo de configuración en Apache.

Ejecutamos el siguiente comando para crear un nuevo archivo config.inc.php basado en la configuración de ejemplo y lo abrimos.

cd /srv/roundcube/config
cp -pf config.inc.php.sample config.inc.php
nano config.inc.php

Hallar la linea de configuración de la base de datos que comienza con $config[‘db_dsnw’] y reemplazarla con lo siguiente:

$config['db_dsnw'] = 'mysql://roundcube:clavesecreta@localhost/roundcubemail';

Luego modificamos la configuración predeterminada.

// The IMAP host chosen to perform the log-in.
$config['default_host'] = 'ssl://correo.midominio.edu.ar';
// TCP port used for IMAP connections
$config['default_port'] = 993;
$config['imap_auth_type'] = PLAIN;
// IMAP socket context options
$config['imap_conn_options'] = array(
 'ssl' => array(
 'peer_name' => 'correo.midominio.edu.ar',
 'verify_peer_name' => true,
 'capath' => '/usr/lib/ssl/certs/',
 'local_cert' => '/etc/letsencrypt/live/correo.midominio.edu.ar/fullchain.pem',
 'verify_peer' => true,
 ),
);
// SMTP server host (for sending mails).
$config['smtp_server'] = 'tls://correo.midominio.edu.ar';
// SMTP port (default is 25; use 587 for STARTTLS or 465 for the
// deprecated SSL over SMTP (aka SMTPS))
$config['smtp_port'] = 587;
// SMTP socket context options
$config['smtp_conn_options'] = array(
 'ssl' => array(
 'peer_name' => 'correo.midominio.edu.ar',
 'verify_peer_name' => true,
 'capath' => '/usr/lib/ssl/certs/',
 'local_cert' => '/etc/letsencrypt/live/correo.midominio.edu.ar/fullchain.pem',
 'verify_peer' => true,
 ),
);
// Name your service. This is displayed on the login screen and in the window t$
$config['product_name'] = 'Correo de Mi Dominio';
// List of active plugins (in plugins/ directory)
$config['plugins'] = array(
 'password',
 ...
);

Dado que agregamos el plugin para cambiar la contraseña, también es necesario configurarlo. Lo hacemos en plugins/password/config.inc.php

/plugins/password/config.inc.php
$config['password_algorithm'] = 'sha512-crypt';
$config['password_dovecotpw'] = '/usr/local/sbin/doveadm pw'; // for dovecot-2.x
$config['password_dovecotpw_method'] = 'SHA512-CRYPT';
$config['password_db_dsn'] = 'mysql://vimbadmin:contraseña@localhost/vimbadmin';
$config['password_query'] = 'UPDATE mailbox SET password=%c,modified=NOW() WHERE username=%u ';
$config['password_crypt_hash'] = 'sha512';

Ahora es necesario configurar Apache. Creamos un nuevo archivo de configuración roundcube.conf en /etc/apache2/sites-available/.

nano /etc/apache2/sites-available/roundcube.conf

Agregamos las siguientes lineas y lo guardamos.

<VirtualHost correo.midominio.edu.ar:80>
 ServerAdmin administrador@midominio.edu.ar
 ServerName correo.midominio.edu.ar
 ServerAlias correo.midominio.edu.ar
 DocumentRoot /srv/roundcube
 <Directory />
 Options FollowSymLinks
 AllowOverride None
 </Directory>
 <Directory /srv/roundcube>
 Options +FollowSymLinks
 # AddDefaultCharset UTF-8
 AddType text/x-component .htc
 <IfModule mod_php5.c>
 AddType application/x-httpd-php .php
 php_flag display_errors Off
 php_flag log_errors On
 # php_value error_log logs/errors
 php_value upload_max_filesize 10M
 php_value post_max_size 12M
 php_value memory_limit 64M
 php_flag zlib.output_compression Off
 php_flag magic_quotes_gpc Off
 php_flag magic_quotes_runtime Off
 php_flag zend.ze1_compatibility_mode Off
 php_flag suhosin.session.encrypt Off
 #php_value session.cookie_path /
 php_flag session.auto_start Off
 php_value session.gc_maxlifetime 21600
 php_value session.gc_divisor 500
 php_value session.gc_probability 1
 </IfModule>
 <IfModule mod_rewrite.c>
 RewriteEngine On
 RewriteRule ^favicon\.ico$ skins/larry/images/favicon.ico
 # security rules:
 # - deny access to files not containing a dot or starting with a dot
 # in all locations except installer directory
 RewriteRule ^(?!installer)(\.?[^\.]+)$ - [F]
 # - deny access to some locations
 RewriteRule ^/?(\.git|\.tx|SQL|bin|config|logs|temp|tests|program\/(include|lib|localization|steps)) - [F]
 # - deny access to some documentation files
 RewriteRule /?(README\.md|composer\.json-dist|composer\.json|package\.xml)$ - [F]
 </IfModule>
 <IfModule mod_deflate.c>
 SetOutputFilter DEFLATE
 </IfModule>
 <IfModule mod_expires.c>
 ExpiresActive On
 ExpiresDefault "access plus 1 month"
 </IfModule>
 FileETag MTime Size
 <IfModule mod_autoindex.c>
 Options -Indexes
 </ifModule>
 AllowOverride None
 Require all granted
 </Directory>
 <Directory /srv/roundcube/plugins/enigma/home>
 Options -FollowSymLinks
 AllowOverride None
 Require all denied
 </Directory>
 <Directory /srv/roundcube/config>
 Options -FollowSymLinks
 AllowOverride None
 Require all denied
 </Directory>
 <Directory /srv/roundcube/temp>
 Options -FollowSymLinks
 AllowOverride None
 Require all denied
 </Directory>
 <Directory /srv/roundcube/logs>
 Options -FollowSymLinks
 AllowOverride None
 Require all denied
 </Directory>
</VirtualHost>

Habilitamos la configuración y recargamos apache:

a2site roundcube
systemctl reload apache2

RoundCube estará disponible desde correo.midominio.edu.ar.