Serveur Debian - Serveur email (MTA + MDA)
Par Seza le mardi 7 août 2007, 10:20 - Serveur Debian - Lien permanent
CHAPITRE 7 : POSTFIX & COURRIER-IMAP
Postfix est certainement un des meilleurs serveurs d'e-mail existant, c'est pourquoi mon choix se porte sur celui-ci. Le sujet des e-mails est un sujet compliqué ou les documentations sont nombreuses et confusent assez souvent, je n'en ferai aujourd'hui toujours pas ma spécialité. Je vais donc ne pas m'étendre sur ce sujet.
Nous voulons ici créer un serveur MX principal qui recevra nos mails et les enverra au reste du monde. Nous souhaitons pouvoir envoyé des e-mails depuis ce serveur depuis n'importe où. Dans cette configuration pour ne pas finir en open relay, il n'y a que l'authentification SMTP qui puisse nous protégé de ceci. J'ai testé auparavant le pop-before-smtp qui permet d'en faire autant mais ce n'est qu'un bricolage face à l'authentification SMTP. C'est pourquoi ici on fera une véritable authentification bien sur avec un peu de SSL.
Commençons par installer Postfix et ce qui sera nécessaire à l'authentification SMTP.
ALBAN@bebeserv:~$ sudo -i Password: bebeserv:~# apt-get update [...] bebeserv:~# apt-get install postfix libsasl2-modules sasl2-bin [...]
L'installateur vous pose deux questions pour la configuration de Postfix. Répondez à la première "Site internet" et laisser la seconde qui devrait ressembler à « bebeserv.bebenet.local »
tel quel.
Maintenant que c'est fait, stoppez Postfix :
bebeserv:~# /etc/init.d/postfix stop [...]
Maintenant configurons notre serveur d'e-mail :
bebeserv:~# cd /etc/postfix bebeserv:/etc/postfix# nano main.cf
Afin de garantir la sécurité du MTA faisons le passer pour un serveur Sendmail (un concurrent plus ancien) :
mail_name = Sendmail mail_version = 8.12.10 smtpd_banner = $myhostname ESMTP $mail_name ($mail_version)
Maintenant quelques fonctionnalités et configuration :
append_dot_mydomain = yes mynetwork_style = host proxy_interfaces = 10.0.0.1 relay_domains= masquerade_domains = bebenet.local local_transport = virtual:$myhostname
Les utilisateurs virtuels
virtual_alias_domains = hash:/etc/postfix/conf.d/virtual_alias_domains virtual_alias_maps = hash:/etc/postfix/conf.d/virtual_alias virtual_mailbox_domains = hash:/etc/postfix/conf.d/virtual_mailbox_domains virtual_mailbox_base = /var/mail/virtual virtual_mailbox_maps = hash:/etc/postfix/conf.d/virtual_mailbox virtual_uid_maps = static:5000 virtual_gid_maps = static:5000
Encore un peu de sécurité et pour l'authentification SMTP
smtp_helo_timeout = 10s smtpd_recipients_limit = 16 smtpd_soft_error_limit = 3 smtpd_hard_error_limit = 12 smtpd_helo_required = yes smtpd_delay_reject = yes disable_vrfy_command = yes strict_rfc821_envelopes = yes broken_sasl_auth_clients = yes smtpd_sasl_auth_enable = yes smtpd_sasl_path = smtpd smtpd_sasl_exceptions_networks = $mynetworks smtpd_sasl_security_options = noanonymous smtpd_helo_restrictions = permit_mynetworks, reject_invalid_hostname, reject_unknown_hostname, reject_non_fqdn_hostname smtpd_client_restrictions = sleep 1, reject_unauth_pipelining smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_invalid_hostname, reject_unauth_destination, reject_unknown_sender_domain, reject_unknown_recipient_domain, reject_non_fqdn_recipient smtpd_sender_restrictions = reject_unknown_sender_domain, reject_non_fqdn_sender,
Pour le SSL :
smtpd_use_tls=yes smtpd_tls_cert_file = /etc/postfix/smtpd.cert smtpd_tls_key_file = /etc/postfix/smtpd.key
Enregistrez et quittez. Générons directement les nouveaux certificats SSL pour Postfix :
bebeserv:/etc/postfix# openssl req -new -outform PEM -out /etc/postfix/smtpd.cert -newkey rsa:2048 -nodes -keyout /etc/postfix/smtpd.key -keyform PEM -days 365 -x509 bebeserv:/etc/postfix# chmod 640 smtpd.key
Le fait d'utiliser Sasl (un serveur d'authentification) nous impose de lui montré comment nous souhaitons authentifier les utilisateurs :
Pour ceci nous créons comme précisé par notre configuration : « smtpd_sasl_path »
le fichier « /etc/postfix/sasl/smtpd.conf »
bebeserv:/etc/postfix# cd sasl bebeserv:/etc/postfix/sasl# nano smtpd.conf
Entrez ceci :
pwcheck_method: saslauthd mech_list: plain login
Enregistrer et quitter. Visiblement la commande suivante est utile pour remédier à une histoire de bug...
bebeserv:/etc/postfix/sasl# ln -s /etc/postfix/sasl/smtpd.conf /usr/lib/sasl2/smtpd.conf
Éditez le fichier de configuration de Sasl :
bebeserv:/etc/postfix/sasl# nano /etc/default/saslauthd
Modifier les lignes suivantes :
START=yes MECHANISMS="rimap" MECH_OPTIONS="localhost" OPTIONS="-r -c -m /var/spool/postfix/var/run/saslauthd"
Enregistrez et quitter. Maintenant ajoutons l'utilisateur Postfix au groupe Sasl et faisons en sorte que Sasl puisque créer ses fichiers dans la cage de postfix (ça aussi ça ne s'invente pas) :
bebeserv:/etc/postfix/sasl# dpkg-statoverride --add root sasl 710 /var/spool/postfix/var/run/saslauthd bebeserv:/etc/postfix/sasl# adduser postfix sasl [...]
Maintenant il va falloir alimenter les différentes bases de Postfix :
bebeserv:/etc/postfix/sasl# cd .. bebeserv:/etc/postfix# mkdir conf.d bebeserv:/etc/postfix# cd conf.d bebeserv:/etc/postfix/conf.d# nano virtual_mailbox_domains
Entrez :
bebeserv.local x
Enregistrez et quitter.
bebeserv:/etc/postfix/conf.d# nano virtual_mailbox
Entrez :
test@bebeserv.local bebeserv.local/test/
Enregistrez et quitter.
bebeserv:/etc/postfix/conf.d# nano virtual_alias
Entrez :
postmaster@bebeserv.local test@bebeserv.local hostmaster@bebeserv.local test@bebeserv.local webmaster@bebeserv.local test@bebeserv.local www@bebeserv.local test@bebeserv.local ALBAN@bebeserv.local test@bebeserv.local
Enregistrez et quitter.
bebeserv:/etc/postfix/conf.d# nano virtual_alias_domains
Entrez :
localhost bebeserv.local
Enregistrez et quitter.
Créons maintenant les bases compilées à l'aide de « postmap »
:
bebeserv:/etc/postfix/conf.d# postmap virtual_alias bebeserv:/etc/postfix/conf.d# postmap virtual_alias_domains bebeserv:/etc/postfix/conf.d# postmap virtual_mailbox bebeserv:/etc/postfix/conf.d# postmap virtual_mailbox_domains
Redirigeons « root »
qui est normalement alias de tous les autres démon vers notre utilisateur principal :
bebeserv:/etc/postfix/conf.d# nano /etc/aliases
Entrez à la fin du fichier :
root: ALBAN
Enregistrez et quittez. Remettons, de la même manière que les autres tables, celle-ci à jour :
bebeserv:/etc/postfix/conf.d# postalias /etc/aliases
Créons l'utilisateur et le groupe « virtual »
et le dossier des boites e-mail virtuelles :
bebeserv:/etc/postfix/conf.d# cd /var/mail bebeserv:/var/mail# mkdir virtual bebeserv:/var/mail# groupadd -g 5000 virtual bebeserv:/var/mail# useradd -u 5000 -g virtual -d /var/mail/virtual -s /usr/sbin/nologin virtual bebeserv:/var/mail# chown virtual.virtual virtual
Parfait ! Maintenant Postfix est fonctionnel et bien configuré. Nous l'avons configuré de sorte que les e-mails émis par les utilisateurs locaux soit traiter par le relay virtual, que localhost soit assimilé à notre domaine, que les sous domaines de notre domaine soit assimilé à notre domaine. Il ne nous reste plus qu'à installer un client IMAP pour lire nos messages.
Installons « courier-imap-ssl »
:
bebeserv:/var/mail# apt-get install courier-imap-ssl
Stoppons les serveur nouvellement installés :
bebeserv:/var/mail# /etc/init.d/courier-authdaemon stop [...] bebeserv:/var/mail# /etc/init.d/courier-imap stop [...] bebeserv:/var/mail# /etc/init.d/courier-imap-ssl stop [...]
Regénérons un certificat propre à notre domaine pour IMAP :
bebeserv:/var/mail# cd /etc/courier bebeserv:/etc/courier# rm imapd.pem bebeserv:/etc/courier# nano imapd.cnf
Modifiez ceci :
[ req_dn ] C=FR ST=FRANCE L=Paris O=Courier Mail Server OU=IMAP SSL key CN=imap.bebenet.local emailAddress=postmaster@bebenet.local
Enregistrez et quittez. Maintenant créons un beau certificat :
bebeserv:/etc/courier# dpkg-reconfigure courier-imap-ssl [...]
Ceci fait, ré-arretons le serveur qui a été redémarrer et configurons l'authentification (ici authdaemon à ne pas confondre avec saslauthd) :
bebeserv:/etc/courier# /etc/init.d/courier-imap-ssl stop [...] bebeserv:/etc/courier# nano authdaemonrc
Modifiez cette ligne :
authmodulelist="authuserdb"
Enregistrez et quittez. Maintenant nous allons créer la base des utilisateurs qui vont pouvoir se connecter à IMAP. Pour simplifier les choses je vous ai concocté un petit script:
bebeserv:/etc/courier# mkdir userdb bebeserv:/etc/courier# chmod 0000 userdb bebeserv:/etc/courier# nano userdb-utils
Entrez ceci :
#!/bin/bash
cd /etc/courier
case "$1" in
add)
if [ $# -lt 2 ]; then
echo "Usage: ./userdb-utils add user@domain.tld"
exit 1
fi
EMAIL=$2
DIR=/var/mail/virtual
USER=$(echo $EMAIL | cut -d@ -f1)
DOMAIN=$(echo $EMAIL | cut -d@ -f2)
userdb $DOMAIN/$EMAIL set mail=$DIR/$DOMAIN/$USER home=$DIR/$DOMAIN/$USER uid=5000 gid=5000
userdbpw -md5 | userdb $DOMAIN/$EMAIL set systempw
makeuserdb
;;
del)
if [ $# -lt 2 ]; then
echo "Usage: ./userdb-utils del user@domain.tld"
exit 1
fi
TODAY=$(date +%Y%m%d)
FILE=/tmp/userdbcreate$TODAY
EMAIL=$2
USER=$(echo $EMAIL | cut -d@ -f1)
DOMAIN=$(echo $EMAIL | cut -d@ -f2)
DB=/etc/courier/userdb/$DOMAIN
sed -e /^$EMAIL/d $DB > $FILE
rm $DB
mv $FILE $DB
makeuserdb
;;
list)
authenumerate
;;
*)
echo "Usage: ./userdb-utils {add|del|list} [user@domain.tld]"
exit 1
esac
exit 0
Enregistrez et quittez. Maintenant rendons notre script exécutable et disponible dans notre banque de script :
bebeserv:/etc/courier# chmod 700 userdb-utils bebeserv:/etc/courier# ln -s userdb-utils /usr/local/bin/
Ok, créons deux utilisateurs pour voir comment ceci fonctionne :
bebeserv:/etc/courier# ./userdb-utils add test@bebenet.local Password : [...] bebeserv:/etc/courier# ./userdb-utils add test2@bebenet.local Password : [...] bebeserv:/etc/courier# ./userdb-utils list [...] bebeserv:/etc/courier# ./userdb-utils del test2@bebenet.local bebeserv:/etc/courier# ./userdb-utils list [...]
C'est terminé.
Il reste à mettre à jour « iptables »
bebeserv:/etc/courier# nano /etc/network/iptables
Rajouter ces lignes :
iptables -t filter -A INPUT -i eth0 -p tcp --dport 25 -d $MYIP -j ACCEPT iptables -t filter -A INPUT -i eth0 -p tcp --dport 993 -d $MYIP -j ACCEPT iptables -t filter -A OUTPUT -o eth0 -p tcp --dport 25 -s $MYIP -j ACCEPT iptables -t filter -A OUTPUT -o eth0 -p tcp --sport 25 -s $MYIP -j ACCEPT iptables -t filter -A OUTPUT -o eth0 -p tcp --dport 993 -s $MYIP -j ACCEPT iptables -t filter -A OUTPUT -o eth0 -p tcp --sport 993 -s $MYIP -j ACCEPT
Enregistrez et quittez :
Redémarrons les serveurs :
bebeserv:/var/mail# /etc/init.d/iptables-conf restart bebeserv:/var/mail# /etc/init.d/postfix start bebeserv:/var/mail# /etc/init.d/courier-authdaemon start bebeserv:/var/mail# /etc/init.d/courier-imap-ssl start bebeserv:/var/mail# /etc/init.d/courier-imap start
Et voilà ! Nos utilisateurs doivent se loguer forcément en IMAP et en SMTP le tout couvert du SSL.
Prochain chapitre on ajoute un antivirus et un antispam !
bebeserv:/var/mail# exit logout ALBAN@bebeserv:~$
Commentaires
il manque la creation du repertoire des utilisateur mail dans userdb-utils
mkdir /var/mail/$DOMAIN
maildirmake /var/mail/$DOMAIN/$EMAIL
chown -R virtual.virtual /var/mail/$DOMAIN
le répertoire utilisateur est créer par le MTA automatiquement.
"le répertoire utilisateur est créer par le MTA automatiquement." Certes, mais la documentation de Postfix conseille de les créer manuellement. :
Le courrier livré est ajouté avec les privilèges des UID/GID indiqués par les paramètres virtual_uid_maps et virtual_gid_maps. Les versions 2.0 et supérieures de Postfix ne créent pas les répertoires de boîtes-aux-lettres dans des répertoires positionnés en écriture pour tout le monde Vous devez les créer par avance. Postfix peut être en mesure de créer les boîtes-aux-lettres lui-même suivant les permissions d'écriture sur le répertoire parent, mais il est préférable de les créer avant.
source: http://postfix.traduc.org/index.php...