Créer un serveur web complet sous debian - #4 Postfix et Cou

Statut
N'est pas ouverte pour d'autres réponses.

Xavier Mustin

Administrator
Staff member
#1
Tutorial: Créer un serveur web complet sous debian - #4 Postfix et Courier


Voici un nouveau tutorial qui vous sera sans doute utile si vousvenez d'installer la distribution linux Debian (Ou Ubuntu) sur votreserveur.

Introduction

Objectif de ce tutorial


L'objectif du tutorial est d'obtenir un serveur linux debianpermettant d'héberger et de gérer vos sites web PHP / MySQL à distance,uniquement avec un accès SSH.

Pré requis


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

Disposer d'un client SSH (Comme Putty), d'un client FTP (CommeFileZilla), et bien sûr de votre serveur avec une Debian fraichementinstallé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:
Code:
[i]root [~] >[/i] 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 !
Code:
[i]root [~] >[/i] apt-get install postfix-mysql
Les paquets suivants seront installés:
Code:
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
Code:
[i]root [~] >[/i] nano /etc/postfix/master.cf
Code:
# service type  private unpriv  chroot  wakeup  maxproc command + args#               (yes)   (yes)   (yes)   (never) (100)# ==========================================================================smtp      inet  n       -       [b]n[/b]       -       -       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:
Code:
[i]root [~] >[/i] mysql -u root -pmysql> CREATE USER 'postfix'@ 'localhost' IDENTIFIED BY '[b]VOTRE_PASS_POSTFIX_MYSQL[/b]';mysql> GRANT USAGE ON * . * TO 'postfix'@'localhost' IDENTIFIED BY '[b]VOTRE_PASS_POSTFIX_MYSQL[/b]';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:
Code:
USE postfix;CREATE TABLE `domaines` (  `domaine` varchar(255) NOT NULL default '',  `etat` tinyint(1) NOT NULL default '1',  PRIMARY KEY  (`domaine`)) ENGINE=MyISAM;CREATE TABLE `comptes` (  `email` varchar(255) NOT NULL default '',  `password` varchar(255) NOT NULL default '',  `quota` int(10) NOT NULL default '0',  `etat` tinyint(1) NOT NULL default '1',  `imap` tinyint(1) NOT NULL default '1',  `pop3` tinyint(1) NOT NULL default '1',  PRIMARY KEY  (`email`)) ENGINE=MyISAM;CREATE TABLE `alias` (  `source` varchar(255) NOT NULL default '',  `destination` text NOT NULL,  `etat` tinyint(1) NOT NULL default '1',  PRIMARY KEY  (`source`)) 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/
Code:
[i]root [~] >[/i] nano /etc/postfix/mysql-virtual_domaines.cf
Code:
hosts = 127.0.0.1user = postfixpassword = VOTRE_PASS_POSTFIX_MYSQLdbname = postfixselect_field = 'virtual'table = domaineswhere_field = domaineadditional_conditions = AND etat=1
 
Code:
[i]root [~] >[/i] nano /etc/postfix/mysql-virtual_comptes.cf
Code:
hosts = 127.0.0.1user = postfixpassword = VOTRE_PASS_POSTFIX_MYSQLdbname = postfixtable = comptesselect_field = CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/')where_field = emailadditional_conditions = AND etat=1
 
Code:
[i]root [~] >[/i] nano /etc/postfix/mysql-virtual_aliases.cf
Code:
hosts = 127.0.0.1user = postfixpassword = VOTRE_PASS_POSTFIX_MYSQLdbname = postfixtable = aliasselect_field = destinationwhere_field = sourceadditional_conditions = AND etat=1
 
Code:
[i]root [~] >[/i] nano /etc/postfix/mysql-virtual_aliases_comptes.cf
Code:
hosts = 127.0.0.1user = postfixpassword = VOTRE_PASS_POSTFIX_MYSQLdbname = postfixtable = comptesselect_field = emailwhere_field = emailadditional_conditions = AND etat=1
 
Code:
[i]root [~] >[/i] nano /etc/postfix/mysql-virtual_quotas.cf
Code:
hosts = 127.0.0.1user = postfixpassword = VOTRE_PASS_POSTFIX_MYSQLdbname = postfixtable = comptesselect_field = quotawhere_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:
Code:
[i]root [~] >[/i] groupadd -g 5000 vmail[i]root [~] >[/i] useradd -g vmail -u 5000 vmail -d /var/spool/vmail/ -m
Ensuite, on créé le fichier de configuration principal:
Code:
[i]root [~] >[/i] nano /etc/postfix/main.cf
Code:
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)biff = nodisable_vrfy_command = yessmtpd_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 = [b]REVERSE_DNS[/b]myorigin = [b]REVERSE_DNS[/b]mydestination = [b][/b][b]REVERSE_DNS[/b], localhost.localdomain, localhostrelayhost =mynetworks = 127.0.0.0/8, [b]IP_PUBLIQUE_SERVEUR[/b]mailbox_size_limit = 0recipient_delimiter = +inet_interfaces = allvirtual_alias_maps = mysql:/etc/postfix/mysql-virtual_aliases.cf,mysql:/etc/postfix/mysql-virtual_aliases_comptes.cfvirtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual_domaines.cfvirtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual_comptes.cfvirtual_mailbox_base = /var/spool/vmail/virtual_uid_maps = static:5000virtual_gid_maps = static:5000virtual_create_maildirsize = yesvirtual_mailbox_extended = yesvirtual_mailbox_limit_maps = mysql:/etc/postfix/mysql-virtual_quotas.cfvirtual_mailbox_limit_override = yesvirtual_maildir_limit_message = "La boite mail de votre destinataire est pleine, merci de reessayez plus tard."virtual_overquota_bounce = yes# adresses d'expeditionsmtpd_sender_restrictions =permit_mynetworks,warn_if_reject reject_unverified_sender# adresses de destinationsmtpd_recipient_restrictions =permit_mynetworks,reject_unauth_destination,reject_non_fqdn_recipient# clientsmtpd_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.
Code:
[i]root [~] >[/i] chmod u=rw,g=r,o= /etc/postfix/mysql-virtual_*.cf[i]root [~] >[/i] chgrp postfix /etc/postfix/mysql-virtual_*.cf[i]root [~] >[/i] 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[b]-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[/b]-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-installdrwxr-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
Code:
[i]root [~] >[/i] /etc/init.d/postfix restart
Et pour s'assurer qu'il n'y'a pas de problème de syntaxe dans notre configuration, tapez:
Code:
[i]root [~] >[/i] 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:
Code:
INSERT INTO `domaines` ( `domaine` , `etat` ) VALUES ('[b]VOTRE_DOMAINE.com[/b]', '1');
Et on créé un compte virtuel:
Code:
INSERT INTO `comptes` ( `email` , `password` , `quota` , `etat` , `imap` , `pop3` ) VALUES('[b]contact@VOTRE_DOMAINE.com[/b]', ENCRYPT( '[b]VOTRE_PASS_MAIL'[/b] ) , '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.
Code:
[b][i]root [/etc/postfix] > [/i]telnet 127.0.0.1 25[/b]Trying 127.0.0.1...Connected to 127.0.0.1.Escape character is '^]'.220 mail.lafermeduweb.net ESMTP (Debian/GNU)[b]ehlo VOTRE_DOMAINE[/b]250-mail.VOTRE_DOMAINE250-PIPELINING250-SIZE 10240000250-ETRN250-ENHANCEDSTATUSCODES250-8BITMIME250 DSN[b]mail from: <postmaster@VOTRE_DOMAINE>[/b]250 2.1.0 Ok[b]rcpt to: <contact@VOTRE_DOMAINE>[/b]250 2.1.5 Ok[b]data[/b]354 End data with .[b]Hello ca farte ?.[/b]250 2.0.0 Ok: queued as 286AA8C4089[b]quit[/b]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:
Code:
[i]root [~] >[/i] cat /var/log/mail.logJan 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 ([b]delivered to maildir[/b])Jan 12 14:29:38 F055 postfix/qmgr[26852]: 78F628C4596: removedJan 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.
Code:
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:
Code:
newaliases
 
Installation de courier avec support MySQL


 
Code:
[i]root [~] >[/i] apt-get install courier-base courier-authdaemon courier-authlib-mysql courier-imap courier-pop
Les paquets suivant vont être installés:
Code:
 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.
Code:
[i]root [~] >[/i] nano /etc/courier/authdaemonrc
Modifiez la ligne 27:
Code:
authmodulelist="authmysql"
Sauvegardez et quittez.

Comme pour Postfix, nous allons renseigner les champs et la table MySQL à Courier:
Code:
[i]root [~] >[/i] nano /etc/courier/authmysqlrc
Modifiez les paramètres de cette façon:
Code:
MYSQL_SERVER            localhostMYSQL_USERNAME          postfixMYSQL_PASSWORD          VOTRE_PASS_POSTFIX_MYSQLMYSQL_DATABASE          postfixMYSQL_USER_TABLE        comptesMYSQL_CRYPT_PWFIELD     passwordMYSQL_UID_FIELD         5000MYSQL_GID_FIELD         5000MYSQL_LOGIN_FIELD       emailMYSQL_HOME_FIELD        "/var/spool/vmail/"
Sauvegardez et quittez.

Il faut maintenant rebooter les services de courier pour qu'il prenne en compte nos modifications:
Code:
[b][i]root [~] >[/i] /etc/init.d/courier-authdaemon restart[/b]Stopping Courier authentication services: authdaemond.Starting Courier authentication services: authdaemond.[b][i]root [~] >[/i] /etc/init.d/courier-imap restart[/b]Stopping Courier IMAP server: imapd.Starting Courier IMAP server: imapd.[b][i]root [~] >[/i] /etc/init.d/courier-pop restart[/b]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
Code:
[i]root [~] >[/i] wget http://surfnet.dl.sourceforge.net/sourceforge/roundcubemail/roundcubemail-0.2-stable.tar.gz[i]root [~] >[/i] tar -zxvf roundcubemail-0.2-stable.tar.gz[i]root [~] >[/i] mv roundcubemail-0.2-stable/ /var/www/webmail/
Votre webmail est en place, il faut maintenant le configurer.
Code:
[i]root [~] >[/i] mysql -u root -pmysql> CREATE DATABASE roundcubemail;mysql> GRANT ALL PRIVILEGES ON roundcubemail.* TO roundcube@localhostIDENTIFIED BY 'PASS_ROUNDCUBE';mysql> quit
Notre base de données roundcubemail est créée, il faut maintenant importer les tables
Code:
[i]root [~] >[/i] mysql -u root -p roundcubemail < /var/www/webmail/SQL/mysql.initial.sql
Lancez maintenant votre navigateur web et entrez l'adresse suivante:
Code:
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.
Code:
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.
 
Statut
N'est pas ouverte pour d'autres réponses.
Haut