Ce document présente l'installation d'un serveur Postfix utilisé avec une base d'utilisateurs virtuels gérée par Courier-utils. L'accès aux boîtes se fait en Imap avec Courier-Imap. Tous les courriels sont visés par le couple antispam-antivirus formé par SpamAssassin et ClamAV. L'authentification sur le serveur se fera grâce Cyrus SASL 2.
Cyrus-SASL utilise différents backends pour faire son travail d'authentification. Utilisant Courier-Imap et une base userdb, nous allons utiliser le backend authdaemond. Pour cela nous devons indiquer les bonnes options de compilations au Makefile du port du logiciel qui n'a pas ce backend par défaut
Extrait du Makefile :
CONFIGURE_ARGS+= --with-saslauthd="/var/sasl2" \
--with-authdaemon \
--with-authdaemond="/var/run/courier-imap" \
--enable-gssapi="/usr" \
--with-gss_impl="heimdal" \
--enable-login \
--enable-plain \
--enable-static \
--disable-sample
J'ai rajouté les deux lignes contenant "authdaemon" et "authdaemond", la deuxième indiquant l'endroit où "authdaemond" doit viser la socket de courier-imap.
Maintenant que Cyrus-SASL est compilé et installé, vous devez créer le fichier /usr/local/lib/sasl2/smtpd.conf qui doit contenir ceci :
mech_list: plain login pwcheck_method: authdaemond authdaemond_path: /var/run/courier-imap/socket auto_transition: no
Avant d'installer le serveur et comme nous allons utiliser le protocole smtp dans sa version sécurisée, nous devons tout d'abord rajouter au fichier /etc/services le port sur lequel se situe le smtps, habituellement le 465. Rajoutez donc les lignes suivantes :
$ grep 465 /etc/services smtps 465/tcp smtps 465/udp
Maintenant installez Postfix comme vous en avez l'habitude :
$ cd /usr/ports/mail/postfix/snapshot $ make show=FLAVORS sasl2 ldap mysql pgsql $ env FLAVOR="sasl2" sudo make install clean-depends
Attention, suivez bien les recommandations post-installation. D'abord commentez, dans la crontab de root la ligne suivante :
# sendmail clientmqueue runner #*/30 * * * * /usr/sbin/sendmail -L sm-msp-queue -Ac -q
Puis validez Postfix en tant que MTA par défaut :
$ sudo /usr/local/sbin/postfix-enable
Enfin, rajoutez ces deux lignes dans /etc/rc.conf.local :
sendmail_flags="-bd -q30m" syslogd_flags="-a /var/spool/postfix/dev/log"
Editez le fichier /etc/postfix/main.cf comme suit en remplaçant les paramètres à votre convenance (le fichier est commenté) :
#
# utilisateur et groupe de Postfix
#
mail_owner = _postfix
setgid_group = _postdrop
#
# paths
#
queue_directory = /var/spool/postfix
command_directory = /usr/local/sbin
daemon_directory = /usr/local/libexec/postfix
sendmail_path = /usr/local/sbin/sendmail
newaliases_path = /usr/local/sbin/newaliases
mailq_path = /usr/local/sbin/mailq
html_directory = /usr/local/share/doc/postfix/html
manpage_directory = /usr/local/man
sample_directory = /etc/postfix
readme_directory = /usr/local/share/doc/postfix/readme
#
# comme le domaine est virtuel (cf. plus bas) son nom ne doit pas
# apparaître dans $mydestination, ce paramètre est donc
# réduit à la part congrue
#
myhostname = mail.domain.com
myorigin = domain.com
mydestination = localhost.localdomain
mynetworks = 192.168.1.0/24, 127.0.0.0/8
#
# configuration de local
#
alias_maps = hash:/etc/postfix/aliases
alias_database = hash:/etc/postfix/aliases
home_mailbox = Maildir/
unknown_local_recipient_reject_code=450
#
# respect de la RFC
#
smtpd_banner = $myhostname ESMTP $mail_name
#
# debug
#
debug_peer_level = 1
debug_peer_list = 127.0.0.1
debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin; export PATH; (echo cont;
echo where) | gdb $daemon_directory/$process_name $process_id 2>&1
>$config_directory/$process_name.$process_id.log & sleep 5
#
# paramètres sasl
#
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
broken_sasl_auth_clients = yes
#
# paramètres de smtpd, restrictions par authentification
#
smtpd_recipient_restrictions = permit_sasl_authenticated,
permit_mynetworks, reject_unauth_destination
smtpd_clients_restrictions = permit_sasl_authenticated,
permit_mynetworks, reject_unauth_destination
# table contenant les utilisateurs virtuels autorisés à
# se connecter, vous devrez placer le nom de chacun des utilisateurs
# nouvellement créé dans cette table
smtpd_sender_login_maps = hash:/etc/postfix/virtual/login_maps
smtpd_sender_restrictions = reject_sender_login_mismatch
#
# paramètres TLS
#
smtpd_use_tls = yes
smtpd_tls_key_file = /etc/postfix/ssl/smtpd.pem
smtpd_tls_cert_file = /etc/postfix/ssl/smtpd.pem
smtpd_tls_CAfile = /etc/postfix/ssl/smtpd.pem
smtpd_tls_CApath = /etc/postfix/ssl
smtpd_tls_loglevel = 1
smtpd_tls_auth_only = yes
smtpd_tls_session_cache_database = btree:/etc/postfix/smtpd_scache
smtpd_tls_session_cache_timeout = 3600s
tls_daemon_random_source = dev:/dev/urandom
#
# les mails entrant sont forwardés au daemon amavis celui-ci
# les redonne à postfix une fois analysés grâce au
# protocole lmtp, toujours sur localhost
#
content_filter = smtp-amavis:[127.0.0.1]:10024
#
# virtualisation des comptes, aliases, redirections et des domaines.
# Le transport, virtuel, se fait par maildrop utilisé surtout
# pour dispatcher les messages marqués par SpamAssassin dans
# les boîtes "Junk"
#
maildrop_destination_recipient_limit = 1
virtual_transport = maildrop
# virtual_mailbox_domains contient tous les domaines acceptés
# soit directement soit dans un fichier db/dbm, ici la première
# solution a été choisie
virtual_mailbox_domains = domain.com
virtual_mailbox_base = /home/vmail
# table contenant toutes les boîtes mails des utilisateurs
virtual_mailbox_maps = hash:/etc/postfix/virtual/virtual_mailbox
# table contenant les alias et les redirections des comptes mails
virtual_alias_maps = hash:/etc/postfix/virtual/virtual_alias
virtual_uid_maps = static:1018
virtual_gid_maps = static:1018
virtual_minimum_uid = 1000
virtual_mailbox_limit = 0
Passons au fichier /etc/postfix/master.cf. Il a été choisi de chrooter au maximum Postfix, aussi faites attention, si vous avez la moindre erreur après, cela viendra certainement du chroot. Je vous conseille d'abord de le désactiver (en changeant les "y" en "n") puis de l'activer progressivement en vérifiant les logs.
#
# Postfix master process configuration file. For details on the format
# of the file, see the Postfix master(5) manual page.
#
# ==========================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (100)
# ==========================================================================
smtp inet n - y - - smtpd
submission inet n - y - - smtpd
-o smtpd_etrn_restrictions=reject
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
smtps inet n - y - - smtpd
-o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes
submission inet n - y - - smtpd
-o smtpd_etrn_restrictions=reject
-o smtpd_enforce_tls=yes -o smtpd_sasl_auth_enable=yes
#628 inet n - - - - qmqpd
pickup fifo n - y 60 1 pickup
cleanup unix n - y - 0 cleanup
qmgr fifo n - y 300 1 qmgr
#qmgr fifo n - - 300 1 oqmgr
tlsmgr unix - - n 300 1 tlsmgr
rewrite unix - - y - - trivial-rewrite
bounce unix - - y - 0 bounce
defer unix - - y - 0 bounce
trace unix - - y - 0 bounce
verify unix - - y - 1 verify
flush unix n - - 1000? 0 flush
proxymap unix - - n - - proxymap
smtp unix - - y - - smtp
# When relaying mail as backup MX, disable fallback_relay to avoid MX loops
relay unix - - y - - smtp
-o fallback_relay=
# -o smtp_helo_timeout=5 -o smtp_connect_timeout=5
showq unix n - y - - showq
error unix - - y - - error
discard unix - - y - - discard
local unix - n n - - local
virtual unix - n n - - virtual
lmtp unix - - y - - lmtp
anvil unix - - y - 1 anvil
scache unix - - y - 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/local/bin/maildrop -d ${recipient}
# Amavis
smtp-amavis unix - - - - 2 lmtp
-o smtp_data_done_timeout=1200
-o disable_dns_lookups=yes
127.0.0.1:10025 inet n - - - - smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_client_restrictions=
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks=127.0.0.0/8
-o strict_rfc821_envelopes=yes
Vous devez maintenant générer le certificat TLS du serveur :
$ sudo mkdir /etc/postfix/ssl $ cd /etc/postfix/ssl $ sudo openssl req -new -x509 -nodes -out smtpd.pem -keyout smtpd.pem -days 365
Comme nous avons chrooté postfix nous devons créer les répertoires concernant Cyrus-SASL dans l'arborescence de Postfix et y placer les fichiers adéquats :
$ cd /var/spool/postfix/usr $ sudo mkdir -p lib/sasl2 $ cd lib/sasl2 $ sudo cp -p /usr/local/lib/sasl2/* .
Enfin, créez l'utilisateur vmail dont le répertoire contiendra les mails par domaine et utilisateur :
$ sudo groupadd -g 1018 vmail $ sudo useradd -d /home/vmail -s /sbin/nologin -u 1018 -g vmail vmail
Procédez comme suit :
$ cd /usr/ports/mail/courier-imap $ make show=FLAVORS no_mysql no_ldap no_pgsql $ env FLAVOR="no_mysql no_ldap no_pgsql" sudo make install clean-depends
Copiez les fichiers de configurations :
$ sudo cp -R /usr/local/share/examples/courier-imap/ /etc/
Editez tout d'abord le fichier /etc/courier-imap/authdaemonrc :
# backend authuserdb pour une base d'utilisateur userdb authmodulelist="authuserdb" authmodulelistorig="authcustom authcram authuserdb authldap authpwd" daemons=5 version="" authdaemonvar=/var/run/courier-imap
Puis le fichier /etc/courier-imap/imapd-ssl :
SSLPORT=993
SSLADDRESS=0
SSLPIDFILE=/var/run/imapd-ssl.pid
IMAPDSSLSTART=YES
IMAPDSTARTTLS=YES
IMAP_TLS_REQUIRED=1
COURIERTLS=${bindir}/couriertls
TLS_PROTOCOL=SSL3
TLS_STARTTLS_PROTOCOL=TLS1
TLS_CERTFILE=/etc/ssl/private/imapd.pem
TLS_VERIFYPEER=NONE
Enfin adaptez le fichier /etc/courier-imap/imapd.cnf avec vos paramètres afin de générer convenablement vos certificats comme suit :
$ sudo /usr/local/sbin/mkimapdcert $ sudo /usr/local/sbin/mkpop3dcert
Maildrop est un remplaçant de procmail lorsque vous employez une base d'utilisateurs virtuels, nous l'utilisons ici afin de placer tous les messages marqués par SpamAssassin dans un folder Imap nommé "Junk".
Installation :
$ cd /usr/ports/mail/maildrop $ sudo make install clean-depends
Configuration :
Attention de bien lire le fichier /usr/ports/mail/maildrop/pkg/SECURITY. Avec cette config vous aurez besoin de setuid et de setgid le binaire de maildrop.
$ sudo chmod ug+s /usr/local/bin/maildrop
$ cat /etc/maildroprc
logfile "/home/vmail/maildrop.log"
VERBOSE="5"
log "========"
if ( /^X-Spam-Flag: YES/ )
{
log "---------------------------------------------------------- Spam general."
to "Maildir/.Junk"
}
Courier-utils nous servira à créer les utilisateurs, ainsi que les folders et sous-folders des maildirs pour chaque compte mail. Ce logiciel est un SUBPACKAGE de maildrop.
$ pwd /usr/ports/mail/maildrop $ env SUBPACKAGE="-utils" sudo make install clean-depends
Lorsque Postfix reçoit un mail, il le passe à Amavisd grâce au protocole "lmtp". Alors amavisd le fera passer par les moulinettes de SpamAssassin et ClamAV.
$ cd /usr/ports/mail/amavisd-new $ sudo make install clean-depends
Le fichier de configuration se situe dans /etc/. Vous trouverez un fichier exemple dans /usr/local/share/doc/amavisd-new. Copiez-le et éditez-le. Je montre plus bas un exemple de fichier non-commenté (le fichier est long) de amavisd.conf. Vous trouverez les commentaires dans l'original sur votre système. Nous n'avons pas chrooté amavisd dans cette première version du document.
$ sudo cp /usr/local/share/doc/amavisd-new/amavisd.conf /etc/
$MYHOME = '/var/amavisd';
$mydomain = 'domain.com';
$myhostname = 'mail.domain.com';
$daemon_user = '_vscan';
$daemon_group = '_vscan';
$TEMPBASE = $MYHOME;
$ENV{TMPDIR} = $TEMPBASE;
$forward_method = 'smtp:127.0.0.1:10025';
$notify_method = $forward_method;
$max_servers = 2;
$max_requests = 10;
$child_timeout=5*60;
@local_domains_acl = qw( ".$mydomain" );
$unix_socketname = "$MYHOME/amavisd.sock";
$inet_socket_port = 10024;
@inet_acl = qw( 127.0.0.1 );
$DO_SYSLOG = 1;
$LOGFILE = "/var/log/amavis.log";
$log_level = 0;
$log_templ = '[? %#V |[? %#F |[?%#D|Not-Delivered|Passed]|BANNED name/type (%F)]|INFECTED (%V)],
<%o> -> [<%R>|,][? %i ||, quarantine %i], Message-ID: %m, Hits: %c';
$final_virus_destiny = D_DISCARD;
$final_banned_destiny = D_REJECT;
$final_spam_destiny = D_PASS;
$final_bad_header_destiny = D_PASS;
$viruses_that_fake_sender_re = new_RE(
qr'nimda|hybris|klez|bugbear|yaha|braid|sobig|fizzer|palyh|peido|holar'i,
qr'tanatos|lentin|bridex|mimail|trojan\.dropper|dumaru|parite|spaces'i,
qr'dloader|galil|gibe|swen|netwatch|bics|sbrowse|sober|rox|val(hal)?la'i,
qr'frethem|sircam|be?agle|tanx|mydoom|novarg|shimg|netsky|somefool|moodown'i,
qr'@mm|@MM', # mass mailing viruses as labeled by f-prot and uvscan
qr'Worm'i, # worms as labeled by ClamAV, Kaspersky, etc
[qr'^(EICAR|Joke\.|Junk\.)'i => 0],
[qr'^(WM97|OF97|W95/CIH-|JS/Fort)'i => 0],
[qr/.*/ => 1], # true by default (remove or comment-out if undesired)
);
$virus_admin = "postmaster\@$mydomain";
$mailfrom_to_quarantine = '';
$QUARANTINEDIR = '/var/amavisd/quarantine';
# Add X-Virus-Scanned header field to mail?
$X_HEADER_TAG = 'X-Virus-Scanned';
# Leave empty to add no header field # (default: undef)
$X_HEADER_LINE = "by amavisd-new at $mydomain";
$undecipherable_subject_tag = '***UNCHECKED*** ';
$remove_existing_x_scanned_headers = 0;
$remove_existing_spam_headers = 0;
$keep_decoded_original_re = new_RE(
qr'^MAIL-UNDECIPHERABLE$',
qr'^(ASCII(?! cpio)|text|uuencoded|xxencoded|binhex)'i,
);
$banned_filename_re = new_RE(
qr'\.[^.]*\.(exe|vbs|pif|scr|bat|cmd|com|dll)$'i,
qr'^\.exe$'i,
qr'^application/x-msdownload$'i,
qr'^application/x-msdos-program$'i,
);
$sql_select_white_black_list = undef;
$recipient_delimiter = '+';
$localpart_is_case_sensitive = 0;
$MAXLEVELS = 14;
$MAXFILES = 1500;
$MIN_EXPANSION_QUOTA = 100*1024;
$MAX_EXPANSION_QUOTA = 300*1024*1024;
$MIN_EXPANSION_FACTOR = 5;
$MAX_EXPANSION_FACTOR = 500;
$path = '/usr/local/sbin:/usr/local/bin:/usr/sbin:/sbin:/usr/bin:/bin';
$file = 'file';
$gzip = 'gzip';
$bzip2 = 'bzip2';
$lzop = 'lzop';
$uncompress = ['uncompress', 'gzip -d', 'zcat'];
$unfreeze = ['unfreeze', 'freeze -d', 'melt', 'fcat'];
$arc = ['nomarch', 'arc'];
$unarj = ['arj', 'unarj'];
$unrar = ['rar', 'unrar'];
$zoo = 'zoo';
$lha = 'lha';
$cpio = ['gcpio','cpio'];
# SpamAssassin settings
$sa_local_tests_only = 1;
$sa_timeout = 30;
$sa_mail_body_size_limit = 150*1024;
$sa_tag_level_deflt = 3.0;
$sa_tag2_level_deflt = 5.0;
$sa_kill_level_deflt = 6.3;
$sa_dsn_cutoff_level = 10;
# ClamAV settings
@av_scanners = (
# ### http://www.clamav.net/
['Clam Antivirus-clamd',
\&ask_daemon, ["CONTSCAN {}\n", "/tmp/clamd"],
qr/\bOK$/, qr/\bFOUND$/,
qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],
# # NOTE: run clamd under the same user as amavisd; match the socket
# # name (LocalSocket) in clamav.conf to the socket name in this entry
# # When running chrooted one may prefer: ["CONTSCAN {}\n","$MYHOME/clamd"],
);
1;
ClamAV est depuis très récemment dans les ports :
$ cd /usr/ports/security/clamav $ sudo make install clean-depends
Créez et éditez le fichier /etc/clamd.conf :
LogFile /var/log/clamd.log LogSyslog PidFile /var/run/clamd.pid DatabaseDirectory /var/clamav LocalSocket /tmp/clamd FixStaleSocket SelfCheck 3600 User _vscan ScanMail ScanHTML ScanArchive
Créez et éditez le fichier /etc/freshclam.conf :
DatabaseDirectory /var/clamav UpdateLogFile /var/log/freshclam.log LogSyslog DatabaseOwner _vscan DNSDatabaseInfo current.cvd.clamav.net DatabaseMirror db.fr.clamav.net DatabaseMirror database.clamav.net MaxAttempts 5 UpdateLogFile /var/log/freshclam.log LogSyslog DatabaseOwner _vscan DNSDatabaseInfo current.cvd.clamav.net DatabaseMirror db.fr.clamav.net DatabaseMirror database.clamav.net MaxAttempts 5 NotifyClamd NotifyClamd /etc/clamd.conf
Si le répertoire /var/clamav n'existe pas créez-le. Et changez l'utilisateur et le groupe d'appartenance comme indiqué dans les fichiers de configuration précédents :
$ sudo mkdir /var/clamav $ sudo chown -R _vscan:_vscan /var/clamav
Chacun des services susmentionnés doit être lancé à partir de /etc/rc.local. Placez les commandes suivantes à la fin du fichier original.
# Clamav
if [ -x /usr/local/sbin/clamd ]; then
echo -n ' clamd'; /usr/local/sbin/clamd
fi
# Amavisd
if [ -x /usr/local/sbin/amavisd ]; then
echo -n ' amavisd'; /usr/local/sbin/amavisd start
fi
# Freshclam
if [ -x /usr/local/bin/freshclam ]; then
echo -n ' freshclam'; /usr/local/bin/freshclam -d
fi
# Préparation Courier
if [ ! -d /var/run/courier-imap ]; then
mkdir /var/run/courier-imap
fi
# Tout comme pour Cyrus-SASL, Courier-Imap doit être
# présent dans le chroot afin que l'authentification
# fonctionne. Nous créons donc le répertoire
# nécessaire au lancement puis nous faisons un lien hard de la
# socket
if [ ! -d /var/spool/postfix/var/run/courier-imap ]; then
mkdir -p /var/spool/postfix/var/run/courier-imap
fi
# Authdaemond
if [ -x /usr/local/libexec/authlib/authdaemond ]; then
echo -n ' authdaemond'; /usr/local/libexec/authlib/authdaemond start
ln /var/run/courier-imap/socket /var/spool/postfix/var/run/courier-imap/
fi
# imapd-ssl
if [ -x /usr/local/libexec/imapd-ssl.rc ]; then
echo -n ' courier-imap'; /usr/local/libexec/imapd-ssl.rc start
fi
Afin que vous terminiez les services proprement lors de l'extinction du système, remplissez le fichier /etc/rc.shutdown comme suit :
# Préparation Courier
if [ -d /var/run/courier-imap ]; then
rm -rf /var/run/courier-imap
fi
if [ ! -d /var/spool/postfix/var/run/courier-imap ]; then
rm -rf /var/spool/postfix/var/run/courier-imap
fi
# Authdaemond
if [ -x /usr/local/libexec/authdaemond ]; then
echo -n ' stopping imapd'; /usr/local/libexec/authlib/authdaemond stop
fi
# imapd-ssl
if [ -x /usr/local/libexec/imapd-ssl.rc ]; then
echo -n ' stopping courier-imap'; /usr/local/libexec/imapd-ssl.rc stop
fi
# freshclam
if [ -x /usr/local/bin/freshclam ]; then
echo -n ' stopping freshclam'; /usr/bin/pkill freshclam
fi
# amavisd
if [ -x /usr/local/sbin/amavisd ]; then
echo -n ' stopping amavis'; /usr/local/sbin/amavisd stop
fi
# clamd
if [ -x /usr/local/sbin/clamd ]; then
echo -n ' stopping clamd'; /usr/bin/pkill clamd
fi
Dans cette dernière section, nous allons voir comment ajouter ou supprimer un compte email, un alias, une redirection et un domaine.
Courier-utils permet de scripter facilement la création et la suppression d'un compte. Je ne vous donnerez pas, dans ce qui suit, un script tout fait, libre à vous de faire comme vous le souhaitez. Néanmoins nous verrons quelles commandes utiliser.
Pour gérer la base d'utilisateurs virtuels vous utiliserez les commandes userdb, userdbpw et makeuserdb. La première crééra le compte dans la base, la seconde attribuera un mot-de-passe au compte tandis que la troisième mettra à jour la base.
Dans un premier temps, nous devons créer le répertoire contenant la base :
$ cd /etc $ sudo mkdir userdb $ sudo chmod 0 userdb
Créons le compte toto pour le domaine domain.com :
$ sudo userdb domain.com/toto@domain.com set \ > home=/home/vmail/domain.com/toto \ > mail=/home/vmail/domain.com/toto/Maildir \ > uid=1018 \ > gid=1018
Le mot-de-passe du compte :
# echo monSuperMotDePasse | \ > userdbpw -md5 | \ > userdb domain.com/toto@domain.com \ > set systempw
Enfin, on met-à-jour la base :
$ sudo makeuserdb
Vous devriez voir quelque chose de similaire sous /etc :
$ pwd /etc $ ls -l | grep userdb d--------- 2 root wheel 512 May 27 16:02 userdb -rw-r--r-- 1 root wheel 49643 May 27 16:01 userdb.dat -rw-r--r-- 1 root wheel 0 May 27 16:01 userdb.lock -rw------- 1 root wheel 49305 May 27 16:01 userdbshadow.dat
Tout d'abord, sous /home/vmail vous trouverez une arborescence contenant sur un premier niveau le ou les domaine(s) et sur un second niveau les boîtes de chaque compte. Tout doit être récursivement placé sous les droits de l'utilisateur et du groupe vmail. Exemple :
$ sudo ls -lR /home/vmail total 204 drwx------ 6 vmail vmail 512 May 27 16:05 domain.com /home/vmail/domain.com: total 16 drwx------ 3 vmail vmail 512 May 27 23:13 toto drwx------ 3 vmail vmail 512 May 27 23:14 tata
Pour chaque domaine géré, vous devrez créer le répertoire correspondant au domaine. Et pour chaque compte vous créérez la Maildir et les sous-folders adéquats.
# cd /home/vmail
# mkdir domain.com
# cd domain.com
# mkdir toto tata
# cd toto
# maildirmake
# ls
Maildir
# ls Maildir
cur new tmp
# maildirmake -f Drafts Maildir/
# maildirmake -f Sent Maildir/
# maildirmake -f Templates Maildir/
# maildirmake -f Junk Maildir/
# cd ../tata
[idem]
# cd /home/vmail/
# chown -R vmail:vmail domain.com
# chmod 700 domain.com
# chmod 700 domain.com/{toto,tata}
Dans le fichier de configuration de Postfix, /etc/postfix/main.cf, nous avons déclarer différents fichiers contenant les boîtes aux lettres, les alias et les redirections. Il s'agit des fichiers virtual_mailbox et virtual_alias. Pour chaque compte créé vous devrez ajouter les lignes correspondantes à ces fichiers.
Exemple de fichier virtual_mailbox :
$ cat /etc/postfix/virtual/virtual_mailbox toto@domain.com ...quelque chose... tata@domain.com ...quelque chose...
Exemple de fichier virtual_alias :
$ cat /etc/postfix/virtual/virtual_alias # il est obligatoire de mettre une adresse postmaster par domaine postmaster@domain.com postmaster # alias des comptes toto.titi@domain.com toto@domain.com tata.titi@domain.com tata@domain.com # redirections d'un compte vers une adresse externe tata@domain.com tata@autre-domaine.com
Pour que l'authentification ne soit acceptée, en interne, que pour les comptes virtuels spécifiés dans la base userdb, vous devez remplir le fichier login_maps
$ cat /etc/postfix/virtual/login_maps toto@domain.com toto@domain.com toto.titi@domain.com toto@domain.com tata@domain.com tata@domain.com tata.titi@domain.com tata@domain.com
Attention lorsque vous effectuez un changement à l'un de ces fichiers, n'oubliez pas de rehasher celui-ci avec la commande postmap.