Postfix : Différence entre versions

De Wiki NCad
Aller à : navigation, rechercher
(Test du serveur SMTP en local)
Ligne 109 : Ligne 109 :
  
 
== Options et modules ==
 
== Options et modules ==
 +
 +
=== Authentification MySQL ===
 +
 +
==== Création de la base de données ====
 +
 +
==== Création du fichier mysql_relay_domains_maps.cf ====
 +
 +
user = postfix
 +
password = motdepassebasemysqlpourpostfix
 +
hosts = 192.168.1.123
 +
dbname = postfix
 +
query = SELECT domain FROM domain WHERE domain='%s' and backupmx = '1'
 +
 +
==== Création du fichier mysql_virtual_alias_maps.cf ====
 +
 +
user = postfix
 +
password = motdepassebasemysqlpourpostfix
 +
hosts = 192.168.1.123
 +
dbname = postfix
 +
query = SELECT goto FROM alias WHERE address='%s' AND active = 1
 +
 +
==== Création du fichier mysql_virtual_domains_maps.cf ====
 +
 +
user = postfix
 +
password = motdepassebasemysqlpourpostfix
 +
hosts = 192.168.1.123
 +
dbname = postfix
 +
query = SELECT domain FROM domain WHERE domain='%s'
 +
 +
==== Création du fichier mysql_virtual_mailbox_limit_maps.cf ====
 +
 +
user = postfix
 +
password = dSv29GMdxGWDVr2U
 +
hosts = murdoc.net.ncad.fr
 +
dbname = postfix
 +
query = SELECT quota FROM mailbox WHERE username='%s'
 +
 +
==== Création du fichier mysql_virtual_mailbox_maps.cf ====
 +
 +
user = postfix
 +
password = dSv29GMdxGWDVr2U
 +
hosts = murdoc.net.ncad.fr
 +
dbname = postfix
 +
query = SELECT maildir FROM mailbox WHERE  CONCAT(username,'@',domain)='%s' AND active = 1
  
 
=== Ajout d'un disclaimer ===
 
=== Ajout d'un disclaimer ===
  
 
Le module [[:Altermime]] permet d'ajouter un texte qui sera ajouté à chaque fin de message. Il est possible de régler le disclaimer en fonction du nom de domaine et de l'activer pour une boîte mail précise ou tout un domaine.
 
Le module [[:Altermime]] permet d'ajouter un texte qui sera ajouté à chaque fin de message. Il est possible de régler le disclaimer en fonction du nom de domaine et de l'activer pour une boîte mail précise ou tout un domaine.

Version du 29 janvier 2014 à 21:55

Présentation

Postfix est un serveur mail SMTP (Simple Mail Transfer Protocol) appelé aussi MTA pour Mail Transport Agent. Son rôle est d'assurer le traitement des mails aussi bien à l'envoi qu'à la réception.

Pour que les utilisateurs puissent récupérer leur message, Postfix devra être couplé à un service de relève de message basé sur le protocole POP (Post Office Protocol) et/ou IMAP (Internet Message Access Protocol). Nous utiliseront le service courier. L'authentification des utilisateurs sur le serveur mail s'effectuera par l'intermédiaire du daemon saslauth.

Installation

Il sera nécessaire d'installer les services suivants :

  • Postfix, qui est le MTA;
  • Courier-Pop, qui est le serveur POP pour la récupération des messages par l'utilisateur via un client de messagerie;
  • Courier-Imap, qui est le serveur IMAP pour la récupération des messages par l'utilisateur via un client de messagerie ou un webmail;
  • Saslauth, qui est le service d'authentification des utilisateurs.
ICON Terminal.png

apt-get install postfix courier-pop courier-imap sasl2-bin procmail

Le but de l'authentification des utilisateurs est d'éviter que le serveur SMTP soit utilisé à tord par des utilisateurs mal intentionnés pour diffuser du SPAM.

Configuration

Postfix

Fichier main.cf

  • Le fichier de configuration main.cf contient les éléments de configuration sur le MTA Postfix.
smtpd_banner = $myhostname ESMTP $mail_name
biff = no

append_dot_mydomain = no

readme_directory = no

myhostname = demo.ncad.me
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = localhostdemo.ncad.me, localhost, demo.ncad.me
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/124 [::1]/128
mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 5120000
recipient_delimiter = +
inet_interfaces = all
message_size_limit = 10240000

Ces informations permettent un fonctionnement minimal de Postfix sans aucune sécurité.

ICON boxWarning.png

Ce type de configuration est à proscrire dans un environnement de production.

  • Pour que les éléments de configuration ci-dessus soient pris en compte, il faut redémarrer le service Postfix :
ICON Terminal.png

sudo service postfix restart

Test du serveur SMTP en local

  • Nous pouvons vérifier le bon fonctionnement du serveur SMTP en s'y connectant depuis la commande telnet :
ICON Terminal.png

telnet 127.0.0.1 25

  • Le serveur répondra par un code 220 contenant la bannière qui a été définit au paramètre smtpd_banner dans le fichier main.cf.
ICON Terminal.png

demo@demo:/etc/postfix$ telnet 127.0.0.1 25
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
220 demo.ncad.me ESMTP Postfix

  • Pour valider son fonctionnement, nous allons envoyer un mail. Commençons d'abord par indiquer notre adresse mail émetteur :
ICON Terminal.png

mail from:<demo@localhost>

  • Le serveur acquittant avec le code 250, nous pouvons maintenant indiquer l'adresse de l'expéditeur :
ICON Terminal.png

rcpt to:<demo@localhost>

  • Le serveur doit acquitter également avec le code 250. Maintenant nous allons rédiger le contenu du mail. Pour cela, il faut saisir la commande data :
ICON Terminal.png

data

  • Le serveur répondra par :
ICON Terminal.png

354 End data with <CR><LF>.<CR><LF>

  • Dès lors, nous pouvons maintenant rédiger notre mail. La touche Entrée est interprété comme un retour à la ligne dans le mail.
ICON Terminal.png

test d'envoi / réception
Merci ;)

  • Le mail rédigé, on revient à la ligne avec la touche Entrée, puis on saisie un point (.) et on appui de nouveau sur la touche Entrée :
ICON Terminal.png

.

  • Le serveur valide la mise en attente de distribution du mail et retourne son numéro d'identifiant quand le file d'attente :
ICON Terminal.png

250 2.0.0 Ok: queued as C01187F9FA

Remarques sur la sécurité

Suite au test du point précédent, nous pouvons faire les remarques suivantes :

  • Il est possible d'indiquer n'importe quel adresse émetteur.
  • Aucun identifiant / mot de passe n'est requis pour se connecter au serveur SMTP.

Les deux points ci-dessus sont importants. Ils caractérisent un serveur mail vulnérable pouvant être utilisé comme relai de messagerie. En effet, le serveur mail accepte de délivrer les messages quelques soit l'émetteur (qu'il existe ou pas) et sans demander d'identifiants de connexion.

Un relai de messagerie est un serveur mail utilisé pour relayer les messages quelques soit l'émetteur. Le comportement "normal" d'un serveur est de traiter uniquement les messages en provenance ou a destination des boîtes aux lettres dont il a la charge.

L'utilisation de relai de messagerie pour l'utilisateur final permet de pouvoir diffuser du spam sans avoir à se soucier de la réputation de l'adresse IP de son serveur mail. En effet, il existe plusieurs blacklistes sur Internet et utilisées par des antispam sur les serveurs mails des opérateurs. Ces blacklistes recensent toutes les IPs ou noms de domaines diffuseurs de SPAM. Dans le cas présent, l'IP incriminé n'est pas celle du serveur mail de l'utilisateur finale mais plutôt celle du serveur mail relai.

Options et modules

Authentification MySQL

Création de la base de données

Création du fichier mysql_relay_domains_maps.cf

user = postfix
password = motdepassebasemysqlpourpostfix
hosts = 192.168.1.123
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%s' and backupmx = '1'

Création du fichier mysql_virtual_alias_maps.cf

user = postfix
password = motdepassebasemysqlpourpostfix
hosts = 192.168.1.123
dbname = postfix
query = SELECT goto FROM alias WHERE address='%s' AND active = 1

Création du fichier mysql_virtual_domains_maps.cf

user = postfix
password = motdepassebasemysqlpourpostfix
hosts = 192.168.1.123
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%s'

Création du fichier mysql_virtual_mailbox_limit_maps.cf

user = postfix
password = dSv29GMdxGWDVr2U
hosts = murdoc.net.ncad.fr
dbname = postfix
query = SELECT quota FROM mailbox WHERE username='%s'

Création du fichier mysql_virtual_mailbox_maps.cf

user = postfix
password = dSv29GMdxGWDVr2U
hosts = murdoc.net.ncad.fr
dbname = postfix
query = SELECT maildir FROM mailbox WHERE  CONCAT(username,'@',domain)='%s' AND active = 1

Ajout d'un disclaimer

Le module Altermime permet d'ajouter un texte qui sera ajouté à chaque fin de message. Il est possible de régler le disclaimer en fonction du nom de domaine et de l'activer pour une boîte mail précise ou tout un domaine.