*New 11.3 series Release:
2019-10-05: XigmaNAS 11.3.0.4.6928 - released, 11.2 series are soon unsupported!

*New 12.0 series Release:
2019-10-05: XigmaNAS 12.0.0.4.6928 - released!

*New 11.2 series Release:
2019-09-23: XigmaNAS 11.2.0.4.6881 - released!

We really need "Your" help on XigmaNAS https://translations.launchpad.net/xigmanas translations. Please help today!

Producing and hosting XigmaNAS costs money. Please consider donating for our project so that we can continue to offer you the best.
We need your support! eg: PAYPAL

[TUTO] Installation sécurisée d'un serveur de mail avec Postfix, Dovecot et Rainloop

Moderators: mtiburs, velivole18, ernie

Locked
laster13
PowerUser
PowerUser
Posts: 996
Joined: 01 Jun 2013 19:15
Location: France-Marseille
Status: Offline

[TUTO] Installation sécurisée d'un serveur de mail avec Postfix, Dovecot et Rainloop

#1

Post by laster13 » 29 Apr 2015 20:44

Bonjour,

A la fin de ce tutoriel, vous devriez normalement être capable d'envoyer et de recevoir des emails à partir du client web Rainloop ou avec n'importe quel client mail desktop (Thunderbird, outlook, Claws Mail, Evolution...etc) ainsi qu'avec un nombre quasi illimité d'adresses email virtuelles. Il va vous falloir disposer d'un nom de domaine avec les MX configurés. Je vais détailler cette étape car elle est primordiale pour que vous puissiez recevoir des mails depuis l’extérieur. Je vous conseille, pour le test, de prendre un nom de domaine chez 1and1 non pas parce que j'ai des actions chez eux :lol: mais tout simplement parce que c'est celui avec lequel j'ai travaillé ce tuto et donc je serai mieux à même de vous aider pour le configurer et puis aussi parce que la 1ère année le coût n'est que d'1 euros (idéal pour les tests).

Si vous avez besoin d'aide, merci de poster sur le [Topic unique] Installation sécurisée d'un serveur de mail avec Postfix, Dovecot et Rainloop !!

Testé dans les conditions suivantes: MSI G31TM-P35 sur socket LGA775, E2220 (2.6GHZ en dual core), 4GO DDR2-800, 3 Disques dur western digital de 1T formatés en UFS montés en raid5, Nas4free Embedded (9.3.0.2 - Nayla (revision 1391) installée sur disque dur, Freebox V6
fonctionne également sur les dernieres versions de Nas4free


Configuration du nom d'hôte, du FQDN et du champ MX :

Le nom d'hôte (hostname) est un surnom que vous donnez à un équipement réseau permettant de l'identifier de manière unique au sein d'un réseau local. Le FQDN permet de rendre un équipement réseau accessible partout sur internet et de l'identifier aussi de manière unique.

Dans la suite de ce tutoriel, nous allons utiliser les caractéristiques suivantes (à adapter selon votre configuration) :

  • - Nom de domaine principal : domain.tld
    - Nom d'hôte : hostname
    - FQDN : hostname.domain.tld
    - MX : mail.domain.tld


Pour Nas4free, et étant donné que nous allons utiliser une jail, le hostname sera le nom de la jail, on va au préalable modifier le nom de domaine dans l'interface webui en le remplaçant par le votre.
  • Image
Vous entrez ensuite dans votre espace de configuration 1and1 et vous créez 2 sous domaines :
  • - mail.domain.tld
    - hostname.domain.tld
Vous allez maintenant modifier les paramètres DNS de votre domaine et des 2 sous domaines de la manière décrite ci dessous :
  • Image
Vous changez ipv4 par l'adresse ip de votre box et vous ajoutez "mail.domain.tld" dans la partie MX des 3 domaines.

On modifie ensuite le fichier host

Code: Select all

edit /etc/hosts
::1 localhost localhost.my.domain
127.0.0.1 localhost localhost.my.domain
192.168.0.90 hostname hostname.domain.tld
Vous remplacer "192.168.0.90" par l ip de votre jail.

Attendez quelques minutes que les DNS se propagent, vous pouvez suivre l'avancement avec ce site par exemple : https://www.whatsmydns.net/ :
  • Image
faites le test avec les enregistrements"A" et "MX"

Pour terminer on vérifie que tout est bien configuré
root@test:/ # hostname
hostname.domain.tld
root@test:/ # host domain.tld
domain.tld has address xxx.xxx.xxx.xxx
domain.tld mail is handled by 10 mail.domain.tld.
Voila c'est terminé pour la configuration de votre domaine.

Création de la Jail

Vous créez une jail comme expliquer sur ce tuto
[TUTO] TheBrig-Comment créer une Jail
N'oubliez pas que le nom donné à votre jail sera votre hostname

Installations de Postfix, Dovecot, Pigeon-hole, opendkim, Spamassassin, Clamav à partir des ports

Code: Select all

portsnap fetch extract
La commande ci dessous est très confortable car elle va vous éviter de rester devant le micro durant l'installation ;)

Code: Select all

echo "BATCH=yes" >> /etc/make.conf

Code: Select all

cd /usr/ports/mail/dovecot2
make config
Vérifiez que l'option MYSQL est bien sélectionnée

Code: Select all

make install clean

Code: Select all

cd /usr/ports/mail/postfix
make config
Vérifiez que les options "BDB", "MYSQL", "TLS", "VDA" et "DOVECOT2" sont bien sélectionnées

Code: Select all

make install clean
A cette question vous répondez "y"
Would you like to activate Postfix in /etc/mail/mailer.conf [n]? y

Code: Select all

cd /usr/ports/mail/opendkim
make config
  • Vérifiez que les options ci dessous sont bien sélectionnées :
  • Image

Code: Select all

make install clean

Code: Select all

cd /usr/ports/mail/dovecot2-pigeonhole
make install clean

Code: Select all

cd /usr/ports/mail/spamassassin
make install clean

Code: Select all

cd /usr/ports/security/clamav-milter
make install clean
Installation lighttpd, php et mysql

On rentre dans la jail

Code: Select all

jexec 1 csh

Code: Select all

fetch https://dl.dumptruck.goldenfrog.com/p/NGzg_0rLov/lighttpd.sh
chmod a+x lighttpd.sh
./lighttpd.sh
L'installation est interactive, répondez aux questions notamment celles concernant le mot de passe mysql.
On modifie ensuite le ficher "/usr/local/etc/lighttpd/lighttpd.conf" en remplacant l ip "192.168.0.9" par celle de votre jail, ainsi que le port que vous souhaitez, puis :

Code: Select all

cp /usr/local/etc/php.ini-development /usr/local/etc/php.ini

Code: Select all

edit /usr/local/etc/php.ini
Trouvez la ligne suivante, décommentez là et modifiez le timezone
date.timezone = Europe/Paris

Code: Select all

echo 'lighttpd_enable="YES"' >> /etc/rc.conf

Code: Select all

service lighttpd start
Création de la base de donnée

# Connexion au serveur MySQL en tant que root

Code: Select all

mysql -u root -p
# Création de la base de données "postfix"

Code: Select all

CREATE database postfix;
# Création de l'utilisateur "postfix" et ajout des permissions (je vous conseille de mettre le même mot de passe que mysql)

Code: Select all

CREATE USER 'postfix'@'localhost' IDENTIFIED BY 'MOT DE PASSE';
GRANT USAGE ON *.* TO 'postfix'@'localhost';
GRANT ALL PRIVILEGES ON postfix.* TO 'postfix'@'localhost';
# On quitte la console MySQL

Code: Select all

exit
Installation et configuration de PostfixAdmin

Code: Select all

cd /usr/local/www
fetch http://downloads.sourceforge.net/project/postfixadmin/postfixadmin/postfixadmin-2.92/postfixadmin-2.92.tar.gz
tar -xzf postfixadmin-2.92.tar.gz
mv postfixadmin-2.92 postfixadmin
rm -rf postfixadmin-2.92.tar.gz
chown -R www:www postfixadmin
Editez le fichier de configuration et modifiez les paramètres suivants :

Code: Select all

edit /usr/local/www/postfixadmin/config.inc.php
  • $CONF['configured'] = true;
    $CONF['default_language'] = 'fr';
    $CONF['database_type'] = 'mysqli';
    $CONF['database_host'] = 'localhost';
    $CONF['database_user'] = 'postfix';
    $CONF['database_password'] = 'MOT DE PASSE';
    $CONF['database_name'] = 'postfix';
    $CONF['admin_email'] = 'admin@domain.tld';
    $CONF['domain_path'] = 'YES';
    $CONF['domain_in_mailbox'] = 'NO';
    $CONF['fetchmail'] = 'NO';
Lancez l'assistant d'installation de PostfixAdmin à l'adresse suivante et suivez les indications :
Le script créé toutes les tables nécessaires au bon fonctionnement de Postfix. En bas de la page générez le hash du mot de passe d'installation et créez un compte administrateur (exemple : admin@domain.tld). C'est à partir de ce compte que vous allez gérer toutes vos adresses emails. Attention: admin@domain.tld n'est qu'un compte administrateur, l'adresse email n'existe pas. Si vous voulez la créer, il faudra passer par postfixadmin, comme on va le voir par la suite.

Il ne vous reste plus qu'à mettre le hash généré par l'assistant dans le fichier config.inc.php :

Code: Select all

# edit/var/www/postfixadmin/config.inc.php
$CONF['setup_password'] = 'HASH';
On peut maintenant se connecter à postfixadmin


On va créer notre 1er domaine et notre 1ere adresse mail virtuelle ;)
  • Image
  • Image
Configuration de Postfix

Configuration du "start up" de postfix

Code: Select all

echo 'postfix_enable="YES"' >> /etc/rc.conf
Ce tuto n'a pas pour vocation de vous expliquer dans le détail les différents paramètres de configuration Postfix, je n'ai d’ailleurs pas cette prétention. Mon ambition est tout simplement de vous expliquer comment le faire fonctionner. Pour des infos complémentaires, je vous invite à consulter la documentation de postfix http://www.postfix.org/postconf.5.html.

Remplacez le contenu de "/usr/local/etc/postfix/main.cf" avec :

Code: Select all

#######################
## GENERALS SETTINGS ##
#######################
 
smtpd_banner         = $myhostname ESMTP $mail_name (Debian/GNU)
biff                 = no
append_dot_mydomain  = no
readme_directory     = no
delay_warning_time   = 4h
mailbox_command      = procmail -a "$EXTENSION"
recipient_delimiter  = +
disable_vrfy_command = yes
message_size_limit   = 502400000
mailbox_size_limit   = 1024000000
 
inet_interfaces = all
inet_protocols = ipv4
 
myhostname    = hostname.domain.tld
mydomain      = domain.tld
myorigin      = $mydomain
mydestination = localhost localhost.$mydomain
mynetworks    = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
relayhost = smtp.free.fr
 
alias_maps     = hash:/etc/aliases
alias_database = hash:/etc/aliases
 
####################
## TLS PARAMETERS ##
####################
 
# SMTP ( OUTGOING )
# ----------------------------------------------------------------------
smtp_tls_loglevel               = 1
smtp_tls_security_level         = may
smtp_tls_CAfile                 = /etc/ssl/certs/CAroot.crt
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
 
# SMTPD ( INCOMING )
# ----------------------------------------------------------------------
smtpd_tls_loglevel            = 1
smtpd_tls_auth_only           = yes
smtpd_tls_security_level      = may
smtpd_tls_received_header     = yes
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, TLSv1
smtpd_tls_mandatory_ciphers   = high
smtpd_tls_exclude_ciphers     = aNULL, eNULL, EXPORT, MD5, DES, RC4, PSK
 
tls_random_source = dev:/dev/urandom
 
# TLS PUBLIC CERTIFICATES AND PRIVATE KEY
smtpd_tls_CAfile    = /etc/ssl/certs/CAroot.crt
smtpd_tls_cert_file = /etc/ssl/certs/mailserver.crt
smtpd_tls_key_file  = /etc/ssl/private/mailserver.key
 
# TLS/LMTP SESSION CACHE DATABASES
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
lmtp_tls_session_cache_database  = btree:${data_directory}/lmtp_scache
 
# CYPHERS AND CURVE PARAMETERS
smtpd_tls_eecdh_grade  = ultra
tls_eecdh_strong_curve = prime256v1
tls_eecdh_ultra_curve  = secp384r1
 
# DIFFIE-HELLMAN PARAMETERS
smtpd_tls_dh1024_param_file = $config_directory/dh2048.pem
smtpd_tls_dh512_param_file  = $config_directory/dh512.pem
 
# ----------------------------------------------------------------------
 
#####################
## SASL PARAMETERS ##
#####################
 
smtpd_sasl_auth_enable          = yes
smtpd_sasl_type                 = dovecot
smtpd_sasl_path                 = private/auth
smtpd_sasl_security_options     = noanonymous
smtpd_sasl_tls_security_options = $smtpd_sasl_security_options
smtpd_sasl_local_domain         = $mydomain
smtpd_sasl_authenticated_header = yes
 
broken_sasl_auth_clients = yes
 
##############################
## VIRTUALS MAPS PARAMETERS ##
##############################
 
virtual_uid_maps        = static:5000
virtual_gid_maps        = static:5000
virtual_minimum_uid     = 5000
virtual_mailbox_base    = /var/mail
virtual_transport       = lmtp:unix:private/dovecot-lmtp
virtual_mailbox_domains = mysql:/usr/local/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps    = mysql:/usr/local/etc/postfix/mysql-virtual-mailbox-maps.cf
virtual_alias_maps      = mysql:/usr/local/etc/postfix/mysql-virtual-alias-maps.cf
 
######################
## ERRORS REPORTING ##
######################
 
# notify_classes = bounce, delay, resource, software
notify_classes = resource, software
 
error_notice_recipient     = admin@domain.tld
# delay_notice_recipient   = admin@domain.tld
# bounce_notice_recipient  = admin@domain.tld
# 2bounce_notice_recipient = admin@domain.tld
 
##################
## RESTRICTIONS ##
##################
 
smtpd_recipient_restrictions =
     permit_mynetworks,
     permit_sasl_authenticated,
     reject_non_fqdn_recipient,
     reject_unauth_destination,
     reject_unknown_recipient_domain,
     reject_rbl_client zen.spamhaus.org
 
smtpd_helo_restrictions =
     permit_mynetworks,
     permit_sasl_authenticated,
     reject_invalid_helo_hostname,
     reject_non_fqdn_helo_hostname
     # reject_unknown_helo_hostname
 
smtpd_client_restrictions =
     permit_mynetworks,
     permit_inet_interfaces,
     permit_sasl_authenticated
     # reject_plaintext_session,
     # reject_unauth_pipelining
 
smtpd_sender_restrictions =
     reject_non_fqdn_sender,
     reject_unknown_sender_domain
 
#########################
## MILTERS DKIM/CLAMAV ##
#########################
 
milter_protocol = 6
smtpd_milters = inet:127.0.0.1:8891 unix:/var/run/clamav/clmilter.sock
non_smtpd_milters = inet:localhost:8891
milter_default_action = accept
Modifier la valeur "relayhost" par le smtp de votre fournisseur d'accés internet.

Si vous n'avez pas de certificat SSL, exécutez les commandes suivantes pour en gérérer un (attention il s'agira d'un certificat auto-signé par votre propre autorité de certification) :
cd /etc/ssl/

openssl genrsa -out CAroot.key 4096
openssl req -x509 -new -nodes -days 1460 -key CAroot.key -out CAroot.crt


Country Name (2 letter code) [AU]: FR
State or Province Name (full name) [Some-State]: France
Locality Name (eg, city) []: Paris
Organization Name (eg, company) [Internet Widgits Pty Ltd]: Mon Autorité De Certification
Organizational Unit Name (eg, section) []:nas4free
Common Name (e.g. server FQDN or YOUR name) []: *.domain.tld
openssl genrsa -out mailserver.key 4096
openssl req -new -key mailserver.key -out mailserver.csr


Country Name (2 letter code) [AU]: FR
State or Province Name (full name) [Some-State]: France
Locality Name (eg, city) []: Paris
Organization Name (eg, company) [Internet Widgits Pty Ltd]: Mon serveur de mail
Organizational Unit Name (eg, section) []:nas4free
Common Name (e.g. server FQDN or YOUR name) []: mail.domain.tld
openssl x509 -req -days 1460 -in mailserver.csr -CA CAroot.crt -CAkey CAroot.key -CAcreateserial -out mailserver.crt

chmod 444 CAroot.crt
chmod 444 mailserver.crt
chmod 400 mailserver.key

mkdir certs
mkdir private

mv CAroot.crt certs/
mv mailserver.crt certs/
mv mailserver.key private/
openssl dhparam -out /usr/local/etc/postfix/dh2048.pem 2048
openssl dhparam -out /usr/local/etc/postfix/dh512.pem 512
Configuration de Postfix pour MySQL

On va créer les 3 trois fichiers de configuration qui vont permettre à Postfix de s'interfacer avec MySQL :
  • # edit /usr/local/etc/postfix/mysql-virtual-mailbox-domains.cf

    hosts = localhost
    user = postfix
    password = MOT DE PASSE
    dbname = postfix

    query = SELECT domain FROM domain WHERE domain='%s' and backupmx = 0 and active = 1
  • # edit /usr/local/etc/postfix/mysql-virtual-mailbox-maps.cf

    hosts = localhost
    user = postfix
    password = MOT DE PASSE
    dbname = postfix

    query = SELECT maildir FROM mailbox WHERE username='%s' AND active = 1
  • # edit /usr/local/etc/postfix/mysql-virtual-alias-maps.cf

    hosts = localhost
    user = postfix
    password = MOT DE PASSE
    dbname = postfix

    query = SELECT goto FROM alias WHERE address='%s' AND active = 1
Remplacez le contenu de "/usr/local/etc/postfix/master.cf" avec :

Code: Select all

#
# Postfix master process configuration file.  For details on the format
# of the file, see the master(5) manual page (command: "man 5 master" or
# on-line: http://www.postfix.org/master.5.html).
#
# 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       -       n       -       -       smtpd
#smtp      inet  n       -       n       -       1       postscreen
#smtpd     pass  -       -       n       -       -       smtpd
#dnsblog   unix  -       -       n       -       0       dnsblog
#tlsproxy  unix  -       -       n       -       0       tlsproxy
submission inet n       -       n       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_dh1024_param_file=${config_directory}/dh2048.pem
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#  -o smtpd_reject_unlisted_recipient=no
#  -o smtpd_client_restrictions=$mua_client_restrictions
#  -o smtpd_helo_restrictions=$mua_helo_restrictions
#  -o smtpd_sender_restrictions=$mua_sender_restrictions
#  -o smtpd_recipient_restrictions=
#  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
#  -o milter_macro_daemon_name=ORIGINATING
#smtps     inet  n       -       n       -       -       smtpd
#  -o syslog_name=postfix/smtps
#  -o smtpd_tls_wrappermode=yes
#  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_reject_unlisted_recipient=no
#  -o smtpd_client_restrictions=$mua_client_restrictions
#  -o smtpd_helo_restrictions=$mua_helo_restrictions
#  -o smtpd_sender_restrictions=$mua_sender_restrictions
#  -o smtpd_recipient_restrictions=
#  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
#  -o milter_macro_daemon_name=ORIGINATING
#628       inet  n       -       n       -       -       qmqpd
pickup    unix  n       -       n       60      1       pickup
cleanup   unix  n       -       n       -       0       cleanup
qmgr      unix  n       -       n       300     1       qmgr
#qmgr     unix  n       -       n       300     1       oqmgr
tlsmgr    unix  -       -       n       1000?   1       tlsmgr
rewrite   unix  -       -       n       -       -       trivial-rewrite
bounce    unix  -       -       n       -       0       bounce
defer     unix  -       -       n       -       0       bounce
trace     unix  -       -       n       -       0       bounce
verify    unix  -       -       n       -       1       verify
flush     unix  n       -       n       1000?   0       flush
proxymap  unix  -       -       n       -       -       proxymap
proxywrite unix -       -       n       -       1       proxymap
smtp      unix  -       -       n       -       -       smtp
relay     unix  -       -       n       -       -       smtp
#       -o smtp_helo_timeout=5 -o smtp_connect_timeout=5
showq     unix  n       -       n       -       -       showq
error     unix  -       -       n       -       -       error
retry     unix  -       -       n       -       -       error
discard   unix  -       -       n       -       -       discard
local     unix  -       n       n       -       -       local
virtual   unix  -       n       n       -       -       virtual
lmtp      unix  -       -       n       -       -       lmtp
anvil     unix  -       -       n       -       1       anvil
scache    unix  -       -       n       -       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}
#
# ====================================================================
#
# Recent Cyrus versions can use the existing "lmtp" master.cf entry.
#
# Specify in cyrus.conf:
#   lmtp    cmd="lmtpd -a" listen="localhost:lmtp" proto=tcp4
#
# Specify in main.cf one or more of the following:
#  mailbox_transport = lmtp:inet:localhost
#  virtual_transport = lmtp:inet:localhost
#
# ====================================================================
#
# Cyrus 2.1.5 (Amos Gouaux)
# Also specify in main.cf: cyrus_destination_recipient_limit=1
#
#cyrus     unix  -       n       n       -       -       pipe
#  user=cyrus argv=/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user}
#
# ====================================================================
#
# Old example of delivery via Cyrus.
#
#old-cyrus unix  -       n       n       -       -       pipe
#  flags=R user=cyrus argv=/cyrus/bin/deliver -e -m ${extension} ${user}
#
# ====================================================================
#
# 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/local/sbin/bsmtp -f $sender $nexthop $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}
Configuration de dovecot

On configure le "start up" de dovecot

Code: Select all

echo 'dovecot_enable="YES"' >> /etc/rc.conf

Code: Select all

cd /usr/local/etc/dovecot/example-config
cp -Rp * ../
Nous allons activer IMAP pour la récupération des emails via le port 993 et LMTP pour l'acheminement des emails entre Postfix et Dovecot
Remplacez le contenu de "/usr/local/etc/dovecot/dovecot.conf" avec :

Code: Select all

!include_try /usr/share/dovecot/protocols.d/*.protocol
protocols = imap lmtp
listen = *
postmaster_address=postmaster@domain.tld
# Assurez-vous que cette ligne est bien décommentée :
!include conf.d/*.conf
On indique le chemin du dossier qui contiendra tous nos emails.
Remplacez le contenu de "/usr/local/etc/dovecot/conf.d/10-mail.conf" avec :

Code: Select all

mail_location = maildir:/var/mail/vhosts/%d/%n/mail

namespace inbox {
    inbox = yes
}

mail_uid = 5000
mail_gid = 5000

first_valid_uid = 5000
last_valid_uid = 5000

mail_privileged_group = vmail
On crée le dossier qui contiendra tous nos mails et il portera le nom de notre domaine

Code: Select all

mkdir -p /var/mail/vhosts/domain.tld
On en profite pour créer les "user" et "group" "vmail" avec un UID/GID de 5000 et attribuer les permissions nécessaires :

Code: Select all

pw groupadd vmail -g 5000
pw useradd vmail -g vmail -u 5000 -d /var/mail
chown -R vmail:vmail /var/mail

Code: Select all

edit /etc/aliases
On décommente et on modifie la ligne suivante :
Puis on crée le fichier "aliases.db"

Code: Select all

/usr/bin/newaliases
Remplacez le contenu de "/usr/local/etc/dovecot/conf.d/10-auth.conf" avec :

Code: Select all

disable_plaintext_auth = yes
auth_mechanisms = plain login
#!include auth-system.conf.ext
!include auth-sql.conf.ext
Remplacez le contenu de "/usr/local/etc/dovecot/conf.d/auth-sql.conf.ext" avec :

Code: Select all

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

# Par contre le nom d'utilisateur est obtenu de manière statique à partir du conteneur local
# %d = domaine.tld
# %n = utilisateur
userdb {
  driver = static
  args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n
} 
Remplacez le contenu de "/usr/local/etc/dovecot/dovecot-sql.conf.ext" avec :

Code: Select all

# Paramètres de connexion
driver = mysql
connect = host=127.0.0.1 dbname=postfix user=postfix password=MOT DE PASSE

# Permet de définir l'algorithme de hachage.
# Pour plus d'information: http://wiki2.dovecot.org/Authentication/PasswordSchemes
# /!\ ATTENTION : ne pas oublier de modifier le paramètre $CONF['encrypt'] de PostfixAdmin
default_pass_scheme = MD5-CRYPT

# Requête de récupération du mot de passe du compte utilisateur
password_query = SELECT password FROM mailbox WHERE username = '%u'
Modifiez les permissions sur le répertoire /usr/local/etc/dovecot :

Code: Select all

chown -R vmail:dovecot /usr/local/etc/dovecot
chmod -R o-rwx /usr/local/etc/dovecot 
Remplacez le contenu de "/usr/local/etc/dovecot/conf.d/10-master.conf" avec :

Code: Select all

service imap-login {

  inet_listener imap {
    port = 143
  }

  inet_listener imaps {
    port = 993
    ssl = yes
  }

  service_count = 0

}

service imap {

}

service lmtp {
Remplacez le contenu de "/usr/local/etc/dovecot/conf.d/10-ssl.conf" avec :

Code: Select all

ssl = required
ssl_cert = </etc/ssl/certs/mailserver.crt
ssl_key = </etc/ssl/private/mailserver.key

ssl_protocols = !SSLv2 !SSLv3
Puis on vérifie que les ports 25 (SMTP), 587 (SMTPS) et 993 (IMAPS) sont bien ouverts au niveau de la box avec l ip de la jail

Test de bon fonctionnement :

Code: Select all

telnet localhost 25
# Puis faites lui un petit coucou <3
ehlo localhost 
  • 250-hostname.domain.tld
    250-PIPELINING
    250-SIZE 10240000
    250-VRFY
    250-ETRN
    250-STARTTLS
    250-ENHANCEDSTATUSCODES
    250-8BITMIME
    250 DSN
Si vous voyez 250-STARTTLS, c'est que le serveur supporte bien l'authentification par STARTTLS.

Installation et configuration de Rainloop

RainLoop propose aux développeurs Web un webmail PHP open source orienté réseau sociaux. S'inspirant largement du design et des fonctionnalités de Gmail et d'Oulook.com, il ne perdra pas les habitués de ces services. RainLoop supporte les protocoles standards tels que IMAP et POP avec SSL et STARTTLS pour la configuration des comptes utilisateurs et autorise l'ajout de plusieurs noms de domaines pour tous les gérer à partir de la même interface. Enfin, on note une compatibilité avec le glisser/déposer de pièces jointes, de raccourcis claviers ou encore de l’auto-complétion des adresses mails dans le champs destinataire.

Code: Select all

cd /usr/local/www
fetch http://repository.rainloop.net/v2/webmail/rainloop-latest.zip
mkdir /usr/local/www/rainloop
unzip rainloop-latest.zip -d /usr/local/www/rainloop
rm -rf rainloop-latest.zip
Modifiez les permissions pour que le serveur web ait accès au répertoire /var/www/rainloop

Code: Select all

cd /usr/local/www/rainloop
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;
chown -R www:www .
On pointe sur https://192.168.0.90:81/rainloop/?admin
login : admin
passe : 12345

Une fois connecté à l'interface d'administration, vous devez ajouter un nouveau domaine. Dans le menu de gauche cliquez sur Domains puis sur + Add Domain. Une nouvelle fenêtre s'ouvre et vous demande de configurer IMAP et SMTP pour ce domaine.
  • Image
Vous configurez exactement comme sur l'image sauf qu'en ce qui me concerne j'ai du mettre "hostname.domain.tld" en IMAP et SMTP (en adaptant avec votre hostname et votre domaine bien sur)
Vous cliquez ensuite sur le bouton "start". Si tous les voyants sont aux vert cest que c'est OK ;) dans white list vous placez la liste des utilisateurs autorisés l'un au dessous de l'autre, par exemple :
admin@domain.tld
claude@domain.tld
.....
Amusez vous à créer des adresses virtuelles dans postfixadmin.
Vous pouvez vous maintenant vous logguer à l'adresse suivante :
https://192.168.0.90:81/rainloop

Vérification de bon fonctionnement de votre messagerie

Le log indispensable à la vérification du systeme

Code: Select all

tail -f /var/log/maillog
A ce stade, allons tester le bon fonctionnment de votre messagerie, vous ouvrez rainloop et vous vous connectez par exemple avec admin@domain.tld. Si tout va bien , vous devriez avoir le log suivant, ce qui veut dire que la connexion IMAP/TLS est OK
Aug 16 19:37:11 hostname dovecot: imap-login: Login: user=<admin@domain.tld>, method=PLAIN, rip=ADRESSE IP CLIENT, lip=ADRESSE IP SERVEUR, mpid=xxx, TLS, session=<xxxxxxxx>
Envoyez maintenant un mail, vérifiez le log, vous devriez voir ceci. cela signifie que la connexion SASL et l'envoie par SMTPS sont OK.
Aug 16 19:54:14 hostname postfix/submission/smtpd[xxx]: client=[VOTRE ADRESSE IP], sasl_method=PLAIN, sasl_username=admin@domain.tld Aug 16 19:54:15 hostname postfix/smtp[xxx]: to=<pierre.free.fr>, relay=[ADRESSE IP RELAI]:25, status=sent (250 OK)
Pierre vous envoi maintenant un mail, vous devriez voir ceci, cela signifie que la réception par IMAP et le transfert de l'email par LMTP sont OK.
Aug 16 20:04:58 hostname postfix/smtpd[xxx]: Anonymous TLS connection established from smtp.free.fr: TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)
Aug 16 20:05:00 hostname postfix/qmgr[xxx]: from=<pierre@free.fr>, size=1748, nrcpt=1 (queue active)
Aug 16 20:05:01 hostname dovecot: lmtp(xxx, admin@domain.tld): saved mail to INBOX
Aug 16 20:05:01 hostname postfix/lmtp[xxx]: to=<admin@domain.tld>, relay=mail.domain.tld[private/dovecot-lmtp], status=sent (250 2.0.0 <admin@domain.tld> Saved)
On va maintenant tester notre mail avec l’outil Mail Tester

Cet outil gratuit augmente le taux de délivrabilité d’un email et réduit le nombre de rejets par l’antispam. Facile à utiliser, les internautes auront juste à poster leur courriel à l’adresse électronique générée de façon automatique par l’outil. Il est également possible de modifier l’adresse de destination par une adresse personnalisée à condition de conserver le nom de domaine « @mail-tester.com ».
En dehors du score de performance, l’outil Mail Tester offre un résultat très bien ventilé : affichage du courriel suivant divers formats, vérification avec un filtre anti spam open source, contrôle de la validation de la signature DKIM, comparaison de l’adresse IP du serveur avec la base de listes noires notoires, recherche des éventuelles erreurs et de liens brisés dans le contenu.
Design : ***
Complétude : ***
Qualité : ***
Compréhension : **
Note globale : ***
Site web de Mail Tester: http://www.mail-tester.com/

Ne vous inquiétez pas si au 1er test vous obtenez un score proche de zéro :lol: , l'installation de opendkim ainsi que l'enregistrement SPF ne sont pas en place. C'est ce à quoi nous allons maintenant nous consacrer.

Installation et configuration d'OpenDKIM

DKIM est un standard permettant d'associer de manière forte une entité ou une organisation avec un domaine au sein d'un email. On se déclare donc complètement responsable de la transmission du message sur le réseau. DKIM fonctionne par cryptographie asymétrique, le MTA (Mail Transfer Agent, dans notre cas il s'agit de Postfix) se charge de signer numériquement tous les emails envoyés avec une clé privée contenue sur le serveur. Le destinataire peut alors vérifier l'intégrité du corps ainsi que les en-têtes du message grâce à la clé publique fournie par le domainkey, qui est un champ TXT contenu dans les fichiers de zone de vos DNS.

Avant de passer à la configuration, nous allons créer un "user" opendkim

Code: Select all

pw useradd -n opendkim -d /var/db/opendkim -g mail -m -s "/usr/sbin/nologin" -w no
On configure ensuite le démarrage de opendkim

Code: Select all

echo 'milteropendkim_enable="YES"' >> /etc/rc.conf
echo 'milteropendkim_uid="opendkim"' >> /etc/rc.conf
Remplacez le contenu de "/usr/local/etc/mail/opendkim.conf" avec :

Code: Select all

LogWhy            yes
Syslog            yes
SyslogSuccess     yes
Canonicalization  relaxed/simple
KeyTable          /var/db/opendkim/KeyTable
SigningTable      /var/db/opendkim/SigningTable
InternalHosts     /var/db/opendkim/TrustedHosts
Socket            inet:8891@localhost
ReportAddress     root
SendReports       yes
on va vréer un fichier "TrustedHosts" avec le contenu suivant :

Code: Select all

edit /var/db/opendkim/TrustedHosts

Code: Select all

127.0.0.1
localhost
192.168.0.1/24

*.domain.tld
On va maintenant créer les clés qui seront nécessaires a opendkim pour signer vos messages et ceux des autres ;)

Code: Select all

mkdir -p /var/db/opendkim/domain.tld
opendkim-genkey -D /var/db/opendkim/domain.tld/ -d domain.tls -s default
cd /var/db/opendkim/domain.tld/
mv default.private default
chown opendkim:mail /var/db/opendkim/
On crée ensuite un fichier "KeyTable" dans lequel on va mettre la ligne suivante qu'il vous faut adapter avec le nom de votre domaine

Code: Select all

edit /var/db/opendkim/KeyTable
default._domainkey.domain.tld domain.tld:default:/var/db/opendkim/domain.tld/default
On crée enfin un fichier "SigningTable" dans lequel on va mettre la ligne suivante :

Code: Select all

edit /var/db/opendkim/SigningTable
domain.tld default._domainkey.domain.tld
Copiez le contenu du fichier default.txt

Code: Select all

cat /var/db/opendkim/domain.tld/default.txt
Et mettez le dans votre fichier de zone de votre domaine, soit depuis l'interface de votre registrar
  • Image
Très important, pour éviter ce type d'erreur :
opendkim[4650]: can't load key from /var/db/opendkim/domain.tld/default: Permission denied
error loading key 'default._domainkey.domain.tld'
Il faut appliquer les permissions suivantes :

Code: Select all

chown opendkim:mail /var/db/opendkim/*
chown opendkim:mail /var/db/opendkim/domain.tld/*
On redémarre les services :

Code: Select all

service postfix  restart
service dovecot  restart
service milter-opendkim start
Ajouter un enregistrement SPF (Sender Policy Framework)

Sender Policy Framework (SPF) est une norme de vérification du nom de domaine de l'expéditeur d'un courrier électronique, normalisé dans la RFC 7208. L'adoption de cette norme est de nature à réduire le spam.
Rajouter un enregistrement txt dans vos paramètres DNS comme celui qui figure sur l'image du dessus.
@ IN TXT "v=spf1 a mx ip4:ADRESSE IP DE VOTRE SERVEUR ~all"
  • Image
DMARC (Domain-based Message Authentication, Reporting & Conformance)

Ce mécanisme utilise DKIM et SPF et permet d'informer les autres fournisseurs de mail des actions à entreprendre lorsqu'ils reçoivent un mail provenant de notre domaine. Vous envoyez un mail à partir de votre adresse @domain.tld à un amis qui est chez Gmail. Google vas donc utiliser DMARC et demander à votre serveur ce qu'il doit faire lorsqu'il reçoit un mail appartenant à votre domaine. Votre serveur répond qu'il doit vérifier la validité de DKIM et SPF, si tout est valide le mail est envoyé au destinataire sinon il est soit mis en quarantaine (dossier spam), soit il n'est pas du tout envoyé (blocké au niveau de la couche smtp).

Les règles de DMARC sont stockés dans un enregistrement de type TXT dans le fichier de zone de votre nom de domaine comme vous pouvez le voir sur l'image du dessus.
_dmarc IN TXT "v=DMARC1; p=reject; rua=mailto:postmaster@domain.tld; ruf=mailto:admin@domain.tld; adkim=s; aspf=s; pct=100; rf=afrf; sp=reject"
Spamassassin: antispam pour votre serveurs mail

Configuration du start up de Spamassassin

Code: Select all

echo 'spamd_enable="YES"' >> /etc/rc.conf
On procède à la mise à jour des blacklists:

Code: Select all

/usr/local/bin/sa-update
On va activer la mise à jour automatique des listes de spamassassin. Ouvrez le fichier "/etc/crontab" et ajoutez l’entrée suivante:
00 3 * * * root /usr/local/bin/sa-update
ensuite..

Code: Select all

cd /usr/local/etc/mail/spamassassin
cp local.cf.sample local.cf
Configuration de postfix

Pour terminer on va relier postfix et spamassassin. Ouvrez le fichier "/usr/local/etc/postfix/master.cf". Repérez la ligne concernant smtp afin d’ajouter la notion de filtre, même chose pour submission inet.
smtp inet n - n - - smtpd -o content_filter=spamassassin
submission inet n - - - - smtpd -o content_filter=spamassassin
Ensuite déclarez le filtre spamassassin en rajoutant ces deux lignes à la fin du fichier :
spamassassin unix - n n - - pipe
flags=R user=spamd argv=/usr/local/bin/spamc -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}
Dans le fichier /etc/spamassassin/local.cf, décommenter la ligne suivante :
rewrite_header Subject *****SPAM*****
Les mails considérés comme du SPAM auront un sujet préfixé avec *****SPAM*****. Ils pourront ainsi être traités comme vous le souhaitez en paramétrant un filtre dans votre client mail. On rajoute également ceci à la fin du fichier :
report_safe 0
add_header all Report _REPORT_
add_header spam Flag _YESNOCAPS_
add_header all Status _YESNO_, score=_SCORE_ required=_REQD_ tests=_TESTS_ autolearn=_AUTOLEARN_ version=_VERSION_
add_header all Level _STARS(*)_
add_header all Checker-Version SpamAssassin _VERSION_ (_SUBVERSION_) on _HOSTNAME_
Pour avoir un rapport détaillé dans les headers de tous les mails, comme ceci :
X-Spam-Report:
* -5.0 RCVD_IN_DNSWL_HI RBL: Sender listed at http://www.dnswl.org/, high
* trust
* [66.45.63.27 listed in list.dnswl.org]
* -3.0 RCVD_IN_RP_CERTIFIED RBL: Sender in ReturnPath Certified - Contact
* cert-sa@returnpath.net
* [Return Path SenderScore Certified {formerly]
[Bonded Sender} - <http://www.senderscorecertified.com>]
* -2.0 RCVD_IN_RP_SAFE RBL: Sender in ReturnPath Safe - Contact
* safe-sa@returnpath.net
* [Return Path SenderScore Safe List (formerly]
[Habeas Safelist) - <http://www.senderscorecertified.com>]
X-Spam-Status: No, score=-10.0 required=5.0 tests=RCVD_IN_DNSWL_HI,
RCVD_IN_RP_CERTIFIED,RCVD_IN_RP_SAFE autolearn=ham
version=3.3.2
X-Spam-Level:
X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on hostname.domain.tld
Puis on démarre le service :

Code: Select all

service spamassassin start
Trier les mails tagués avec dovecot2 et pigeonhole

On édite le fichier "/etc/dovecot/dovecot.conf" et au niveau du protocole, on rajoute "sieve"
protocols = imap lmtp sieve
Ensuite dans le fichier "/etc/dovecot/conf.d/20-lmtp.conf", ajouter le contenu suivant :
protocol lmtp {
postmaster_address = postmaster@domain.tld
mail_plugins = $mail_plugins sieve
}
Créez le fichier 90-sieve.conf dans le répertoire conf.d de dovecot et insérez le contenu suivant :
plugin {

sieve = /var/mail/vhosts/%d/%n/.dovecot.sieve
sieve_default = /var/mail/sieve/default.sieve
sieve_dir = /var/mail/vhosts/%d/%n/sieve
sieve_global_dir = /var/mail/sieve

}
Puis :

Code: Select all

mkdir /var/mail/sieve/
touch /var/mail/sieve/default.sieve && chown -R vmail:vmail /var/mail/sieve
On va ajouter la règle suivante dans le fichier default.sieve, mais sachez que vous pouvez rajouter toutes les règles que vous souhaitez :
require ["fileinto"];

if header :contains "Subject" "*****SPAM*****" {

fileinto "Junk";

}
Enfin on compile les règles avec la commande sievec :

Code: Select all

sievec /var/mail/sieve/default.sieve
on redémarre dovecot :

Code: Select all

service dovecot restart
Vous trouverez d'autres exemples de règles ici
Vous pouvez maintenant tester en vous envoyant un mail d'une autre messagerie avec le contenu suivant :
XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
Il devrait directement arriver dans le dossier "junk" ;)

Rainloop intègre le support de sieve. Pour le configurer,n rendez vous dans les paramètres "admin", vous cliquez sur le domaine que vous aviez créer précédemment et appliquez la configuration ci dessous.
  • Image
Cliquer sur le bouton "test" et si tout est OK il devrait passer en vert ;)
Connecter vous maintenant avec un compte utilisateur et cliquez sur paramètres/filters. Vous pouvez dès à présent configurer vos filtres depuis cette interface.

Installation et configuration de ClamAV

Clam AntiVirus est un antivirus GPL pour UNIX. La principale qualité de cet antivirus est qu'il permet de balayer les courriels reçus et envoyés avec un logiciel de messagerie classique, et ce, grâce à une base de détection de plus de 3 500 000 signatures. Rien de particulier dans la procédure d'installation.

Code: Select all

cp -v /usr/local/etc/rc.d/clamav-* /etc/rc.d/
cd /usr/local/etc/
cp freshclam.conf.default freshclam.conf
cp clamd.conf.default clamd.conf
cp clamav-milter.conf.default clamav-milter.conf

Code: Select all

mkdir -p /etc/mail/clamav/
cd /etc/mail/clamav/
ln -s /usr/local/etc/freshclam.conf
ln -s /usr/local/etc/clamd.conf
ln -s /usr/local/etc/clamav-milter.conf
On verifie que le "user" et "group" existe
grep clam /etc/passwd /etc/group
On vérifie les chemins :
cd /etc/mail/clamav/
grep ^DatabaseDirectory *
grep ^PidFile *
grep .sock$ *
On met à jour le fichier "/etc/rc.conf"

Code: Select all

cd /etc/
cat >> rc.conf <<EOF9
clamav_clamd_enable="YES"
clamav_freshclam_enable="YES"
clamav_milter_enable="YES"
EOF9
On lance maintenant le téléchargement de la liste de virus

Code: Select all

ls -alkF /var/db/clamav/
/etc/rc.d/clamav-freshclam restart
ls -alkF /var/db/clamav/
ps aux | grep freshcl
Au final, lorsque le téléchargement sera terminé, vous aurez ces 4 fichiers.. il faut être patient :oops:
bytecode.cvd
daily.cvd
main.cvd
mirrors.dat
On redémarre ensuite les démons:

Code: Select all

/etc/rc.d/clamav-clamd start
/etc/rc.d/clamav-milter start
Et on vérifie que tout est OK
ls -lF /var/run/clamav/clmilter.sock
ls -lF /var/run/clamav/clamd.sock
ls -lF /var/run/clamav/clamd.sock
ps aux | grep clam
Pour terminer, on edite le fichier "/usr/local/etc/clamav-milter.conf" et on remplace tout le contenu par les lignes suivantes :
MilterSocket /var/run/clamav/clmilter.sock
FixStaleSocket true
User clamav
AllowSupplementaryGroups true
ReadTimeout 120
Foreground false
PidFile /var/run/clamav/clamav-milter.pid
ClamdSocket unix:/var/run/clamav/clamd.sock
OnClean Accept
OnInfected Quarantine
OnFail Defer
AddHeader Replace
LogSyslog true
LogFacility LOG_MAIL
LogVerbose false
LogInfected Full
LogClean Off
MaxFileSize 25M
TemporaryDirectory /tmp
LogFile /var/log/clamav/clamav-milter.log
LogTime true
LogFileUnlock false
LogFileMaxSize 0M
MilterSocketGroup clamav
MilterSocketMode 660
Dans le fichier /etc/clamav/freshclam.conf, ajouter la ligne suivante au-dessus des autres serveurs "DatabaseMirror" :
DatabaseMirror db.fr.clamav.net
On va activer la mise à jour automatique des listes de virus de Clamav. Ouvrez le fichier "/etc/crontab" et ajoutez l’entrée suivante :
15 * * * * /usr/local/bin/freshclam --quiet

Code: Select all

service postfix restart
C'est terminé pour moi, à vous!!

Enjoy it ;)

Locked

Return to “Tuto”