Ceci est une ancienne révision du document !


Installation d'un Serveur Mail Postfix, Mysql, Dovecot

ATTENTION ne commencer pas le tutoriel maintenant je risque de faire de grosse modifications sur la configuration de Dovecot, sasl, ect. Et je pense que la méthode actuel n'as pas de rapport direct avec Ubuntu. Donc je vais tout rediriger par rapport au dépôts officiels. Surtout que la logithèque est "sacrément bien foutu". Donc on vas s'en servir.

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.

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.

Je n'utilise pas la commande sudo, je travaille directement sous root, c'est moins prise de tête que taper sudo devant chaque commande. Pour travailler sous le compte root, faite un sudo -i puis votre mot de passe habituel.

Présentation de la configuration

Pour une installation par défaut des serveurs mail d'Ubuntu on utilise les paquets dovecot-imapd, dovecot-pop3d, postfix .

Mais il existe un paquet qui installe les serveurs comme un MDA (mail delivery agent), dovecot-postfix. Il installe les serveurs POP3, IMAP, SMTP. Ce qui ici nous arrange bien ici, car un apt-get install dovecot-postfix nous installe dovecot-imapd, dovecot-pop3d avec postfix et en plus il est déjà configurer.

Le paquet dovecot-postfix est aussi préconfiguré pour le support du chiffrement TLS et de l'authentification SASL pour les protocoles SMTP, POP3 et IMAP. Ainsi que l'on peux facilement y inclure un Filtre SIEVE.

Nous aurons aussi besoin des paquets : mysql-client et mysql-serveur en version 5.1, sasl, ntp, apache2, et enfin php5 pour mysql.

Il faut impérativement la version 5.1 de mysql afin de partitionner les groupe d'utilisateur.

Installation de la configuration

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

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

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/virtual
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

FIXME * 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/virtual -m

Bien sure il faut installer une sécuriter :

chown -R vmail: /home/virtual
chmod 770 /home/virtual

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é.

Sur un plan théorique on utilise une certification auto-signé. Cela veux dire que aucune autorité assure vos certificats. Pour un serveur de production il faudra utilisé des certification payante.
Pour éviter toute confusions. Je vous recommande fortement de bien lire et de personnaliser toute c'est commande dans un bloc-note, ainsi que de vérifier les concordances. Avant de vous lancer.

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

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 avons maintenant besoin d’un MDA (mail delivery agent) pour livrer les mails dans les boîtes. Le service de livraison Virtual de Postfix ne convient pas totalement pour notre usage. En effet nous allons avoir besoin de capacité de filtrage sur le MDA ainsi que la possibilité de gérer les quotas, ce que ne sait pas faire Virtual.

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}
La configuration de la documentation permet de choisir son transport par domaine. Il faut pour cela choisir Dovecot dans la configuration de domaine grace à Postfixadmin. Le domaine par défaut, crée par le script sql de la 'doc', est déja paramétré pour utiliser Dovecot. Dovecot est également préconfiguré pour utiliser les mêmes certificats SSL que Postfix.

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 :

/etc/init.d/postfix reload

On vérifie dans les logs que tout a démarré correctement.

Pour l'instant les deux serveur sont OK… =) Je continuerai demain.

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.

  • utilisateurs/benjy4537/brouillons/postfix_relecture.1310053397.txt.gz
  • Dernière modification: Le 15/12/2011, 15:21
  • (modification externe)