Mise en place d'un serveur mail

De Marijan Stajic | Wiki
Version datée du 21 mars 2023 à 23:02 par Marijan (discussion | contributions) (Page créée avec « = Qu'est-ce que les e-mails = Les e-mails sont des '''courriers électroniques''' qui permettent d'envoyer un courrier comme à la poste, mais par le biais d'internet. Par conséquent le courrier arrive bien plus rapidement à destination et, qui plus est, de façon gratuite dans beaucoup de cas (adresses Gmail par exemple). On dit que le transport d'un mail est instantané même si ça peut prendre quelques secondes, ça reste bien évidemment bien plus rapide q... »)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à la navigation Aller à la recherche

Qu'est-ce que les e-mails

Les e-mails sont des courriers électroniques qui permettent d'envoyer un courrier comme à la poste, mais par le biais d'internet. Par conséquent le courrier arrive bien plus rapidement à destination et, qui plus est, de façon gratuite dans beaucoup de cas (adresses Gmail par exemple). On dit que le transport d'un mail est instantané même si ça peut prendre quelques secondes, ça reste bien évidemment bien plus rapide qu'un courrier qui aurait été envoyé par la Poste.

Comment ça fonctionne

Pour le transport d'un mail, il faut savoir que c'est le protocole SMTP qui le fait. Il s'occupe de l'envoi jusqu'à la réception du mail.

Ensuite, pour la consultation des mails, ce sont les protocoles IMAP et POP qui s'en occupent.

Schéma et fonctionnement

Voici un schéma ainsi que le fonctionnement du service mail :


Mail-schema3.png


  1. L'utilisateur va rédiger son mail. Une fois fait, il va appuyer sur le bouton Envoyer, le client mail va donc se connecter au serveur d'envoi.
  2. Le serveur d'envoi va voir que l'adresse mail destinataire appartient au domaine gmail.com, mais il a pas les informations des serveurs MX pour l'envoyer. Il va donc envoyer la demande aux serveurs DNS (qui sont dans sa configuration) pour qu'ils aillent faire les requêtes nécessaires. Une fois qu'ils ont les réponses, ils vont renvoyer au serveur d'envoi.
  3. Suite à ça, le serveur d'envoi connait désormais les serveurs MX du domaine gmail.com, il va donc lui envoyer les informations de qui vient le mail, à qui il a été adressé, l'objet, le contenu, etc.
  4. Le serveur de mails sachant à qui est adressé le mail, il va l'accepter et ensuite l'envoyer sur un serveur de stockage de mails.
  5. Pour terminer, le logiciel client de l'utilisateur va aller consulter le mail dans le serveur de stockage, il ne restera plus qu'à l'utilisateur de consulter ses mails.

Protocoles

Voici les protocoles utilisés avec la définition et le port utilisé :

SMTP (Simple Mail Transfer Protocol) Standard 25 Secure 465 (SSL) Secure 587 (TLS)
POP (Post Office Protocol) Standard 110 Secure 995 (SSL/TLS)
IMAP (Internet Message Access Protocol) Standard 143 Secure 993 (SSL/TLS)

Tout ces protocoles reposent sur du TCP.

Différence entre le POP et IMAP

Il faut savoir que le POP et l'IMAP ont deux façons différentes de fonctionner, mais les deux consistent à faire la même chose qui est donc faire de la réception de mail. Voici comment ils fonctionnent :

  • POP : Si votre compte est configuré en POP par exemple sur votre Outlook, il va aller télécharger le mail que vous avez reçu et vous l'aurez donc en local sur l'appareil où vous avez ouvert le mail en question. Il va donc ensuite le supprimer du serveur ce qui vous empêchera d'y accéder ultérieurement sur un autre appareil.
  • IMAP : Si votre compte est configuré en IMAP par exemple sur votre Outlook, il ne va pas télécharger les mails mais va les lire directement sur le serveur. Donc, si vous effectuez une modification, elle sera faite directement sur le serveur aussi. Si vous avez plusieurs appareil avec le compte mail configuré en IMAP dessus, vous allez donc pouvoir lire les mails en question sans risque qu'ils disparaissent du serveur.

Le protocole IMAP est plus souvent utilisé que le protocole POP pour plusieurs raisons :

  • Mails accessibles depuis n'importe quel appareil.
  • En cas de crash de l'appareil, les mails ne sont pas perdus.
  • La boîte mail peut être partagée par plusieurs utilisateurs.
  • Les mails restent en sécurité, si le serveur du prestataire crash, normalement des backups devraient être présents pour tout restaurer.

Informations

Voici le matériel à disposition pour ce projet :

  • Un serveur Dell R610 avec un ESXi VMware
  • Le nom de domaine support-vtx.ch.

Le serveur est à utiliser avec le Sonicwall TZ300, son IP local est réservée par adresse MAC : 172.16.0.6, une règle NAT existe pour se connecter dessus depuis le réseau VTX : https://virt.support-vtx.ch:1338

Dans la zone DNS de support-vtx.ch, un enregistrement A de mail.support-vtx.ch à été créer vers l'IP du pare-feu. Aussi, un enregistrement PTR à été créer afin de faire corrélation.

Machine virtuelle

  • Système d'exploitation utilisé : Debian 10.4

Pour ce projet, nous allons utiliser 1 VMs :

  • VM-DEB-MAIL-WIKI: 172.16.0.12

Enregistrement

  1. Pour crée votre machine virtuelle, cliquez sur Crée/Enregistrer une machine virtuelle dans l'onglet Machine virtuelle.
    Installation SRV - 01.png
  2. Ensuite, faites Crée une machine virtuelle.
    Installation SRV - 02.png
  3. Rentrer un Nom pour votre machine et sélectionner la Compatibilité, Famille de systèmes d'exploitation invités et Version du SE invité.
    Installation SRV - 03.png
  4. Configurer ensuite votre machine avec les paramètres suivants :
    Installation SRV - 04.png
    • Modifier le Lecteur de CD/DVD en mettant le fichier ISO de votre OS.
      Installation SRV - 04 1.png
  5. Une fois que c'est, faites Terminer.
    Installation SRV - 05.png

Configuration

  • Une fois l'enregistrement de votre VM terminé, exécuté-la.
  1. Dans un premier temps, faites une installation sans l'interface graphique. Cliquez donc sur Install.
    CONFIGURATION SRV - 01.png
  2. Sélectionner votre langue.
    CONFIGURATION SRV - 02.png
  3. Ensuite, sélectionner votre localisation.
    CONFIGURATION SRV - 03.png
    • Europe\Switzerland
  4. Configurer ensuite le langage de votre clavier.
    CONFIGURATION SRV - 06.png
  5. Rentrer un mot de passe pour l'utilisateur root (admin).
    CONFIGURATION SRV - 08.png
  6. Choisissiez un nom d'utilisateur pour l'utilisateur simple.
    CONFIGURATION SRV - 09.png
    • Rentrer également un mot de passe pour cette utilisateur.
  7. Sélectionner la méthode de partition.
    CONFIGURATION SRV - 11.png
    • Sélectionner ensuite le disque pour la partition.
  8. Mettez tout les fichiers dans la même partition.
    CONFIGURATION SRV - 13.png
  9. Appliquer ensuite le partitionnement sur les disques.
    CONFIGURATION SRV - 14.png
  10. Sélectionner l'archive miroir.
    CONFIGURATION SRV - 16.png
  11. Choisissiez ensuite les logiciels de base.
    CONFIGURATION SRV - 18.png
    • Désélectionner ensuite tout sauf la dernière option.
  12. Installer le GRUB boot loader.
    CONFIGURATION SRV - 19.png
  13. Une fois installer, vous allez pouvoir vous s'authentifier sur votre machine virtuelle.
    CONFIGURATION SRV - 22.png
  • Une adresse IP a été assigner sur mes VMs depuis le Sonicwall.

Snapshot

  • Un snapshot est unique par VM. Aussi, l'adresse IP attribué par le Sonicwall va resté car il ce base sur l'adresse MAC.
  1. Faites un clic droit sur la VM concerné puis sous Snapshots, faites Prendre un snapshot.
    SNAPSHOT SRV - 01.png
  2. Ensuite, pour restaurer le snapshot, faites clic droit sur la VM puis Restaurer.
    SNAPSHOT SRV - 03.png

Secure Shell

  • Le service SSH peut être activer à l'installation de debian.
  1. Dans un premier temps installez le package SSH sur la VM.
    Installation SSH - install01.png

    apt-get install openssh-server
  2. Une fois installer, il faudra mettre à jour le port sur le fichier de configuration de votre SSH par rapport à ce qui a été appliquer sur le firewall.
    Installation SSH - sshd config.png

    nano /etc/ssh/sshd_config
  3. Ensuite, dès que vous êtes dans le fichier, vous pouvez retirer le commentaire (#) et mettre le port en question. Si vous souhaitez utiliser l'utilisateur root pour le SSH, il faudra faire pareil pour PermitRootLogin.
    Installation SSH - sshd config file.png
  4. Pour appliquer les modifications, il faudra simplement redémarrer le service.
    Installation SSH - reload.png

    /etc/init.d/ssh reload
  5. Vous pouvez vérifier si le port à bien été modifié.
    Installation SSH - check.png

    systemctl status ssh
  6. Maintenant que tout est prêt, vous pouvez lancer votre logiciel d'émulateur de terminal. Dans mon cas, j'utilise PuTTY.
    Installation SSH - putty.png
    • Host Name : Ici, j'ai mis l'adresse du firewall, mais nous aurions très bien pu mettre également virt.support-vtx.ch qui est l'adresse du serveur où sont les VMs ;
    • Port : Le port SSH que nous avons mis par rapport à la VM qu'on souhaite accéder ;
    • Connexion type : SSH.

Capture de paquet

Pour mieux comprendre ce qui transite sur les VMs, on peut utiliser tcpdump et ensuite récupérer le fichier .pcap et l'ouvrir sur Wireshark pour voir les paquets.

Il est important de faire ces commandes directement sur l'interface de ESXi et non en SSH.

  1. Dans un premier temps, nous allons installer le package tcpdump.
    Installation TCPDUMP - installation.png

    apt-get install tcpdump
  2. Ensuite, nous allons lancez une capture de paquet et accéder au site au même temps. Il est important de nommer le fichier .pcap.
    Installation TCPDUMP - capture.png

    tcpdump -w capture-wiki.pcap
  3. Après avoir fait la capture de paquet, vous pouvez faire CTRL+C pour arrêter. La capture sera stocké à l'endroit ou vous avez lancer le tcpdump.
    Installation TCPDUMP - capturels.png

    ls
  4. Pour récupérer la capture que vous avez fait, il faudra utiliser un client SFTP pour vous connectez sur la VM et accéder aux fichiers. Dans mon cas, j'utilise WinSCP.
    Installation TCPDUMP - winscp.png

Une fois connecté, vous allez pouvoir récupérer le fichier .pcap et l'ouvrir sur Wireshark.

Postfix

Postfix.png

Postfix est un serveur de messagerie électronique qui ce charge du transfère des courriers.

  • Avant d'installer un service de mail comme Postfix, il faut vérifier si il y en a pas un par défaut. Avec Debian, Exim4 est installé, il faudra donc le supprimer.

1. Dans un premier temps, installer les paquets lier à Postfix

POSTFIX - install.png
apt-get install postfix postfix-mysql -y
1.1 Type de configuration de mail : Internet Site
1.2 Nom du système de mail : mail.domaine.tld

2. Tout en long de la configuration, il faudra vérifier si votre VM écoute toujours sur le port 25 (en IPv4). Il ce peut en cas d'erreur de configuration que ce dernier soit coupé.

POSTFIX - netstat.png
netstat -plntu | grep 25 

tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      1673/master

3. Nous allons maintenant nous concentrer sur la configuration du main.cf de Postfix.

Le main.cf permet de gérer les divers paramètre de Postfix. Afin d'éviter de les laisser par défaut, on peut les configurer dans ce dernier afin de les activer, désactiver et autres.
POSTFIX - maincf.png
vim /etc/postfix/main.cf


# See /usr/share/postfix/main.cf.dist for a commented, more complete version

# Debian specific:  Specifying a file name will cause the first
# line of that file to be used as the name.  The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h

readme_directory = no

# See http://www.postfix.org/COMPATIBILITY_README.html -- default to 2 on
# fresh installs.
compatibility_level = 2

# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.

myhostname = mail.support-vtx.ch
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = localhost.localdomain, localhost
relayhost =
mynetworks = 127.0.0.0/8
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = ipv4

4. Nous allons maintenant nous concentrer sur la configuration du master.cf de Postfix.

Le master.cf permet de gérer les processus en arrière plan. Les activer, désactiver ou autres.
POSTFIX - mastercf.png
vim /etc/postfix/master.cf

	
smtp	inet	n	- 	- 	- 	- 	smtpd

5. Si le telnet fonctionne en local, il faudra le faire fonctionner aussi pour l'extérieur. Pour ce faire, ouvrez le port 25 sur le firewall vers votre VM. Pour des questions de sécurité, j'ai ouvert uniquement depuis le réseau local (pour les VM dans le même réseau).

POSTFIX - telnet25.png
telnet 172.16.0.12 25
5.1 Vous pouvez modifier ce message depuis le fichier de configuration main.cf.
POSTFIX - maincf welcome.png

6. Maintenant, nous allons retourner dans le fichier master.cf de Postfix pour activer le port 587.

POSTFIX - 5872.png
vim /etc/postfix/master.cf


submission inet n       -       y       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=may
  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_tls_auth_only=yes
#  -o smtpd_reject_unlisted_recipient=no
#  -o smtpd_client_restrictions=$mua_client_restrictions
#  -o smtpd_helo_restrictions=$mua_helo_restrictions
#  -o smtpd_sender_restrictions=$mua_sender_restrictions
#  -o smtpd_recipient_restrictions=
  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING
6.1. On peut vérifier si il écoute bien sur le port 587.
POSTFIX - 587nets.png
netstat -lnp | grep 587

7. Même si ici il est à la fin, il est important de faire des redémarrages du service et vérifier si les modifications fonctionnent correctement durant tout le long.

POSTFIX - restart.png
systemctl restart postfix

8. Pour corriger les bugs et autres, nous pouvons nous baser sur les logs.

POSTFIX - logs.png
tail -f /var/log/mail.log

Connexion avec SASL

SASL Simple Authentication and Security Layer est un protocole permet l'authentification lors de l'envoie des mails.

1. Installer les paquets lier à SASL.

POSTFIX - SASL - Install.png
install sasl2-bin libsasl2-modules -y

2. Ensuite, nous allons éditer le fichier saslauthd afin d'activer le protocole.

POSTFIX - SASL - sasal.png
vim /etc/default/saslauthd 


START=yes

3. Pour terminer, nous allons ajouter au main.cf de Postfix ces lignes afin de connecter SASL à Postfix et Dovecot.

POSTFIX - SASL - maincfpostfix.png
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_mynetworks permit_sasl_authenticated

Connexion avec Dovecot

Il faudra connecter Dovecot à Postfix avec que ce dernier puisse classer les mails que Postfix reçoit.

  1. Dans un premier temps, rendez-vous dans le main.cf de Postfix.
POSTFIX - dovecot.png
virtual_transport=dovecot
dovecot_destination_recipient_limit=1
  1. Ensuite, modifier le fichier master.cf de Postfix.
POSTFIX - dovecot-master.png
dovecot unix - n n - - pipe
 flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/dovecot-lda -f ${sender} -d ${recipient}

P-Admin

Postifxadmin3.png

P-Admin est une interface web qui permet la gestion et la configuration du serveur de messagerie électronique Postfix.

Configuration du serveur web

Comme serveur web, nous allons utiliser Nginx.

1. En premier lieu, installer les paquets PHP ainsi Nginx.

P-admin - Install php nginx.png
apt-get install nginx php-cgi php-cli php-curl php-fpm php-mysqli php-mbstring php-xml php-intl -y

2. Ensuite, télécharger la dernière version de P-Admin depuis leur Github.

P-admin - wget.png
wget -P /opt https://github.com/postfixadmin/postfixadmin/releases/tag/postfixadmin-3.3.11

3. Une fois télécharger, décompresser le dossier.

P-admin - extract.png
tar xvf /opt/postfixadmin-postfixadmin-3.3.11.tar.gz

4. Renommer le dossier puis créer un lien symbolique vers le dossier racine des serveurs webs.

P-admin - rm and ln.png
mv /opt/postfixadmin-postfixadmin-3.3.11/ /opt/postfixadmin

ln -s /opt/postfixadmin/public/ /var/www/html/postfixadmin
4.1. Il faudra créer une règle sur le pare-feu qui dévie toutes les requêtes du port 1346 vers l'IP de la VM.
4.2. Il faudra également créer un enregistrement A afin de faire correspondre padmin.support-vtx.ch à l'IP du pare-feu.

5. Maintenant, nous allons dupliquer le fichier de base de Nginx et nous allons le modifier à notre guise.

P-admin - nginx - copie file availe.png
cp /etc/nginx/sites-available/default /etc/nginx/sites-available/padmin.support-vtx.ch

6. Ensuite, nous allons le modifier.

P-admin - nginx - config.png
vim /etc/nginx/sites-available/padmin.support-vtx.ch


server {
        listen 1346 ;
        # listen [::]:80 default_server;

        # SSL configuration
        #
        # listen 443 ssl default_server;
        # listen [::]:443 ssl default_server;
        #
        # Note: You should disable gzip for SSL traffic.
        # See: https://bugs.debian.org/773332
        #
        # Read up on ssl_ciphers to ensure a secure configuration.
        # See: https://bugs.debian.org/765782
        #
        # Self signed certs generated by the ssl-cert package
        # Don't use them in a production server!
        #
        # include snippets/snakeoil.conf;

        root /var/www/html/postfixadmin;

        # Add index.php to the list if you are using PHP
        index index.php;

        server_name padmin.support-vtx.ch;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
        }

        # pass PHP scripts to FastCGI server
        #
        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
        #
        #       # With php-fpm (or other unix sockets):
                fastcgi_pass unix:/run/php/php7.3-fpm.sock;
        #       # With php-cgi (or other tcp sockets):
        #       fastcgi_pass 127.0.0.1:9000;
        }

7. Il faudra ensuite copier le fichier du site available pour le coller vers enabled afin de l'activer.

P-admin - cp file.png
cp /etc/nginx/sites-available/padmin.support-vtx.ch /etc/nginx/sites-enabled/padmin.support-vtx.ch

8. Pour terminer, créer le dossier templates_c et donner les droits à Nginx.

P-admin - tempalte.png
mkdir /opt/postfixadmin/templates_c

chown -R www-data:www-data /opt/postfixadmin/templates_c

9. Une fois la configuration faites, il faut redémarrer le service.

P-admin - nginx - restart.png
systemctl restart nginx

10. Pour pouvoir faire du débogage sur P-Admin, il faudra utiliser les logs que Nginx porpose.

P-admin - nginx - logpng.png
tail -f /var/log/nginx/error.log ou access.log

11. Maintenant, nous avons accès à la page de configuration depuis le web. Pour ce rendre dessus, il faudra taper padmin.support-vtx.ch:1346/setup.php. Dans un premier temps, rentrez le mot de passe pour la configuration.

P-admin - mdp.png
11.1. Un hash du mot de passe va ce générer. Il faudra l'ajouter dans le fichier de configuration de P-Admin.
P-admin - mot de passe hash.png
$CONF['setup_password'] = '$2y$10$Q2eWwz3sg2/R0idTxH3MTuPT5VInQLRD7h4rf/HfpnwQsn3Ps2WDq';

12. Ensuite, rafraichissez la page et connectez-vous avec le mot de passe rentrer précédemment.

P-admin - connect2.png

13. Ensuite, il faudra rentrer les informations de votre utilisateur administrateur.

P-admin - login.png

14. Connectez-vous et vous aurez enfin accès au panel de P-admin.

P-admin - panel.png

15. Une fois dessus, vous allez pouvoir créer votre premier domaine via Liste des domaines puis Nouveau domaine. Une fois dessus, rentrez les informations.

P-admin - domain.png

16. Pour terminer, vous allez pouvoir créer votre première adresse mail depuis Liste des virtuels puis Ajouter un compte courriel.

P-admin - mail.png

Création d'une base de donnée

Afin de stocker les informations liés à nos adresses mail, il faudra mettre en place une base de donnée. Ici, nous allons utiliser MariaDB.

1. Dans un premier temps, installer les paquets liés à MariaDB.

POSTFIX - Mariadbinstall.png
apt-get install mariadb-server -y

2. Afin de mettre une sécurité sur la base de donnée, il faudra définir un mot de passe et désactiver/activer certaines fonctionnalité.

POSTFIX - DB - mysql secure.png
mysql_secure_installation
2.1. Change the root password? [Y/n]
2.2. Remove anonymous users? [Y/n]
2.3. Disallow root login remotely? [Y/n]
2.4. Remove test database and access to it? [Y/n]
2.5. Reload privilege tables now? [Y/n]

3. Ensuite, nous allons supprimer les logs déjà existante de mysql.

POSTFIX - DB - remove oldfile.png
rm -f /var/lib/mysql/ib_logfile*

4. Maintenant, nous pouvons nous connecter à la base de donnée.

POSTFIX - DB - connection db.png
mysql -u root -p

5. Créer maintenant la base de donnée du serveur d'email.

POSTFIX - DB - create db.png
CREATE DATABASE mailserver;

SHOW DATABASES;

6. Ensuite, crée l'utilisateur et donnez lui les privilèges sur la base de donnée Postfix.

POSTFIX - DB - create user2.png
GRANT ALL ON mailserver.* TO 'mailserver_user'@'localhost' IDENTIFIED BY 'V0lv1c.12';

FLUSH PRIVILEGES;

SHOW GRANTS;

7. Pour terminer, il faudra créer un fichier de configuration afin que P-Admin ce connecte sur cette base de donnée.

P-Admin bdd - connexion.png
vim /opt/postfixadmin/config.local.php


<?php
$CONF['database_type'] = 'mysqli';
$CONF['database_user'] = 'mailserver_user';
$CONF['database_password'] = 'V0lv1c.12';
$CONF['database_name'] = 'mailserver';
$CONF['configured'] = true;
?>

Connexion avec Postfix

Pour connecter Postfix avec P-Admin, il suffit d'avoir trois fichiers pour trois opérations différentes. Un pour les noms de domaine, un pour les utilisateurs et un dernier pour les alias.

1. En premier, la connexion pour les noms de domaines.

P-admin - Postfix - domains.png
vim /etc/postfix/mysql-virtual-mailbox-domains.cf


user = mailserver_user
password = V0lv1c.12
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM domain WHERE domain='%s'
1.1. Nous allons ensuite ajouter la configuration à notre main.cf de Postfix.
P-admin - Postfix - postconfde.png
 postconf -e virtual_mailbox_domains=mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf 
1.2. Il faudra par la suite établir la connexion à Postfix en indiquant votre domaine.
P-admin - Postfix - postmapd.png
postmap -q support-vtx.ch mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf

2. Ensuite, on va connecter les noms d'utilisateurs.

P-admin - Postfix - user.png
vim /etc/postfix/mysql-virtual-mailbox-maps.cf


user = mailserver_user
password = V0lv1c.12
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM mailbox WHERE username='%s'
2.1. Comme au dessus, nous allons ajouter la configuration à notre main.cf de Postfix.
P-admin - Postfix - postconfue.png
postconf -e virtual_mailbox_maps=mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
2.2. Il faudra par la suite aussi établir la connexion à Postfix en indiquant votre utilisateur.
P-admin - Postfix - postmapu.png
postconf -e virtual_mailbox_maps=mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf

3. Pour terminer, on va connecter les alias.

P-admin - Postfix - alias.png
vim /etc/postfix/mysql-virtual-alias-maps.cf


user = mailserver_user
password = V0lv1c.12
hosts = 127.0.0.1
dbname = mailserver
query = SELECT goto FROM alias WHERE address='%s'
3.1. Comme au dessus, nous allons ajouter la configuration à notre main.cf de Postfix.
P-admin - Postfix - postconfda.png
postconf -e virtual_alias_maps=mysql:/etc/postfix/mysql-virtual-alias-maps.cf
3.2. Il faudra par la suite aussi établir la connexion à Postfix en indiquant votre alias.
P-admin - Postfix - postmapa.png
postmap -q info@support-vtx.ch mysql:/etc/postfix/mysql-virtual-alias-maps.cf

4. Pour terminer, il faudra donner les droits à Postfix sur les fichiers mysql.

P-admin - Postfix - droits.png
 
chgrp postfix /etc/postfix/mysql-*.cf
chmod u=rw,g=r,o= /etc/postfix/mysql-*.cf

Dovecot

Dovecot2.png

Dovecot est un serveur de messagerie électronique conçu gérer les protocoles IMAP et POP, il permet la consultation des mails.

1. Installer les paquets pour Dovecot.

Dovecot - Install.png
dovecot-imapd dovecot-pop3d dovecot-mysql dovecot-managesieved -y

2. Nous allons éditer le premier fichier de configuration 10-auth.conf.

Ce fichier permet de faire la connexion entre le client et la base de donnée par système d'authentification.
Dovecot - 10-auth-sql conf.png
vim /etc/dovecot/conf.d/10-auth.conf


auth_mechanisms = plain login

##
## Password and user databases
##

#
# Password database is used to verify user's password (and nothing more).
# You can have multiple passdbs and userdbs. This is useful if you want to
# allow both system users (/etc/passwd) and virtual users to login without
# duplicating the system users into virtual database.
#
# <doc/wiki/PasswordDatabase.txt>
#
# User database specifies where mails are located and what user/group IDs
# own them. For single-UID configuration use "static" userdb.
#
# <doc/wiki/UserDatabase.txt>

#!include auth-deny.conf.ext
#!include auth-master.conf.ext

#!include auth-system.conf.ext
!include auth-sql.conf.ext
#!include auth-ldap.conf.ext
#!include auth-passwdfile.conf.ext
#!include auth-checkpassword.conf.ext
#!include auth-vpopmail.conf.ext
#!include auth-static.conf.ext

3. Dans un seconde temps, nous allons modifier le fichier auth-sql.conf.ext.

Ce fichier permet de faire la connexion pour les utilisateurs SQL.
Dovecot - auth-sql conf.png
vim /etc/dovecot/conf.d/auth-sql.conf.ext


# userdb {
#  driver = sql
#  args = /etc/dovecot/dovecot-sql.conf.ext
#}

# If you don't have any user-specific settings, you can avoid the user_query
# by using userdb static instead of userdb sql, for example:
# <doc/wiki/UserDatabase.Static.txt>
userdb {
  driver = static
  args = uid=vmail gid=vmail home=/var/vmail/%d/%n
}

4. Ensuite, nous allons nous occuper de dovecot-sql.conf.ext qui est utilisé pour la connexion de Dovecot sur la base de donnée.

Ce fichier permet d'indiquer les informations de connexion à Dovecot pour la base de donnée.
Dovecot - dovecot-sql.conf.ext.png
/etc/dovecot/dovecot-sql.conf.ext

# Database driver: mysql, pgsql, sqlite
driver = mysql
...

#   The path to the database file.
#
# Examples:
#   connect = host=192.168.1.1 dbname=users
#   connect = host=sql.example.com dbname=virtual user=virtual password=blarg
#   connect = /etc/dovecot/authdb.sqlite
#
connect = host=127.0.0.1 dbname=mailserver user=mailserver_user password=V0lv1c.12

# Default password scheme.
#
# List of supported schemes is in
# http://wiki2.dovecot.org/Authentication/PasswordSchemes
#
default_pass_scheme = MD5-CRYPT
...

# Example:
#   password_query = SELECT userid AS user, pw AS password \
#     FROM users WHERE userid = '%u' AND active = 'Y'
#
password_query = SELECT username,domain,password FROM mailbox WHERE username='%u';
Notes : les "..." signifie que la ligne ce trouve plus bas dans le fichier de configuration.

5. Il faudra maintenant modifier 10-mail.conf, un autre fichier de configuration.

Ce fichier permet d'indiquer ou ce trouvent les emails.
Dovecot - 10-mail.conf.png
vim /etc/dovecot/conf.d/10-mail.conf


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

6. Nous allons modifier 15-lda.conf, un autre fichier de configuration.

Dovecot - 15-lda.conf.png
vim /etc/dovecot/conf.d/15-lda.conf


mail_plugins = $mail_plugins sieve

7. Nous allons maintenant activer les différents dossier par défaut (boîte de réception, envoyé, etc.) depuis le fichier de configuration 15-mailboxes.conf.

Dovecot - 15-mailboxes.conf.png
namespace inbox {
  # These mailboxes are widely used and could perhaps be created automatically:
  mailbox Drafts {
    special_use = \Drafts
    auto=subscribe
  }
  mailbox Junk {
    special_use = \Junk
    auto=subscribe
  }
  mailbox Trash {
    special_use = \Trash
    auto=subscribe
  }

  # For \Sent mailboxes there are two widely used names. We'll mark both of
  # them as \Sent. User typically deletes one of them if duplicates are created.
  mailbox Sent {
    special_use = \Sent
    auto=subscribe
  }
  mailbox "Sent Messages" {
    special_use = \Sent
    auto=subscribe
  }

  # If you have a virtual "All messages" mailbox:
  #mailbox virtual/All {
  #  special_use = \All
  #  comment = All my messages
  #}

  # If you have a virtual "Flagged" mailbox:
  #mailbox virtual/Flagged {
  #  special_use = \Flagged
  #  comment = All my flagged messages
  #}
}

8. Pour terminer avec les fichiers de configuration, nous allons modifier deux parties sur le 10-master.conf de Dovecot.

8.1. Le premier, on va activer les différents ports (143, 993, 110 et 995).
Dovecot - 10-master.conf.png
service imap-login {
  inet_listener imap {
    port = 143
  }
  inet_listener imaps {
    port = 993
    ssl = yes
  }

  # Number of connections to handle before starting a new process. Typically
  # the only useful values are 0 (unlimited) or 1. 1 is more secure, but 0
  # is faster. <doc/wiki/LoginProcess.txt>
  #service_count = 1

  # Number of processes to always keep waiting for more connections.
  #process_min_avail = 0

  # If you set service_count=0, you probably need to grow this.
  #vsz_limit = $default_vsz_limit
}

service pop3-login {
  inet_listener pop3 {
    port = 110
  }
  inet_listener pop3s {
    port = 995
    ssl = yes
  }
}

service submission-login {
  inet_listener submission {
    #port = 587
  }
}

service lmtp {
  unix_listener lmtp {
    #mode = 0666
  }

  # Create inet listener only if you can't use the above UNIX socket
  #inet_listener lmtp {
    # Avoid making LMTP visible for the entire internet
    #address =
    #port =
  #}
}
8.2. Ensuite, nous allons modifier un bloc pour indiquer les utilisateurs et groupe à utiliser.
Dovecot - 10-master.conf2.png
  unix_listener auth-userdb {
    mode = 0666
    user = vmail
  }
  unix_listener /var/spool/postfix/private/auth {
   mode = 0666
   user = postfix
   group = postfix
  }
  user = dovecot

9. Maintenant que nos fichiers de configuration sont bon, on va créer le groupe et l'utilisateur vmail.

Dovecot - groupadduseradd.png
groupadd -g 5000 vmail

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

10. Ensuite, on va donner les droits à l'utilisateur vmail afin que ça soit lui qui soit utilisé par le serveur.

Dovecot - chmod.png
chgrp vmail /etc/dovecot/dovecot.conf

chmod g+r /etc/dovecot/dovecot.conf

11. Afin d'appliquer les changements sur la configuration, il faudra redémarrer le service.

Dovecot - Systemctl.png
systemctl restart dovecot

12. Pour du débogage, le fichier de log est le même que pour Postfix.

POSTFIX - logs.png
tail -f /var/log/mail.log

13. Afin de s'assurer que notre service fonctionne, nous pouvons faire un telnet sur le port imap en localhost.

Dovecot - Telnet imap.png
root@VM-DEB-MAIL-WIKI:~# telnet localhost imap
Trying ::1...
Connected to localhost.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE LITERAL+ STARTTLS AUTH=PLAIN AUTH=LOGIN] Dovecot (Debian) ready.


a1 login info@support-vtx.ch V0lv1c.12
a1 OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 
CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS BINARY MOVE SNIPPET=FUZZY LITERAL+ NOTIFY SPECIAL-USE] Logged in


a2 LIST "" "*"
* LIST (\HasNoChildren \Drafts) "." Drafts
* LIST (\HasNoChildren \Junk) "." Junk
* LIST (\HasNoChildren \Trash) "." Trash
* LIST (\HasNoChildren \Sent) "." Sent
* LIST (\HasNoChildren \Sent) "." "Sent Messages"
* LIST (\HasNoChildren) "." INBOX
a2 OK List completed (0.001 + 0.000 secs).


a3 EXAMINE INBOX
* FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
* OK [PERMANENTFLAGS ()] Read-only mailbox.
* 0 EXISTS
* 0 RECENT
* OK [UIDVALIDITY 1669210035] UIDs valid
* OK [UIDNEXT 1] Predicted next UID
a3 OK [READ-ONLY] Examine completed (0.044 + 0.000 + 0.043 secs).

Roundcube

Roundcube.png

Roundcube est un client de messagerie web (WebMail) qui permet la consultation et l'envoie des mails.

Configuration du serveur web

Comme serveur web, nous allons utiliser Nginx.

1. Les modules PHP et autres sont déjà installer avec P-Admin, nous allons simplement télécharger la dernière version de Roundcube depuis leur Github et nous allons la décompresser.

Roundcube - installe.png
wget https://github.com/roundcube/roundcubemail/releases/download/1.6.0/roundcubemail-1.6.0-complete.tar.gz

tar xvf roundcubemail-1.6.0-complete.tar.gz

2. Il faudra ensuite déplacer le dossier vers le dossier racine des serveurs webs

Roundcube - mv roundcube.png
mv roundcubemail-1.6.0 /var/www/html/roundcubemail
2.1. La règle qui dévie les requêtes du port 1346 sur la VM est déjà en place avec P-Admin.
2.2. Il faudra également créer un enregistrement A afin de faire correspondre webmail.support-vtx.ch à l'IP du pare-feu.

3. Maintenant, nous allons dupliquer le fichier de base de Nginx et nous allons le modifier à notre guise.

Roundcube - nginx.png
cp /etc/nginx/sites-available/default /etc/nginx/sites-available/webmail.support-vtx.ch

4. Ensuite, nous allons le modifier.

Roundcube - nginx2.png
server {
        listen 1346 ;
  # listen [::]:80 default_server;

        # SSL configuration
        #
        # listen 443 ssl default_server;
        # listen [::]:443 ssl default_server;
        #
        # Note: You should disable gzip for SSL traffic.
        # See: https://bugs.debian.org/773332
        #
        # Read up on ssl_ciphers to ensure a secure configuration.
        # See: https://bugs.debian.org/765782
        #
        # Self signed certs generated by the ssl-cert package
        # Don't use them in a production server!
        #
        # include snippets/snakeoil.conf;

        root /var/www/html/roundcubemail;

        # Add index.php to the list if you are using PHP
        index index.php;

        server_name webmail.support-vtx.ch;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
        }

        # pass PHP scripts to FastCGI server
        #
        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
        #
        #       # With php-fpm (or other unix sockets):
                fastcgi_pass unix:/run/php/php7.3-fpm.sock;
        #       # With php-cgi (or other tcp sockets):
        #       fastcgi_pass 127.0.0.1:9000;
        }

5. Il faudra ensuite copier le fichier du site available pour le coller vers enabled afin de l'activer.

Roundcube - nginx3.png
cp /etc/nginx/sites-available/webmail.support-vtx.ch /etc/nginx/sites-enabled/webmail.support-vtx.ch

6. Maintenant, donner les droits à Nginx.

Roundcube - chown nginx.png
chown www-data:www-data temp logs -R

7. Une fois la configuration faites, il faut redémarrer le service.

P-admin - nginx - restart.png
systemctl restart nginx

8. Pour pouvoir faire du débogage sur Roundcube, il faudra utiliser les logs que Nginx propose.

P-admin - nginx - logpng.png

9. Maintenant, nous pouvons accéder à la page web d'installation de roundcube depuis webmail.support-vtx.ch:1346/installer.

Roundcube installer.png


Note : Les NOT AVAILABLE sont des options facultatives. Par contre, si vous avez des NOT OK il faudra les corriger.

10. Ensuite, paramétrer comme vous souhaitez votre Roundcube. Les principaux sont :

Display settings & user prefs :
Roundcube langue.png
Database setup :
Roundcube database setup.png
SMTP Settings :
Rouncube smtp2.png

11. Il faudra ensuite connecter Roundcube sur sa base de donnée.

Roundcube - bdd2.png
cp /var/www/html/roundcubemail/config/config.inc.php.sample /var/www/html/roundcubemail/config/config.inc.php
rm /var/www/html/roundcubemail/config/config.inc.php.sample
vim /var/www/html/roundcubemail/config/config.inc.php


$config{'db_dsnw'] = 'mysql://roundcube:V0lv1c.12@localhost/roundcube';

11. Vous pouvez tester la configuration à la fin de la page.

SMTP :
Roundcube check smtp2.png
IMAP :
Roundcube check imap.png

11. Pour terminer avec l'installation, nous allons supprimer le dossier d'installation.

Roundcube - rm installer.png
rm -r /var/www/html/roundcubemail/installer

12. Maintenant, nous pouvons nous connecter à Roundcube depuis l'adresse webmail.support-vtx.ch:1346 avec les identifiants créer sur P-Admin.

Roundcube final.png

13. Pour terminer, nous allons simuler un envoie de mail depuis une autre VM qui est dans le même réseau que le serveur mail.

Testtelnet.png
root@AUD-SRV-DEB-004:~# telnet 172.16.0.12 25
Trying 172.16.0.12...
Connected to 172.16.0.12.
Escape character is '^]'.
220 mail.support-vtx.ch ESMTP Postfix (Debian/GNU)


ehlo vm-aud
250-mail.support-vtx.ch
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-DSN
250-SMTPUTF8
250 CHUNKING


mail from: <marijan@stajic.me>
250 2.1.0 Ok
rcpt to: <info@support-vtx.ch>
250 2.1.5 Ok


data
354 End data with <CR><LF>.<CR><LF>
subject: Test pour le WIKI
Meilleur wiki de la planète
.
250 2.0.0 Ok: queued as EC1DAC0B94
13.1. Le mail est bien arrivé à destination de info@support-vtx.ch, il est également bien visible dans Roundcube.
Testtelnet2.png


La connexion entre les différents services fonctionne donc correctement.

Création d'une base de donnée

Pour la création de la base de donnée de Roundcube, la démarche est exactement la même que pour P-Admin. Cliquez-ici pour voir l'installation.

Note : Il faudra importer un fichier de configuration SQL dans la base de donnée.

Roundcube - bdd import.png
mysql roundcube < /var/www/html/roundcubemail/SQL/mysql.initial.sql