Configuration de Postfix, Dovecot, PostfixAdmin et Roundcube sous Debian Wheezy utilisant Postgresql

Nous allons configurer l’ensemble des services (SMTP, SMTPD, SASL, POP3, IMAP ) qui permettent d’avoir son propre système d’email sur son serveur Gnu/Linux Debian Wheezy. Nous ne traiterons pas dans cet article du quota et du répondeur automatique, cela sera le sujet d’un article ultérieur. Pour commencer, utilisons le classique « apt-get install » des paquets :

# apt-get install postfix postfix-pgsql dovecot-pop3d dovecot-imapd dovecot-pgsql libsasl2-modules-sql

Éventuellement, vous pouvez installer le serveur postgresql, si celui-ci se trouve sur le même serveur, c’est le cas de notre exemple (Si cela n’était pas le cas, nous vous conseillons d’activer le SSL sur celui-ci).

# apt-get install postgresql-9.1

Vous pouvez aussi installer les paquets concernant roundcube et postfixadmin, mais nous préfèrons les utiliser à partir des sources.
Nous commençons par posgresql, en créant deux utilisateurs de la base qui contiendra l’ensemble des informations liées au serveur SMTP. Ces utilisateur ne dois pas pouvoir créer de base, ni être un superutilisateur et ni créer des rôles. Mais, un des utilisateur possède tous les droits sur la base, cet utilisateur sera l’utilisateur pour PostfixAdmin, et l’autre utilisateur n’aura que le droit de lecture, cet utilisateur sera l’utilisateur pour Postfix et Dovecot :

 # su - postgres
postgres@localhost:~$ createdb NOMBASE
postgres@localhost:~$ createdb NOMBASEROUNDCUBE
postgres@localhost:~$ createuser NOMUTILISATEURPOSTFIXADMINRNDC -P
postgres@localhost:~$ createuser NOMUTILISATEURPOSTFIXDOVECOT -P
postgres@localhost:~$ pgsql VOTREBASE
NOMBASE=# GRANT SELECT ON ALL TABLES IN SCHEMA public TO NOMUTILISATEURPOSTFIXDOVECOT;

Maintenant nous allons configurer PostfixAdmin pour initialiser la base de données qui sera utilisée dans le cadre de la fourniture des services SMTP, SMTPD, POP3 et IMAP. Vous pouvez télécharger la dernière version de PostfixAdmin sur le lien suivant : PostfixAdmin. Nous supposons que vous pouvez utiliser PostfixAdmin et Roundcube en ayant configuré votre serveur Web avec PHPet vous devez boligatoirement prévoir le HTTPS pour les accès à ces applications. Maintenant, Nous vous donnons la liste des paramêtres à vérifier et configurer :
config.inc.php

// Contiendra le HASH du mot de passe de configuration obtenu avec et le setup.php de PostfixAdmin.
$CONF['setup_password']
// Mettre l'URL d'accès principal à PostfixAdmin.
$CONF['postfix_admin_url']
$CONF['default_language'] = 'fr';
$CONF['database_type'] = 'pgsql';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'NOMUTILISATEURPOSTFIXADMINRNDC';
$CONF['database_password'] = 'VOTREMOTDEPASSESECRET';
$CONF['database_name'] = 'NOMBASE';
// vous pouvez choisir un prefix aux noms des tables de la bases. Pour améliorer la sécurité.
$CONF['database_prefix'] = 'PREFIX';
// Le postmaster de votre domain principal qui sert à l'url de PostfixAdmin par exemple. 
$CONF['admin_email']
$CONF['smtp_server'] = 'localhost';
$CONF['smtp_port'] = '25';
/* Pour le moment c'est le mode le plus pratique et relativement sécurisé car le niveau de sécurité principalement remis en cause dans ce mode est celui de l'ingénieurie social. Il y a de la littérature à ce sujet, notamment sur le site du serveur XMPP "ejabberd". Mais dès que le codage SCRAM-SHA-1 sera supporté, nous l'utiliserons à tous les niveaux de service ( Pour information, nous utilisons notamment la même base pour l'authentification d'autres services que ceux évoqués dans cet article). Mais, la meilleure alternative est de générer automatiquement le compte et le mot de passe pour vos utilisateurs, mais cela n'est pas encore possible dans le contexte que nous utilisons.  */
$CONF['encrypt'] = 'cleartext';
$CONF['min_password_length'] = 4;
// VOTRE répertoire/domain.tld/username@domain.tld : un répertoire par domaine.
$CONF['domain_path'] = 'YES';

Si tout se passe bien, PostfixAdmin, créera les tables de la base de données, et vous pourrez commencer à définir vos utilisateurs via l’interface web (Nous vous conseillons de supprimer ‘setup.php’, même si celui-ci est sécurisé par le mot de passe administration mis dans le config.inc.php de PostfixAdmin).
Maintenant nous passons à la configuration de postfix. Nous utilisons postfix dans tout le contexte SMTP et SMTPD, il n’y a pas d’utilisation de Dovecot pour la délivrance du mail, Postfix est utilisé pour toute la chaîne de ces services, qu’il rend très bien depuis bien longtemps.
Tout d’abord quelques paramètres globaux à définir pour le service :

# groupadd -g 2000 vmail
# useradd -g vmail -u 2000 vmail -d /srv/vmail -m
# mkdir -p /srv/vmail
# chown vmail:vmail /srv/vmail
# chmod 0700 /srv/vmail
# mkdir /etc/postfix/sasl
# mkdir /etc/postfix/pgsql

Maintenant passons à la configuration de postfix, /etc/postfix/mains.cf :

# See /usr/share/postfix/main.cf.dist for a commented, more complete version

# Debian specific:  Specifying a file name will cause the first
# line of that file to be used as the name.  The Debian default
# is /etc/mailname.
myorigin = /etc/mailname

smtpd_banner = SMTPD Ready.
biff = no
recipient_delimiter = +
luser_relay =

# appending .domain is the MUA's job.
append_dot_mydomain = no
append_at_myorigin = yes

readme_directory = no

# Si vous avez plusieurs interfaces des réseaux différents
smtp_bind_address=A.B.C.D
smtp_bind_address6=AAAA:BBBB:CCCC:DDDD

# important dans le cas de résolutions local via /etc/hosts (et la présence de denyhost)
smtp_host_lookup = native, dns

# TLS SMTP
smtp_tls_security_level = may
smtp_tls_ciphers = high
smtp_tls_protocols = !SSLv2, !SSLv3
smtp_tls_CAfile = /etc/ssl/certs/cacert.org.pem  # Utilisez CACERT ! http://www.cacert.org
smtp_tls_key_file = /etc/ssl/private/LACLEDUCERTIFICAT.key
smtp_tls_cert_file = /etc/ssl/private/LECERTIFICAT.crt
smtp_tls_session_cache_timeout = 3600s
smtp_tls_session_cache_database = btree:/var/lib/postfix/smtp_scache

myhostname = MONNOMDESERVEURCOMPLET # celui inscrit dans le DNS au niveau MX.
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination = MONNOMDESERVEURCOMPLET, localhost.MONDOMAINE, localhost
relayhost = 
mynetworks =  127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 
mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces =  all
inet_protocols = all

# CONTROL DELIVER
default_destination_concurrency_limit = 20
local_destination_concurrency_limit = 2
in_flow_delay = 1s

message_size_limit = 102400000
bounce_size_limit = 1000   

# CONTROL DELIVRANCE
allow_untrusted_routing = no
smtp_recipient_limit = 25   
disable_vrfy_command = yes  
strict_rfc821_envelopes = yes
show_user_unknown_table_name = no
allow_percent_hack = no
swap_bangpath = no

### Tarpit jusqu'au RCPT TO: 
smtpd_delay_reject = yes

### Tarpit bots/clients/spammers 
smtpd_error_sleep_time = 15
smtpd_soft_error_limit = 1
smtpd_hard_error_limit = 3
smtpd_junk_command_limit = 2

### Reject codes == 554
access_map_reject_code = 554
invalid_hostname_reject_code = 554
maps_rbl_reject_code = 554
multi_recipient_bounce_reject_code = 554
non_fqdn_reject_code = 554
plaintext_reject_code = 554
reject_code = 554
relay_domains_reject_code = 554
unknown_address_reject_code = 554
unknown_client_reject_code = 450
unknown_hostname_reject_code = 450
unknown_local_recipient_reject_code = 554
unknown_relay_recipient_reject_code = 554
unknown_virtual_alias_reject_code = 554
unknown_virtual_mailbox_reject_code = 554
unverified_recipient_reject_code = 554
unverified_sender_reject_code = 554

# header_checks = regexp:/etc/postfix/maps/header_checks
# body_checks = regexp:/etc/postfix/maps/body_checks

smtpd_client_restrictions = permit_mynetworks
                            reject_invalid_hostname
                            reject_unknown_client
			    permit

smtpd_helo_required = yes

# Obligation pour l'emetteur
smtpd_sender_restrictions =  permit_sasl_authenticated
                             permit_mynetworks
                             reject_unauth_destination
			     reject_non_fqdn_sender
                             reject_unknown_sender_domain
			     reject_unknown_address
			     reject_rhsbl_sender dsn.rfc-ignorant.org
                             permit

smtpd_etrn_restrictions = permit_mynetworks
                          reject

smtpd_data_restrictions = reject_unauth_pipelining
                          reject_multi_recipient_bounce
                          permit

smtpd_recipient_restrictions = reject_invalid_hostname
                               reject_non_fqdn_sender
                               reject_non_fqdn_recipient
			       permit_mynetworks
			       permit_sasl_authenticated
			       reject_unauth_pipelining
			       reject_unknown_sender_domain
			       reject_unknown_recipient_domain
			       reject_unauth_destination
			       reject_unknown_client
       			       reject_rbl_client   zen.spamhaus.org
			       reject_rbl_client   cbl.abuseat.org
			       reject_rhsbl_client multi.surbl.org
			       reject_rhsbl_sender multi.surbl.org
			       reject_rhsbl_sender dbl.spamhaus.org
			       reject_rhsbl_client dbl.spamhaus.org
			       reject_rhsbl_sender dsn.rfc-ignorant.org
			       permit

# SASL
smtpd_use_tls=yes
smtpd_tls_security_level = may
smtpd_tls_mandatory_ciphers = high
smtpd_tls_mandatory_protocols = !SSLv2
smtpd_tls_ask_ccert = yes
smtpd_tls_CAfile = /etc/ssl/certs/cacert.org.pem
smtpd_tls_key_file = /etc/ssl/private/lacleducertificat.key
smtpd_tls_cert_file = /etc/ssl/private/lecertificat.crt
smtpd_tls_loglevel = 0
smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_scache
smtpd_tls_session_cache_timeout = 3600s  

broken_sasl_auth_clients = yes
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous, noplaintext
smtpd_sasl_tls_security_options = noanonymous
#smtpd_tls_auth_only = yes

smtpd_sasl_authenticated_header = no

relay_domains = proxy:pgsql:/etc/postfix/pgsql/relay_domains.cf
virtual_alias_maps = proxy:pgsql:/etc/postfix/pgsql/virtual_alias_maps.cf
virtual_mailbox_domains = proxy:pgsql:/etc/postfix/pgsql/virtual_domains_maps.cf
virtual_mailbox_maps = proxy:pgsql:/etc/postfix/pgsql/virtual_mailbox_maps.cf
virtual_mailbox_base = /srv/vmail
virtual_mailbox_limit = 512000000
virtual_minimum_uid = 1999
virtual_transport = virtual
virtual_uid_maps = static:2000
virtual_gid_maps = static:2000
local_transport = virtual
local_recipient_maps = $virtual_mailbox_maps
# Plutard pour la gestion du répondeur même si le répondeur est une très mauvaise idée, sauf pour les spammeurs.
# transport_maps = hash:/etc/postfix/transport

le fichier /etc/postfix/master.cf

#
# Postfix master process configuration file.  For details on the format
# of the file, see the master(5) manual page (command: "man 5 master").
#
# Do not forget to execute "postfix reload" after editing this file.
#
# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (100)
# ==========================================================================
smtp      inet  n       -       -       -       -       smtpd
submission inet n       -       -       -       -       smtpd
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_tls_security_level=may
  -o smtpd_tls_mandatory_protocols=!SSLv2,!SSLv3
  -o smtpd_sasl_security_options=noanonymous,noplaintext
  -o smtpd_sasl_tls_security_options=noanonymous
  -o smtpd_sasl_authenticated_header=no
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#  -o milter_macro_daemon_name=ORIGINATING
#smtps     inet  n       -       -       -       -       smtpd
#  -o smtpd_tls_security_level=encrypt
#  -o smtpd_tls_wrappermode=yes
#  -o smtpd_tls_mandatory_protocols=!SSLv2,!SSLv3
#  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_tls_auth_only=yes
#  -o smtpd_sasl_authenticated_header=no
#  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#  -o milter_macro_daemon_name=ORIGINATING
#628      inet  n       -       -       -       -       qmqpd
pickup    fifo  n       -       -       60      1       pickup
cleanup   unix  n       -       -       -       0       cleanup
qmgr      fifo  n       -       n       300     1       qmgr
#qmgr     fifo  n       -       -       300     1       oqmgr
tlsmgr    unix  -       -       -       1000?   1       tlsmgr
rewrite   unix  -       -       -       -       -       trivial-rewrite
bounce    unix  -       -       -       -       0       bounce
defer     unix  -       -       -       -       0       bounce
trace     unix  -       -       -       -       0       bounce
verify    unix  -       -       -       -       1       verify
flush     unix  n       -       -       1000?   0       flush
proxymap  unix  -       -       n       -       -       proxymap
proxywrite unix -       -       n       -       1       proxymap
smtp      unix  -       -       -       -       -       smtp
# When relaying mail as backup MX, disable fallback_relay to avoid MX loops
relay     unix  -       -       -       -       -       smtp
	-o smtp_fallback_relay=
#       -o smtp_helo_timeout=5 -o smtp_connect_timeout=5
showq     unix  n       -       -       -       -       showq
error     unix  -       -       -       -       -       error
retry     unix  -       -       -       -       -       error
discard   unix  -       -       -       -       -       discard
local     unix  -       n       n       -       -       local
virtual   unix  -       n       n       -       -       virtual
lmtp      unix  -       -       -       -       -       lmtp
anvil     unix  -       -       -       -       1       anvil
scache    unix  -       -       -       -       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/bin/maildrop -d ${recipient}
#
# See the Postfix UUCP_README file for configuration details.
#
uucp      unix  -       n       n       -       -       pipe
  flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
#
# Other external delivery methods.
#
ifmail    unix  -       n       n       -       -       pipe
  flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
bsmtp     unix  -       n       n       -       -       pipe
  flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t$nexthop -f$sender $recipient
scalemail-backend unix	-	n	n	-	2	pipe
  flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension}
mailman   unix  -       n       n       -       -       pipe
  flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py
  ${nexthop} ${user}

Le fichier pour Sasl (« PREFIX » est le préfixe des tables de la base de données définit dans le fichier de configuration de PostfixAdmin. ) /etc/postfix/sasl/smptd.conf

pwcheck_method: auxprop
mech_list: PLAIN LOGIN CRAM-MD5 DIGEST-MD5 
minimum_layer: 0
auxprop_plugin: sql
# 0 aucun log, 1  log erreurs (défaut), 2 log toutes les erreurs d'authentification, 3 log non-fatal warnings, 4 de plus en plus verbose jusqu'au 5-6-7 Trace programme 
log_level: 2  
sql_engine: pgsql
sql_hostnames: localhost
sql_user: NOMUTILISATEURPOSTFIXDOVECOT
sql_database: NOMBASE
sql_passwd: VOTREMOTDEPASSESECRET
sql_mda: sha1
sql_usessl: no # Oui si le serveur est distant.
sql_select: select password from "PREFIX"mailbox where username = '%u@%r'

Les fichiers pour l’accès à la base postgresql qui dans notre cas est en locale :
/etc/postfix/pgsql/relay_domains.cf

user = VOTREUTILISATEURPOSTFIXDOVECOT
password = VOTREMOTDEPASSESECRET
hosts = localhost
dbname = NOMBASE
query = SELECT domain FROM "PREFIX"domain WHERE domain='%s' and backupmx = true

/etc/postfix/pgsql/virtual_domain_maps.cf

user = VOTREUTILISATEURPOSTFIXDOVECOT
password = VOTREMOTDEPASSESECRET
hosts = localhost
dbname = NOMBASE
query = SELECT domain FROM "PREFIX"domain WHERE domain='%s' and backupmx = false and active = true

/etc/postfix/pgsql/virtual_alias_maps.cf

user = VOTREUTILISATEURPOSTFIXDOVECOT
password = VOTREMOTDEPASSESECRET
hosts = localhost
dbname = NOMBASE
query = SELECT goto FROM "PREFIX"alias WHERE address='%s' AND active = true

/etc/postfix/pgsql/virtual_mailbox_maps.cf

user = VOTREUTILISATEURPOSTFIXDOVECOT
password = VOTREMOTDEPASSESECRET
hosts = localhost
dbname = NOMBASE
query =  SELECT maildir FROM "PREFIX"mailbox WHERE username='%s' AND active = true

Il nous reste à configurer Dovecot pour permettre la récupération des mails via le service POP3 ou imap. La configuration est pour une version de Dovecot 2 et supérieure. Cette configuration est la même que celle à réaliser avec le paquet Dovecot fournit via le dépôt Backports de la Gnu/Linux Debian Squeeze. La configuration de Dovecot reste simple mais les fichiers de configuration se sont un peu éparpillés par rapport à la version précédente :
/etc/dovecot/dovecot.conf

## Dovecot configuration file
# If you're in a hurry, see http://wiki2.dovecot.org/QuickConfiguration

# '#' character and everything after it is treated as comments. Extra spaces
# and tabs are ignored. If you want to use either of these explicitly, put the
# value inside quotes, eg.: key = "# char and trailing whitespace  "

# Default values are shown for each setting, it's not required to uncomment
# those. These are exceptions to this though: No sections (e.g. namespace {})
# or plugin settings are added by default, they're listed only as examples.
# Paths are also just examples with the real defaults being based on configure
# options. The paths listed here are for configure --prefix=/usr
# --sysconfdir=/etc --localstatedir=/var

# Enable installed protocols
!include_try /usr/share/dovecot/protocols.d/*.protocol

# A comma separated list of IPs or hosts where to listen in for connections. 
# "*" listens in all IPv4 interfaces, "::" listens in all IPv6 interfaces.
# If you want to specify non-default ports or anything more complex,
# edit conf.d/master.conf.
listen = *, ::

# Base directory where to store runtime data.
base_dir = /var/run/dovecot/

# Name of this instance. In multi-instance setup doveadm and other commands
# can use -i  to select which instance is used (an alternative
# to -c ). The instance name is also added to Dovecot processes
# in ps output.
instance_name = dovecot

# Greeting message for clients.
login_greeting = Mail ready.

# Should all processes be killed when Dovecot master process shuts down.
# Setting this to "no" means that Dovecot can be upgraded without
# forcing existing client connections to close (although that could also be
# a problem if the upgrade is e.g. because of a security fix).
shutdown_clients = yes

# Most of the actual configuration gets included below. The filenames are
# first sorted by their ASCII value and parsed in that order. The 00-prefixes
# in filenames are intended to make it easier to understand the ordering.
!include conf.d/*.conf

protocols = pop3 imap

# A config file can also tried to be included without giving an error if
# it's not found:
!include_try local.conf

/etc/dovecot/dovecot-sql.conf.ext

# This file is opened as root, so it should be owned by root and mode 0600.
#
# http://wiki2.dovecot.org/AuthDatabase/SQL
#

# Database driver: mysql, pgsql, sqlite
driver = pgsql 

# Connect Database Server
connect = host=localhost dbname=NOMBASE user=NOMUTILISATEURPOSTFIXDOVECOT password=MOTDEPASSETRESSECRET

# Default password scheme.
# List of supported schemes is in
# http://wiki2.dovecot.org/Authentication/PasswordSchemes
# en attendant mieux....
default_pass_scheme = PLAIN

# passdb query to retrieve the password. It can return fields:
password_query = \
  SELECT username, password \
  FROM "PREFIX"mailbox WHERE username = '%u' AND active = '1'

# userdb query to retrieve the user information. It can return fields:
user_query = \
  SELECT CONCAT('/srv/vmail/', maildir) as home, 2000 as uid, 2000 as gid \
  FROM "PREFIX"mailbox WHERE username = '%u' AND active = '1'

/etc/dovecot/conf.d/10-master.conf

service imap-login {
  inet_listener imap {
    port = 143
  }
  inet_listener imaps {
    port = 993
    ssl = yes
  }

  # Number of connections to handle before starting a new process. Typically
  # the only useful values are 0 (unlimited) or 1. 1 is more secure, but 0
  # is faster. <doc/wiki/LoginProcess.txt>
  service_count = 1

}

service pop3-login {
  inet_listener pop3 {
    port = 110
  }
  inet_listener pop3s {
    port = 995
    ssl = yes
  }
}

service imap {
  # Max. number of IMAP processes (connections)
  process_limit = 1024
}

service pop3 {
  # Max. number of POP3 processes (connections)
  process_limit = 1024
}

/etc/dovecot/conf.d/10-mail.conf

##
## Mailbox locations and namespaces
##
# <doc/wiki/MailLocation.txt>
#
mail_location = maildir:~/

namespace inbox {
# There can be only one INBOX, and this setting defines which namespace
# has it.
inbox = yes
}

# System user and group used to access mails. If you use multiple, userdb
# can override these by returning uid or gid fields. You can use either numbers
# or names. <doc/wiki/UserIds.txt>
mail_uid = vmail
mail_gid = vmail

/etc/dovecot/conf.d/10-auth.conf

##
## Authentication processes
##
# Disable LOGIN command and all other plaintext authentications unless
# SSL/TLS is used (LOGINDISABLED capability). Note that if the remote IP
# matches the local IP (ie. you're connecting from the same computer), the
# connection is considered secure and plaintext authentication is allowed.
disable_plaintext_auth = yes
auth_mechanisms = plain login cram-md5 digest-md5

# User database specifies where mails are located and what user/group IDs
# own them. For single-UID configuration use "static" userdb.
# <doc/wiki/UserDatabase.txt>

#!include auth-deny.conf.ext
#!include auth-master.conf.ext
#!include auth-system.conf.ext
!include auth-sql.conf.ext
#!include auth-ldap.conf.ext
#!include auth-passwdfile.conf.ext
#!include auth-checkpassword.conf.ext
#!include auth-vpopmail.conf.ext
#!include auth-static.conf.ext

/etc/dovecot/conf.d/10-ssl.conf

##
## SSL settings
##
# SSL/TLS support: yes, no, required. <doc/wiki/SSL.txt>
ssl = yes

# PEM encoded X.509 SSL/TLS certificate and private key. They're opened before
# dropping root privileges, so keep the key file unreadable by anyone but
# root. Included doc/mkcert.sh can be used to easily generate self-signed
# certificate, just make sure to update the domains in dovecot-openssl.cnf
ssl_cert = /etc/ssl/private/LECERTIFICAT.crt
ssl_key = /etc/ssl/private/LACLEDUCERTIFICAT.key

# SSL protocols to use
ssl_protocols = !SSLv2

# SSL ciphers to use
ssl_cipher_list = ALL:!LOW:!SSLv2:!EXP:!aNULL

/etc/dovecot/conf.d/auth-sql.conf.ext

# Authentication for SQL users. Included from auth.conf.
# <doc/wiki/AuthDatabase.SQL.txt>
passdb {
  driver = sql
  # Path for SQL configuration file, see example-config/dovecot-sql.conf.ext
  args = /etc/dovecot/dovecot-sql.conf.ext
}

userdb {
  driver = sql
  args = /etc/dovecot/dovecot-sql.conf.ext
}

Maintenant, nous devons configurer Roundcube, le webmail. Nous le configurons avec le plugin ‘password’ qui permet aux utilisateurs de changer leur mot de passe sans passer par l’interface de PostfixAdmin. Pour récupérer la dernière version stable de Roundcube GPL Dépendent, il suffit de suivre le lien suivant : Roundcube Webmail Stable. Pour le configurer , vous devez suivre la procédure de configuration habituelle et veiller à mettre les valeurs aux paramètres suivants :
config/db.inc.php

$rcmail_config['db_dsnw'] = 'pgsql://UTILISATEURPOSTFIXADMINRNDC:VOTREMOTDEPASSESECRET@localhost/NOMBASEROUNDCUBE';
$rcmail_config['db_max_length'] = 512000; 
$rcmail_config['db_persistent'] = false;

Pour le moment, Roundcube prévoit de définir le nom des tables, mais n’a pas prévu de « PREFIX », il est donc fastidieux de modifier une à une le nom des tables de la base de Roundcube.
config/main.inc.php

$rcmail_config['log_driver'] = 'syslog';
$rcmail_config['smtp_log'] = true;
$rcmail_config['default_host'] = 'localhost';
$rcmail_config['default_port'] = 143;
$rcmail_config['imap_auth_type'] = 'DIGEST-MD5';
$rcmail_config['smtp_server'] = 'localhost';
$rcmail_config['smtp_port'] = 587;
$rcmail_config['smtp_user'] = '%u';
$rcmail_config['smtp_pass'] = '%p';
$rcmail_config['smtp_auth_type'] = 'DIGEST-MD5';
$rcmail_config['enable_installer'] = false;
$rcmail_config['force_https'] = true;  //Accès uniquement https !
$rcmail_config['plugins'] = array('password');  // le plugin password permet à vos utilisateurs de changer leur mot de passe.

Voici, les derniers paramètres à mettre en place, ils concernent le plugin ‘Password’ qui est disponible par défaut dans Roundcube.
plugins/password/config.inc.php

$rcmail_config['password_driver'] = 'sql';
$rcmail_config['password_confirm_current'] = true;
$rcmail_config['password_minimum_length'] = 4;
$rcmail_config['password_db_dsn'] = 'pgsql://NOMTUILISATEURPOSTFIXADMINRNDC:VOTREMOTDEPASSETRESSECRET@localhost/NOMBASEPOSTFIXADMIN';

Et voilà, nous avons fait le tour des différentes configurations qui vous permettront de fournir un service de mail pour une petite structure ou communauté d’amis. N’hésitez pas à nous faire part de vos commentaires et si cela vous est possible, n’oubliez pas de contribuer, même modestement à notre activité.


Références :
Postfix v2.9
Dovecot v2.1
Postgresql v9.1
PostfixAdmin v2.3.5
Rouncube Webmail GPL (dependent) v0.8.1
Gnu/Linux Debian 7.0 Wheezy

Ce contenu a été publié dans Libre, Techno, Tutoriel, avec comme mot(s)-clé(s) , , , , , , , , , , , , . Vous pouvez le mettre en favoris avec ce permalien.