Ceci est une ancienne révision du document !
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.
Vous avez besoin d'avoir une base de donnée Mysql/MariaDB.
Allez dans le répertoire /var/www et lancez la commande
sudo -u www-data wget https://github.com/postfixadmin/postfixadmin/archive/postfixadmin-3.3.11.tar.gz
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 :
sudo -u www-data mv postfixadmin-postfixadmin-3.3.11/ postfixadmin
.
Créez le répertoire /var/www/postfixadmin/templates_c avec l'utilisateur www-data :
sudo -u www-data mkdir /var/www/postfixadmin/templates_c
Créez la base de donnée pour postfix (remplacez le mot de passe):
sudo mysql -u root CREATE DATABASE postfixadmin; GRANT ALL privileges ON postfixadmin.* TO 'postfixadmin'@'localhost' IDENTIFIED BY 'motdepasse'; FLUSH privileges; exit;
Créez le fichier /var/www/postfixadmin/config.local.php et ajoutez les lignes suivantes (remplacez le mot de passe) :
<?php $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 }
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) :
<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 ServerAdmin webmaster@domaine.fr CustomLog ${APACHE_LOG_DIR}/postfixadmin.access.log combined ErrorLog ${APACHE_LOG_DIR}/postfixadmin.error.log LogLevel warn <IfModule mod_ssl.c> 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>
Activez le fichier de configuration :
sudo a2ensite postfix.domaine.fr
Installez les modules PHP :
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
Redémarrer Apache2 :
sudo systemctl restart apache2.service
Ajouter l'utilisateur www-data au groupe dovecot :
sudo adduser www-data dovecot
Afin que l'utilisateur www-data est accès aux stats de Dovecot lancez le commandes suivantes :
sudo chown root:dovecot /var/run/dovecot/stats-* sudo chmod 660 /var/run/dovecot/stats-*
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/ Créez le fichier /etc/postfix/sql/mysql_virtual_domains_maps.cf et ajoutez les lignes suivantes :
user = postfixadmin password = motdepassesqlpostfixadmin hosts = localhost dbname = postfixadmin query = SELECT domain FROM domain WHERE domain='%s' AND active = '1' #query = SELECT domain FROM domain WHERE domain='%s' #optional query to use when relaying for backup MX #query = SELECT domain FROM domain WHERE domain='%s' AND backupmx = '0' AND active = '1' #expansion_limit = 100
Créez le fichier /etc/postfix/sql/mysql_virtual_mailbox_maps.cf et ajoutez les lignes suivantes :
user = postfixadmin password = motdepassesqlpostfixadmin hosts = localhost dbname = postfixadmin query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1' #expansion_limit = 100
Créez le fichier /etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf et ajoutez les lignes suivantes :
user = postfixadmin password = motdepassesqlpostfixadmin hosts = localhost dbname = postfixadmin query = SELECT maildir FROM mailbox,alias_domain WHERE alias_domain.alias_domain = '%d' and mailbox.username = CONCAT('%u', '@', alias_domain.target_domain) AND mailbox.active = 1 AND alias_domain.active='1'
Créez le fichier /etc/postfix/sql/mysql_virtual_alias_maps.cf et ajoutez les lignes suivantes :
user = postfixadmin password = motdepassesqlpostfixadmin hosts = localhost dbname = postfixadmin query = SELECT goto FROM alias WHERE address='%s' AND active = '1' #expansion_limit = 100
Créez le fichier /etc/postfix/sql/mysql_virtual_alias_domain_maps.cf et ajoutez les lignes suivantes :
user = postfixadmin password = motdepassesqlpostfixadmin hosts = localhost dbname = postfixadmin query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('%u', '@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'
Créez le fichier /etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf et ajoutez les lignes suivantes :
# handles catch-all settings of target-domain user = postfixadmin password = motdepassesqlpostfixadmin hosts = localhost dbname = postfixadmin query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'
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 :
sudo chmod 0640 -R /etc/postfix/sql/ sudo chown root:postfix -R /etc/postfix/sql/