# Installer un serveur Mail (Postfix)

##### 1 - Délégation DNS (OVH) :

Je vais créer un sous domaine "mymail.nehemiebarkia.fr" et pointer un MX dessus :

<div data-ng-include="ctrlDomain.stepPath" id="bkmrk-mymail-in-a-35.241.1"><div data-ng-controller="DomainZoneRecordCtrl as ctrl"><div data-wizard="" data-wizard-on-cancel="resetAction" data-wizard-on-finish="editDnsEntry" data-wizard-title="'domain_configuration_dns_entry_edit_title' | translate"><div data-ng-transclude=""><div data-wizard-step="" data-wizard-step-count="{{stepCount}}" data-wizard-step-valid="ctrl.zoneRecordForm.$valid"><div aria-hidden="false" data-ng-show="getCurrentStep() === stepNumber"><div data-ng-transclude=""><div data-ng-include="'domain/zone/record/' + ctrl.model.fieldType + '/domain-zone-record-' + ctrl.model.fieldType + '.html'"><form class="form-horizontal ng-pristine ng-valid ng-valid-required ng-valid-maxlength" name="ctrl.zoneRecordForm"><div data-ng-include="'domain/zone/record/bottom.html'"><div>```
mymail IN A 35.241.173.178<br></br>et<br></br>smtp.mymail IN A 35.241.173.178
```

</div></div></form></div></div><div aria-hidden="false" data-ng-hide="getCurrentStep() === 1 && stepCount === 1 && !cancelButton && !confirmButton"><form class="form-horizontal ng-pristine ng-valid ng-valid-min ng-valid-max ng-valid-step ng-valid-required ng-valid-maxlength" name="ctrl.zoneRecordForm"><div data-ng-include="'domain/zone/record/bottom.html'"><div>```
mymail IN MX 1 mymail
```

</div></div></form></div></div></div></div></div></div></div>#####  

##### 2 - Mettre à jour le système :

```
apt-get update ; apt-get upgrade -y
```

#####  

##### 3 - Installation de **LAMP** :

<div data-lang="" id="bkmrk-"></div>```
wget https://scripts.nehemiebarkia.fr/BASH/Installations/LAMP.sh
bash LAMP.sh
```

#####  

##### 4 - Installation de **Mailutils &amp; Tree :**

```
apt-get install tree mailutils -y
```

##### 5 - Installation de **Postfix** :

```
apt-get install postfix postfix-mysql -y
```

\--&gt; Lors de l'installation, vous choisirez "**Site internet**".

\--&gt; Puis nous précisons le nom de domaine du mail :

[![image-1616447828058.png](https://docs.nehemiebarkia.fr/uploads/images/gallery/2021-03/scaled-1680-/image-1616447828058.png)](https://docs.nehemiebarkia.fr/uploads/images/gallery/2021-03/image-1616447828058.png)

<p class="callout warning">N'oubliez pas le "." à la fin de votre nom de domaine !</p>

#####  

##### 6 - Installation de **Dovecot** :

<div data-lang="" id="bkmrk-apt-get-install-dove">```
apt-get install dovecot-mysql dovecot-pop3d dovecot-imapd dovecot-managesieved -y
```

</div>##### 7 - Groupe d'utilisateurs Linux : 

Nous allons créer le groupe **vmail** qui accueillera les mails. Nous allons également créer l'utilisateur **vmail**.

```
groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /var/vmail -m
```

<p class="callout info">Si vous utilisez une machine virtuelle chez Google, commencer les deux commandes avec "/usr/sbin/".</p>

##### 8 - Installation de **Postfixadmin** : 

Avant d'installer Postfixadmin, nous allons préparer mariadb :

```
mysql_secure_installation
```

\--&gt; Vous allez définir un nouveau mot de passe pour le compte root puis procéder aux options par défaut.

##### a) Base de données :

Nous entrons dans la console mariadb.

```
mariadb -u root -p
```

<p class="callout info">Le mot de passe demandé est celui que vous avez précédemment changé et non le mot de passe root de l'utilisateur sur le serveur linux.</p>

Création de l'utilisateur SQL.

```
CREATE DATABASE postfix;
CREATE USER 'postfix'@'localhost' IDENTIFIED BY 'MYPASSWORD';
GRANT ALL PRIVILEGES ON `postfix` . * TO 'postfix'@'localhost';
```

Par mesure de sécurité nous créons un second utilisateur qui n'aura uniquement que des droits de lecture sur la base de données :

```
CREATE USER 'mailuser'@'localhost' IDENTIFIED BY 'MYPASSWORD';
GRANT SELECT ON `postfix`.* TO 'mailuser'@'localhost';
FLUSH PRIVILEGES;
QUIT ;
```

##### b) Postfixadmin :

Maintenant que tout ça est fait, nous pouvons installer Postfixadmin :

```
cd /srv/
wget -O postfixadmin.tgz https://github.com/postfixadmin/postfixadmin/archive/postfixadmin-3.2.tar.gz
tar -zxvf postfixadmin.tgz
mv postfixadmin-postfixadmin-3.2 postfixadmin
ln -s /srv/postfixadmin/public /var/www/html/postfixadmin
```

Configuration :

```
nano /srv/postfixadmin/config.local.php
```

```
<?php
$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = 'localhost';
$CONF['database_name'] = 'postfix';
$CONF['database_user'] = 'postfix';
$CONF['database_password'] = 'MYPASSWORD';


$CONF['configured'] = true;
?>
```

<p class="callout info">Ce fichier n'existait pas, pas de panique si, quand vous l'ouvrez, il est vide ! </p>

<div id="bkmrk-cr%C3%A9ation-d%27un-fichie">Création d'un fichier nécessaire au bon fonctionnement de Postfixadmin et attributions des droits : </div>```
mkdir -p /srv/postfixadmin/templates_c
chown -R www-data /srv/postfixadmin/templates_c
```

<div id="bkmrk--1"></div><div id="bkmrk--2"></div><div id="bkmrk-maintenant%2C-nous-pou">Maintenant, nous pouvons accéder au setup grâce au site web : [http://IP-DU-SRV/postfixadmin/setup.php](http://IP-DU-SRV/postfixadmin/setup.php) et nous aurons un mot de passe à créer (pour des raisons de sécurité, choisissez un mot de passe fort) :</div>[![image-1616449164509.png](https://docs.nehemiebarkia.fr/uploads/images/gallery/2021-03/scaled-1680-/image-1616449164509.png)](https://docs.nehemiebarkia.fr/uploads/images/gallery/2021-03/image-1616449164509.png)

<div id="bkmrk--4"></div><div id="bkmrk-je-vais-par-exemple-">Je vais par exemple choisir le mot de passe : "P@ssw0rd123", puis cliquer sur "Generate password hash".</div><div id="bkmrk--5"></div><div id="bkmrk--6"></div><div id="bkmrk-le-message-suivant-a"><span style="text-decoration: underline;">Le message suivant apparait : </span></div><div id="bkmrk--7"></div>[![image-1616449403337.png](https://docs.nehemiebarkia.fr/uploads/images/gallery/2021-03/scaled-1680-/image-1616449403337.png)](https://docs.nehemiebarkia.fr/uploads/images/gallery/2021-03/image-1616449403337.png)

<div id="bkmrk--9"></div><div id="bkmrk-nous-allons-donc-pro">Nous allons donc procéder à la modification du fichier config : </div><div id="bkmrk--10"></div>```
nano /srv/postfixadmin/config.local.php
```

```
// Ajouter la ligne suivante : 
$CONF['setup_password'] = 'c4db13bd0d48dc5d4486bddbf5e35fd2:96107d8f161b0d0f96b94cbba463426708e83e1a';
```

<p class="callout danger">Ne copiez-collez pas ! Faites selon le texte qui apparait sur vos machines !</p>

<div id="bkmrk--11"></div><div id="bkmrk--12"></div><div id="bkmrk--13"></div><div id="bkmrk-puis-nous-compl%C3%A9tons">Puis nous complétons le formulaire suivant : </div><div id="bkmrk--14"></div>[![image-1616449754056.png](https://docs.nehemiebarkia.fr/uploads/images/gallery/2021-03/scaled-1680-/image-1616449754056.png)](https://docs.nehemiebarkia.fr/uploads/images/gallery/2021-03/image-1616449754056.png)

<div id="bkmrk--16"></div><div id="bkmrk-setup-password-%3A-p%40s">Setup password : [P@ssw0rd123](mailto:P@ssw0rd123)</div><div id="bkmrk-administrateur-%3A-adm">Administrateur : <admin@mymail.nehemiebarkia.fr></div><div id="bkmrk-mot-de-passe-%3A-h5jzx">Mot de passe : H5jZx87jK</div><div id="bkmrk--17"></div><div id="bkmrk--18"></div><div id="bkmrk-apr%C3%A8s-avoir-cliqu%C3%A9-s">Après avoir cliqué sur "Ajouter un administrateur" vous aurez le message suivant qui va s'afficher :</div>[![image-1616449903840.png](https://docs.nehemiebarkia.fr/uploads/images/gallery/2021-03/scaled-1680-/image-1616449903840.png)](https://docs.nehemiebarkia.fr/uploads/images/gallery/2021-03/image-1616449903840.png)

<div id="bkmrk--20"></div><div id="bkmrk-nous-cliquons-sur-le">Nous cliquons sur le lien "login to PostfixAdmin" et entrons notre identifiant et notre mot de passe : </div>[![image-1616449968640.png](https://docs.nehemiebarkia.fr/uploads/images/gallery/2021-03/scaled-1680-/image-1616449968640.png)](https://docs.nehemiebarkia.fr/uploads/images/gallery/2021-03/image-1616449968640.png)

<div id="bkmrk-visuel-de-postfixadm">Visuel de Postfixadmin : </div>[![image-1616450050334.png](https://docs.nehemiebarkia.fr/uploads/images/gallery/2021-03/scaled-1680-/image-1616450050334.png)](https://docs.nehemiebarkia.fr/uploads/images/gallery/2021-03/image-1616450050334.png)

<div id="bkmrk--23"></div><div id="bkmrk--24"></div><div id="bkmrk-nous-allons-cliquer-">Nous allons cliquer sur "Liste des domaines" puis "Nouveau domaine" : </div><div id="bkmrk--25"></div>[![image-1616450111507.png](https://docs.nehemiebarkia.fr/uploads/images/gallery/2021-03/scaled-1680-/image-1616450111507.png)](https://docs.nehemiebarkia.fr/uploads/images/gallery/2021-03/image-1616450111507.png)

<div id="bkmrk--27"></div><div id="bkmrk--28"></div><div id="bkmrk--29"></div><div id="bkmrk-nous-rentrons-les-in">Nous rentrons les informations de notre nom de domaine et précisons 0 pour la limite d'utilisateurs et d'alliasses : </div>[![image-1616450258600.png](https://docs.nehemiebarkia.fr/uploads/images/gallery/2021-03/scaled-1680-/image-1616450258600.png)](https://docs.nehemiebarkia.fr/uploads/images/gallery/2021-03/image-1616450258600.png)

<div id="bkmrk--31"></div><div id="bkmrk-puis-nous-cliquons-s">Puis nous cliquons sur "Ajouter un domaine", le message suivant s'affiche :</div>[![image-1616450300052.png](https://docs.nehemiebarkia.fr/uploads/images/gallery/2021-03/scaled-1680-/image-1616450300052.png)](https://docs.nehemiebarkia.fr/uploads/images/gallery/2021-03/image-1616450300052.png)

<div id="bkmrk--33"></div><div id="bkmrk--34"></div><div id="bkmrk-maintenant-nous-allo">Maintenant nous allons pouvoir ajouter un compte de courriel : </div><div id="bkmrk--35"></div>[![image-1616450366561.png](https://docs.nehemiebarkia.fr/uploads/images/gallery/2021-03/scaled-1680-/image-1616450366561.png)](https://docs.nehemiebarkia.fr/uploads/images/gallery/2021-03/image-1616450366561.png)

<div id="bkmrk--37"></div><div id="bkmrk--38"></div><div id="bkmrk-nous-allons-cr%C3%A9er-de">Nous allons créer deux comptes : </div>[![image-1616450449212.png](https://docs.nehemiebarkia.fr/uploads/images/gallery/2021-03/scaled-1680-/image-1616450449212.png)](https://docs.nehemiebarkia.fr/uploads/images/gallery/2021-03/image-1616450449212.png)

<div id="bkmrk-mot-de-passe-%3A-2bmq2">Mot de passe : **2bmQ2wBU4**</div><div id="bkmrk--40"></div><div id="bkmrk-et-%3A">Et :</div>[![image-1616450541520.png](https://docs.nehemiebarkia.fr/uploads/images/gallery/2021-03/scaled-1680-/image-1616450541520.png)](https://docs.nehemiebarkia.fr/uploads/images/gallery/2021-03/image-1616450541520.png)

<div id="bkmrk-mot-de-passe-%3A-2bmq2-0">Mot de passe : **2bmQ2wBU4**</div><div id="bkmrk--42"></div><div id="bkmrk--43"></div><div id="bkmrk--44"></div><div id="bkmrk--45"></div>##### 9 - Configuration de **Postfix** : 

<div id="bkmrk--46"></div><div id="bkmrk-on-donne-acc%C3%A8s-au-do">On donne accès au domaine à postfix en créant le fichier mysql-virtual-mailbox-domains.cf :</div><div id="bkmrk--47"></div>```
nano /etc/postfix/mysql-virtual-mailbox-domains.cf
```

```
user = mailuser
password = MYPASSWORD
hosts = 127.0.0.1
dbname = postfix
query = SELECT 1 FROM domain where domain='%s'
```

<div id="bkmrk-activation-de-la-con">Activation de la configuration : </div>```
postconf -e virtual_mailbox_domains=mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
```

<p class="callout info">Si vous utilisez une machine virtuelle chez Google, commencer la commandes avec "/usr/sbin/".</p>

Réalisation d'un test :

```
postmap -q mymail.nehemiebarkia.fr mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
```

**<span style="text-decoration: underline;">Si la réponse est 1 alors postfix trouve correctement le nom de domaine. </span>**

<p class="callout info">Si vous utilisez une machine virtuelle chez Google, commencer la commandes avec "/usr/sbin/".</p>

##### 10 - Configuration de **Dovecot** : 

```
nano /etc/dovecot/conf.d/10-auth.conf
```

Dans ce fichier nous allons chercher la ligne "auth\_mechanisms" :

[![image-1616451365283.png](https://docs.nehemiebarkia.fr/uploads/images/gallery/2021-03/scaled-1680-/image-1616451365283.png)](https://docs.nehemiebarkia.fr/uploads/images/gallery/2021-03/image-1616451365283.png)

Nous allons ajouter à la fin de la ligne "login" :

[![image-1616451433035.png](https://docs.nehemiebarkia.fr/uploads/images/gallery/2021-03/scaled-1680-/image-1616451433035.png)](https://docs.nehemiebarkia.fr/uploads/images/gallery/2021-03/image-1616451433035.png)

Puis à la fin de ce fichier, nous allons chercher les lignes suivantes *:*

[![image-1616451572862.png](https://docs.nehemiebarkia.fr/uploads/images/gallery/2021-03/scaled-1680-/image-1616451572862.png)](https://docs.nehemiebarkia.fr/uploads/images/gallery/2021-03/image-1616451572862.png)

Nous allons commenter "**!include auth-system.conf.ext**" et décommenter "**\#!include auth-sql.conf.ext**" comme ceci :

[![image-1616451663298.png](https://docs.nehemiebarkia.fr/uploads/images/gallery/2021-03/scaled-1680-/image-1616451663298.png)](https://docs.nehemiebarkia.fr/uploads/images/gallery/2021-03/image-1616451663298.png)

Puis modifions le fichier "*auth-sql.conf.ext" :*

```
nano /etc/dovecot/conf.d/auth-sql.conf.ext
```

Nous allons chercher le bloc "userdb" et remplacer le tout par les lignes suivantes :

```
userdb {
  driver = static
  args = uid=vmail gid=vmail home=/var/vmail/%d/%n
}
```

Puis nous allons changer l'emplacement des mail :

```
 nano /etc/dovecot/conf.d/10-mail.conf
```

Et nous allons remplacer le "mail\_location" :

```
mail_location = maildir:/var/vmail/%d/%n/Maildir
```

En suite, nous allons modifier le fichier suivant :

```
 nano /etc/dovecot/conf.d/10-master.conf
```

Et dans le bloc "service auth" nous allons ajouter le texte suivant :

```
unix_listener /var/spool/postfix/private/auth {
  mode = 0666
  user = postfix
  group = postfix
}
```

Comme ceci :

[![image-1616452318825.png](https://docs.nehemiebarkia.fr/uploads/images/gallery/2021-03/scaled-1680-/image-1616452318825.png)](https://docs.nehemiebarkia.fr/uploads/images/gallery/2021-03/image-1616452318825.png)

On indique maintenant à Dovecot comment se connecter à la base de données :

```
nano /etc/dovecot/dovecot-sql.conf.ext
```

Ajouter à la toute fin du fichier ces trois lignes :

```
driver = mysql
connect = host=127.0.0.1 dbname=postfix user=mailuser password=MYPASSWORD
password_query = SELECT username,domain,password FROM mailbox WHERE username='%u';
```

Puis nous modifions les droits d'accès du fichier dovecot.conf :

```
chgrp vmail /etc/dovecot/dovecot.conf
chmod g+r /etc/dovecot/dovecot.conf
```

Et enfin, nous pouvons redémarrer dovecot :

```
service dovecot restart
```

##### 10 - Liaison entre **Postfix** et **Dovecot** : 

<div data-lang="" id="bkmrk-nous-allons-ajouter-">Nous allons ajouter ces lignes à la toute fin de master.cf</div>```
nano /etc/postfix/master.cf
```

```
dovecot    unix  -       n       n       -       -       pipe
  flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/dovecot-lda -f ${sender} -d ${recipient}

```

Puis, nous redémarrons Postfix :

```
service postfix restart
```

<p class="callout info">Si vous utilisez une machine virtuelle chez Google, commencer la commandes avec "/usr/sbin/".</p>

Maintenant on applique les modifications :

```
postconf -e virtual_transport=dovecot
postconf -e dovecot_destination_recipient_limit=1
```

On va pouvoir maintenant, tester la configuration :

```
tree /var/vmail
```

[![image-1616453782072.png](https://docs.nehemiebarkia.fr/uploads/images/gallery/2021-03/scaled-1680-/image-1616453782072.png)](https://docs.nehemiebarkia.fr/uploads/images/gallery/2021-03/image-1616453782072.png)

On constate qu'il n'y a aucun mail présent.

Maintenant, tentons d'envoyer un mail à alice par exemple :

```
echo test | mail alice@mymail.nehemiebarkia.fr
```

On peut vérifier les logs :

```
tail -f /var/log/mail.log
```

[![image-1616454055350.png](https://docs.nehemiebarkia.fr/uploads/images/gallery/2021-03/scaled-1680-/image-1616454055350.png)](https://docs.nehemiebarkia.fr/uploads/images/gallery/2021-03/image-1616454055350.png)

<p class="callout info">Vous constatez une erreur ? Vérifiez si Dovecot a bien les bons identifiants : --&gt; nano /etc/dovecot/dovecot-sql.conf.ext</p>

Maintenant, affichons une nouvelle fois les mails présents sur le serveur :

```
tree /var/vmail
```

[![image-1616454169529.png](https://docs.nehemiebarkia.fr/uploads/images/gallery/2021-03/scaled-1680-/image-1616454169529.png)](https://docs.nehemiebarkia.fr/uploads/images/gallery/2021-03/image-1616454169529.png)

Postfix transmet donc bien a Dovecot les mails.

##### 11 - Installation de **Rainloop** : 

Installation et droits de Rainloop :

```
mkdir /var/www/html/rainloop
cd /var/www/html/rainloop
wget -qO- https://repository.rainloop.net/installer.php | php
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;
chown -R www-data:www-data .
```

Maintenant nous accédons au lien suivant : [http://IP-DU-SRV/rainloop/?admin](http://IP-DU-SRV/rainloop/?admin) ; Nous utiliserons le compte admin et le mot de passe 12345.

Nous allons aller dans "domaines" et faire "add domaine" :

[![image-1616456622876.png](https://docs.nehemiebarkia.fr/uploads/images/gallery/2021-03/scaled-1680-/image-1616456622876.png)](https://docs.nehemiebarkia.fr/uploads/images/gallery/2021-03/image-1616456622876.png)

Maintenant, nous nous rendons à l'adresse suivante : [http://IP-DU-SRV/rainloop](http://IP-DU-SRV/rainloop) et nous nous connectons en tant qu'alice :

[![image-1616455441339.png](https://docs.nehemiebarkia.fr/uploads/images/gallery/2021-03/scaled-1680-/image-1616455441339.png)](https://docs.nehemiebarkia.fr/uploads/images/gallery/2021-03/image-1616455441339.png)

On constate qu'Alice à bien reçus les mails envoyés précédemment :

[![image-1616455564486.png](https://docs.nehemiebarkia.fr/uploads/images/gallery/2021-03/scaled-1680-/image-1616455564486.png)](https://docs.nehemiebarkia.fr/uploads/images/gallery/2021-03/image-1616455564486.png)