Instal·larem i configurarem un servidor de correu-e amb certificats SSL, amb accés per Roundcube i amb Spamassassin pels filtres de correu brossa.
Els certificats que s’utilitzen són verificats per Let’s Encrypt (veure entrada).
Recomanacions prèvies:
Configuració del FQDN:
$ sudo nano /etc/hosts
I la configuració:
127.0.0.1 localhost localhost 127.0.1.1 mail.aniolmarti.cat mail YourIP mail.aniolmarti.cat mail
El fitxer /etc/hostname
, en aquest cas, ha de contenir mail.aniolmarti.cat
.
Instal·lem paquets:
$ sudo apt-get install postfix postfix-mysql dovecot-core dovecot-imapd dovecot-lmtpd dovecot-mysql
Quan ens surti la pantalla de configuració marquem “Internet Site”.
A “System mail name” podem posar el nostre FQDN o el nostre domini (jo opto pel FQDN).
Creació de taules al MySQL
Creem la base de dades servermail
:
# mysqladmin -p create servermail
Entrem amb l’usuari root
:
# mysql -u root -p
Creem un nou usuari per la base de dades:
mysql > GRANT SELECT, UPDATE ON servermail.* TO 'usermail'@'127.0.0.1' IDENTIFIED BY 'P@ssw0rd'; mysql > FLUSH PRIVILEGES;
Accedim a la DB servermail
:
mysql> USE servermail;
Creem les taules:
mysql> CREATE TABLE `virtual_domains` (`id` INT NOT NULL AUTO_INCREMENT,`name` VARCHAR(50) NOT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8; mysql> CREATE TABLE `virtual_users` (`id` INT NOT NULL AUTO_INCREMENT,`domain_id` INT NOT NULL,`password` VARCHAR(106) NOT NULL,`email` VARCHAR(120) NOT NULL,PRIMARY KEY (`id`),UNIQUE KEY `email` (`email`),FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE) ENGINE=InnoDB DEFAULT CHARSET=utf8; mysql> CREATE TABLE `virtual_aliases` (`id` INT NOT NULL AUTO_INCREMENT,`domain_id` INT NOT NULL,`source` varchar(100) NOT NULL,`destination` varchar(100) NOT NULL,PRIMARY KEY (`id`),FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Afegim contingut a les taules:
mysql> INSERT INTO `servermail`.`virtual_domains` (`id` ,`name`) VALUES ('1', 'aniolmarti.cat'),('2', 'mail.aniolmarti.cat'); mysql> INSERT INTO `servermail`.`virtual_users` (`id`, `domain_id`, `password` , `email`) VALUES ('1', '1', ENCRYPT('P@ssw0rd'), 'webmaster@aniolmarti.cat');
A la taula “virtual_aliases” de moment no hi posem res, ja que és per fer redireccions. Per afegir un àlies seria:
mysql> INSERT INTO `servermail`.`virtual_aliases` (`id`, `domain_id`, `source`, `destination`) VALUES ('1', '1', 'alias@example.com', 'email1@example.com');
Sortim del MySQL:
mysql> exit
Configuració del Postfix
Fem un backup del fitxer original:
# cp /etc/postfix/main.cf /etc/postfix/main.cf.bak
L’editem:
# nano /etc/postfix/main.cf
Els “TLS parameters” els deixem així:
# TLS parameters # Incoming smtpd_tls_cert_file=/etc/letsencrypt/live/mail.aniolmarti.cat/fullchain.pem smtpd_tls_key_file=/etc/letsencrypt/live/mail.aniolmarti.cat/privkey.pem smtpd_use_tls=yes smtpd_tls_auth_only = yes smtpd_tls_security_level = may smtpd_tls_mandatory_ciphers = high # Outgoing smtp_tls_cert_file=/etc/letsencrypt/live/mail.aniolmarti.cat/fullchain.pem smtp_tls_key_file=/etc/letsencrypt/live/mail.aniolmarti.cat/privkey.pem smtp_use_tls = yes smtp_tls_security_level = may smtp_tls_mandatory_ciphers = high # SASL Authentication smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtpd_sasl_auth_enable = yes smtpd_sasl_authenticated_header = yes smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination
Canviem el paràmetre “mysdestination” a “localhost” i “myhostname” al nostre FQDN:
mydestination = localhost myhostname = mail.aniolmarti.cat
Afegim les línies:
virtual_transport = lmtp:unix:private/dovecot-lmtp virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf
Preparem aquests 3 fitxers per realitzar la connexió amb el MySQL:
# nano /etc/postfix/mysql-virtual-mailbox-domains.cf
Ha de quedar:
user = usermail password = P@ssw0rd hosts = 127.0.0.1 dbname = servermail query = SELECT 1 FROM virtual_domains WHERE name='%s'
El segon:
# nano /etc/postfix/mysql-virtual-mailbox-maps.cf
Que quedi:
user = usermail password = P@ssw0rd hosts = 127.0.0.1 dbname = servermail query = SELECT 1 FROM virtual_users WHERE email='%s'
I l’últim:
# nano /etc/postfix/mysql-virtual-alias-maps.cf
I que quedi:
user = usermail password = P@ssw0rd hosts = 127.0.0.1 dbname = servermail query = SELECT destination FROM virtual_aliases WHERE source='%s'
Reiniciem el Postfix:
# /etc/init.d/postfix restart
Comprovem que trobi el nostre domini (correcte si retorna 1):
(L’últim en lloc d’1 hauria de retornar el correu que és redirigit).
# postmap -q aleation.net mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf # postmap -q webmaster@aleation.net mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf # postmap -q alias@example.com mysql:/etc/postfix/mysql-virtual-alias-maps.cf
Habilitar el port 465 per la connexió segura:
# nano /etc/postfix/master.cf
Busquem la línia addient i ho deixem així:
submission inet n - - - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject
Busquem la línia “smtps inet n – n – – smtpd” i ho modifiquem:
“465 inet n - n - - smtpd” -o syslog_name=postfix/smtps -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject
Reïniciem el postfix:
# /etc/init.d/postfix restart
Configuració del Dovecot
Fem un backup dels fitxers:
# cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.bak # cp /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf.bak # cp /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10-auth.conf.bak # cp /etc/dovecot/dovecot-sql.conf.ext /etc/dovecot/dovecot-sql.conf.ext.bak # cp /etc/dovecot/conf.d/10-master.conf /etc/dovecot/conf.d/10-master.conf.bak # cp /etc/dovecot/conf.d/10-ssl.conf /etc/dovecot/conf.d/10-ssl.conf.bak
Editem el “dovecot.conf”:
# nano /etc/dovecot/dovecot.conf
Revisem que aquesta línia no estigui comentada:
!include conf.d/*.conf
Habilitem IMAP:
!include_try /usr/share/dovecot/protocols.d/*.protocol protocols = imap lmtp
Editem un altre fitxer:
# nano /etc/dovecot/conf.d/10-mail.conf
Canviem alguns paràmetres:
mail_location = maildir:/var/mail/vhosts/%d/%n mail_privileged_group = mail
Establim els permisos i les carpetes per cada domini:
# mkdir -p /var/mail/vhosts/aleation.net # groupadd -g 5000 vmail # useradd -g vmail -u 5000 vmail -d /var/mail # chown -R vmail:vmail /var/mail # chmod -R 770 /var/mail
Editem el fitxer “10-auth.conf”:
# nano /etc/dovecot/conf.d/10-auth.conf
Descomentem:
disable_plaintext_auth = yes !include auth-sql.conf.ext
Modifiquem:
auth_mechanisms = plain login
Comentem:
#!include auth-system.conf.ext
Configurem la connexió a la BDD:
# nano /etc/dovecot/conf.d/auth-sql.conf.ext
Ha de quedar:
passdb { driver = sql args = /etc/dovecot/dovecot-sql.conf.ext } userdb { driver = static args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n }
També modifiquem:
# nano /etc/dovecot/dovecot-sql.conf.ext
Descomentem i modifiquem:
driver = mysql connect = host=127.0.0.1 dbname=servermail user=usermail password=P@ssw0rd default_pass_scheme = SHA512-CRYPT password_query = SELECT email as user, password FROM virtual_users WHERE email='%u';
Editem permisos:
# chown -R vmail:dovecot /etc/dovecot # chmod -R o-rwx /etc/dovecot
Editem el fitxer “10-master.conf”:
# nano /etc/dovecot/conf.d/10-master.conf
Notem els canvis que s’hi fan:
##Uncomment inet_listener_imap and modify to port 0 service imap-login { inet_listener imap { port = 0 } #Create LMTP socket and this configurations service lmtp { unix_listener /var/spool/postfix/private/dovecot-lmtp { mode = 0600 user = postfix group = postfix } #inet_listener lmtp { # Avoid making LMTP visible for the entire internet #address = #port = #} } service auth { unix_listener /var/spool/postfix/private/auth { mode = 0666 user = postfix group = postfix } unix_listener auth-userdb { mode = 0600 user = vmail #group = } #unix_listener /var/spool/postfix/private/auth { # mode = 0666 #} user = dovecot } service auth-worker { # Auth worker process is run as root by default, so that it can access # /etc/shadow. If this isn't necessary, the user should be changed to # $default_internal_user. user = vmail }
Editem el fitxer “10-ssl.conf”:
# nano /etc/dovecot/conf.d/10-ssl.conf
Modifiquem els paràmetres:
ssl = required ssl_cert = </etc/letsencrypt/live/mail.ltec.cat/fullchain.pem ssl_key = </etc/letsencrypt/live/mail.ltec.cat/privkey.pem
Reiniciem el Dovecot:
# /etc/init.d/dovecot restart
Roundcube
Baixem el Roundcube i el descomprimim:
$ wget https://github.com/roundcube/roundcubemail/releases/download/1.2.2/roundcubemail-1.2.2-complete.tar.gz $ tar -xvzf roundcubemail-1.2.2-complete.tar.gz # mv roundcubemail-1.2.2 /var/www/roundcube # chown -R www-data:www-data /var/www/roundcube
Creem la base de dades:
# mysql -u root -p mysql> CREATE DATABASE roundcube; mysql> CREATE USER 'roundcube'@'localhost' IDENTIFIED BY 'password'; mysql> GRANT ALL PRIVILEGES ON roundcube.* TO 'roundcube'@'localhost'; mysql> FLUSH PRIVILEGES; mysql> exit
Instal·lem paquets:
# apt-get install php-pear php5-intl php5-mcrypt && sudo php5enmod intl mcrypt
Activem mòduls:
# a2enmod deflate expires headers rewrite ssl
Instal·lem paquets PHP PEAR:
# pear install Auth_SASL Net_SMTP Net_IDNA2-0.1.1 Mail_mime Mail_mimeDecode
Creem el site:
# nano /etc/apache2/sites-available/mail.exemple.com.conf
Amb les nostres dades ha de quedar així:
<VirtualHost *:80> ServerAdmin correu@exemple.com ServerName mail.exemple.com ServerAlias mail.exemple.com DocumentRoot /var/www/roundcube ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined RewriteEngine on RewriteCond %{SERVER_NAME} =mail.exemple.com RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent] </VirtualHost>
També creem el site /etc/apache2/sites-available/mail.exemple.com-le-ssl.conf
:
<IfModule mod_ssl.c> <VirtualHost *:443> ServerAdmin correu@exemple.com ServerName mail.exemple.com ServerAlias mail.exemple.com DocumentRoot /var/www/roundcube ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLCertificateFile /etc/letsencrypt/live/exemple.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/exemple.com/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf </VirtualHost> </IfModule>
Afegim el fus horari a /etc/php5/apache2/php.ini
:
date.timezone = Europe/Berlin
Reiniciem l’Apache:
# service apache2 restart
Per configurar el Roundcube només cal accedir a: https://mail.example.com/installer
Un cop configurat cal eliminar el directori de l’instal·lador:
# rm -r /var/www/roundcube/installer
Plugin “password”
Activem el plugin:
# nano /var/www/roundcube/config/config.inc.php
Busquem la línia:
$config['plugins'] = array();
La modifiquem:
$config['plugins'] = array(‘password’);
Configurem el plugin:
# cp /var/www/roundcube/plugins/password/config.inc.php.dist /var/www/roundcube/plugins/password/config.inc.php # nano /var/www/roundcube/plugins/password/config.inc.php
Busquem i modifiquem les línies:
$config['password_driver'] = 'sql'; $config['password_confirm_current'] = true; $config['password_minimum_length'] = 6; $config['password_require_nonalpha'] = false; $config['password_log'] = false; $config['password_login_exceptions'] = null; $config['password_hosts'] = array('localhost'); $config['password_force_save'] = false; $config['password_algorithm'] = 'sha512-crypt'; // SQL Driver options $config['password_db_dsn'] = 'mysql://user:pass@localhost/servermail'; $config['password_query'] = 'UPDATE virtual_users SET password=ENCRYPT(%p) WHERE email=%u LIMIT 1'; $config['password_crypt_hash'] = 'sha512';
Desactivar múltiples identitats
Per defecte Roundcube et permet crear identitats amb el correu-e que tu vulguis i el nom que tu vulguis. Per canviar-ho cal editar la configuració.
Editem el fitxer /var/www/roundcube/config/config.inc.php
:
// Set identities access level: // 0 - many identities with possibility to edit all params // 1 - many identities with possibility to edit all params but not email address // 2 - one identity with possibility to edit all params // 3 - one identity with possibility to edit all params but not email address // 4 - one identity with possibility to edit only signature $config['identities_level'] = 3;
Spamassassin
Instal·lem:
# apt-get install spamc spamassassin
Configurem els permisos:
# groupadd -g 5555 spamd # useradd -u 5555 -g spamd -s /sbin/nologin -d /usr/local/spamassassin spamd # mkdir -p /usr/local/spamassassin/log # chown spamd:spamd -R /usr/local/spamassassin
Activem l’Spamassassin canviant ENABLED=0
per ENABLED=1
a /etc/default/spamassassin
.
Configurem l’Spamassassin editant /etc/spamassassin/local.cf
:
rewrite_header Subject ***** SPAM _SCORE_ ***** report_safe 0 required_score 5.0 use_bayes 1 use_bayes_rules 1 bayes_auto_learn 1 skip_rbl_checks 0 use_razor2 0 use_dcc 0 use_pyzor 0
Configurem el Postfix editant /etc/postfix/master.cf
:
smtp inet n - - - - smtpd -o content_filter=spamassassin spamassassin unix - n n - - pipe user=spamd argv=/usr/bin/spamc -f -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}
Configurar registre SPF
Aquest apartat s’enfoca a configurar el registre SPF (de l’anglés Sender Policy Framework) del domini. Fer-ho és una manera d’evitar spam i que els teus correus-e no s’intepretin com a tal.
L’SPF li permet a l’administrador especificar quins servidors poden enviar correu en nom d’aquell domini. Per fer-ho cal crear un nou registre TXT a la zona DNS del domini.
Jo utilitzo:
v=spf1 mx a ip4:A.B.C.D ~all
Si voleu més informació sobre SPF podeu visitar aquesta entrada de DigitalOcean.
I fins aquí l’entrada.
Configurar DKIM
Els apunts per configurar DKIM els podeu trobar en aquesta entrada.