Sommaire
1. Installer et configurer PostfixAdmin
2. Installer et configurer Postfix
3. Installer et configurer Dovecot
4. Configurer un domaine et des boîtes aux lettres
5. Installer et configurer Roundcube
Prérequis
Configurer son hostname :
Code : Tout sélectionner
hostnamectl set-hostname serv.domain.tld
Code : Tout sélectionner
@ MX mail.domain.tld
mail A <IP_du_serveur>
Code : Tout sélectionner
apt update & apt-upgrade
Nous aurons besoin de cet ensemble pour le fonctionnement de l'interface Web de messagerie, du système d'administration et de gestion de la boîte aux lettres, ainsi que de la base de données pour stocker les paramètres.
Serveur Web avec Nginx + MariaDB + PHP (LEMP)
Serveur Web avec Lighttpd + PHP + MariaDB
Configurer son pare-feu pour les services de messagerie :
Si vous avez un pare-feu, assurez-vous que les ports 25,110,143,465,587,993 et 995 sont ouverts.
Si vous avez suivi le tutoriel Sécuriser son serveur : SSH et firewall avec iptables, ajoutez la règle suivante dans /etc/iptables-rules.sh :
Code : Tout sélectionner
iptables -I INPUT 1 -p tcp --match multiport --dports 25,110,143,465,587,993,995 -j ACCEPT
iptables -I OUTPUT 1 -p tcp --match multiport --dports 25,110,143,465,587,993,995 -j ACCEPT
Pour connaitre les ports TCP ouverts sur son serveur, utiliser nmap ou un outil en ligne comme :
https://www.ipvoid.com/port-scan/
1. Installer et configurer PostfixAdmin
Cet outil permet de gérer le serveur de messagerie via une interface Web sans recourir à la console.
1.1. Installation
Pour connaitre la dernière version de postfixadmin :
https://github.com/postfixadmin/postfixadmin
SOLUTION 1 : installer le package
Code : Tout sélectionner
apt install postfixadmin
SOLUTION 2 : installation manuelle
Télécharger et placer postfixadmin dans /var/www/postfixadmin (remplacer /var/www/ par le répertoire configuré dans votre serveur Web) :
Code : Tout sélectionner
apt install php-mysql php-mbstring php-imap
systemctl restart php8.2-fpm
apt install wget
wget https://sourceforge.net/projects/postfixadmin/files/latest/download -O postfixadmin.tar.gz
mkdir /var/www/postfixadmin
tar -C /var/www/postfixadmin -xvf postfixadmin.tar.gz --strip-components 1
Code : Tout sélectionner
mkdir /var/www/postfixadmin/templates_c
chown -R www-data:www-data /var/www/postfixadmin
Code : Tout sélectionner
mysql -u root -p
Code : Tout sélectionner
> CREATE DATABASE postfix DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
Code : Tout sélectionner
> GRANT ALL ON postfix.* TO 'postfix'@'localhost' IDENTIFIED BY 'un_mot_de_passe';
Code : Tout sélectionner
> quit;
On créer un fichier de configuration local :
Code : Tout sélectionner
nano /var/www/postfixadmin/config.local.php
Code : Tout sélectionner
<?php
$CONF['configured'] = true;
$CONF['default_language'] = 'fr';
$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = 'localhost';
$CONF['database_port'] = '3306';
$CONF['database_user'] = 'postfix';
$CONF['database_password'] = 'le_mot_de_passe_postfix';
$CONF['database_name'] = 'postfix';
$CONF['encrypt'] = 'php_crypt:SHA512';
$CONF['dovecotpw'] = "/usr/bin/doveadm pw -r 5";
if(@file_exists('/usr/bin/doveadm')) { // @ to silence openbase_dir stuff; see https://github.com/postfixadmin/postfixadmin/issues/171
$CONF['dovecotpw'] = "/usr/bin/doveadm pw -r 5"; # debian
}
Vous devez trouver un mot de passe, puis cliquer sur le bouton Generate setup_password hash, pour générer un hachage.
Copiez la ligne entière et ajoutez-la à la fin du fichier :
Code : Tout sélectionner
nano /var/www/postfixadmin/config.local.php
Code : Tout sélectionner
...
$CONF['setup_password'] = '$2y$10$GJmg2kWevIWzibWe6XeypG2OF/msblSn1z6pfz7NhpXFVRu';
PostfixAdmin est installé.
Ensuite, nous devons ajouter un super utilisateur (un utilisateur avec tous les droits).
Dans le champ Admin, vous devez spécifier l'utilisateur sous forme de mail user@domain.tld
Passons maintenant à la page http://<votre-ip>/postfixadmin/public/login.php et entrez les données de l'utilisateur créé.
2. Installer et configurer Postfix
Postfix est le serveur SMTP de messagerie électronique libre le plus répandu. Il se charge de la livraison des e-mails et a été conçu de façon modulaire autour de différents programmes dévolus chacun à une tâche précise. Cela le rend résistant en terme de sécurité, tout en étant extensible. Plusieurs commandes servent à l'administrer, en voici quelques unes :
- postfix : pour démarrer, arrêter et redémarrer Postfix (root seulement)
- postconf : affiche ou permet d'éditer les paramètres du fichier main.cf
- postalias : maintient les bases de données alias de Postfix (cf : newaliases)
- postmap : maintient les tables de correspondances de Postfix (cf : hash)
- postsuper : maintient la file d'attente
A tout instant, vous pourrez vérifier la configuration grâce à :
Code : Tout sélectionner
postfix check
Code : Tout sélectionner
postfix reload
postconf -d : affiche les paramètres par défaut de Postfix au lieu de ceux utilisés
postconf -n : affiche les paramètres modifiés par rapport aux valeurs par défaut
postconf -v : affiche la totalité des paramètres utilisés
postconf -e 'biff = no' : édite le fichier main.cf (ajoute ou modifie la ligne mentionnée)
2.1. Installation
Code : Tout sélectionner
apt install postfix postfix-mysql
Pour connaitre la version installée :
Code : Tout sélectionner
postconf mail_version
On créer ensuite un groupe et un utilisateurs vmail avec comme uid et gid 2000 :
Code : Tout sélectionner
groupadd -g 2000 vmail
adduser vmail --system --group --uid 2000 --disabled-login --no-create-home
On créer le répertoire vmail et on donne les droits à vmail :
Code : Tout sélectionner
mkdir /var/vmail
chown vmail:vmail /var/vmail
Postfix utilise 2 fichiers de configuration que l'on trouve dans /etc/postfix/ :
Le fichier main.cf définit les options générales de Postfix.
Le fichier master.cf, lui sert à gérer les sous process de Postfix et permet de modifier certains paramètres du fichier main.cf en les surchargeant (option -o).
Code : Tout sélectionner
nano /etc/postfix/main.cf
Code : Tout sélectionner
mydestination = localhost.$mydomain, localhost, localhost.localdomain
Code : Tout sélectionner
virtual_mailbox_base = /var/vmail
virtual_alias_maps = proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_minimum_uid = 2000
virtual_uid_maps = static:2000
virtual_gid_maps = static:2000
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1
smtpd_sasl_exceptions_networks = $mynetworks
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_path = private/auth
smtp_use_tls = yes
smtpd_use_tls = yes
smtpd_tls_auth_only = yes
smtpd_helo_required = yes
maillog_file = /var/log/mail.log
Code : Tout sélectionner
submission inet n - n - - smtpd
-o smtpd_tls_security_level=may
-o smtpd_sasl_auth_enable=yes
-o smtpd_sasl_type=dovecot
-o smtpd_sasl_path=/var/spool/postfix/private/auth
-o smtpd_sasl_security_options=noanonymous
-o smtpd_sasl_local_domain=$myhostname
smtps 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
dovecot unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient}
Création du fichier d'alias
Code : Tout sélectionner
nano /etc/postfix/mysql_virtual_alias_maps.cf
Code : Tout sélectionner
user = postfix
password = mot_de_passe
hosts = localhost
dbname = postfix
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
Code : Tout sélectionner
nano /etc/postfix/mysql_virtual_domains_maps.cf
Code : Tout sélectionner
user = postfix
password = mot_de_passe
hosts = localhost
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%u'
Code : Tout sélectionner
nano /etc/postfix/mysql_virtual_mailbox_maps.cf
Code : Tout sélectionner
user = postfix
password = mot_de_passe
hosts = localhost
dbname = postfix
query = SELECT CONCAT(domain,'/',maildir) FROM mailbox WHERE username='%s' AND active = '1'
SOLUTION 1 : certificat auto-signé
Code : Tout sélectionner
mkdir -p /etc/ssl/mail
Code : Tout sélectionner
openssl req -new -x509 -days 1461 -nodes -out /etc/ssl/mail/public.pem -keyout /etc/ssl/mail/private.key
Code : Tout sélectionner
smtpd_tls_cert_file = /etc/ssl/mail/public.pem
smtpd_tls_key_file = /etc/ssl/mail/private.key
SOLUTION 2 : Letsencrypt (recommandé)
Voir le tutoriel : Créer des certificats SSL avec letsencrypt.
Dans ce cas, modifier la configuration de /etc/postfix/main.cf en remplacant mail.domain.tld par votre serveur :
Code : Tout sélectionner
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.domain.tld/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/mail.domain.tld/privkey.pem
Code : Tout sélectionner
service postfix restart
Installer mailutils :
Code : Tout sélectionner
apt install mailutils
Code : Tout sélectionner
echo "TEST" | mail -s "TEST" votre@email.com
Code : Tout sélectionner
openssl s_client -connect mail.domain.tld:587 -starttls smtp
EHLO test.fr
MAIL FROM:root@test.fr
RCPT TO:mon@mail.com
DATA
Salut ! Ceci est un mail de test...
.
QUIT
[TODO]
3. Installer et configurer Dovecot
Code : Tout sélectionner
apt install dovecot-imapd dovecot-pop3d dovecot-mysql
Code : Tout sélectionner
dovecot --version
Code : Tout sélectionner
nano /etc/dovecot/conf.d/10-mail.conf
Code : Tout sélectionner
mail_location = maildir:/var/vmail/%d/%n/
%n Partie utilisateur dans user@domain ; identique à %u s’il n’y a pas de domaine.
%d partie de domaine dans user@domain ; vide s'il n'y a pas de domaine.
De cette manière, un mail envoyé à user@domain.tld sera stocké dans /var/vmail/domain.tld/user/.
3.2 Configuration de l'autorisation
Code : Tout sélectionner
nano /etc/dovecot/conf.d/10-master.conf
Code : Tout sélectionner
service auth {
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
unix_listener auth-userdb {
mode = 0600
user = vmail
group = vmail
}
}
Code : Tout sélectionner
nano /etc/dovecot/conf.d/10-auth.conf
Code : Tout sélectionner
#!include auth-system.conf.ext
!include auth-sql.conf.ext
Créer des certificats SSL avec letsencrypt
Code : Tout sélectionner
nano /etc/dovecot/conf.d/10-ssl.conf
Code : Tout sélectionner
ssl = required
ssl_cert = </etc/letsencrypt/live/mail.domain.tld/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.domain.tld/privkey.pem
Code : Tout sélectionner
nano /etc/dovecot/conf.d/15-lda.conf
Code : Tout sélectionner
lda_mailbox_autocreate = yes
Code : Tout sélectionner
nano /etc/dovecot/conf.d/auth-sql.conf.ext
Code : Tout sélectionner
passdb {
…
args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
…
args = /etc/dovecot/dovecot-sql.conf.ext
}
Code : Tout sélectionner
nano /etc/dovecot/dovecot-sql.conf.ext
Code : Tout sélectionner
driver = mysql
connect = host=localhost dbname=postfix user=postfix password=postfix1HuRaf92
default_pass_scheme = MD5-CRYPT
password_query = SELECT password FROM mailbox WHERE username = '%u'
user_query = SELECT maildir, 2000 AS uid, 2000 AS gid FROM mailbox WHERE username = '%u'
Code : Tout sélectionner
nano /etc/dovecot/dovecot.conf
Code : Tout sélectionner
listen = *
Code : Tout sélectionner
auth_verbose = yes
auth_verbose_passwords = no
auth_debug = yes
auth_debug_passwords = yes
mail_debug = yes
verbose_ssl = yes
log_path = /var/log/dovecot.log
Code : Tout sélectionner
systemctl enable dovecot
systemctl restart dovecot
Allons à l'interface Web et configurons le domaine pour qu'il fonctionne avec le courrier: http://<votre-ip>/postfixadmin/public/.
Ensuite, ajoutez un domaine (menu du haut > Liste des domaines > Nouveau domaine) :
Après avoir ajouté le domaine, créons une boîte aux lettres.
5. Installer et configurer le service de messagerie Web, Roundcube
Option 1 : installation du paquet
Code : Tout sélectionner
apt install roundcube roundcube-plugins
dpkg-reconfigure roundcube-core
Téléchargez la dernière version LTS du package et déployez-la sur votre serveur :
https://github.com/roundcube/roundcubemail/
Au moment de ce tutoriel, la version est 1.6.5.
Code : Tout sélectionner
apt install wget
wget https://github.com/roundcube/roundcubemail/releases/download/1.6.5/roundcubemail-1.6.5-complete.tar.gz
mkdir /var/www/webmail
tar -C /var/www/webmail -xvf roundcubemail-*.tar.gz --strip-components 1
cp /var/www/webmail/config/config.inc.php.sample /var/www/webmail/config/config.inc.php
chown -R www-data:www-data /var/www/webmail
Code : Tout sélectionner
nano /var/www/webmail/config/config.inc.php
Code : Tout sélectionner
$config['db_dsnw'] = 'mysql://roundcube:roundcube1Yusm24M@localhost/roundcubemail';
$config['enable_installer'] = true;
Code : Tout sélectionner
$config['smtp_pass'] = '';
Code : Tout sélectionner
nano/var/www/webmail/config/config.inc.php
Code : Tout sélectionner
$config['drafts_mbox'] = 'Drafts';
$config['junk_mbox'] = 'Junk';
$config['sent_mbox'] = 'Sent';
$config['trash_mbox'] = 'Trash';
$config['create_default_folders'] = true;
Code : Tout sélectionner
mysql -uroot -p
Code : Tout sélectionner
> CREATE DATABASE roundcubemail DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
> GRANT ALL PRIVILEGES ON roundcubemail.* TO roundcube@localhost IDENTIFIED BY 'roundcube1Yusm24M';
> quit
Code : Tout sélectionner
mysql -uroot -p roundcubemail < /var/www/webmail/SQL/mysql.initial.sql
Code : Tout sélectionner
apt install php-pear php-intl php-ldap php-net-smtp php-gd php-imagick php-zip php-curl php-dom php-xml php-mcrypt
Code : Tout sélectionner
apt install php-dev libmcrypt-dev
pecl channel-update pecl.php.net
pecl install mcrypt-1.0.5
Code : Tout sélectionner
nano /etc/php/8.2/fpm/conf.d/99-mcrypt.ini
Code : Tout sélectionner
extension=mcrypt.so
Code : Tout sélectionner
nano /etc/php/8.2/fpm/php.ini
Code : Tout sélectionner
date.timezone = "Europe/Paris"
post_max_size = 50M
upload_max_filesize = 50M
Code : Tout sélectionner
systemctl restart php8.2-fpm
Code : Tout sélectionner
nano /etc/nginx/nginx.conf
Code : Tout sélectionner
http {
...
client_max_body_size 50M;
...
Code : Tout sélectionner
systemctl restart nginx
En suivant les instructions, installez rouncube, puis sur la page suivante, nous vérifions que tous les éléments sont dans l'état OK. Installation terminée.
Supprimez le programme d'installation et désactivez l'installation dans le fichier de configuration
Code : Tout sélectionner
rm -rf /var/www/webmail/installer
Code : Tout sélectionner
nano /var/www/webmail/config/config.inc.php
Code : Tout sélectionner
$config['enable_installer'] = false;
6. Dernière étape de configuration
Notre serveur est configuré pour fonctionner avec le courrier, nous devons maintenant enregistrer ou remplacer l'enregistrement MX par l'adresse IP de notre serveur dans les paramètres du nom de domaine :
Code : Tout sélectionner
@ MX mail.domain.tld
mail A <ip_du_serveur>
Le serveur de messagerie Linux Debain 12 est prêt à fonctionner.