Ceci est une ancienne révision du document !
Installation d'un Serveur Mail Postfix, Mysql, Dovecot
Présentation
Postfix
Postfix est un mta (Mail Transfer Agent, simple d'utilisation contrairement à Sendmail ou bien qmail. Postfix est utilisé par défaut chez Mac OS X, disponible sur GNU/Linux, la famille BSD et d'autres unix encore.
Dovecot
Dovecot est un serveur IMAP et POP3 pour les systèmes d'exploitation Unix et dérivés, conçu avec comme premier but la sécurité. Dovecot est distribué en double-licence MIT et GPL version 2.
Prérequis
Niveau confirmé. Temps d'application : 1heure à 5heure.
Ce tutoriel vous permettra de mettre en place une solution multi-domaine basée sur des utilisateurs et domaines virtuels, couplée avec MySQL 5.1. Postfix peut être couplé a LDAP et ProgresSQL.
Configuration du DNS
Tout d'abord on vérifie les fichier de configuration de l'hote DNS :
/etc/hostname/ :
exemple.domain.tld
/ect/host/ :
127.0.0.1 exemple.domain.tld localhost.localdomain localhost exemple
Maintenant éditons le fichier /etc/resolv.conf pour le pointer en local.
nameserver 127.0.0.1 search domain.tld
Instalation de Postfix : SMTP, TLS
Donc nous avons besoin dans un premier temps de mysql client et serveur 5.1, sasl, ntp, apache2, et enfin php5 pour mysql.
Il faut impérativement la version 5.1 de mysql afin de partionner les groupe d'utilisateur.
Paquets principaux à installer : postfix postfix-mysql openssl mysql-client-5.1 mysql-server-5.1 libsasl2-2 libsasl2-modules sasl2-bin openssl ntp libapache2-mod-php php5-mysq
Si c'est la 1ère fois que vous installez MySQL, définissez un mot de passe pour le root
mysqladmin -u root password 'motdepasse'
Si jamais le mot de passe root ne peut être changé voici une petite procédure pour pouvoir le faire:
/etc/init.d/mysql stop rm -Rf /var/lib/mysql/* mysql_install_db /etc/init.d/mysql start mysqladmin -u root password 'xxxxxxxx'
Donc bien evidement il faut un utilisateur pour Postfix sous Mysql.
$ mysql -u root -p #Entrer le mot de passe de Mysql. mysql> GRANT ALL PRIVILEGES ON postfix.* TO "postfix"@"localhost" IDENTIFIED BY 'le mot de passe de my sql'; mysql> FLUSH PRIVILEGES; mysql> quit
Nous allons la table postfix :
mysql -u root -p #Entrer le mot de passe de Mysql. mysql> CREATE DATABASE postfix; mysql> quit
Maintenant nous allons installer les bases de données en SQL, tout en y insérant le nom de domaine avec sed.
cd ~ wget http://postfix-mysql-configuration-file.googlecode.com/files/postfix.sql sed -i 's/starbridge.org/nomdomain.tld/g' postfix.sql mysql -u root -p < postfix.sql
Paramétrage de Postfix et de Mysql
On remplace tout le /etc/postfix/main.cf par le contenu ci dessous :
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu) biff = no append_dot_mydomain = no myhostname = exemple.domain.tld alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases myorigin = $mydomain mydestination = $myhostname, localhost.$mydomain, localhost mynetworks = 127.0.0.0/8 recipient_delimiter = + home_mailbox = Maildir/ notify_classes = 2bounce, bounce, delay, policy, protocol, resource, software smtpd_helo_required = yes strict_rfc821_envelopes = yes relay_domains = proxy:mysql:/etc/postfix/mysql_relay_domains_maps.cf relay_recipient_maps = proxy:mysql:/etc/postfix/mysql_relay_recipients_maps.cf virtual_alias_maps = proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cf,proxy:mysql:/etc/postfix/mysql_virtual_alias_domain_maps.cf,proxy:mysql:/etc/postfix/mysql_virtual_alias_domain_catchall_maps.cf virtual_gid_maps = static:20001 virtual_mailbox_base = /home/vmail virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql_virtual_domains_maps.cf virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf,proxy:mysql:/etc/postfix/mysql_virtual_alias_domain_mailbox_maps.cf virtual_minimum_uid = 20001 virtual_uid_maps = static:20001 transport_maps = proxy:mysql:/etc/postfix/mysql_transport.cf,proxy:mysql:/etc/postfix/mysql_transport2.cf proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_recipient_restrictions $smtpd_sender_login_maps $has_our_domain_as_sender message_size_limit = 50240000 smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination, permit smtpd_data_restrictions = reject_unauth_pipelining, permit
* myhostname : c'est le nom de votre serveur mail, configuré dans les entrées MX, par défaut mail.domaine.net
- mydestination : ceci est la concordance des domaines, remplacez Final-Fantasy par votre nom de machine, et FF-IRC.net par votre domaine
- mynetworks : permet de donner l'accès au serveur SMTP, en plus des 2 exemples, rajoutez votre IP extérieure si votre serveur n'est pas sur le même réseau que votre PC
- home_mailbox = Maildir/ : Ceci est important ! Nous choisissons le format Maildir en accord avec le serveur IMAP ! Vous ne pourrez pas recevoir vos mails par IMAP si cette ligne n'est pas ajoutée au fichier de configuration de Postfix !
Le smtp de postfix est chrooter, il faut donc le retirer afin d'assurer son bon fonctionnement. On retire le chroot dans /etc/postfix/master.cf et modifier comme dessous.
On modifie le /etc/postfix/master.cf comme ci dessous :
# # Postfix master process configuration file. For details on the format # of the file, see the master(5) manual page (command: "man 5 master"). # # ========================================================================== # service type private unpriv chroot wakeup maxproc command + args # (yes) (yes) (yes) (never) (100) # ========================================================================== smtp inet n - n - - smtpd #smtp inet n - n - 1 postscreen #smtpd pass - - n - - smtpd #dnsblog unix - - n - 0 dnsblog #tlsproxy unix - - n - 0 tlsproxy #submission inet n - n - - smtpd 587 inet n - n - - smtpd -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_etrn_restrictions=reject -o smtpd_client_restrictions=permit_sasl_authenticated,reject #smtps inet n - - - - smtpd # -o smtpd_tls_wrappermode=yes # -o smtpd_sasl_auth_enable=yes # -o smtpd_client_restrictions=permit_sasl_authenticated,reject #628 inet n - - - - qmqpd pickup fifo n - n 60 1 pickup -o receive_override_options=no_header_body_checks -o content_filter= cleanup unix n - n - 0 cleanup qmgr fifo n - n 300 1 qmgr #qmgr fifo n - - 300 1 oqmgr tlsmgr unix - - n 1000? 1 tlsmgr rewrite unix - - n - - trivial-rewrite bounce unix - - n - 0 bounce defer unix - - n - 0 bounce trace unix - - n - 0 bounce verify unix - - n - 1 verify flush unix n - n 1000? 0 flush proxymap unix - - n - - proxymap proxywrite unix - - n - 1 proxymap smtp unix - - n - - smtp # When relaying mail as backup MX, disable fallback_relay to avoid MX loops relay unix - - n - - smtp -o fallback_relay= # -o smtp_helo_timeout=5 -o smtp_connect_timeout=5 showq unix n - n - - showq error unix - - n - - error retry unix - - n - - error discard unix - - n - - discard local unix - n n - - local virtual unix - n n - - virtual lmtp unix - - n - - lmtp anvil unix - - n - 1 anvil scache unix - - n - 1 scache # # #=================================================#=================== # Interfaces to non-Postfix software. Be sure to examine the manual # pages of the non-Postfix software to find out what options it wants. # # Many of the following services use the Postfix pipe(8) delivery # agent. See the pipe(8) man page for information about ${recipient} # and other message envelope options. # #=================================================#=================== # # maildrop. See the Postfix MAILDROP_README file for details. # Also specify in main.cf: maildrop_destination_recipient_limit=1 # #maildrop unix - n n - - pipe # flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient} # # See the Postfix UUCP_README file for configuration details. # uucp unix - n n - - pipe flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient) # # Other external delivery methods. # #ifmail unix - n n - - pipe # flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient) #bsmtp unix - n n - - pipe #flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t$nexthop #-f$sender $recipient #scalemail-backend unix - n n - 2 pipe #flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store #${nexthop} ${user} ${extension} #mailman unix - n n - - pipe #flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py # ${nexthop} ${user}
On crée un dossier nommé vmail. Ce dossier regroupera les boîtes mail des utilisateurs.
groupadd -g 20001 vmail useradd -g vmail -u 20001 vmail -d /home/vmail -m
Bien sure il faut installer une sécuriter :
chown -R vmail: /home/vmail chmod 770 /home/vmail
On crée les fichiers d’appel des tables par Postfix : (la commande sed permet de specifier votre password d’accès à la base, dans l’exemple ici c’est toto).
cd /etc/postfix wget http://postfix-mysql-configuration-file.googlecode.com/files/mysql_virtual_alias_maps.cf wget http://postfix-mysql-configuration-file.googlecode.com/files/mysql_virtual_domains_maps.cf wget http://postfix-mysql-configuration-file.googlecode.com/files/mysql_virtual_mailbox_maps.cf wget http://postfix-mysql-configuration-file.googlecode.com/files/mysql_relay_domains_maps.cf wget http://postfix-mysql-configuration-file.googlecode.com/files/mysql_relay_recipients_maps.cf wget http://postfix-mysql-configuration-file.googlecode.com/files/mysql_virtual_alias_domain_maps.cf wget http://postfix-mysql-configuration-file.googlecode.com/files/mysql_virtual_alias_domain_catchall_maps.cf wget http://postfix-mysql-configuration-file.googlecode.com/files/mysql_virtual_alias_domain_mailbox_maps.cf wget http://postfix-mysql-configuration-file.googlecode.com/files/mysql_transport.cf wget http://postfix-mysql-configuration-file.googlecode.com/files/mysql_transport2.cf sed -i 's/\*\*\*\*/toto/g' mysql_virtual_alias_maps.cf mysql_virtual_domains_maps.cf mysql_virtual_mailbox_maps.cf mysql_relay_domains_maps.cf mysql_relay_recipients_maps.cf mysql_virtual_alias_domain_maps.cf mysql_virtual_alias_domain_catchall_maps.cf mysql_virtual_alias_domain_mailbox_maps.cf mysql_transport.cf mysql_transport2.cf
Pour le bon fonctionnement et la sécurité il faut exécuter ces deux lignes de commandes
chmod 640 mysql_* chgrp postfix mysql_*
On crée des liens pour le bon fonctionnement de l'ensemble
mkdir -p /var/spool/postfix/var/run/mysqld chown mysql /var/spool/postfix/var/run/mysqld ln -s /var/run/mysqld/mysqld.sock /var/spool/postfix/var/run/mysqld/mysqld.sock
mkdir -p /var/spool/postfix/var/run/courier/authdaemon ln -s /var/run/courier/authdaemon/socket /var/spool/postfix/var/run/courier/authdaemon/socket chown -R daemon:daemon /var/spool/postfix/var/run/courier chmod 755 /var/spool/postfix/var/run/courier/authdaemon
Certification d'authenticité.
Donc nous allons éditer le fichier /etc/ssl/openssl.cnf
Il faut modifiez la ligne default_day pour pouvoir l'éditer sur 10ans.
default_days = 3650
Maintenant il faut généré un certificat :
cd ~ /usr/lib/ssl/misc/CA.pl -newca
Paramétre | Explication |
---|---|
Enter PEM pass phrase | Mot de passe du certificat |
Country Name (2 letter code) [AU] | FR |
State or Province Name (full name) [Some-State]: | Entrer ici votre département département |
Locality Name (eg, city) : | Entrer ici votre ville |
Organization Name (eg, company) [Internet Widgits Pty Ltd] | Ici le nom de votre compagnie |
Organizational Unit Name (eg, section) | VIDE (Optionnel) |
Common Name (eg, YOUR name) : | Ici votre nom de domaine |
Email Address : | Votre adresse email |
A challenge password : | VIDE |
Enter pass phrase for | Mot de passe du certificat |
Ce certificat racine sert à protéger les autres certificats. Il se situe dans le répertoire /demoCA.
On crée maintenant une clé privée pour le serveur ainsi qu’un certificat public non signé.
mkdir ~/CERT cd ~/CERT openssl req -new -nodes -keyout "nomdesociété"-key.pem -out "nomdesociété"-req.pem -days 3650
et on entre les paramètres comme ci dessous :
Paramétre | Explication |
---|---|
Enter PEM pass phrase | Mot de passe du certificat |
Country Name (2 letter code) [AU] | FR |
State or Province Name (full name) [Some-State]: | Entrer ici votre département département |
Locality Name (eg, city) : | Entrer ici votre ville |
Organization Name (eg, company) [Internet Widgits Pty Ltd] | Ici le nom de votre compagnie |
Organizational Unit Name (eg, section) | VIDE (Optionnel) |
Common Name (eg, YOUR name) : | Ici votre nom de domaine |
Email Address : | Votre adresse email |
A challenge password | VIDE |
On signe maintenant ce certificat public avec le certificat racine :
cd ~ openssl ca -out CERT/"nomdesociété"-cert.pem -infiles CERT/"nomdesociété"-req.pem
Voici la sortie de la signature :
Using configuration from /usr/lib/ssl/openssl.cnf Enter pass phrase for ./demoCA/private/cakey.pem: Check that the request matches the signature Signature ok Certificate Details: Serial Number: 84:7c:ce:d2:f7:cf:df:6d Validity Not Before: Nov 13 16:51:32 2011 GMT Not After : Nov 10 16:51:32 2021 GMT Subject: countryName = FR stateOrProvinceName = "Votre département" organizationName = "Votre société Internet" commonName = "Votre nom de domaine" emailAddress = "Votre Adresse Email" X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: 05:2A:A9:90:6F:2A:80:F7:E3:EF:2B:F9:44:9D:8E:CF:C3:16:18:EF X509v3 Authority Key Identifier: keyid:B9:04:A3:81:E5:5D:D6:82:72:F4:6E:0C:FB:3F:E2:62:1B:EF:B9:57 Certificate is to be certified until Nov 10 16:51:32 2021 GMT (3650 days) Sign the certificate? [y/n]:y ### Oui 1 out of 1 certificate requests certified, commit? [y/n]y ### Oui Write out database with 1 new entries Data Base Updated
On copie maintenant le certificat (cert.pem) et la clé (key.pem) dans postfix :
mkdir /etc/postfix/tls cp demoCA/cacert.pem CERT/"nomdesociété"-key.pem CERT/"nomdesociété"-cert.pem /etc/postfix/tls/ chmod 644 /etc/postfix/tls/"nomdesociété"-cert.pem /etc/postfix/tls/cacert.pem chmod 400 /etc/postfix/tls/"nomdesociété"-key.pem chmod 400 ~/CERT/*
On ajoute maintenant la configuration tls et smtp protégé par ssl. Comme ceci dans le fichier /etc/postfix/main.cf :
smtp_tls_CAfile = /etc/postfix/tls/cacert.pem smtp_tls_security_level = may smtp_tls_session_cache_database = btree:${data_directory}/smtp_tls_session_cache smtpd_tls_security_level = may smtpd_tls_auth_only = yes smtpd_tls_key_file = /etc/postfix/tls/"nomdesociété"-key.pem smtpd_tls_cert_file = /etc/postfix/tls/"nomdesociété"-cert.pem smtpd_tls_CAfile = /etc/postfix/tls/cacert.pem smtpd_tls_loglevel = 1 smtpd_tls_received_header = yes smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_tls_session_cache tls_random_source = dev:/dev/urandom
Dovecot : SASL, LDA, IMAP et SIEVE
Installation
Malheureusement il n'existe qu'une seul méthode a l'heure actuel pour installer Dovecot en version 2. C'est le grand classique de debian, la compilation. Mais ne vous inquiété pas je l'ais essayer sur la Ubuntu 11.04 avec une architecture en 64 bit et cela c'est parfaitement bien dérouler.
Les dépendances nécessaire à la compilation
Dans un premier temps il faut installer les dépendances pour la compilation :
Compilation
Téléchargement des fichier sources :
cd ~ mkdir dovecot cd dovecot wget http://www.dovecot.org/releases/2.0/dovecot-2.0.13.tar.gz wget http://www.rename-it.nl/dovecot/2.0/dovecot-2.0-pigeonhole-0.2.3.tar.gz tar xvzf dovecot-2.0.13.tar.gz tar xvzf dovecot-2.0-pigeonhole-0.2.3.tar.gz
Configuration, Compilation et instalation du serveur :
cd dovecot-2.0.13 ./configure --prefix=/usr/ --sysconfdir=/etc/ --with-mysql --libexecdir=/usr/lib/ --localstatedir=/var --with-moduledir=/usr/lib/dovecot/modules --disable-rpath --disable-static make sudo make install
cd ../dovecot-2.0-pigeonhole-0.2.3 ./configure --with-dovecot=/usr/lib/dovecot/ --prefix=/usr/ --sysconfdir=/etc/ --libexecdir=/usr/lib/ --disable-static make sudo make install
Configuration de Dovecot :
Nous avons besoin d'un groupes d'utilisateur pour utiliser Dovecot :
adduser --system --group --home /usr/lib/dovecot --gecos "Dovecot mail server" --disabled-password --quiet dovecot adduser --system --home /nonexistent --gecos "Dovecot login user" --disabled-password --quiet dovenull
On copie les fichiers de configuration nécessaires :
cd /etc/dovecot/ wget http://postfix-mysql-configuration-file.googlecode.com/files/dovecot.conf wget http://postfix-mysql-configuration-file.googlecode.com/files/dovecot-sql.conf wget http://postfix-mysql-configuration-file.googlecode.com/files/dovecot-dict-quota-sql.conf chown vmail:dovecot dovecot-dict-quota-sql.conf chmod 600 dovecot-sql.conf chmod 640 dovecot-dict-quota-sql.conf
Dans le fichier /etc/dovecot/dovecot.conf a la ligne 126 et 127, il faut remplace les nom des certificat ssl que nous avons créer plus haut.
ssl_cert = </etc/postfix/tls/"nomdesociété"-cert.pem ssl_key = </etc/postfix/tls/"nomdesociété"-key.pem
On indique le mot de passe de la table postfix au fichier de configuration :
sed -i 's/\*\*\*\*\*/"votremotdepass"/g' dovecot-sql.conf dovecot-dict-quota-sql.conf
Configuration du MDA
Nous allons utiliser Dovecot LDA (Local Delivery Agent, le MDA de dovecot) qui s’occupera de la livraison des mails. Pour cela il faut donc configurer postfix pour qu’il utilise Dovecot comme MDA :
On ajoute ceci au fichier /etc/postfix/main.cf :
dovecot_destination_recipient_limit = 1 virtual_transport = dovecot
et on ajoute un transport dovecot au /etc/postfix/master.cf (sous maildrop par exemple) :
dovecot unix - n n - - pipe flags=DRhu user=vmail: argv=/usr/lib/dovecot/deliver -f ${sender} -d ${user}@${nexthop} -a ${recipient}
il faut maintenant créer un fichier /etc/init.d/dovecot, pour le rendre exécutable par défaut :
cd /etc/init.d/ wget http://postfix-mysql-configuration-file.googlecode.com/files/dovecot chmod 755 /etc/init.d/dovecot insserv -v /etc/init.d/dovecot
On peux maintenant lancer Dovecot :
/etc/init.d/dovecot start
Ainsi que Postfix :
postfix reload
On vérifie dans les logs que tout a démarré correctement.
Installation PostfixAdmin
La gestion des Quotas
Voila le serveur est configuré ! Maintenant si vous souhaitez une sécurisation optimale vous pouvez continuer le lecture de la documentation de spamassassin, amavis etc http://www.starbridge.org.