Prérequis: Un serveur LAMP fonctionnel
Tuto original: ICI
On commence par une petite mise à jour du systeme:
sudo apt-get update && sudo apt-get upgrade
- Installez des dependances PHP:
Notez bien votre version de PHP (ex 7.4 ou 8.0) et remplacez $PHP.VERSION
sudo apt-get install php$PHPVersion-{mysql,mbstring,imap,xml,curl}
sudo service apache2 restart
- Installation de mailutils et Postfix:
sudo apt-get install tree mailutils postfix postfix-mysql
Pendant l’installation, choisissez le mode Site Internet :
Entrez la valeur mail.$NomDeDomaine
Continuons avec l’installation de Dovecot et le groupe d’utilisateur vmail qui va gérer les e-mails dans le dossier /var/vmail:
sudo apt-get install dovecot-{mysql,pop3d,imapd,managesieved}
sudo groupadd -g 5000 vmail
sudo useradd -g vmail -u 5000 vmail -d /var/vmail -m
- Installation de Postfixadmin:
Postfixadmin l’interface graphique de Postfix qui va gérer vos comptes:
Pensez à bien remplacer les variables $USERNAME & $PASSWORD
sudo mariadb -u $USERNAME -p$PASSWORD
CREATE DATABASE postfix;
CREATE USER 'postfix'@'localhost' IDENTIFIED BY '$PASSWORD';
CREATE USER 'mailuser'@'localhost' IDENTIFIED BY '$PASSWORD';
GRANT ALL PRIVILEGES ON `postfix` . * TO 'postfix'@'localhost';
GRANT SELECT ON `postfix`.* TO 'mailuser'@'localhost';
FLUSH PRIVILEGES;
QUIT ;
On peut maintenant telecharger Postfixadmin en prenant soin de bien vérifier la dernière version disponible sur : Sourceforge
Pensez à bien remplacer la variable $PostfixadminVersion (ex: 3.3.8)
cd /var/www/html
sudo wget -O postfixadmin.tgz https://github.com/postfixadmin/postfixadmin/archive/postfixadmin-$PostfixadminVersion.tar.gz
sudo tar -zxvf postfixadmin.tgz
sudo rm postfixadmin.tgz
sudo mv postfixadmin-$PostfixadminVersion postfixadmin
cd postfixadmin
sudo mkdir templates_c
sudo nano config.local.php
Et collez la configuration suivante:
Pensez à bien remplacer la variable $PASSWORD
<?php
$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = 'localhost';
$CONF['database_name'] = 'postfix';
$CONF['database_user'] = 'postfix';
$CONF['database_password'] = '$PASSWORD';
$CONF['configured'] = true;
?>
Rétablissez les droits du dossier:
sudo chown -R www-data:www-data /var/www/html/postfixadmin
Configurons maintenant Apache de façon à lui permettre d’afficher l’interface Postfixadmin à l’adresse: http://$NomDeDomaine/postfixadmin
cd /etc/apache2/sites-enabled
ls
Notez le nom de votre fichier .conf et remplacer $Apache.CONF
sudo nano $Apache.conf
Ajouter maintenant votre Alias sous la première section Directory:
Alias /postfixadmin /var/www/html/postfixadmin/public
<Directory /var/www/html/postfixadmin/public>
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
Et on redémarre Apache:
sudo service apache2 restart
Rendez-vous maintenant sur: http://$NomDeDomaine/postfixadmin/setup.php pour la configuration.
Avant de continuer, vérifier bien que tous les voyants sont au vert. Si ce n’est pas le cas veuillez installer les dépendances manquantes.
Au moment de générer le mot de passe vous allez avoir un retour crypté, copiez toute la ligne, et coller la dans config.local.php:
cd /var/www/html/postfixadmin
sudo nano config.local.php
Vous pouvez désormais continuer la configuration de vos comptes e-mails:
Ajoutez votre $NomDeDomaine:
Ajoutez votre nouveau compte e-mail:
Configuration de Postfix:
sudo nano /etc/postfix/mysql-virtual-mailbox-domains.cf
Et collez:
user = mailuser
password = $PASSWORD
hosts = 127.0.0.1
dbname = postfix
query = SELECT domain FROM domain where domain='%s'
sudo nano /etc/postfix/mysql-virtual-mailbox-maps.cf
Et collez:
user = mailuser
password = $PASSWORD
hosts = 127.0.0.1
dbname = postfix
query = SELECT username FROM mailbox where username='%s'
sudo nano /etc/postfix/mysql-virtual-alias-maps.cf
Et collez:
user = mailuser
password = $PASSWORD
hosts = 127.0.0.1
dbname = postfix
query = SELECT goto FROM alias WHERE address='%s'
Activez la configuration:
sudo postconf -e virtual_mailbox_domains=mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
sudo postconf -e virtual_mailbox_maps=mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
sudo postconf -e virtual_mailbox_maps=mysql-virtual-alias-maps.cf
sudo postmap -q $NomDeDomaine mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
Vous devriez avoir en retour la valeur: $NomDeDomaine
Si ce n’est pas le cas, reprenez les étapes prétendantes il y a un problème.
sudo postmap -q $USERNAME@$NomDeDomaine mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
Vous devriez avoir en retour la valeur: $USERNAME@$NomDeDomaine
sudo postmap -q $VotreAlias@$NomDeDomaine mysql:/etc/postfix/mysql-virtual-alias-maps.cf
Vous devriez avoir en retour la valeur: $USERNAME@$NomDeDomaine
Si ce n’est pas le cas, reprenez les étapes prétendantes il y a un problème.
Configuration de Dovecot:
cd /etc/dovecot/conf.d/
sudo nano 10-auth.conf
Remplacer « auth_mechanisms = plain » par « auth_mechanisms = plain login«
Ajouter « # » devant « !include auth-system.conf.ext«
Enlever « # » devant « !include auth-sql.conf.ext«
sudo nano auth-sql.conf.ext
Remplacez le bloc userdb par:
userdb {
driver = static
args = uid=vmail gid=vmail home=/var/vmail/%d/%n
}
sudo nano 10-mail.conf
Remplacez la ligne mail_location par:
mail_location = maildir:/var/vmail/%d/%n/Maildir
sudo nano 10-master.conf
Dans le bloc de configuration service auth , cherchez la partie Postfix smtp-auth et y ajouter les lignes suivantes :
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
cd /etc/dovecot
sudo nano /etc/dovecot/dovecot-sql.conf.ext
Ajoutez à la fin:
driver = mysql
connect = host=127.0.0.1 dbname=postfix user=mailuser password=$PASSWORD
password_query = SELECT username,domain,password FROM mailbox WHERE username='%u';
On ajoute les droits et on redémarre Dovecot:
sudo chgrp vmail /etc/dovecot/dovecot.conf
sudo chmod g+r /etc/dovecot/dovecot.conf
sudo service dovecot restart
On modifie la configuration de Postfix:
sudo nano /etc/postfix/master.cf
C’est la partie qui risque de générer le plus d’erreurs, on ajoute à la fin du fichhier:
dovecot unix – n n – – pipe
flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/dovecot-lda -f ${sender} -d ${recipient}
Sur la seconde: La ligne commence par 2 espaces et chaque champ doit être séparé par un espace
Si vous avez par la suite des erreurs il y a de fortes chances de les réglées ici
sudo nano /etc/postfix/main.cf
Remplacez la ligne mydestination par:
mydestination = mail.$NomDeDomaine, localhost
sudo service postfix restart
sudo postconf -e virtual_transport=dovecot
sudo postconf -e dovecot_destination_recipient_limit=1
- Installation de Rainloop:
cd /home/$USERNAME
sudo mkdir rainloop
sudo chown $USERNAME:$USERNAME rainloop
cd rainloop
sudo wget https://www.rainloop.net/repository/webmail/rainloop-latest.zip
sudo unzip rainloop-latest.zip -d /var/www/html/rainloop
sudo rm *.zip
cd ..
sudo mv rainloop /var/www/html/
cd /var/www/html/rainloop
sudo find . -type d -exec chmod 755 {} \;
sudo find . -type f -exec chmod 644 {} \;
sudo chown -R www-data:www-data .
On modifie la configuration Apache pour ajouter un alias:
Alias /rainloop /var/www/html/rainloop
<Directory /var/www/html/rainloop>
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
sudo service apache2 restart
Rendez-vous sur http://$NomDeDomaine/rainloop/?admin
Entrez l’identifiants: admin avec le mot de passe 12345
Changez vos identifiants
Ajoutez un nouveau domaine:
Vous pouvez maintenant vous rendre sur http://$NomDeDomaine/rainloop/
Et vous connecter avec les utilisateurs créer précédemment dans postfixadmin.
Votre serveur mail est maintenant opérationnel vous pouvez tester votre score sur Mail-Tester de façon à éviter d’être considéré comme spam.
Pour améliorer ce score vous pouvez par exemple mettre en place une signature DKIM ou encore renforcer la sécurité avec mta-sts.
Securisation SSL:
Si vous avez déjà suivi l’article sur la mise en place des certificats Let’s Encrypt vous pouvez éditer la configuration de postfix:
sudo postconf -e 'smtpd_tls_cert_file = /etc/letsencrypt/live/$NomDeDomaine/fullchain.pem'
sudo postconf -e 'smtpd_tls_key_file = /etc/letsencrypt/live/$NomDeDomaine/privkey.pem'
sudo postconf -e '#SSL'
sudo postconf -e 'smtpd_sasl_type = dovecot'
sudo postconf -e 'smtpd_sasl_path = private/auth'
sudo postconf -e 'smtpd_sasl_local_domain ='
sudo postconf -e 'smtpd_sasl_security_options = noanonymous'
sudo postconf -e 'broken_sasl_auth_clients = yes'
sudo postconf -e 'smtpd_sasl_auth_enable = yes'
sudo postconf -e 'smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination'
sudo postconf -e 'smtp_tls_security_level = may'
sudo postconf -e 'smtpd_tls_security_level = may'
sudo postconf -e 'smtp_tls_note_starttls_offer = yes'
sudo postconf -e 'smtpd_tls_loglevel = 1'
sudo postconf -e 'smtpd_tls_received_header = yes'
Éditez la configuration de Dovecot:
sudo nano /etc/dovecot/conf.d/10-ssl.conf
Et adaptez les lignes:
ssl = required
ssl_cert = /etc/letsencrypt/live/$NomDeDomaine/fullchain.pem
ssl_key = /etc/letsencrypt/live/$NomDeDomaine/privkey.pem
Et ajoutez:
ssl_min_protocol = TLSv1
Redemarrez les services:
sudo postfix stop && sudo postfix start
sudo service dovecot stop && sudo service dovecot start
Firewall:
Si vous avez suivi l’article sur la mise en place d’un firewall, il faudra ouvrir les ports correspondants:
sudo nano /etc/init.d/firewall
Et ajoutez les lignes:
# Autoriser IMAP SSL
iptables -t filter -A INPUT -p tcp --dport 993 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 993 -j ACCEPT
# Autoriser SMTP SSL
iptables -t filter -A INPUT -p tcp --dport 465 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 465 -j ACCEPT
Enfin redemarrer le firewall:
sudo /etc/init.d/firewall stop
sudo /etc/init.d/firewall start
Fail2Ban:
Si vous avez installé Fail2Ban vous pouvez le configurer:
sudo sed -i '/^\[postfix\].*/a enabled = true' /etc/fail2ban/jail.local
sudo sed -i '/^\[dovecot\].*/a enabled = true' /etc/fail2ban/jail.local
sudo service fail2ban restart
Laisser un commentaire
Vous devez vous connecter pour publier un commentaire.