Le problème est le suivant, nous souhaitons héberger de nombreux domaines sur une machine que nous nommerons ici serveur.domaine.com, cette machine doit servir de serveur SMTP pour ces domaines, ainsi que de serveur IMAP, le tout administré à l’aide de PostfixAdmin. Cependant postfix doit être un minimum sécurisé : mots de passe md5 dans la bdd et chroot.
Mise en place de MySQL
Nous allons d’abord installer les bases MySQL qui nous permettrons de stocker les comptes utilisateurs et les domaines ! Pour celà il suffit de suivre l’installation de postfixadmin, téléchargeons donc les sources de postfixadmin.
1 2 3 4
| cd /var/www/
tar -zxvf postfixadmin-2.1.0.tgz
cd postfixadmin-2.1.0
mysql -u root -p < DATABASE_MYSQL.TXT |
Voilà à présent vous avez installé la base de donnée MySQL postfix, à savoir que l’utilisateur postfix aura comme mot de passe postfix, n’oubliez pas de le changer par la suite ! Vous pouvez également installer cette base sur un serveur MySQL distant ! Cependant pour des questions de sécurité, il sera judicieux d’utiliser un socket unix en local.
Installation de postfixadmin
On édite alors le fichier de configuration de postfixadmin :
1
| mv config.inc.php.sample config.inc.php |
editor config.inc.phpOn modifie alors les variables pour le serveur local. Sans oublier :
1 2 3
| $CONF['encrypt'] = 'md5crypt';
$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'YES'; |
Se référer ensuite au fichier INSTALL.TXT !
On modifiera aussi le fichier /var/www/postfixadmin/admin/.htaccess
1 2 3 4
| AuthUserFile /var/www/postfixadmin/admin/.htpasswd
AuthGroupFile /dev/null
AuthName "Postfix Admin"
AuthType Basic |
require valid-userPuis on redéfinit le mot de passe à l’aide de la commande
1
| # htpasswd -b /var/www/postfixadmin/admin/.htpasswd admin motdepasse |
Vérifiez que le fichier .htaccess est interprété ! Si ce n’est pas le cas, vérifiez la variable AllowOverride dans votre configuration apache !
Installation et configuration de postfix
On install postfix et son extension postfix-mysql à l’aide d’un
1
| #apt-get install postfix postfix-mysql |
On indiquera lors de la configuration automatique, une configuration “Site Internet”.
On crée d’abord le dossier où seront stocké les maildirs :
1 2 3
| # mkdir /var/mail/virtual
# chown -R 1001:1001 /var/mail/virtual
# chmod -R 771 /var/mail/virtual |
On modifie ensuite la configuration de postfix en ajoutant ceci au /etc/postfix/main.cf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| virtual_alias_maps = mysql:/etc/postfix/mysql/mysql_virtual_alias_maps.cf
virtual_gid_maps = static:1001
virtual_mailbox_base = /var/mail/virtual
virtual_mailbox_domains = mysql:/etc/postfix/mysql/mysql_virtual_domains_maps.cf
virtual_mailbox_limit = 51200000
virtual_mailbox_maps = mysql:/etc/postfix/mysql/mysql_virtual_mailbox_maps.cf
virtual_minimum_uid = 1001
virtual_transport = virtual
virtual_uid_maps = static:1001
# Additional for quota support
virtual_create_maildirsize = yes
virtual_mailbox_extended = yes
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql/mysql_virtual_mailbox_limit_maps.cf
virtual_mailbox_limit_override = yes
virtual_maildir_limit_message = Sorry, the user's maildir has overdrawn his diskspace quota, please try again later.
virtual_overquota_bounce = yes |
On crée ensuite le dossier dans lequel sera stocké les maps :
1 2
| # mkdir /etc/postfix/mysql/
# cd /etc/postfix/mysql/ |
et on crée ensuite les fichiers :
1
| mysql_virtual_alias_maps.cf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| user = postfix
password = postfix
hosts = 127.0.0.1
dbname = postfix
table = alias
select_field = goto
where_field = address
mysql_virtual_domains_maps.cf
user = postfix
password = postfix
hosts = 127.0.0.1
dbname = postfix
table = domain
select_field = domain
where_field = domain
#additional_conditions = and backupmx = '0' and active = '1'
mysql_virtual_mailbox_maps.cf
user = postfix
password = postfix
hosts = 127.0.0.1
dbname = postfix
table = mailbox
select_field = maildir
where_field = username
#additional_conditions = and active = '1'
mysql_virtual_mailbox_limit_maps.cf |
1 2 3 4 5 6 7 8
| user = postfix
password = postfix
hosts = 127.0.0.1
dbname = postfix
table = mailbox
select_field = quota
where_field = username
#additional_conditions = and active = '1' |
Les valeurs de l’hosts ont été mises à 127.0.0.1 et non pas à localhost pour contrer un problème dû au chroot !
Par ailleurs, il faut modifier les droits d’accés de l’utilisateur postfix pour ne pas avoir d’erreur !
1 2
| mysql -u root -p
GRANT SELECT , INSERT , UPDATE , DELETE ON `postfix` . * TO 'postfix'@'%'; |
1 2
| # chmod -R 755 mysql/
# chown -R root:root mysql/ |
1
| # /etc/init.d/postfix restart |
On devrait à partir de là obtenir un postfix qui fonctionne !
Pour tester : On crée un utilisateur avec postfixadmin, puis on crée une boite mail. Si tout se passe bien, la boite est crée dans /var/mail/virtual … sinon on observe les logs dans /var/log/mail.log
A partir de là nous avons un postfix configuré pour recevoir les mails fonctionnel
Installation de Courier-IMAP Courier-POP !
1
| apt-get install courier-authmysql courier-imap courier-pop courier-authdaemon |
Nous allons maintenant configurer courier pour l’authentification avec la base MySQL de postfix !
On modifie pour celà le fichier /etc/courier/authdaemonrc
1
| authmodulelist="authmysql" |
Puis on édite la configuration de l’identification MySQL :
1 2 3 4
| vim /etc/courier/authmysqlrc
MYSQL_SERVER 127.0.0.1
MYSQL_USERNAME postfix
MYSQL_PASSWORD postfix |
1 2 3 4 5 6 7 8 9
| MYSQL_OPT 0
MYSQL_DATABASE postfix
MYSQL_USER_TABLE mailbox
MYSQL_CRYPT_PWFIELD password
MYSQL_UID_FIELD '1001'
MYSQL_GID_FIELD '1001'
MYSQL_LOGIN_FIELD username |
1 2 3
| MYSQL_HOME_FIELD '/var/mail/virtual/'
MYSQL_NAME_FIEL name
MYSQL_MAILDIR_FIELD maildir |
Attention: N’utilisez que des tabulations, les espaces provoquent des erreurs d’identification ! cf /var/log/mail.log
on lance ensuite les services désirés :
1 2 3
| /etc/init.d/courier-authdaemon restart
/etc/init.d/courier-imap restart
/etc/init.d/courier-pop restart |
On teste ensuite la récupération des mails, en principe, ça marche.
Authentification SASL SMTP
Il existe plusieurs méthodes d’identification SASL avec postfix, mais notre problème est que nous voulons utiliser les mots de passe cryptés dans la base de donnée, et que nous ne voulons pas patché les packages par soucis de maintenance.
La meilleure solution que j’ai trouvé, est d’utiliser le daemon d’authentification de courier !
Pour celà on procéde d’abord à l’installation de SASL2
1
| #apt-get install postfix-tls sasl2-bin libsasl2 libsasl2-modules |
On doit ensuite permettre à postfix de voir le socket du daemon authdaemond, celui-ci étant dans un chroot, on va lier le socket dans le chroot
1 2
| # mkdir -p /var/spool/postfix/var/run/courier/authdaemon/
# ln /var/run/courier/authdaemon/socket /var/spool/postfix/var/run/courier/authdaemon/socket |
On crée ici un hard link du socket de authdaemon dans le chroot, cependant à chaque relance authdaemon il faudra refaire ce hard link, je vous recommande de modifier vos scripts d’init pour celà !
Maintenant on configure postfix pour l’authentification SASL, on crée d’abord un fichier /etc/postfix/sasl/smtpd.conf :
1 2 3 4 5
| pwcheck_method: authdaemond
log_level: 3
mech_list: PLAIN LOGIN
authdaemond_path:/var/run/courier/authdaemon/socket
# ( en réalité /var/spool/postfix/var/run/courier/authdaemon/socket ) |
et on ajoute à /etc/postfix/main.cf :
1 2 3 4
| smtpd_recipient_restrictions = permit_sasl_authenticated, reject_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous |
1
| /etc/init.d/postfix restart |
Voilà, nous avons donc effectué une configuration rudimentaire, sachez que cette configuration n’est PAS SÉCURISÉE ! En effet, les mots de passes transitent en clair, et les restrictions laissent à désirer, dans un prochain article, je vous expliquerais comment améliorer tout ça !
N’oubliez pas de changer tous les mots de passe par défaut !