Introduction
Dans cette article nous allons voir la mise en place d’un serveur mail utilisant OpenSMTPD comme service SMTP et Dovecot en tant que service IMAP ainsi que Roundcube comme webmail.
OpenSMTPD a été vu dans un précédent article.
Dovecot est un service permettant la mise en place de serveur imap ou pop3. Dovecot a été vu sur ce site sur ce lien.
Nous allons présenter la configuration de OpenSMTPD ainsi que celle de Dovecot puis nous détaillerons les modifications qui on été nécessaires au fonctionnement des deux services ainsi que son utilisation d’un point de vue utilisateur via le déploiement de Roundcube sur un serveur web Nginx hébergé par FreeBSD 9.2.
Configuration
Pare-feu
Ouverture ports IMAP via pf.conf sur le serveur OpenBSD pour les service IMAP et SMTP:
set skip on lo tcp_services = "{ ssh, smtp, smtps, domain, imap, www, auth, https }" udp_services = "{ domain }" icmp_types = "{echoreq, unreach}" block in log all pass out quick all pass in inet proto icmp all icmp-type $icmp_types pass in proto tcp to any port $tcp_services pass in proto udp to any port $udp_services
OpenSMTPD
OpenSMTPD v5.4.2:
# This is the smtpd server system-wide configuration file. # See smtpd.conf(5) for more information. # To accept external mail, replace with: listen on all # pki dev.unix-experience.fr certificate "/etc/mail/certs/pcn0.crt" pki dev.unix-experience.fr key "/etc/mail/certs/pcn0.key" listen on pcn0 port 25 tls-require pki dev.unix-experience.fr auth-optional hostname "dev.unix-experience.fr" listen on pcn0 port 465 smtps pki dev.unix-experience.fr auth-optional hostname "dev.unix-experience.fr" table aliases db:/etc/mail/aliases.db # Uncomment the following to accept external mail for domain "example.org" # # accept from any for domain "example.org" alias <aliases> deliver to mbox accept from any for domain "dev.unix-experience.fr" alias <aliases> deliver to maildir accept for local alias <aliases> deliver to maildir accept from local for any relay expire 10d bounce-warn 1h
Dans cette configuration, nous stockons les mails sous le format Maildir et non Mbox car plus flexible avec dovecot.
Nous avons donc une action manuel en cas de nouvel utilisateur. En effet, nous devons créer ou modifier un alias présent dans /etc/mail/aliases, enfin nous devons exécuter la commande newaliases pour régénérer le fichier /etc/mail/aliases.db qui est utilisé par OpenSMTPD .
Dovecot
Dovecot est un serveur IMAP/POP3 disponible dans les ports de OpenBSD.
Nous l’installons avec la commande suivante:
pkg_add -i dovecot
Et nous l’activons au démarrage par l’ajout d’une ligne dans le fichier “/etc/rc.conf.local” avec un éditeur de texte.
pkg_scripts="dovecot"
Pour plus d’informations sur la variable pkg_scripts :
man 8 rc.d
La configuration de dovecot étant expliquée dans l’article lui étant consacré, je ne vais indiquer ici que les actions effectuées
Nous commençons par le fichier /etc/dovecot/dovecot.conf
# Protocols we want to be serving. protocols = imap
Le fichier /etc/dovecot/conf.d/10-logging.conf:
auth_verbose = yes verbose_ssl = yes
Le fichier /etc/dovecot/conf.d/10-ssl.conf :
# SSL/TLS support: yes, no, required. <doc/wiki/SSL.txt> ssl = yes # PEM encoded X.509 SSL/TLS certificate and private key. They're opened before # dropping root privileges, so keep the key file unreadable by anyone but # root. Included doc/mkcert.sh can be used to easily generate self-signed # certificate, just make sure to update the domains in dovecot-openssl.cnf ssl_cert = </etc/ssl/certs/dovecotcert.pem ssl_key = </etc/ssl/private/dovecotkey.pem ssl_protocols = !SSLv2
En utilisant les paramètres de bases nous avons donc un Dovecot fonctionnel. Dovecot va aller chercher les mails dans les emplacement /home/$user/.Maildir pour les traiter. Les certificats ssl peuvent être généré via le script indiqué ou à la main en suivant de bon nombres de tutoriels.
Dovecot peux ce lance avec la commande ci-dessous dans le cadre d’un démarrage manuel du service:
/etc/rc.d/dovecot start
RoundCube
Roundcube est un webmail écrit en PHP dont la première version stable a été rendue publique en 2008. Roundcube nécessite une base de données pour fonctionner, nous installons MYSQL.
Nous allons déployé ce webmail sur un serveur utilisant la distribution FreeBSD.
Installation
Classique méthode d’installation.
pkg install mysql56-server roundcube nginx
Roundcube est installé à l’emplacement suivant:
/usr/local/www/roundcube
Configuration
Toute le paramétrage initial de Roundcube se réalise via un navigateur internet, mais nous devons d’abord le rendre accessible par la configuration d’un virtualhost sur le serveur web Nginx.
############################Roundcube################################### server { listen 80; server_name mail.unix-experience.fr; return 301 https://$server_name$request_uri; # enforce https } server { listen 443 ssl; server_name mail.unix-experience.fr; ssl_certificate /etc/ssl/nginx/unix-experience.crt; ssl_certificate_key /etc/ssl/nginx/unix-experience.key; ssl_session_timeout 5m; ssl_protocols SSLv2 SSLv3 TLSv1; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; access_log /var/log/mail.unix-experience.log; # Path to the root of your installation root /usr/local/www/roundcube; index index.php; if ($http_host != "mail.unix-experience.fr") { rewrite ^ https://mail.unix-experience.fr$request_uri permanent; } location ~ ^/favicon.ico$ { root /usr/local/www/roundcube//skins/classic/images; log_not_found off; expires max; } location = /robots.txt { allow all; log_not_found off; } location ~ ^/(README|INSTALL|LICENSE|CHANGELOG|UPGRADING)$ { deny all; } location ~ ^/(bin|SQL)/ { deny all; } # Deny all attempts to access hidden files such as .htaccess, .htpasswd, .DS_Store (Mac). location ~ /\. { deny all; log_not_found off; } location ~ \.php$ { try_files $uri =404; include fastcgi_params; fastcgi_pass 127.0.0.1:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_index index.php; fastcgi_keep_conn on; fastcgi_split_path_info ^(.+\.php)(.*)$; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; } }
Pour la configuration de la base de données il faut créer un utilisateur, une base de données et lui donner tout les droits uniquement sur celle-ci. Cette base de donnée sera alors utilisé lors de la configuration de roundcube.
CREATE USER username IDENTIFIED BY 'password'; CREATE DATABASE roundcubemail; GRANT ALL PRIVILEGES ON roundcubemail.* TO username@localhost IDENTIFIED BY 'password'; FLUSH PRIVILEGES;
Afin de d’accéder à l’installeur de Roundcube, il ne vous reste qu’à ajouter les enregistrements DNS correspondant au serveur Nginx précédemment configuré.
Enfin entrez l’url suivante: http://url-to-roundcube/installer/ afin de renseigner les options concernant les service SMTP, IMAP et la base de donnée MYSQL précédemment créée.
Il est possible que lors de la vérification de la tranche horaire échoue, pour résoudre ce problème configurez la variable date.timezone dans le fichier php.ini de votre serveur.
date.timezone= 'Europe/Paris'
Nous verrons dans un prochain article la mise en place de services de stockage et d’applications diverses en ligne par le produit Owncloud. Ceci dans la démarche de cette série d’article consacré sur l’auto-hébergement par un serveur dédié.