POSTFIX - Formation Postfix : Différence entre versions

De PedroWiki
Ligne 87 : Ligne 87 :
 
  root@julien:~# postconf -d mydestination
 
  root@julien:~# postconf -d mydestination
 
  mydestination = $myhostname, localhost.$mydomain, localhost
 
  mydestination = $myhostname, localhost.$mydomain, localhost
  root@julien:~# postconf -e mydestination=toto.fr '''==> ON CHOISIT UN DOMAINE POUR LA FORMATION'''
+
  root@julien:~# postconf -e mydestination=ploplo.fr '''==> ON CHOISIT UN DOMAINE POUR LA FORMATION'''
 
  root@julien:~# postconf -d myorigin
 
  root@julien:~# postconf -d myorigin
 
  myorigin = $myhostname
 
  myorigin = $myhostname
  root@julien:~# postconf -e myorigin=toto.fr
+
  root@julien:~# postconf -e myorigin=ploplo.fr
 
  root@julien:~# postconf myhostname
 
  root@julien:~# postconf myhostname
 
  myhostname = julien.localdomain
 
  myhostname = julien.localdomain
Ligne 134 : Ligne 134 :
 
  root@julien:~# newaliases
 
  root@julien:~# newaliases
  
  postconf -e mydomain=toto.fr
+
  postconf -e mydomain=ploplo.fr
 
  postconf -e myhostname=smtp '''=> ce qui est affiché dans la bannière'''
 
  postconf -e myhostname=smtp '''=> ce qui est affiché dans la bannière'''
 
  postconf -e myorigin=\$myhostname.\$mydomain
 
  postconf -e myorigin=\$myhostname.\$mydomain
Ligne 149 : Ligne 149 :
  
 
* '''mydomain''' = définit un domaine à concaténer à myhostname si le hostname n'est pas un FQDN
 
* '''mydomain''' = définit un domaine à concaténer à myhostname si le hostname n'est pas un FQDN
!!! si le myhostname est déjà un FQDN, le mydomain sera la partie terminale du FQDN
+
{{Note|Texte=si le myhostname est déjà un FQDN, le mydomain sera la partie terminale du FQDN}}
 
* '''myorigin''' = valeur par défaut pour completer mail from ou rcpt to...
 
* '''myorigin''' = valeur par défaut pour completer mail from ou rcpt to...
  
Ligne 179 : Ligne 179 :
  
 
On enrichit la manière dont postfix détecte les boites mail.
 
On enrichit la manière dont postfix détecte les boites mail.
 
  
 
  root@julien:~# postconf local_recipient_maps
 
  root@julien:~# postconf local_recipient_maps
Ligne 278 : Ligne 277 :
  
 
== Format des bases de mails ==
 
== Format des bases de mails ==
 +
 +
* '''Format mbox''': vient de sendmail à l'origine. 1 fichier par utilisateur/b.a.l.
 +
* '''Format Maildir''': vient de qmail. 1 répertoire par utilisateur, dans lequel on aura 1 fichier par message.
 +
 +
{{Note|Texte=ATTENTION: on ne change pas SIMPLEMENT d'un format à l'autre, nécessite des conversions, etc}}
 +
 +
Comment bien choisir son format de stockage? (Pb d'accès concurrents à 1 fichier, pb de taille max d'un fichier, etc)
 +
 +
root@julien:~# postconf mail_spool_directory
 +
mail_spool_directory = /var/mail/ '''=> le dernier / après mail indique à Postfix qu'on souhaite utiliser un format Maildir au lieu du format mbox'''
 +
root@julien:~# postconf home_mailbox
 +
home_mailbox = '''=> si on renseigne cette directive, les mails n'iront plus dans un dossier centralisé mais dans un dossier du même nom dans le homedir de l'utilisateur'''
 +
 +
Différents formats utilisés en fonction des serveurs POP/IMAP:
 +
* dovecot: mbox/maildir => d'ou le choix pour la formation
 +
* cyrus-imap: spécifique (fichier séquentiel indexé)
 +
* courrier-imap: maildir
 +
* wu-imap: mbox
 +
 +
== Masquage d'adresse ==
 +
 +
root@julien:~# postconf myorigin
 +
myorigin = $mydomain
 +
root@julien:~# postconf mydomain
 +
mydomain = ploplo.fr
 +
root@julien:~# postconf -e myorigin=\$myhostname
 +
root@julien:~# postconf myorigin
 +
myorigin = $myhostname
 +
root@julien:~# postconf mydomain
 +
mydomain = ploplo.fr
 +
root@julien:~# postconf masquerade_domains
 +
masquerade_domains =
 +
root@julien:~# postconf -e masquerade_domains=\$mydomain
 +
root@julien:~# postfix reload
 +
postfix/postfix-script: refreshing the Postfix mail system
 +
root@julien:~#
 +
 +
* sans masquerade, quand on écrit l'expéditeur est <utilisateur>@<hostname>.<myorigin>
 +
* avec, on n'aura que <utilisateur>@<masquerade domains>
 +
* on peut appliquer le masque à tout sauf certaines adresses: masquerade_domains=!info.ploplo.fr,!compta.ploplo.fr,$mydomain
 +
 +
Exemple pour les réécritures: de jpedrono@ploplo.fr on passe à Julien.Pedrono@ploplo.fr
 +
 +
== Utilisation des alias ==
 +
 +
'''cf schéma 3.'''
 +
 +
On modifie le fichier ''/etc/aliases'' et on le recompile avec newaliases.
 +
 +
== Réécriture d'adresse ==
 +
 +
root@julien:~# postconf canonical_maps
 +
canonical_maps =
 +
root@julien:~# postconf sender_canonical_maps
 +
sender_canonical_maps =
 +
root@julien:~# postconf recipient_canonical_maps
 +
recipient_canonical_maps =
 +
root@julien:~#
 +
 +
* Les canonical_maps gèrent à la fois les réécriture en entrée et en sortie du MTA
 +
* La sender_map gère les réécriture pour la sortie du MTA
 +
* La recipient_map gère les réécriture en entrée du MTA
 +
 +
'''Mettre des exemples des fichiers'''
 +
 +
== Autres interceptions ==
 +
 +
* Utilisation de la directive relocated_maps
 +
 +
root@julien:~# postconf -e relocated_maps=hash:/etc/postfix/reloc
 +
root@julien:~# postfix reload
 +
postfix/postfix-script: refreshing the Postfix mail system
 +
'''root@julien:~# vi /etc/postfix/reloc'''
 +
root@julien:~# postmap /etc/postfix/reloc
 +
root@julien:~# telnet localhost 25
 +
Trying 127.0.0.1...
 +
Connected to localhost.localdomain.
 +
Escape character is '^]'.
 +
220 smtp ESMTP Postfix (Ubuntu)
 +
ehlo julien
 +
250-smtp
 +
250-PIPELINING
 +
250-SIZE 10240000
 +
250-VRFY
 +
250-ETRN
 +
250-ENHANCEDSTATUSCODES
 +
250-8BITMIME
 +
250 DSN
 +
mail from: root
 +
250 2.1.0 Ok
 +
rcpt to: maurice
 +
550 5.1.1 <maurice>: Recipient address rejected: User has moved to maurice@orange.fr
 +
 +
== Utilisation de cyrus-imap ==
 +
 +
root@julien:~# apt-get update
 +
root@julien:~# apt-cache search cyrus
 +
root@julien:~# apt-get install cyrus-common-2.2 cyrus-imapd-2.2
 +
root@julien:~# netstat -tpln
 +
Active Internet connections (only servers)
 +
Proto Recv-Q Send-Q Local Address          Foreign Address        State      PID/Program name
 +
tcp        0      0 127.0.0.1:3306          0.0.0.0:*              LISTEN    3648/mysqld
 +
tcp        0      0 0.0.0.0:110            0.0.0.0:*              LISTEN    8127/cyrmaster
 +
tcp        0      0 0.0.0.0:143            0.0.0.0:*              LISTEN    8127/cyrmaster
 +
tcp        0      0 127.0.0.1:2000          0.0.0.0:*              LISTEN    8127/cyrmaster
 +
tcp        0      0 0.0.0.0:80              0.0.0.0:*              LISTEN    3779/apache2
 +
tcp        0      0 0.0.0.0:119            0.0.0.0:*              LISTEN    8127/cyrmaster
 +
tcp        0      0 0.0.0.0:25              0.0.0.0:*              LISTEN    6408/master
 +
tcp6      0      0 :::110                  :::*                    LISTEN    8127/cyrmaster
 +
tcp6      0      0 :::143                  :::*                    LISTEN    8127/cyrmaster
 +
tcp6      0      0 :::22                  :::*                    LISTEN    3726/sshd
 +
tcp6      0      0 :::119                  :::*                    LISTEN    8127/cyrmaster
 +
root@julien:~#
 +
 +
Installation de SASL:
 +
 +
root@julien:~# apt-cache search sasl
 +
root@julien:~# apt-get install libsasl2
 +
root@julien:~# apt-get install sasl2-bin
 +
root@julien:~# useradd toto '''=> création d'un user toto pour le test'''
 +
root@julien:~# passwd toto
 +
root@julien:~# testsaslauthd -u toto -p toto '''=> pour tester le fonctionnement de sasl'''
 +
root@julien:~# /etc/init.d/saslauthd start '''=> échec'''
 +
root@julien:~# vi /etc/default/saslauthd '''=> passage de l'option de start à yes'''
 +
root@julien:~# /etc/init.d/saslauthd start '''=> OK'''
 +
root@julien:~# testsaslauthd -u toto -p toto '''=> OK'''
 +
 +
Modification de la configuration d'imapd: (''/etc/imapd.conf'')
 +
 +
sasl_mech_list: PLAIN
 +
sasl_pwcheck_method: saslauthd
 +
 +
Configuration de sasl: (''/etc/default/saslauthd'')
 +
Utilise déjà PAM par défaut
 +
 +
* Pb pour telnet sur port 110, juste ouverture du socket
 +
* Examen de /var/log/syslog
 +
* Pb pour trouver l'executable pop et nntp:
 +
 +
root@julien:~# apt-get install cyrus-pop3d-2.2
 +
 +
intégration de SASL pour Cyrus OK, pb d'existance de boite mail pour mon utilisateur de test (toto/toto).
 +
 +
Utilisation de cyradm:
 +
 +
On utilise le format de boites mails cyrus (fichier séquentiel indexé) pour les mailboxes, donc on utilise cyrus afin de créer la boite d'un user
 +
 +
root@julien:~# grep cyrus /etc/passwd
 +
cyrus:x:106:8:Cyrus Mailsystem User,,,:/var/spool/cyrus:/bin/sh
 +
root@julien:~# passwd cyrus
 +
Enter new UNIX password:
 +
Retype new UNIX password:
 +
passwd: password updated successfully
 +
root@julien:~# ps faux|grep cyrus
 +
root    10670  0.0  0.1  2884  752 pts/0    S+  09:34  0:00  |      \_ grep cyrus
 +
'''cyrus'''    8569  0.0  0.4  7752  2448 ?        Ss  Sep22  0:00 /usr/sbin/cyrmaster -d
 +
cyrus    8574  0.0  0.2  24260  1456 ?        S    Sep22  0:00  \_ notifyd
 +
root@julien:~# man cyradm
 +
Reformatting cyradm(1p), please wait...
 +
root@julien:~# cyradm --user cyrus localhost
 +
IMAP Password:
 +
              localhost.localdomain> cm user.toto ''=> cm pour Create Mailbox''
 +
createmailbox: Permission denied
 +
localhost.localdomain> quit
 +
root@julien:~# vi /etc/imapd.conf '''=> on décommente admin=cyrus dans la conf et on recommence'''
 +
root@julien:~# /etc/init.d/cyrus2.2 restart
 +
Stopping Cyrus IMAPd: cyrmaster.
 +
Waiting for complete shutdown...
 +
Starting Cyrus IMAPd: cyrmaster.
 +
root@julien:~# cyradm --user cyrus localhost
 +
IMAP Password:
 +
              localhost.localdomain> cm user.toto
 +
localhost.localdomain>
 +
 +
A cette étape, toto est un compte système et a une mailbox dans cyrus.
 +
 +
On continue l'exemple sur un compte système pour ne pas s'embeter avec un autre système de profil pour l'instant.

Version du 23 septembre 2008 à 17:45

Introduction

  • Postfix créé sur une rumeur de faille de sécu de sendmail, par Paul Vixie.
  • Création dans un souci de sécurité.
  • Postfix est un MTA constitué de plusieurs programmes indépendants, "ne se faisant pas confiance mutuellement".
  • Postfix prêt à fonctionner quasi out of the box.
  • Dans un premier temps, création de boite = création de compte système.
  • Après, autres besoins sans utiliser de comptes systèmes, intégration de mysql par exemple => entraine besoin de recompilation de postfix sur des plateforme style Red Hat car fonctionnalité non incluse de base dans le package.
  • Voir qemu/kvm (pour proc gérant virtualisation matérielle) pour virtualisation sous linux.

Vue d'ensemble d'un MTA

Comptes utilisateurs

Postfix utilise donc des comptes système ou des comptes virtuels.

Comptes virtuels:

  • stockage local (mbox, maildir) OU
  • stockage externe (fichier séquentiel indexé, mysql..., non géré par défaut par le MTA)

Comptes virtuels:

  • domaines partagés OU
  • domaines séparés
    • stockage local OU
    • stockage externe

cf Schéma 1

Introduction aux commandes de protocole

  • Exemple d'utilisation de la commande telnet
  • Toujours un code de retour aux commandes SMTP:
    • 2xx: OK
    • 3xx: informations
    • 4xx: erreurs temporaires
    • 5xx: erreurs fatales
  • Commandes SMTP:
    • ehlo <mon_hostname> dialogue en ESMTP
    • helo dialogue en SMTP
    • vrfy vérification existance d'un utilisateur, habituellement désactivé pour sécurité /SPAM
    • mail from ENVELOPPE
    • rcpt to ENVELOPPE (possibilité de répéter mail from et rcpt to dans le corps)
    • data CORPS DU MESSAGE
    • Subject
  • Commandes POP:
    • user
    • pass
    • list
    • retr

Installation de postfix

Installation du package

apt-get install postfix

Pas de configuration, on va la faire à la main.

Configuration de postfix

Conf dans /etc/postfix/.

Comme on n'a rien configuré lors de l'installation, besoin de récupérer un fichier de conf vierge (ou de le créer):

cp /usr/share/postfix/main.cf.debian /etc/postfix/main.cf
vi /etc/postfix/main.cf

Pour éliminer les lignes vides et les lignes de commentaires pour ne récupèrer que les directives de conf:

egrep -v "^$|^#" /etc/postfix/main.cf

Commande postconf: pour connaitre la configuration (totale) de postfix.

postconf <directive>: pour connaitre la valeur d'UNE directive:

root@julien:~# postconf swap_bangpath
swap_bangpath = yes

postconf -d <directive>: pour connaitre la valeur par défaut avant surcharge.

postconf -n: pour connaitre les valeurs différentes de celles par défaut (en gros, celles du main.cf)

postconf -e <directive>=valeur: pour éditer les valeurs des directives (modif du fichier de conf).

Fiche.png NB : Attention, l'édition des paramètres par postconf -e nécessite un reload ou restart de postfix!
root@julien:~# postconf -d mydestination
mydestination = $myhostname, localhost.$mydomain, localhost
root@julien:~# postconf -e mydestination=ploplo.fr ==> ON CHOISIT UN DOMAINE POUR LA FORMATION
root@julien:~# postconf -d myorigin
myorigin = $myhostname
root@julien:~# postconf -e myorigin=ploplo.fr
root@julien:~# postconf myhostname
myhostname = julien.localdomain
Fiche.png NB : Attention, $myhostname n'est pas obligatoire, postfix prend le hostname réel du serveur, par défaut!
root@julien:~# postconf -e myhostname=<FQDN du serveur>

Si on n'a pas le FQDN du serveur dans myhostname, et que mydomain est renseigné, concaténation de myorigin et mydomain.

  • myhostname: si vide prend le hostname par défaut.
  • myorigin: pour completer les adresses quand on entre 1 user sans domaine.
  • mydomain: pour faire correspondre 1 domaine de délivrance à ce serveur.
  • mydestination: contient au moins mydomain + tous les autres domaines que le serveur délivre.

Possibilité de mettre 1 ligne de conf sur plusieurs lignes, si les lignes secondaires comportent des espaces ou des tabulations en début de ligne.

Fiche.png NB : ATTENTION DE NE PAS PLACER D'ESPACES OU DE TABULATION EN DEBUT DE LIGNE (QUAND ON DECOMMENTE PAR EXEMPLE)
Fiche.png NB : ATTENTION DE NE PAS UTILISER DE DIRECTIVE N'EXISTANT PAS, SINON POSTCONF LA CREE...)

Pb au start de postfix: des lignes décommentées dans /etc/postfix/main.cf sans valeur associées:

  • recommenter les lignes OU
  • fixer des valeurs OU
root@julien:~# postconf -n|grep -v "= *$" > /etc/postfix/main.cf 
==> on récupère la configuration actuelle, on en élimine les lignes ou les paramètres ne sont pas renseignés et on les réécrit dans le main.cf
Fiche.png NB : ATTENTION POSTFIX ECOUTE SUR L'INTERFACE PUBLIQUE)
root@julien:~# postconf -d inet_interfaces
inet_interfaces = all => à changer en localhost pour ne relayer que les mails locaux
Fiche.png NB : ATTENTION PB POUR ATTAQUER LE PORT 25)

Nous n'avons pas de pb réseau, après examen des logs:

==> /var/log/mail.info <==
Sep 22 13:50:03 julien postfix/smtpd[5653]: fatal: open database /etc/aliases.db: No such file or directory

Comme /etc/aliases existe il faut regénérer le fichier .db associé

root@julien:~# newaliases
postconf -e mydomain=ploplo.fr
postconf -e myhostname=smtp => ce qui est affiché dans la bannière
postconf -e myorigin=\$myhostname.\$mydomain
postconf -e myorigin=\$mydomain
postfix reload
  • mydestination = liste des domaines gérés par postfix, domaines des messages pour lesquels postfix acceptera des mails (en délivrance locale).
Fiche.png NB : Par défaut Postfix est configuré pour NE PAS ETRE un relai ouvert (Open Relay)
  • relay_domains = liste des domaines gérés en tant que relay.
  • relayhost = machine à qui envoyer des mails pour relay vers l'extérieur quand le postfix ne peut pas directement contacter internet.
Fiche.png NB : Si on veut accepter de relayer pour d'autres réseaux (au sens IP) il existe la directive mynetworks

cf schéma 2

  • mydomain = définit un domaine à concaténer à myhostname si le hostname n'est pas un FQDN
Fiche.png NB : si le myhostname est déjà un FQDN, le mydomain sera la partie terminale du FQDN
  • myorigin = valeur par défaut pour completer mail from ou rcpt to...

Configuration avancée de Postfix

Plan

  • Vérification des boites
  • Distribution du courrier (sans pop)
  • Gestion des adresses (alias)
  • Multi domaines
  • Filtrage de contenu
  • Relayage/Authentification

Vérification des boites

root@julien:~# postconf local_recipient_maps
local_recipient_maps = proxy:unix:passwd.byname $alias_maps
root@julien:~#

Désigne à postfix la manière de rechercher les boites existantes (d'abord les comptes unix puis la directive alias_maps).

root@julien:~# postconf alias_maps
alias_maps = hash:/etc/aliases, nis:mail.aliases
root@julien:~#
root@julien:~# postconf -e local_recipient_maps='proxy:unix:passwd.byname $alias_maps hash:/etc/postfix/mesusers'
root@julien:~#

On enrichit la manière dont postfix détecte les boites mail.

root@julien:~# postconf local_recipient_maps
local_recipient_maps = proxy:unix:passwd.byname $alias_maps hash:/etc/postfix/mesusers
root@julien:~# more /etc/postfix/mesusers
julien  ok
davy    ok
roderick        ok
root@julien:~#

On associe 1 clé avec 1 valeur (pour l'instant on s'occupe surtout de la clé). On a besoin de "compiler" cette "base de donnée":

root@julien:~# postmap /etc/postfix/mesusers
root@julien:~# ls -la /etc/postfix/mesusers*
-rw-r--r-- 1 root root    30 2008-09-22 15:54 /etc/postfix/mesusers
-rw-r--r-- 1 root root 12288 2008-09-22 15:55 /etc/postfix/mesusers.db
root@julien:~#

hash pour désigner un fichier compilé de relations clé-valeur.

Pour avoir la liste des formats:

root@julien:~# postconf -m
btree
cidr
environ
hash
nis
proxy
regexp
sdbm
static
tcp
unix
root@julien:~#

On vérifie qu'on a le user davy que dans notre nouvelle base:

root@julien:~# id davy
id: davy: No such user
root@julien:~# grep davy /etc/aliases
root@julien:~# grep davy /etc/postfix/mesusers
davy    ok
root@julien:~# postfix reload
postfix/postfix-script: refreshing the Postfix mail system
root@julien:~#

On peut tester:

root@julien:~# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
220 smtp ESMTP Postfix (Ubuntu)
ehlo julien
250-smtp
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
mail from: toto@titi.fr
250 2.1.0 Ok
rcpt to: davy
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
Subject: teststststst
liheugh
hezkfugze
ihzef
.
250 2.0.0 Ok: queued as 70FA3BA4E
quit
221 2.0.0 Bye
Connection closed by foreign host.
root@julien:~#

A cette étape, qu'est devenu le mail?

root@julien:~# postconf mail_spool_directory
mail_spool_directory = /var/mail

On voit dans les logs que ce user n'est pas reconnu...

root@julien:~# ls -la /var/mail
total 16
drwxrwsr-x  2 root  mail 4096 2008-09-22 16:00 .
drwxr-xr-x 15 root  root 4096 2008-05-05 16:58 ..
-rw-------  1 jules mail 4940 2008-09-22 16:03 jules
root@julien:~#

Ici le fichier des mails de jules est un fichier qui appartient au user jules. Adresse reconnue par postfix et par le système. Pour davy, adresse reconnue par postfix (via mesusers.db) mais pas par le système.

Format des bases de mails

  • Format mbox: vient de sendmail à l'origine. 1 fichier par utilisateur/b.a.l.
  • Format Maildir: vient de qmail. 1 répertoire par utilisateur, dans lequel on aura 1 fichier par message.
Fiche.png NB : ATTENTION: on ne change pas SIMPLEMENT d'un format à l'autre, nécessite des conversions, etc

Comment bien choisir son format de stockage? (Pb d'accès concurrents à 1 fichier, pb de taille max d'un fichier, etc)

root@julien:~# postconf mail_spool_directory
mail_spool_directory = /var/mail/ => le dernier / après mail indique à Postfix qu'on souhaite utiliser un format Maildir au lieu du format mbox
root@julien:~# postconf home_mailbox
home_mailbox = => si on renseigne cette directive, les mails n'iront plus dans un dossier centralisé mais dans un dossier du même nom dans le homedir de l'utilisateur

Différents formats utilisés en fonction des serveurs POP/IMAP:

  • dovecot: mbox/maildir => d'ou le choix pour la formation
  • cyrus-imap: spécifique (fichier séquentiel indexé)
  • courrier-imap: maildir
  • wu-imap: mbox

Masquage d'adresse

root@julien:~# postconf myorigin
myorigin = $mydomain
root@julien:~# postconf mydomain
mydomain = ploplo.fr
root@julien:~# postconf -e myorigin=\$myhostname
root@julien:~# postconf myorigin
myorigin = $myhostname
root@julien:~# postconf mydomain
mydomain = ploplo.fr
root@julien:~# postconf masquerade_domains
masquerade_domains =
root@julien:~# postconf -e masquerade_domains=\$mydomain
root@julien:~# postfix reload
postfix/postfix-script: refreshing the Postfix mail system
root@julien:~#
  • sans masquerade, quand on écrit l'expéditeur est <utilisateur>@<hostname>.<myorigin>
  • avec, on n'aura que <utilisateur>@<masquerade domains>
  • on peut appliquer le masque à tout sauf certaines adresses: masquerade_domains=!info.ploplo.fr,!compta.ploplo.fr,$mydomain

Exemple pour les réécritures: de jpedrono@ploplo.fr on passe à Julien.Pedrono@ploplo.fr

Utilisation des alias

cf schéma 3.

On modifie le fichier /etc/aliases et on le recompile avec newaliases.

Réécriture d'adresse

root@julien:~# postconf canonical_maps
canonical_maps =
root@julien:~# postconf sender_canonical_maps
sender_canonical_maps =
root@julien:~# postconf recipient_canonical_maps
recipient_canonical_maps =
root@julien:~#
  • Les canonical_maps gèrent à la fois les réécriture en entrée et en sortie du MTA
  • La sender_map gère les réécriture pour la sortie du MTA
  • La recipient_map gère les réécriture en entrée du MTA

Mettre des exemples des fichiers

Autres interceptions

  • Utilisation de la directive relocated_maps
root@julien:~# postconf -e relocated_maps=hash:/etc/postfix/reloc
root@julien:~# postfix reload
postfix/postfix-script: refreshing the Postfix mail system
root@julien:~# vi /etc/postfix/reloc
root@julien:~# postmap /etc/postfix/reloc
root@julien:~# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
220 smtp ESMTP Postfix (Ubuntu)
ehlo julien
250-smtp
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
mail from: root
250 2.1.0 Ok
rcpt to: maurice
550 5.1.1 <maurice>: Recipient address rejected: User has moved to maurice@orange.fr

Utilisation de cyrus-imap

root@julien:~# apt-get update
root@julien:~# apt-cache search cyrus
root@julien:~# apt-get install cyrus-common-2.2 cyrus-imapd-2.2
root@julien:~# netstat -tpln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN     3648/mysqld
tcp        0      0 0.0.0.0:110             0.0.0.0:*               LISTEN     8127/cyrmaster
tcp        0      0 0.0.0.0:143             0.0.0.0:*               LISTEN     8127/cyrmaster
tcp        0      0 127.0.0.1:2000          0.0.0.0:*               LISTEN     8127/cyrmaster
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN     3779/apache2
tcp        0      0 0.0.0.0:119             0.0.0.0:*               LISTEN     8127/cyrmaster
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN     6408/master
tcp6       0      0 :::110                  :::*                    LISTEN     8127/cyrmaster
tcp6       0      0 :::143                  :::*                    LISTEN     8127/cyrmaster
tcp6       0      0 :::22                   :::*                    LISTEN     3726/sshd
tcp6       0      0 :::119                  :::*                    LISTEN     8127/cyrmaster
root@julien:~#

Installation de SASL:

root@julien:~# apt-cache search sasl
root@julien:~# apt-get install libsasl2
root@julien:~# apt-get install sasl2-bin
root@julien:~# useradd toto => création d'un user toto pour le test
root@julien:~# passwd toto
root@julien:~# testsaslauthd -u toto -p toto => pour tester le fonctionnement de sasl
root@julien:~# /etc/init.d/saslauthd start => échec
root@julien:~# vi /etc/default/saslauthd => passage de l'option de start à yes
root@julien:~# /etc/init.d/saslauthd start => OK
root@julien:~# testsaslauthd -u toto -p toto => OK

Modification de la configuration d'imapd: (/etc/imapd.conf)

sasl_mech_list: PLAIN
sasl_pwcheck_method: saslauthd

Configuration de sasl: (/etc/default/saslauthd) Utilise déjà PAM par défaut

  • Pb pour telnet sur port 110, juste ouverture du socket
  • Examen de /var/log/syslog
  • Pb pour trouver l'executable pop et nntp:
root@julien:~# apt-get install cyrus-pop3d-2.2

intégration de SASL pour Cyrus OK, pb d'existance de boite mail pour mon utilisateur de test (toto/toto).

Utilisation de cyradm:

On utilise le format de boites mails cyrus (fichier séquentiel indexé) pour les mailboxes, donc on utilise cyrus afin de créer la boite d'un user

root@julien:~# grep cyrus /etc/passwd
cyrus:x:106:8:Cyrus Mailsystem User,,,:/var/spool/cyrus:/bin/sh
root@julien:~# passwd cyrus
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
root@julien:~# ps faux|grep cyrus
root     10670  0.0  0.1   2884   752 pts/0    S+   09:34   0:00  |       \_ grep cyrus
cyrus     8569  0.0  0.4   7752  2448 ?        Ss   Sep22   0:00 /usr/sbin/cyrmaster -d
cyrus     8574  0.0  0.2  24260  1456 ?        S    Sep22   0:00  \_ notifyd
root@julien:~# man cyradm
Reformatting cyradm(1p), please wait...
root@julien:~# cyradm --user cyrus localhost
IMAP Password:
              localhost.localdomain> cm user.toto => cm pour Create Mailbox
createmailbox: Permission denied
localhost.localdomain> quit
root@julien:~# vi /etc/imapd.conf => on décommente admin=cyrus dans la conf et on recommence
root@julien:~# /etc/init.d/cyrus2.2 restart
Stopping Cyrus IMAPd: cyrmaster.
Waiting for complete shutdown...
Starting Cyrus IMAPd: cyrmaster.
root@julien:~# cyradm --user cyrus localhost
IMAP Password:
              localhost.localdomain> cm user.toto
localhost.localdomain>

A cette étape, toto est un compte système et a une mailbox dans cyrus.

On continue l'exemple sur un compte système pour ne pas s'embeter avec un autre système de profil pour l'instant.