Mise en place d'un serveur mail
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 :
- 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.
- 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.
- 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.
- 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.
- 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
- Pour crée votre machine virtuelle, cliquez sur Crée/Enregistrer une machine virtuelle dans l'onglet Machine virtuelle.
- Ensuite, faites Crée une machine virtuelle.
- Rentrer un Nom pour votre machine et sélectionner la Compatibilité, Famille de systèmes d'exploitation invités et Version du SE invité.
- Configurer ensuite votre machine avec les paramètres suivants :
- Modifier le Lecteur de CD/DVD en mettant le fichier ISO de votre OS.
- Une fois que c'est, faites Terminer.
Configuration
- Une fois l'enregistrement de votre VM terminé, exécuté-la.
- Dans un premier temps, faites une installation sans l'interface graphique. Cliquez donc sur Install.
- Sélectionner votre langue.
- Ensuite, sélectionner votre localisation.
- Europe\Switzerland
- Configurer ensuite le langage de votre clavier.
- Rentrer un mot de passe pour l'utilisateur root (admin).
- Choisissiez un nom d'utilisateur pour l'utilisateur simple.
- Rentrer également un mot de passe pour cette utilisateur.
- Sélectionner la méthode de partition.
- Sélectionner ensuite le disque pour la partition.
- Mettez tout les fichiers dans la même partition.
- Appliquer ensuite le partitionnement sur les disques.
- Sélectionner l'archive miroir.
- Choisissiez ensuite les logiciels de base.
- Désélectionner ensuite tout sauf la dernière option.
- Installer le GRUB boot loader.
- Une fois installer, vous allez pouvoir vous s'authentifier sur votre machine virtuelle.
- 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.
- Faites un clic droit sur la VM concerné puis sous Snapshots, faites Prendre un snapshot.
- Ensuite, pour restaurer le snapshot, faites clic droit sur la VM puis Restaurer.
Secure Shell
- Le service SSH peut être activer à l'installation de debian.
- Dans un premier temps installez le package SSH sur la VM.
apt-get install openssh-server
- 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.
nano /etc/ssh/sshd_config
- 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.
- Pour appliquer les modifications, il faudra simplement redémarrer le service.
/etc/init.d/ssh reload
- Vous pouvez vérifier si le port à bien été modifié.
systemctl status ssh
- Maintenant que tout est prêt, vous pouvez lancer votre logiciel d'émulateur de terminal. Dans mon cas, j'utilise PuTTY.
- 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.
- Dans un premier temps, nous allons installer le package tcpdump.
apt-get install tcpdump
- 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.
tcpdump -w capture-wiki.pcap
- 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.
ls
- 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.
Une fois connecté, vous allez pouvoir récupérer le fichier .pcap et l'ouvrir sur Wireshark.
Postfix
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
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é.
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.
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.
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).
telnet 172.16.0.12 25
- 5.1 Vous pouvez modifier ce message depuis le fichier de configuration main.cf.
6. Maintenant, nous allons retourner dans le fichier master.cf de Postfix pour activer le port 587.
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.
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.
systemctl restart postfix
8. Pour corriger les bugs et autres, nous pouvons nous baser sur les logs.
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.
install sasl2-bin libsasl2-modules -y
2. Ensuite, nous allons éditer le fichier saslauthd afin d'activer le protocole.
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.
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.
- Dans un premier temps, rendez-vous dans le main.cf de Postfix.
virtual_transport=dovecot dovecot_destination_recipient_limit=1
- Ensuite, modifier le fichier master.cf de Postfix.
dovecot unix - n n - - pipe flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/dovecot-lda -f ${sender} -d ${recipient}
P-Admin
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.
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.
wget -P /opt https://github.com/postfixadmin/postfixadmin/releases/tag/postfixadmin-3.3.11
3. Une fois télécharger, décompresser le dossier.
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.
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.
cp /etc/nginx/sites-available/default /etc/nginx/sites-available/padmin.support-vtx.ch
6. Ensuite, nous allons le modifier.
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.
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.
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.
systemctl restart nginx
10. Pour pouvoir faire du débogage sur P-Admin, il faudra utiliser les logs que Nginx porpose.
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.
- 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.
$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.
13. Ensuite, il faudra rentrer les informations de votre utilisateur administrateur.
14. Connectez-vous et vous aurez enfin accès au panel de P-admin.
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.
16. Pour terminer, vous allez pouvoir créer votre première adresse mail depuis Liste des virtuels puis Ajouter un compte courriel.
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.
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é.
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.
rm -f /var/lib/mysql/ib_logfile*
4. Maintenant, nous pouvons nous connecter à la base de donnée.
mysql -u root -p
5. Créer maintenant la base de donnée du serveur d'email.
CREATE DATABASE mailserver; SHOW DATABASES;
6. Ensuite, crée l'utilisateur et donnez lui les privilèges sur la base de donnée Postfix.
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.
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.
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.
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.
postmap -q support-vtx.ch mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
2. Ensuite, on va connecter les noms d'utilisateurs.
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.
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.
postconf -e virtual_mailbox_maps=mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
3. Pour terminer, on va connecter les alias.
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.
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.
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.
chgrp postfix /etc/postfix/mysql-*.cf chmod u=rw,g=r,o= /etc/postfix/mysql-*.cf
Dovecot
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-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.
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.
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.
/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.
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.
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.
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).
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.
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.
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.
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.
systemctl restart dovecot
12. Pour du débogage, le fichier de log est le même que pour Postfix.
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.
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 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.
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
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.
cp /etc/nginx/sites-available/default /etc/nginx/sites-available/webmail.support-vtx.ch
4. Ensuite, nous allons le modifier.
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.
cp /etc/nginx/sites-available/webmail.support-vtx.ch /etc/nginx/sites-enabled/webmail.support-vtx.ch
6. Maintenant, donner les droits à Nginx.
chown www-data:www-data temp logs -R
7. Une fois la configuration faites, il faut redémarrer le service.
systemctl restart nginx
8. Pour pouvoir faire du débogage sur Roundcube, il faudra utiliser les logs que Nginx propose.
9. Maintenant, nous pouvons accéder à la page web d'installation de roundcube depuis webmail.support-vtx.ch:1346/installer.
- 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 :
- Database setup :
- SMTP Settings :
11. Il faudra ensuite connecter Roundcube sur sa base de donnée.
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 :
- IMAP :
11. Pour terminer avec l'installation, nous allons supprimer le dossier d'installation.
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.
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.
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.
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.
mysql roundcube < /var/www/html/roundcubemail/SQL/mysql.initial.sql