You are on page 1of 13

PRÉ REQUIS

Pour réaliser ce tutorial, vous devrez au préalable avoir des connaissances en ligne de commande linux (Au
moins les commandes basiques: cd, mkdir, mv ...).

Disposer d'un client SSH (Comme Putty), d'un client FTP (Comme FileZilla), et bien sûr de votre serveur avec
une Debian fraichement installée.

Vous aurez aussi besoin d'au moins un nom de domaine pointant sur votre serveur.

Redirection des zones MX de votre domaine

Important, si vous souhaitez pouvoir gérer vos emails à partir de votre serveur debian, vous devez rediriger les
champs MX vers l'IP de votre serveur.

Pour voir où les champs MX de votre domaine pointent actuellement, tapez la commande suivante en SSH:

root [~] > host -t MX VOTRE_DOMAINE

Vous verrez les serveurs mails associés ainsi que leur priorité.

Pour modifier ces champs MX, rendez-vous sur l'interface d'administration du registrar chez qui vous avez acheté
le domaine, puis modifiez les DNS.

En plus petite valeur de priorité, mettez l'adresse de votre serveur ou son nom de domaine.

La prise en compte de ces modifications n'est pas immédiate, donc ne vous inquietez pas si vous ne voyez
aucuns changement au bout de 10min. (Les changements peuvent prendre jusqu'à 48h ...)

INSTALLATION ET CONFIGURATION D'UN SERVEUR D'EMAIL: POSTFIX +


COURIER

Notre serveur web est maintenant prêt à emploi. Toutefois, il nous manque quand même un bon serveur d'email
avec lequel nous pourrons gérer tous nos emails et adresses virtuelles aisément.

Postfix MySQL est une bonne solution pour gérer nos emails multi-domaines. Comme pour notre serveur FTP,
nous pourrons gérer des comptes email virtuels directement à partir de phpMyAdmin.

INSTALLATION DE POSTFIX-MYSQL

Sortez vos clients SSH, et c'est parti !


root [~] > apt-get install postfix-mysql

Les paquets suivants seront installés:

openssl postfix postfix-mysql ssl-cert

Vous devriez obtenir les écrans suivants:

Il vous sera demandé quel type de configuration vous souhaitez créer. Choisissez "No configuration" pour avoir
une config vierge.

Postfix est maintenant installé, passons à sa configuration.

MODIFICATION DU PROXY DE POSTFIX

Afin que postfix n'ai pas de problèmes de communication avec MySQL, il faut modifier le fichier master.cf
root [~] > nano /etc/postfix/master.cf
# service type private unpriv chroot wakeup maxproc command +
args
# (yes) (yes) (yes) (never) (100)
#
=====================================================================
=====
smtp inet n - n - - smtpd

remplacez le n situé sous "chroot" par un tiret.

Sauvegardez et quittez.

PRÉPARATION DE LA BASE MYSQL POUR POSTFIX

Comme pour pureFTPd, nous allons devoir créer une base de données spécifique pour postfix avec un utilisateur
propre.

1) Création de la table postfix et de l'utilisateur postfix dans MySQL.

Soit vous passez par phpMyAdmin > Privilèges > Ajouter un nouvel utilisateur.

Soit vous êtes un adepte de la ligne de commande et vous le créez en SSH:

root [~] > mysql -u root -p


mysql> CREATE USER 'postfix'@ 'localhost' IDENTIFIED BY
'VOTRE_PASS_POSTFIX_MYSQL';
mysql> GRANT USAGE ON * . * TO 'postfix'@'localhost' IDENTIFIED BY
'VOTRE_PASS_POSTFIX_MYSQL';
mysql> CREATE DATABASE `postfix` ;
mysql> GRANT ALL PRIVILEGES ON `postfix` . * TO 'postfix'@
'localhost';
mysql> FLUSH PRIVILEGES;
2) Les tables MySQL postfix

Postfix MySQL nécessite plusieurs tables:

 domaines: Table contenant tous les domaines à gérer.


 comptes: Les comptes emails
 alias: les comptes virtuels, alias d'email sur des comptes emails existants dans mailbox

Voici le code SQL de création de ces 3 tables:

01.USE postfix;
02.
03.CREATE TABLE `domaines` (
04.`domaine` varchar(255) NOT NULL default '',
05.`etat` tinyint(1) NOT NULL default '1',
06.PRIMARY KEY (`domaine`)
07.) ENGINE=MyISAM;
08.
09.
10.CREATE TABLE `comptes` (
11.`email` varchar(255) NOT NULL default '',
12.`password` varchar(255) NOT NULL default '',
13.`quota` int(10) NOT NULL default '0',
14.`etat` tinyint(1) NOT NULL default '1',
15.`imap` tinyint(1) NOT NULL default '1',
16.`pop3` tinyint(1) NOT NULL default '1',
17.PRIMARY KEY (`email`)
18.) ENGINE=MyISAM;
19.
20.
21.CREATE TABLE `alias` (
22.`source` varchar(255) NOT NULL default '',
23.`destination` text NOT NULL,
24.`etat` tinyint(1) NOT NULL default '1',
25.PRIMARY KEY (`source`)
26.) ENGINE=MyISAM;

CONFIGURATION DE POSTFIX

Maintenant que nos tables MySQL sont prêtes, nous allons pouvoir les renseigner dans les fichiers de
configuration de postfix.

Nous allons créer un fichier de configuration par requêtes:

 Une requête pour récupérer les Domaines: mysql-virtual_domaines.cf


 Une requête pour récupérer les Comptes email: mysql-virtual_comptes.cf
 Une requête pour récupérer les Alias: mysql-virtual_aliases.cf
 Une requête pour récupérer les correspondances Alias -> Comptes Mails: mysql-
virtual_aliases_comptes.cf
 Une requête pour récupérer les Quotas: mysql-virtual_quotas.cf

Tous ces fichiers seront stockés dans le répertoire /etc/postfix/


root [~] > nano /etc/postfix/mysql-virtual_domaines.cf
hosts = 127.0.0.1
user = postfix
password = VOTRE_PASS_POSTFIX_MYSQL
dbname = postfix
select_field = 'virtual'
table = domaines
where_field = domaine
additional_conditions = AND etat=1

root [~] > nano /etc/postfix/mysql-virtual_comptes.cf


hosts = 127.0.0.1
user = postfix
password = VOTRE_PASS_POSTFIX_MYSQL
dbname = postfix
table = comptes
select_field = CONCAT(SUBSTRING_INDEX(email,'@',-
1),'/',SUBSTRING_INDEX(email,'@',1),'/')
where_field = email
additional_conditions = AND etat=1

root [~] > nano /etc/postfix/mysql-virtual_aliases.cf


hosts = 127.0.0.1
user = postfix
password = VOTRE_PASS_POSTFIX_MYSQL
dbname = postfix
table = alias
select_field = destination
where_field = source
additional_conditions = AND etat=1

root [~] > nano /etc/postfix/mysql-virtual_aliases_comptes.cf


hosts = 127.0.0.1
user = postfix
password = VOTRE_PASS_POSTFIX_MYSQL
dbname = postfix
table = comptes
select_field = email
where_field = email
additional_conditions = AND etat=1
root [~] > nano /etc/postfix/mysql-virtual_quotas.cf
hosts = 127.0.0.1
user = postfix
password = VOTRE_PASS_POSTFIX_MYSQL
dbname = postfix
table = comptes
select_field = quota
where_field = email

Nos fichiers de configuration Postfix <-> Mysql sont prêts. Nous allons créer le fichier de configuration principal de
postfix.

Tout d'abord, nous créons un groupe et un utilisateur mail virtuel:

root [~] > groupadd -g 5000 vmail


root [~] > useradd -g vmail -u 5000 vmail -d /var/spool/vmail/ -m

Ensuite, on créé le fichier de configuration principal:

root [~] > nano /etc/postfix/main.cf


smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
disable_vrfy_command = yes
smtpd_helo_required = yes

# appending .domain is the MUA's job.


append_dot_mydomain = no

# Pour faire simple, il est conseillé d'utiliser le reverse DNS de


votre serveur.
myhostname = REVERSE_DNS
myorigin = REVERSE_DNS
mydestination = REVERSE_DNS, localhost.localdomain, localhost
relayhost =
mynetworks = 127.0.0.0/8, IP_PUBLIQUE_SERVEUR
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all

virtual_alias_maps = mysql:/etc/postfix/mysql-
virtual_aliases.cf,mysql:/etc/postfix/mysql-
virtual_aliases_comptes.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql-
virtual_domaines.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual_comptes.cf
virtual_mailbox_base = /var/spool/vmail/
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000

virtual_create_maildirsize = yes
virtual_mailbox_extended = yes
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql-
virtual_quotas.cf
virtual_mailbox_limit_override = yes
virtual_maildir_limit_message = "La boite mail de votre destinataire
est pleine, merci de reessayez plus tard."
virtual_overquota_bounce = yes

# adresses d'expedition
smtpd_sender_restrictions =
permit_mynetworks,
warn_if_reject reject_unverified_sender

# adresses de destination
smtpd_recipient_restrictions =
permit_mynetworks,
reject_unauth_destination,
reject_non_fqdn_recipient

# client
smtpd_client_restrictions =
permit_mynetworks

Remplacez les valeurs en gras par celle qui vous correspondent.

UN PEU DE SÉCURITÉ

Comme vous l'avez vu, le mot de passe MySQL de notre utilisateur postfix est en clair, il faut donc restreindre
l'accès aux fichiers de conf à root et postfix uniquement.

root [~] > chmod u=rw,g=r,o= /etc/postfix/mysql-virtual_*.cf


root [~] > chgrp postfix /etc/postfix/mysql-virtual_*.cf
root [~] > l /etc/postfix/

-rw-r--r-- 1 root root 373 2009-01-09 11:40 dynamicmaps.cf


-rw-r--r-- 1 root root 2731 2009-01-09 15:15 main.cf
-rw-r--r-- 1 root root 3968 2009-01-09 11:40 master.cf
-rw-r----- 1 root postfix 174 2009-01-09 13:02 mysql-
virtual_aliases.cf
-rw-r----- 1 root postfix 169 2009-01-09 13:02 mysql-
virtual_aliases_comptes.cf
-rw-r----- 1 root postfix 238 2009-01-09 13:01 mysql-
virtual_comptes.cf
-rw-r----- 1 root postfix 176 2009-01-09 13:01 mysql-
virtual_domaines.cf
-rw-r----- 1 root postfix 134 2009-01-09 13:02 mysql-
virtual_quotas.cf
-rw-r--r-- 1 root root 17975 2008-08-19 07:51 postfix-files
-rwxr-xr-x 1 root root 6840 2008-08-19 07:51 postfix-script
-rwxr-xr-x 1 root root 22239 2008-08-19 07:51 post-install
drwxr-xr-x 2 root root 4096 2008-08-19 07:51 sasl

Les droits ont bien été mis à jour.

On reboot postfix pour qu'il prenne en compte toutes nos modifications

root [~] > /etc/init.d/postfix restart

Et pour s'assurer qu'il n'y'a pas de problème de syntaxe dans notre configuration, tapez:

root [~] > postfix check

TEST DE POSTFIX

Dans un premier temps, insérez des données dans les tables MySQL postfix.

On insère un domaine valide qui sera géré par postfix:

INSERT INTO `domaines` ( `domaine` , `etat` ) VALUES


('VOTRE_DOMAINE.com', '1');

Et on créé un compte virtuel:

INSERT INTO `comptes` ( `email` , `password` , `quota` , `etat` ,


`imap` , `pop3` ) VALUES
('contact@VOTRE_DOMAINE.com', ENCRYPT( 'VOTRE_PASS_MAIL' ) , '0',
'1', '1', '1');

Nous allons voir si postfix fonctionne correctement, pour cela installez telnet (apt-get install telnet) si vous ne
l'avez pas par défaut.

root [/etc/postfix] > telnet 127.0.0.1 25


Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
220 mail.lafermeduweb.net ESMTP (Debian/GNU)
ehlo VOTRE_DOMAINE
250-mail.VOTRE_DOMAINE
250-PIPELINING
250-SIZE 10240000
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
mail from: <postmaster@VOTRE_DOMAINE>
250 2.1.0 Ok
rcpt to: <contact@VOTRE_DOMAINE>
250 2.1.5 Ok
data
354 End data with .
Hello ca farte ?
.
250 2.0.0 Ok: queued as 286AA8C4089
quit
221 2.0.0 Bye

Nous avons envoyé un email en provenance de l'adresse test@VOTRE_DOMAINE vers notre compte mail
récemment créé (contact@VOTRE_DOMAINE).

Jetons un oeil dans les logs générés:

root [~] > cat /var/log/mail.log


Jan 12 14:28:50 F055 postfix/smtpd[27791]: connect from
localhost[127.0.0.1]
Jan 12 14:29:28 F055 postfix/smtpd[27791]: 78F628C4596:
client=localhost[127.0.0.1]
Jan 12 14:29:38 F055 postfix/cleanup[27796]: 78F628C4596: message-
id=<20090112132928.
78F628C4596@VOTRE_DOMAINE>
Jan 12 14:29:38 F055 postfix/qmgr[26852]: 78F628C4596: from=,
size=366,
nrcpt=1 (queue active)
Jan 12 14:29:38 F055 postfix/virtual[27800]: 78F628C4596: to=,
relay=virtual,
delay=22, delays=22/0.01/0/0.02, dsn=2.0.0, status=sent (delivered to
maildir)
Jan 12 14:29:38 F055 postfix/qmgr[26852]: 78F628C4596: removed
Jan 12 14:29:40 F055 postfix/smtpd[27791]: disconnect from
localhost[127.0.0.1]

"delivred to maildir" indique que notre mail est bien arrivé à destination!

Erreurs fréquentes:
Regardez vos logs (cat /var/log/mail.log) en cas d'erreur.

Feb 4 16:29:10 ns205674 postfix/smtpd[29555]: fatal: open database


/etc/aliases.db: No such file or directory

Si vous obtenez cette erreur, tapez dans votre console:

newaliases

INSTALLATION DE COURIER AVEC SUPPORT MYSQL

root [~] > apt-get install courier-base courier-authdaemon courier-


authlib-mysql courier-imap courier-pop

Les paquets suivant vont être installés:

courier-authdaemon courier-authlib courier-authlib-mysql courier-


authlib-userdb courier-base
courier-imap courier-pop libfam0

Répondez No à la question sur la séparation des fichiers de configuration pour l'administration web.

CONFIGURATION DE COURIER

Nous allons déjà activer l'authentification Courier avec le module MySQL.

root [~] > nano /etc/courier/authdaemonrc

Modifiez la ligne 27:

authmodulelist="authmysql"

Sauvegardez et quittez.

Comme pour Postfix, nous allons renseigner les champs et la table MySQL à Courier:

root [~] > nano /etc/courier/authmysqlrc

Modifiez les paramètres de cette façon:

MYSQL_SERVER localhost
MYSQL_USERNAME postfix
MYSQL_PASSWORD VOTRE_PASS_POSTFIX_MYSQL
MYSQL_DATABASE postfix
MYSQL_USER_TABLE comptes
MYSQL_CRYPT_PWFIELD password
MYSQL_UID_FIELD 5000
MYSQL_GID_FIELD 5000
MYSQL_LOGIN_FIELD email
MYSQL_HOME_FIELD "/var/spool/vmail/"

Sauvegardez et quittez.

Il faut maintenant rebooter les services de courier pour qu'il prenne en compte nos modifications:

root [~] > /etc/init.d/courier-authdaemon restart


Stopping Courier authentication services: authdaemond.
Starting Courier authentication services: authdaemond.
root [~] > /etc/init.d/courier-imap restart
Stopping Courier IMAP server: imapd.
Starting Courier IMAP server: imapd.
root [~] > /etc/init.d/courier-pop restart
Stopping Courier POP3 server: pop3d.
Starting Courier POP3 server: pop3d.

Pour tester si tout fonctionne correctement, nous allons directement mettre en place un webmail sur notre serveur
web, il peut s'avérer pratique pour consulter vos emails lorsque vous n'êtes pas sur votre machine.

MISE EN PLACE D'UN WEBMAIL: ROUNDCUBE

Téléchargez roundcube sur votre serveur: http://roundcube.net/downloads


root [~] > wget
http://surfnet.dl.sourceforge.net/sourceforge/roundcubemail/roundcube
mail-0.2-stable.tar.gz
root [~] > tar -zxvf roundcubemail-0.2-stable.tar.gz
root [~] > mv roundcubemail-0.2-stable/ /var/www/webmail/

Votre webmail est en place, il faut maintenant le configurer.

root [~] > mysql -u root -p


mysql> CREATE DATABASE roundcubemail;
mysql> GRANT ALL PRIVILEGES ON roundcubemail.* TO roundcube@localhost
IDENTIFIED BY 'PASS_ROUNDCUBE';
mysql> quit

Notre base de données roundcubemail est créée, il faut maintenant importer les tables

root [~] > mysql -u root -p roundcubemail <


/var/www/webmail/SQL/mysql.initial.sql

Lancez maintenant votre navigateur web et entrez l'adresse suivante:

http://VOTRE_IP_DE_SERVEUR/webmail/installer/

Suivez pas à pas les instructions pour installer le webmail.

En fin d'installation, copiez les deux sources générées, et collez les dans les fichiers de conf du serveur:

 db.inc.php
 main.inc.php

Supprimez le répertoire installer/ une fois que vos fichiers de conf sont créés.

http://VOTRE_IP_DE_SERVEUR/webmail/

Et maintenant vous devriez pouvoir accéder au webmail.

Entrez le nom de votre compte précedemment inséré dans les tables de postfix (contact/password), et vous
devriez pouvoir vous connecter si tout marche correctement.

Avec roundcube, vous pouvez envoyer et recevoir des messages avec votre adresse
contact@VOTRE_DOMAINE.

Si vous rencontrez des problèmes lors de l'installation ou de son fonctionnement, laissez un message dans le
topic du forum dédié au tutorial.

CONCLUSION DE CETTE PARTIE 4

Votre serveur web est maintenant totalement opérationnel.


Pour plus de sécurité nous verrons dans la dernière partie du tutorial comment mettre en place un système de
backup efficace et gratuit et comment faire pour contrer la plupart des attaques SSH, FTP, Web et Mail avec de
simples modifications de votre config debian.

Aide & Questions: Pour tous problèmes ou questions à propos de ce tutorial, merci d'utiliser le topic dédié dans
le forum de La Ferme du Web

You might also like