Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente |
serveur_hebergement:serveur_mail:partie_3_postfixadmin [2022/08/31 19:49] – fate | serveur_hebergement:serveur_mail:partie_3_postfixadmin [2023/08/08 14:00] (Version actuelle) – modification externe 127.0.0.1 |
---|
====== Partie 3 : Postfixadmin ====== | ====== Partie 3 : Postfixadmin ====== |
| |
Postfixadmin va nous servir à créer des adresses email virtuelles, comprenez par là des adresses mails non liées à un utilisateur local du serveur comme root ou fate. | Postfixadmin est une interface web qui permet de gérer les comptes, les domaines et les alias sur un serveur de messagerie électronique Postfix. |
| |
Vous avez besoin d'avoir une base de donnée Mysql/MariaDB. | |
| |
Allez dans le répertoire /var/www et lancez la commande <code bash>sudo -u www-data wget https://github.com/postfixadmin/postfixadmin/archive/postfixadmin-3.3.11.tar.gz | ===== Installation ===== |
</code> pour télécharger Postfixadmin puis sudo -u www-data tar xzfv postfixadmin-3.3.11.tar.gz pour l'extraire. Enfin, renommez le répertoire postfixadmin-postfixadmin-3.3.11 en postfixadmin : <code bash>sudo -u www-data mv postfixadmin-postfixadmin-3.3.11/ postfixadmin</code>. | |
| |
Créez le répertoire /var/www/postfixadmin/templates_c avec l'utilisateur www-data : <code bash>sudo -u www-data mkdir /var/www/postfixadmin/templates_c | Allez dans le répertoire /var/www et lancez la commande suivante pour télécharger Postfixadmin : |
</code> | <code bash>sudo -u www-data wget https://github.com/postfixadmin/postfixadmin/archive/postfixadmin-3.3.11.tar.gz</code> |
| |
Créez la base de donnée pour postfix (remplacez le mot de passe): | Extrayez l'archive : |
<code sql>sudo mysql -u root | <code bash>sudo -u www-data tar xzfv postfixadmin-3.3.11.tar.gz</code> |
| |
create database postfixadmin; | Puis renommez le répertoire postfixadmin-postfixadmin-3.3.11 en postfixadmin : |
| <code bash>sudo -u www-data mv postfixadmin-postfixadmin-3.3.11/ postfixadmin</code> |
| |
grant all privileges on postfixadmin.* to 'postfixadmin'@'localhost' identified by 'motdepasse'; | Créez le répertoire /var/www/postfixadmin/templates_c avec l'utilisateur www-data : |
| <code bash>sudo -u www-data mkdir /var/www/postfixadmin/templates_c</code> |
| |
flush privileges; | ===== Base de données ===== |
| |
exit;</code> | On a besoin de créer manuellement la base de données pour Postfixadmin. |
| |
Créez le fichier /var/www/postfixadmin/config.local.php et ajoutez les lignes suivantes (remplacez le mot de passe) : | Lancez mysql : |
<code><?php | <code bash>sudo mysql</code> |
$CONF['configured'] = true; | |
$CONF['database_type'] = 'mysqli'; | |
$CONF['database_host'] = 'localhost'; | |
$CONF['database_port'] = '3306'; | |
$CONF['database_user'] = 'postfixadmin'; | |
$CONF['database_password'] = 'motdepasse'; | |
$CONF['database_name'] = 'postfixadmin'; | |
$CONF['encrypt'] = 'dovecot:ARGON2I'; | |
$CONF['dovecotpw'] = "/usr/bin/doveadm pw -r 5"; | |
if(@file_exists('/usr/bin/doveadm')) { // @ to silence openbase_dir stuff; see https://github.com/postfixadmin/postfixadmin/issues/171 | |
$CONF['dovecotpw'] = "/usr/bin/doveadm pw -r 5"; # debian | |
} | |
</code> | |
| |
Créez le fichier /etc/apache2/sites-available/postfixadmin.domaine.fr.conf et ajoutez les lignes suivantes afin de pouvoir accéder à l'interface web de Postfixadmin (remplacez domaine.fr par votre domaine) : | Créez la base de données : |
| <code sql>create database postfixadmin;</code> |
| |
<code apache> | Créez l'utilisateur postfixadmin et donnez-lui tous les droits sur la base (changez "motdepasse" par le mot de passe de votre choix) : |
<VirtualHost *:80> | <code sql>grant all privileges on postfixadmin.* to 'postfixadmin'@'localhost' identified by 'motdepasse';</code> |
| |
DocumentRoot /var/www/postfixadmin/public | Rechargez les droits : |
| <code sql>flush privileges;</code> |
| |
ServerName postfixadmin.domaine.fr | Sortez : |
| <code bash>exit;</code> |
Redirect / https://postfix.domaine.fr/ | |
| |
</VirtualHost> | ===== Configuration Dovecot ===== |
| |
| Ouvrez le fichier dovecot-sql.conf.ext pour configurer l'accès à la base de domaine pour Dovecot (qui gère l'authentification dans notre configuration) : |
| <code bash>sudo nano /etc/dovecot/dovecot-sql.conf.ext</code> |
| Ajoutez ces lignes à la fin (remplacez "motdepasse" par le mot de passe que vous avez choisi précédemment) : |
| <code> |
| driver = mysql |
| |
<VirtualHost *:443> | connect = host=localhost dbname=postfixadmin user=postfixadmin password=motdepasse |
| |
DocumentRoot /var/www/postfixadmin/public | default_pass_scheme = ARGON2I |
| |
ServerName postfixadmin.domaine.fr | password_query = SELECT username AS user,password FROM mailbox WHERE username = '%u' AND active='1' |
ServerAdmin webmaster@domaine.fr | |
| |
CustomLog ${APACHE_LOG_DIR}/postfixadmin.access.log combined | user_query = SELECT maildir, 2000 AS uid, 2000 AS gid FROM mailbox WHERE username = '%u' AND active='1' |
ErrorLog ${APACHE_LOG_DIR}/postfixadmin.error.log | |
LogLevel warn | |
| |
<IfModule mod_ssl.c> | iterate_query = SELECT username AS user FROM mailbox |
SSLEngine on | |
SSLCertificateFile /etc/letsencrypt/live/domaine.fr/fullchain.pem | |
SSLCertificateKeyFile /etc/letsencrypt/live/domaine.fr/privkey.pem | |
| |
Header set Content-Security-Policy "script-src 'self' 'unsafe-inline' 'unsafe-eval' *.wp.com; style-src 'self' 'unsafe-inline'; connect-src 'self'; media-src 'self'; child-src 'self'; object src 'self'; form-action 'self'; img-src 'self' *.gravatar.com *.wp.com data:" | |
| |
# Modern configuration, tweak to your needs | |
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 | |
SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256 | |
SSLHonorCipherOrder on | |
SSLCompression off | |
SSLSessionTickets off | |
</IfModule> | |
| |
<Directory /var/www/postfixadmin/> | |
Options FollowSymLinks MultiViews | |
AllowOverride All | |
Order allow,deny | |
allow from all | |
</Directory> | |
</VirtualHost> | |
| |
<IfModule mod_ssl.c> | |
SSLStaplingCache shmcb:/var/run/ocsp(128000) | |
</IfModule> | |
</code> | </code> |
| |
Activez le fichier de configuration : <code bash>sudo a2ensite postfix.domaine.fr</code> | Passons à la configuration de Postfixadmin pour accéder à la base. |
| |
Installez les modules PHP : <code bash>sudo aptitude install php7.4-fpm php7.4-imap php7.4-mbstring php7.4-mysql php7.4-json php7.4-curl php7.4-zip php7.4-xml php7.4-bz2 php7.4-intl php7.4-gmp</code> | ===== Configuration Postfixadmin ===== |
| |
Redémarrer Apache2 : <code bash>sudo systemctl restart apache2.service</code> | Créez le fichier config.local.php dans le répertoire de Postfixadmin : |
| <code bash>sudo -u www-data nano /var/www/postfixadmin/config.local.php</code> |
Ajouter l'utilisateur www-data au groupe dovecot : <code bash>sudo adduser www-data dovecot</code> | Ajoutez les lignes suivantes (remplacez le mot de passe) : |
| <code><?php |
Afin que l'utilisateur www-data est accès aux stats de Dovecot lancez le commandes suivantes : | $CONF['configured'] = true; |
<code> | $CONF['database_type'] = 'mysqli'; |
sudo chown root:dovecot /var/run/dovecot/stats-* | $CONF['database_host'] = 'localhost'; |
sudo chmod 660 /var/run/dovecot/stats-* | $CONF['database_port'] = '3306'; |
| $CONF['database_user'] = 'postfixadmin'; |
| $CONF['database_password'] = 'motdepasse'; |
| $CONF['database_name'] = 'postfixadmin'; |
| $CONF['encrypt'] = 'dovecot:ARGON2I'; |
| $CONF['dovecotpw'] = "/usr/bin/doveadm pw -r 5"; |
| if(@file_exists('/usr/bin/doveadm')) { // @ to silence openbase_dir stuff; see https://github.com/postfixadmin/postfixadmin/issues/171 |
| $CONF['dovecotpw'] = "/usr/bin/doveadm pw -r 5"; # debian |
| } |
</code> | </code> |
| |
Allez à l'adresse https://postfixadmin.mondomaine.fr/setup.php afin de lancer l'installation de Postfixadmin | |
| |
Générer le setup_password et rajoutez la ligne $CONF['setup_password'] au fichier de config de Postfixadmin comme indiqué puis rafraîchissez la page. | |
Rentrez le setup_password que vous avez utilisez précédemment puis créez l'utilisateur admin. Dans le champ Administrateur il faut entrer une adresse mail et non un nom d'utilisateur. | |
| |
Maintenant, créez le dossier /etc/postfix/sql/ | Maintenant, créez le dossier /etc/postfix/sql/ |
</code> | </code> |
| |
| Ensuite, on configure Postfix. |
| |
Créez le fichier /etc/postfix/sql/mysql_virtual_mailbox_maps.cf et ajoutez les lignes suivantes : | ===== Configuration Postfix ===== |
| |
| On va créer l'utilisateur vmail avec l'ID 2000 et le groupe ID 2000 : |
| <code bash>sudo adduser vmail --system --group --uid 2000 --disabled-login --no-create-home</code> |
| |
| Créez le répertoire /var/vmail : |
| <code bash>sudo mkdir /var/vmail/</code> |
| |
| Changer le propriétaire du répertoire : |
| <code bash>sudo chown vmail:vmail /var/vmail/ -R</code> |
| |
| Ouvrez le fichier main.cf : |
| <code bash>sudo nano /etc/postfix/main.cf</code> |
| |
| Ajoutez les lignes suivantes pour la gestion des adresses et domaines avec Postfixadmin via la base de données précédemment créé : |
| <code> |
| # Noms de domaine des boites de courriel |
| virtual_mailbox_domains = proxy:mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf |
| # Adresses des courriels (adresses réelles et alias) |
| virtual_mailbox_maps = proxy:mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf, proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf |
| # Redirection des courriels à destination d'une adresse vers une autre adresse |
| virtual_alias_maps = proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf, proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf, proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf |
| |
| # UID et GID de l'utilisateur vmail |
| virtual_minimum_uid = 2000 |
| virtual_uid_maps = static:2000 |
| virtual_gid_maps = static:2000 |
| </code> |
| |
| On va maintenant créer tous les fichiers .cf que l'on a ajouté dans le fichier main.cf. Remplacez le "motdepasse" par le mot de passe que vous avez choisi lors de la création de la base de données. |
| |
| Créez le fichier mysql_virtual_mailbox_maps.cf : |
| <code bash>sudo nano /etc/postfix/sql/mysql_virtual_mailbox_maps.cf</code> |
| Ajoutez les lignes suivantes : |
<code> | <code> |
user = postfixadmin | user = postfixadmin |
password = motdepassesqlpostfixadmin | password = motdepasses |
hosts = localhost | hosts = localhost |
dbname = postfixadmin | dbname = postfixadmin |
</code> | </code> |
| |
| Créez le fichier mysql_virtual_alias_domain_mailbox_maps.cf : |
Créez le fichier /etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf et ajoutez les lignes suivantes : | <code bash>sudo nano /etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf</code> |
| Ajoutez les lignes suivantes : |
<code> | <code> |
user = postfixadmin | user = postfixadmin |
password = motdepassesqlpostfixadmin | password = motdepasse |
hosts = localhost | hosts = localhost |
dbname = postfixadmin | dbname = postfixadmin |
</code> | </code> |
| |
| Créez le fichier mysql_virtual_alias_maps.cf |
Créez le fichier /etc/postfix/sql/mysql_virtual_alias_maps.cf et ajoutez les lignes suivantes : | <code bash>sudo nano /etc/postfix/sql/mysql_virtual_alias_maps.cf</code> |
| Ajoutez les lignes suivantes : |
<code> | <code> |
user = postfixadmin | user = postfixadmin |
password = motdepassesqlpostfixadmin | password = motdepasse |
hosts = localhost | hosts = localhost |
dbname = postfixadmin | dbname = postfixadmin |
</code> | </code> |
| |
Créez le fichier /etc/postfix/sql/mysql_virtual_alias_domain_maps.cf et ajoutez les lignes suivantes : | Créez le fichier mysql_virtual_alias_domain_maps.cf : |
| <code bash>sudo nano /etc/postfix/sql/mysql_virtual_alias_domain_maps.cf</code> |
| Ajoutez les lignes suivantes : |
<code> | <code> |
user = postfixadmin | user = postfixadmin |
password = motdepassesqlpostfixadmin | password = motdepasse |
hosts = localhost | hosts = localhost |
dbname = postfixadmin | dbname = postfixadmin |
</code> | </code> |
| |
Créez le fichier /etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf et ajoutez les lignes suivantes : | Créez le fichier /etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf : |
| <code bash>sudo nano /etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf</code> |
| Ajoutez les lignes suivantes : |
<code> | <code> |
# handles catch-all settings of target-domain | # handles catch-all settings of target-domain |
user = postfixadmin | user = postfixadmin |
password = motdepassesqlpostfixadmin | password = motdepasse |
hosts = localhost | hosts = localhost |
dbname = postfixadmin | dbname = postfixadmin |
</code> | </code> |
| |
On va protéger ces fichier contenant le mot de passe d'accès à la base afin que seul l'utilisateur root et postfix y ai accès : | On va protéger ces fichiers contenant le mot de passe d'accès à la base afin que seul l'utilisateur root et postfix y ait accès : |
<code bash>sudo chmod 0640 -R /etc/postfix/sql/ | <code bash> |
sudo chown root:postfix -R /etc/postfix/sql/</code> | sudo chmod 0640 -R /etc/postfix/sql/ |
| sudo chown root:postfix -R /etc/postfix/sql/ |
| sudo chmod 755 /etc/postfix/sql/ |
| </code> |
| |
On va créer l'utilisateur vmail avec l'ID 2000 et le groupe ID 2000 : | ===== Configuration Apache2 ===== |
<code bash>sudo adduser vmail --system --group --uid 2000 --disabled-login --no-create-home</code> | |
| Postfixadmin étant une interface web, il va nous falloir configurer Apache2 pour pouvoir y accéder. |
| |
| Créez le fichier de configuration postfixadmin.domaine.fr.conf (remplacez domaine.fr par votre nom de domaine) : |
| <code bash>sudo nano /etc/apache2/sites-available/postfixadmin.domaine.fr.conf</code> |
| Ajoutez les lignes suivantes (remplacez domaine.fr par votre domaine) : |
| <code apache> |
| <VirtualHost *:80> |
| |
| DocumentRoot /var/www/postfixadmin/public |
| |
| ServerName postfixadmin.domaine.fr |
| |
| Redirect / https://postfix.domaine.fr/ |
| |
| </VirtualHost> |
| |
| <VirtualHost *:443> |
| |
| DocumentRoot /var/www/postfixadmin/public |
| |
| ServerName postfixadmin.domaine.fr |
| |
| CustomLog ${APACHE_LOG_DIR}/postfixadmin.access.log combined |
| ErrorLog ${APACHE_LOG_DIR}/postfixadmin.error.log |
| LogLevel warn |
| |
| SSLEngine on |
| SSLCertificateFile /etc/letsencrypt/live/domaine.fr/fullchain.pem |
| SSLCertificateKeyFile /etc/letsencrypt/live/domaine.fr/privkey.pem |
| |
| Header set Content-Security-Policy "script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; connect-src 'self'; media-src 'self'; child-src 'self'; object src 'self'; form-action 'self'; img-src 'self' data:" |
| |
| <Directory /var/www/postfixadmin/> |
| Options FollowSymLinks MultiViews |
| AllowOverride All |
| Order allow,deny |
| allow from all |
| </Directory> |
| </VirtualHost> |
| </code> |
| |
| Activez le fichier de configuration : |
| <code bash>sudo a2ensite postfix.domaine.fr</code> |
| |
| Installez les modules PHP nécessaires : |
| <code bash>sudo aptitude install php7.4-fpm php7.4-imap php7.4-mbstring php7.4-mysql php7.4-json php7.4-curl php7.4-zip php7.4-xml php7.4-bz2 php7.4-intl php7.4-gmp</code> |
| |
| Redémarrer Apache2 : |
| <code bash>sudo systemctl restart apache2.service</code> |
| |
| Ajouter l'utilisateur www-data au groupe dovecot pour qu'il ait accès aux fichier Dovecot : |
| <code bash>sudo adduser www-data dovecot</code> |
| |
| Afin que l'utilisateur www-data est accès aux stats de Dovecot lancez le commandes suivantes : |
| <code> |
| sudo chown root:dovecot /var/run/dovecot/stats-* |
| sudo chmod 660 /var/run/dovecot/stats-* |
| </code> |
| |
| Allez à l'adresse https://postfixadmin.domaine.fr/setup.php afin de lancer l'installation de Postfixadmin |
| |
| Générez le setup_password et rajoutez la ligne $CONF['setup_password'] au fichier de config de Postfixadmin comme indiqué puis rafraîchissez la page. |
| Rentrez le setup_password que vous avez utilisé précédemment puis créez l'utilisateur admin. Dans le champ Administrateur il faut entrer une adresse mail et non un nom d'utilisateur. |
| |
| Connectez-vous sur postfixadmin.domaine.fr pour pouvoir configurer votre serveur de messagerie électronique. |
| |
| Dovecot et Postfix sont installés, Postfixadmin configuré. Il est temps de faire connaissance avec [[serveur_hebergement:serveur_mail:partie_4_spf_dmarc_et_dkim|SPF, DMARC et DKIM]] |
| |
Créez le répertoire /var/vmail : <code>sudo mkdir /var/vmail/</code> | Source : https://www.linuxbabe.com/mail-server/build-email-server-from-scratch-debian-postfix-smtp |
Changer le propriétaire du répertoire : <code bash>sudo chown vmail:vmail /var/vmail/ -R</code> | |