Ce tutoriel va vous montrer comment mettre en place un serveur de mail qui va vous permettre d’envoyer et recevoir des mails en IPv4 et IPv6, un webmail moderne, un anti-spam et un anti-virus. Toutes les réalisations ont été réalisés sous Debian 7 Wheezy. Avant de vous lancer sachez qu’il est necessaire d’être a l’aise avec les systèmes Linux et avoir certaines compétences pour comprendre ce tutoriel.
Pré-requis :
– Des bonnes connaissances sur les systèmes GNU/Linux 🙂
– Un nom de domaine avec un serveur DNS (Vous pouvez suivre ce tutoriel
– Nginx et PHP (Vous pouvez suivre ce tutoriel)
– MySQL
Dans 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
1 – Installation de postfix
2 – Création de la base de donnée
3 – Installation et configuration de PostfixAdmin
4 – Configuration de Postfix
5 – Installation et configuration de Dovecot
6 – Installation et configuration de DKIMProxy
7 – Installation d’OpenDMARC
8 – Ajouter un enregistrement SPF et DMARC
9 – Installation et configuration de Rainloop
10 – Installation et configuration de SpamAssassin
11 – Installation et configuration d’Amavis et Clamav
$ sudo -s password : #
Modifier le nom d’host de votre serveur :
# vim /etc/hostname hostname.domain.tld
# vim /etc/hosts 127.0.0.1 localhost.localdomain localhost IP DU SERVEUR hostname.domain.tld hostname
Redémarrez le serveur pour prendre en compte le changement de nom d’hôte.
Ensuite il faut associer le FQDN avec l’adresse IP de votre serveur. Pour cela, vous devez mettre à jour le fichier de zone de votre domaine depuis le site de votre registrar ou sinon directement avec BIND si votre serveur fait office de serveur DNS.
Le plus important dans cette partie, c’est de faire pointer le FQDN ET le MX vers l’adresse IP de votre serveur. L’enregistrement MX permet de déterminer vers quel serveur un email doit être acheminé, si quelqu’un vous envoie un message depuis Gmail par exemple, les serveurs de Google vont automatiquement interroger cette entrée pour savoir où transmettre le message. Donc si cette entrée est pas ou mal définie, vous ne recevrez jamais d’emails.
A la fin du tutoriel, les enregistrements DNS de votre domaine devront ressembler à ceci :
@ IN A IPV4 @ IN AAAA IPV6 hostname IN A IPV4 hostname IN AAAA IPV6 mail IN A IPV4 mail IN AAAA IPV6 postfixadmin IN CNAME HOSTNAME rainloop IN CNAME HOSTNAME @ IN MX 10 mail.domain.tld. ; Les enregistrements suivants sont facultatifs : smtp IN CNAME HOSTNAME imap IN CNAME HOSTNAME
Rechargez la configuration de BIND en redémarrant le service (ne pas oublier de modifier la valeur du serial pour indiquer que le fichier de zone a été mis à jour !!) :
# service bind9 restart
Attendez quelques minutes que les DNS se propagent, vous pouvez suivre l’avancement avec ce site par exemple : https://www.whatsmydns.net/ :
Et pour finir modifiez le reverse depuis l’interface de votre hébergeur ou de vore FAI en : hostname.domain.tld :
.
1 – Installation de postfix
On commence par installer Postfix avec le support de mysql. Les domaines, comptes utilisateurs et alias seront ainsi gérés directement au sein d’une base de données, que vous pourrez administrer grâce à vos outils habituels, comme phpMyAdmin par exemple.
# aptitude install postfix postfix-mysql postfix-policyd-spf-python
Lors de l’installation de Postfix, vous devez choisir le type du serveur de messagerie, choisissez “Site Internet” pour utiliser SMTP
Ensuite une autre fenêtre apparaît et vous demande le nom du système de mail, entrez alors le FQDN de votre serveur.
.
2 – Création de la base de donnée
# mysql -u root -p mysql> CREATE database postfix; mysql> CREATE USER 'postfix'@'localhost' IDENTIFIED BY 'MOT DE PASSE'; mysql> GRANT USAGE ON *.* TO 'postfix'@'localhost'; mysql> GRANT ALL PRIVILEGES ON postfix.* TO 'postfix'@'localhost'; mysql> exit
Vous pouvez aussi passer par phpMyAdmin en créant un nouvel utilisateur nommé postfix qui a tous les privilèges sur la bdd postfix.
.
3 – Installation et configuration de PostfixAdmin
PostfixAdmin est une interface web qui permet de gérer simplement vos domaines, vos adresses virtuelles ainsi que vos alias. Dès que vous aurez besoin d’une nouvelle adresse email, c’est par cette interface qu’il faudra passer.
Il faut dans un premier temps télécharger l’archive la plus récente et la décompresser sur le serveur :
# cd /var/www # wget 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-data:www-data postfixadmin # aptitude install php7.0-imap
Editez le fichier de configuration et modifiez les paramètres suivants :
# vim /var/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';
Nous allons créer un certificat SSL/TLS auto-signé. Si vous avez un certificat signé, vous pouvez l’utiliser sans problème. Pour avoir un certificat chez Gandi, j’ai réalisé un tutoriel à ce sujet.
# mkdir /etc/nginx/certs/ # cd /etc/nginx/certs/ # openssl genrsa -out postfixadmin.key 4096 # openssl req -new -key postfixadmin.key -out postfixadmin.csr # openssl x509 -req -days 365 -in postfixadmin.csr -signkey postfixadmin.key -out postfixadmin.crt # openssl dhparam -out dhparam.pem 4096
Ajouter un nouveau virtual host Nginx (à adapter selon votre configuration) :
# vim /etc/nginx/conf.d/postfixadmin.conf server { listen 80; listen [::]:80; server_name postfixadmin.domain.tld; # Obliger la connexion en https return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name postfixadmin.domain.tld; # Fichier de log access_log /var/log/nginx/postfixadmin-access.log; error_log /var/log/nginx/postfixadmin-error.log; # Parametres pour SSL/TLS ssl_certificate /etc/nginx/certs/postfixadmin.crt; ssl_certificate_key /etc/nginx/certs/postfixadmin.key; ssl_dhparam /etc/nginx/certs/dhparam.pem; ssl_ciphers 'ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AES:RSA+3DES:!ADH:!AECDH:!MD5:!DSS'; ssl_protocols TLSv1.1 TLSv1.2; ssl_session_cache shared:SSL:10m; ssl_prefer_server_ciphers on; # Ajout de header liés à la sécurité add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; prel add_header X-Content-Type-Options nosniff; add_header X-Frame-Options "SAMEORIGIN"; add_header X-XSS-Protection "1; mode=block"; add_header X-Robots-Tag none; add_header Alternate-Protocol 443:npn-spdy/3; # Répertoire dans lequel est installé Owncloud root /var/www/postfixadmin/; # Forcer l'encodage en UTF8 charset utf-8; # Taille de fichier maximum que l'on peut téléverser/uploader client_max_body_size 10G; fastcgi_buffers 64 4K; # Désactivation de la compression pour éviter la suppression du header ETag gzip off; # Page index du site index index.php; location = /robots.txt { allow all; log_not_found off; access_log off; } location ~ ^/(?:\.htaccess|data|config|db_structure\.xml|README){ deny all; } location / { try_files $uri $uri/ /index.php; } location ~ \.php(?:$|/) { fastcgi_split_path_info ^(.+\.php)(/.+)$; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param HTTPS on; fastcgi_param modHeadersAvailable true; fastcgi_pass php-handler; } # Optionnel : positionne un header EXPIRES long sur les ressources statiques location ~* \.(?:jpg|jpeg|gif|bmp|ico|png|css|js|swf)$ { expires 30d; # Optionnel : ne pas logger l'accès aux ressources statiques access_log off; } }
Configuration de php-fpm
# vim /etc/php/7.0/fpm/pool.d/www.conf Remplacer : listen = /var/run/php7.0-fpm.sock par : listen = 127.0.0.1:9000
# service nginx restart # service php7.0-fpm restart
Lancez l’assistant d’installation de PostfixAdmin à l’adresse suivante et suivez les indications :
http://postfixadmin.domain.tld/setup.php
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 :
# vim /var/www/postfixadmin/config.inc.php $CONF['setup_password'] = 'HASH';
Vous pouvez maintenant vous connecter via le formulaire de connexion :
On va commencer par ajouter un nouveau domaine, dans notre exemple il s’agit de domain.tld :

Et une adresse email, par exemple admin@domain.tld et contact@domain.tld :

Voila, vous avez ajouté votre première adresse email, maintenant on va passer aux choses sérieuses
.
4 – Configuration de Postfix
Maintenant nous allons devoir configurer Postfix pour qu’il prenne en charge correctement les connexions SMTP et l’envoie des messages sur le réseau pour chaque utilisateur créé via PostfixAdmin.
Faites une sauvegarde du fichier de conf de Postfix :
# cp /etc/postfix/main.cf /etc/postfix/main.cf.bak
Ce fichier de configuration est assez complexe, on va voir ensemble comment le configurer correctement.
# vim /etc/postfix/main.cf # Ces règles concerne les adresses de destination, # On autorise la connexion des clients authentifier # On refuseles adresses de destinations invalides (non FQDN) 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 # Règles sur l'échange HELO qui survient avant la connexion # reject_invalid_helo_hostname : Refuser les échanges HELO invalides # reject_non_fqdn_helo_hostname : Refuser les noms d'hôte invalides (non FQDN) # reject_unknown_helo_hostname : Refuser les noms d'hôte qui n'ont pas de champ DNS A ou MX dans leurs DNS. smtpd_helo_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname, # reject_unknown_helo_hostname # Règles de connexion des clients # permit_sasl_authenticated : Accepter la connexion lorsque le client est authentifié # reject_plaintext_session : Refuser les connexions non sécurisées # reject_unauth_pipelining : Refuser les défauts lors de la connexion smtpd_client_restrictions = permit_mynetworks, permit_inet_interfaces, permit_sasl_authenticated, # reject_plaintext_session, # reject_unauth_pipelining # Règles sur les expéditeurs # reject_non_fqdn_sender : Refuser les expéditeurs invalides (non FQDN) # reject_unknown_sender_domain : Refuser les expéditeurs qui n'ont pas de champ DNS A ou MX dans leurs DNS. smtpd_sender_restrictions = reject_non_fqdn_sender, reject_unknown_sender_domain # Parametres TLS des mails sortant et entrant # On refuse les connexions SSLv2 et SSLv3 # Smtp OUTGOING (Sortant) smtp_tls_loglevel = 1 smtp_tls_note_starttls_offer = yes smtp_tls_security_level = may smtp_tls_mandatory_ciphers = high smtp_tls_CAfile = /etc/ssl/certs/ca.cert.pem smtp_tls_protocols = !SSLv2, !SSLv3, TLSv1, TLSv1.1, TLSv1.2 smtp_tls_mandatory_protocols = !SSLv2, !SSLv3, TLSv1, TLSv1.1, TLSv1.2 smtp_tls_exclude_ciphers = aNULL, eNULL, EXPORT, DES, RC4, MD5, PSK, aECDH, EDH-DSS-DES-CBC3-SHA, EDH-RSA-DES-CDC3-SHA, KRB5-DE5, CBC3-SHA # Smtpd INCOMING (Entrant) smtpd_tls_loglevel = 1 smtpd_tls_auth_only = yes smtpd_tls_ask_ccert = yes smtpd_tls_security_level = may smtpd_tls_received_header = yes smtpd_tls_mandatory_ciphers = high smtpd_tls_protocols = !SSLv2, !SSLv3, TLSv1, TLSv1.1, TLSv1.2 smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, TLSv1, TLSv1.1, TLSv1.2 smtpd_tls_exclude_ciphers = aNULL, eNULL, EXPORT, DES, RC4, MD5, PSK, aECDH, EDH-DSS-DES-CBC3-SHA, EDH-RSA-DES-CDC3-SHA, KRB5-DE5, CBC3-SHA # Emplacement des certificats smtpd_tls_CAfile = $smtp_tls_CAfile smtpd_tls_cert_file = /etc/ssl/certs/mailserver.crt smtpd_tls_key_file = /etc/ssl/private/mailserver.key smtpd_tls_dh1024_param_file = $config_directory/dh2048.pem smtpd_tls_dh512_param_file = $config_directory/dh512.pem tls_preempt_cipherlist = yes tls_random_source = dev:/dev/urandom tls_medium_cipherlist = AES128+EECDH:AES128+EDH smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache lmtp_tls_session_cache_database = btree:${data_directory}/lmtp_scache # Paramètres de connexion SASL # C'est ici que l'on déclare Dovecot comme une passerelle pour authentifier les utilisateurs. # Postfix peut s'appuyer sur Dovecot pour identifier les connexions SMTP. 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 virtual_uid_maps = static:5000 virtual_gid_maps = static:5000 virtual_minimum_uid = 5000 virtual_mailbox_base = /var/mail virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf virtual_transport = lmtp:unix:private/dovecot-lmtp 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 smtp_bind_address6 = IPV6 inet_interfaces = all inet_protocols = ipv4, ipv6 myhostname = hostname.domain.tld myorigin = hostname.domain.tld mydestination = localhost localhost.$mydomain mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 relayhost = alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases # Ici on va indiquer à Postfix comment s'interfacer avec OpenDMARC, Amavis <-> Clamav-Spamassassion-DKIM-Proxy milter_protocol = 6 milter_default_action = accept smtpd_milters = inet:127.0.0.1:8892 non_smtpd_milters = inet:127.0.0.1:8892 content_filter = smtp-amavis:[127.0.0.1]:10025 mime_header_checks = regexp:/etc/postfix/header_checks header_checks = regexp:/etc/postfix/header_checks receive_override_options = no_address_mappings
Si vous n’avez pas de certificat SSL/TLS, exécutez les commandes suivantes pour en géné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) []: Votre Ville Organization Name (eg, company) [Internet Widgits Pty Ltd]: Mon Autorité De Certification Organizational Unit Name (eg, section) []: IT 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) []: Votre Ville Organization Name (eg, company) [Internet Widgits Pty Ltd]: Mon serveur de mail Organizational Unit Name (eg, section) []: IT 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 # mv CAroot.crt certs/ # mv mailserver.crt certs/ # mv mailserver.key private/ # openssl dhparam -out /etc/postfix/dh2048.pem 2048 # openssl dhparam -out /etc/postfix/dh512.pem 512
C’est terminé pour le fichier de configuration principale, je vous l’accorde il y a pas mal de paramètres à prendre en compte mais dans le cas d’un serveur SMTP c’est pas étonnant.
Configuration de Postfix pour MySQL
On peut maintenant créer les 3 trois fichiers de configuration qui vont permettrent à Postfix d’intéragir avec MySQL :
# vim /etc/postfix/mysql-virtual-mailbox-domains.cf hosts = 127.0.0.1 user = postfix password = MOT DE PASSE dbname = postfix query = SELECT domain FROM domain WHERE domain='%s' and backupmx = 0 and active = 1
# vim /etc/postfix/mysql-virtual-mailbox-maps.cf hosts = 127.0.0.1 user = postfix password = MOT DE PASSE dbname = postfix query = SELECT maildir FROM mailbox WHERE username='%s' AND active = 1
# vim /etc/postfix/mysql-virtual-alias-maps.cf hosts = 127.0.0.1 user = postfix password = MOT DE PASSE dbname = postfix query = SELECT goto FROM alias WHERE address='%s' AND active = 1
Ensuite, il faut modifier le fichier /etc/postfix/master.cf et il faudra l’adapter pour avoir le contenu suivant :
# vim /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" 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 - - - 1 postscreen #smtpd pass - - - - - smtpd #dnsblog unix - - - - 0 dnsblog #tlsproxy unix - - - - 0 tlsproxy ############ ### SMTP ### ############ smtp inet n - - - - smtpd -o smtpd_proxy_filter=127.0.0.1:12025 -o strict_rfc821_envelopes=yes -o smtpd_proxy_options=speed_adjust ################## ### SUBMISSION ### ################## submission inet n - - - - smtpd -o smtpd_proxy_filter=127.0.0.1:12027 -o syslog_name=postfix/submission -o smtpd_tls_dh1024_param_file=${config_directory}/dh2048.pem -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject -o smtpd_proxy_options=speed_adjust -o smtpd_enforce_tls=yes -o smtpd_tls_security_level=encrypt -o tls_preempt_cipherlist=yes ############## ### AMAVIS ### ############## smtp-amavis unix - - n - 2 smtp -o smtp_data_done_timeout=1200 -o smtp_send_xforward_command=yes -o smtp_tls_note_starttls_offer=no 127.0.0.1:10025 inet n - n - - smtpd -o content_filter= -o smtpd_delay_reject=no -o smtpd_client_restrictions=permit_mynetworks,reject -o smtpd_helo_restrictions= -o smtpd_sender_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,reject -o smtpd_data_restrictions=reject_unauth_pipelining -o smtpd_end_of_data_restrictions= -o smtpd_restriction_classes= -o mynetworks=127.0.0.0/8 -o smtpd_error_sleep_time=0 -o smtpd_soft_error_limit=1001 -o smtpd_hard_error_limit=1000 -o smtpd_client_connection_count_limit=0 -o smtpd_client_connection_rate_limit=0 -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks,no_milters -o local_header_rewrite_clients= -o smtpd_milters= -o local_recipient_maps= -o relay_recipient_maps= ############# ### SMTPS ### ############# #smtps inet 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 ############## ### AUTRES ### ############## #628 inet n - - - - qmqpd pickup unix n - - 60 1 pickup cleanup unix n - - - 0 cleanup qmgr unix n - n 300 1 qmgr #qmgr unix n - 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 relay unix - - - - - smtp # -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} # # ==================================================================== # # 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/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} #################### ### SPAMASSASSIN ### #################### spamassassin unix - n n - - pipe user=debian-spamd argv=/usr/bin/spamc -f -e /usr/sbin/sendmail -oi -f ${sender} ${recipient} ########### ### SPF ### ########### policyd-spf unix - n n - 0 spawn user=nobody argv=/usr/bin/policyd-spf /etc/postfix-policyd-spf-python/policyd-spf.conf
.
5 – Installation et configuration de Dovecot
# aptitude install dovecot-core dovecot-imapd dovecot-lmtpd dovecot-mysql dovecot-sieve dovecot-managesieved
Ajoutez la liste des protocoles activés après l’instruction “!include_try” dans le fichier /etc/dovecot/dovecot.conf. Dans notre cas, 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
# vim /etc/dovecot/dovecot.conf ## Dovecot configuration file # Enable installed protocols !include_try /usr/share/dovecot/protocols.d/*.protocol protocols = imap lmtp sieve # A space separated list of IP or host addresses where to listen in for # connections. "*" listens in all IPv4 interfaces. "[::]" listens in all IPv6 # interfaces. Use "*, [::]" for listening both IPv4 and IPv6. listen = *, [::] # 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 # A config file can also tried to be included without giving an error if # it's not found: !include_try local.conf
On indique le chemin du conteneur local qui contiendra tous nos emails. Editez le fichier 10-mail.conf :
# vim /etc/dovecot/conf.d/10-mail.conf # Le contenur local est organisé de cette manière : # /var/mail/vhosts/domain.tld/utilisateur 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
Les emails seront stockés dans le répertoire /var/mail. On doit donc créer un répertoire correspondant à notre domaine (celui qui est présent dans la table domain).
# mkdir -p /var/mail/vhosts/domain.tld
Maintenant on ajoute un nouvel utilisateur et un nouveau groupe nommé vmail avec un UID/GID de 5000 :
# groupadd -g 5000 vmail # useradd -g vmail -u 5000 vmail -d /var/mail # chown -R vmail:vmail /var/mail
Editer le fichier 10-auth.conf et modifier les lignes suivantes :
# vim /etc/dovecot/conf.d/10-auth.conf disable_plaintext_auth = yes auth_mechanisms = plain login #!include auth-system.conf.ext # Commenter cette ligne !include auth-sql.conf.ext # décommenter cette ligne
Maintenant on va définir deux méthodes qui vont permettrent à Dovecot de savoir comment obtenir les utilisateurs et les mots de passe correspondants lors de la connexion. Editez le fichier auth-sql.conf.ext :
# vim /etc/dovecot/conf.d/auth-sql.conf.ext # Le mot de passe est obtenu à partir de la base de donnée 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 }
Ensuite editez le fichier dovecot-sql.conf.ext et modifiez les paramètres suivants :
# vim /etc/dovecot/dovecot-sql.conf.ext # 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 /etc/dovecot :
# chown -R vmail:dovecot /etc/dovecot # chmod -R o-rwx /etc/dovecot
Editer le fichier 10-master.conf avec le contenu suivant :
# vim /etc/dovecot/conf.d/10-master.conf service imap-login { inet_listener imap { port = 143 } inet_listener imaps { port = 993 ssl = yes } service_count = 0 } service imap { } service lmtp { # On autorise Postfix à transférer les emails dans le spooler de Dovecot via LMTP unix_listener /var/spool/postfix/private/dovecot-lmtp { mode = 0600 user = postfix group = postfix } } service auth { # On autorise Postfix à se connecter à Dovecot via LMTP unix_listener /var/spool/postfix/private/auth { mode = 0666 user = postfix group = postfix } # On indique à Dovecot les permissions du conteneur local unix_listener auth-userdb { mode = 0600 user = vmail group = vmail } user = dovecot } service auth-worker { user = vmail }
Enfin, editez le fichier 10-ssl.conf et modifiez les paramètres suivants :
# vim /etc/dovecot/conf.d/10-ssl.conf ssl = required ssl_cert =
Vous connaissez très certainement les filtres côté clients, tout bon client mail possède un système de filtre permettant de trier automatiquement les mails en fonction de différents critères que vous pouvez définir. Sieve c’est exactement la même chose mais côté serveur, il possède un langage de script pour définir soit même l’ensemble des règles.
# vim /etc/dovecot/conf.d/20-lmtp.conf protocol lmtp { postmaster_address = postmaster@domain.tld mail_plugins = $mail_plugins sieve }
# vim /etc/dovecot/conf.d/90-sieve.conf plugin { sieve = ~/.dovecot.sieve sieve_global_path = /var/lib/dovecot/sieve/default.sieve sieve_dir = ~/sieve sieve_global_dir = /var/lib/dovecot/sieve/ }
# mkdir -p /var/lib/dovecot/sieve/ # touch /var/lib/dovecot/sieve/default.sieve && chown -R vmail:vmail /var/lib/dovecot/sieve/
# vim /var/lib/dovecot/sieve/default.sieve require "fileinto"; if header :contains "X-Spam-Flag" "YES" { fileinto "Spam"; }
# sievec /var/lib/dovecot/sieve/default.sieve
.
6 – Installation et configuration de DKIMProxy
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.
# aptitude install dkimproxy
# openssl genrsa -out /etc/dkimproxy/private.key 2048 # openssl rsa -in /etc/dkimproxy/private.key -out /etc/dkimproxy/public.key -pubout -outform PEM
Nous allons commencé par configurer dkimproxy pour qu’il vérifie la signature dkim des mails entrants, puis les envoies à amavis.
Modifier /etc/dkimproxy/dkimproxy_in.conf et l’adapter comme ceci :
# vim /etc/dkimproxy/dkimproxy_in.conf # Ecoute sur le port 12025 listen 127.0.0.1:12025 # DKIMPROXY va relayer les mails entrants vers amavis relay 127.0.0.1:10024
Ensuite, il faut configurer dkimproxy pour qu’il signe nos mails sortant.
Modifier /etc/dkimproxy/dkimproxy_out.conf et l’adapter comme ceci :
# vim /etc/dkimproxy/dkimproxy_out.conf # Ecoute sur le port 12027 listen 127.0.0.1:12027 # DKIMPROXY va relayer les mails sortants vers amavis relay 127.0.0.1:10024 # Spécifier le domaine que dkimproxy va signer domain domain.tld # Spécifier le type de signature à ajouter signature dkim(c=relaxed) signature domainkeys(c=nofws) # Spécifier l'emplacement de la clé privée keyfile /etc/dkimproxy/private.key # Spécifier le selecteur, qui doit être implémenter dans les DNS selector mail
Il faut esuite modifier le script d’éxécution de dkimproxy afin qu’il signe correctement nos mails.
Il faut modifier la ligne suivante :
# vim /etc/init.d/dkimproxy DKIMPROXY_OUT_ARGS="${COMMON_ARGS} --pidfile=${PIDDKIMPROXY_OUT} --min_servers=${DKIMPROXY_OUT_MIN_SERVERS} --domain=example.com --method=simple --conf_file=${DKOUT_CONF} --keyfile=/etc/dkimproxy/private.key --selector=mail --signature=dkim(a=rsa-sha256) --signature=domainkeys(a=rsa-sha1)"
Il reste plus qu’a ajouter une enregistrement TXT dans les DNS contenant votre clé public.
$ cat /etc/dkimproxy/public.key
Et mettez le dans votre fichier de zone de votre domaine, soit depuis l’interface de votre registrar, soit avec BIND :
mail._domainkey IN TXT "v=DKIM1; t=s; k=rsa; p=CLE PUBLIQUE"; _domainkey IN TXT "t=y; o=-;" _adsp._domainkey IN TXT "dkim=all; atps=y;"
.
7 – Installation d’OpenDMARC
DMARC est une spécification technique assez récente (2011), qui est toujours en draft par l’IETF ( https://datatracker.ietf.org/doc/rfc7489/ ), les contributeurs initiaux sont un consortium de plusieurs géants d’internet comme AOL, Yahoo, Google, Microsoft, Paypal, Facebook…etc. Cette spécification permet de réduire l’usage abusif des e-mails, tels que le spam, le phishing en ajoutant une couche supplémentaire dans le processus d’authentification des mails.
# aptitude install opendmarc
Editer le fichier de configuration opendmarc.conf avec le contenu suivant :
# vim /etc/opendmarc.conf AutoRestart Yes AutoRestartRate 10/1h UMask 0002 Syslog true AuthservID domain.tld TrustedAuthservIDs domain.tld IgnoreHosts /etc/opendmarc/TrustedHosts RejectFailures false UserID opendmarc:opendmarc PidFile /var/run/opendmarc.pid
Nous allons maintenant créer un fichier contenant la liste des hôtes qui serons ignorés durant la validation par opendmarc
# mkdir /etc/opendmarc # touch /etc/opendmarc/TrustedHosts && vim /etc/opendmarc/TrustedHosts 127.0.0.1 localhost ::1 *@domain.tld
Enfin, nous allons définir le port d’écoute d’OpenDMARC
# vim /etc/default/opendmarc # Command-line options specified here will override the contents of # /etc/opendmarc.conf. See opendmarc(8) for a complete list of options. #DAEMON_OPTS="" # # Uncomment to specify an alternate socket # Note that setting this will override any Socket value in opendkim.conf #SOCKET="local:/var/run/opendmarc/opendmarc.sock" # default #SOCKET="inet:54321" # listen on all interfaces on port 54321 #SOCKET="inet:12345@localhost" # listen on loopback on port 12345 #SOCKET="inet:12345@192.0.2.1" # listen on 192.0.2.1 on port 12345 SOCKET="inet:8892:localhost"
.
8 – Ajouter un enregistrement SPF et DMARC
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.
Le 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. C’est peut-être pas très clair dit comme ça, mais c’est pas compliqué, prenons un exemple :
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).
Ajoutez ces lignes dans le fichier de zone de votre nom de domaine :
@ IN TXT "v=spf1 ip4:IPv4 ip6:IPv6 ptr ?all" @ IN SPF "v=spf1 ip4:IPv4 ip6:IPv6 ptr ?all" _dmarc IN TXT "v=DMARC1; p=reject; rua=mailto:postmaster@domain.tld; ruf=mailto:admin@domain.tld; fo=0; adkim=s; aspf=s; pct=100; rf=afrf; sp=reject"
.
9 – Installation et configuration de Rainloop
Rainloop est un webmail opensource développé en PHP qui se veut complet et simple d’utilisation. Il gère très bien les protocoles IMAP/SMTP et dispose d’une interface moderne (HTML5/CSS3) très érgonomique, c’est plutôt agréable. Du côté des fonctionnalités, on retrouve toutes celles d’un client mail classique, avec en plus un système de plugins.
Rainloop est très simple à mettre en place. Téléchargez le zip depuis le site officiel et décompressez-le dans le dossier /var/www/rainloop:
# wget http://repository.rainloop.net/v2/webmail/rainloop-latest.zip # mkdir /var/www/rainloop # unzip rainloop-latest.zip -d /var/www/rainloop # rm -rf rainloop-latest.zip
Modifiez les permissions pour que le serveur web ait accès au répertoire /var/www/rainloop
$ cd /var/www/rainloop # find . -type d -exec chmod 755 {} \; # find . -type f -exec chmod 644 {} \; # chown -R www-data:www-data .
Nous allons créer un autre certificat auto-signer pour que notre webmail soit tout de même chiffré en HTTPS
# cd /etc/nginx/certs/ # openssl genrsa -out rainloop.key 4096 # openssl req -new -key rainloop.key -out rainloop.csr # openssl x509 -req -days 365 -in rainloop.csr -signkey rainloop.key -out rainloop.crt
Ajouter un nouveau virtual host Nginx (à adapter selon votre configuration) :
# vim /etc/nginx/conf.d/rainloop.conf server { listen 80; listen [::]:80; server_name webmail.domain.tld; # Obliger la connexion en https return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name webmail.domain.tld; # Fichier de log access_log /var/log/nginx/rainloop-access.log; error_log /var/log/nginx/rainloop-error.log; # Parametres pour SSL/TLS ssl_certificate /etc/nginx/certs/rainloop.crt; ssl_certificate_key /etc/nginx/certs/rainloop.key; ssl_dhparam /etc/nginx/certs/dhparam.pem; ssl_ciphers 'ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AES:RSA+3DES:!ADH:!AECDH:!MD5:!DSS'; ssl_protocols TLSv1.1 TLSv1.2; ssl_session_cache shared:SSL:10m; ssl_prefer_server_ciphers on; # Ajout de header liés à la sécurité add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; prel add_header X-Content-Type-Options nosniff; add_header X-Frame-Options "SAMEORIGIN"; add_header X-XSS-Protection "1; mode=block"; add_header X-Robots-Tag none; add_header Alternate-Protocol 443:npn-spdy/3; # Répertoire dans lequel est installé Owncloud root /var/www/rainloop/; # Forcer l'encodage en UTF8 charset utf-8; # Taille de fichier maximum que l'on peut téléverser/uploader client_max_body_size 10G; fastcgi_buffers 64 4K; # Désactivation de la compression pour éviter la suppression du header ETag gzip off; # Page index du site index index.php; location = /robots.txt { allow all; log_not_found off; access_log off; } location ~ ^/(?:\.htaccess|data|config|db_structure\.xml|README){ deny all; } location / { try_files $uri $uri/ /index.php; } location ~ \.php(?:$|/) { fastcgi_split_path_info ^(.+\.php)(/.+)$; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param HTTPS on; fastcgi_param modHeadersAvailable true; fastcgi_pass php-handler; } # Optionnel : positionne un header EXPIRES long sur les ressources statiques location ~* \.(?:jpg|jpeg|gif|bmp|ico|png|css|js|swf)$ { expires 30d; # Optionnel : ne pas logger l'accès aux ressources statiques access_log off; } }
Redémarrer Nginx pour prendre en compte le nouveau vhost :
# service nginx restart
L’installation est maintenant terminée, nous allons passer à la configuration. Connectez-vous à l’interface d’administration via cette adresse :
http://webmail.domain.tld/?admin
Par défaut les identifiants sont : admin et 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.
Voici un exemple de configuration, adaptez selon vos besoins :

Connexion à votre boîte mail
Connectez-vous à votre boîte mail via le formulaire principal :
http://webmail.domain.tld/
Saisissez les identifiants que vous avez mis lors de la création de votre adresse email via PostfixAdmin et connectez-vous. Si tout se passe bien, vous arrivez dans votre boîte mail. Rainloop s’occupe de son côté d’aller chercher et d’organiser tous vos emails depuis le serveur avec le protocol IMAP :
.
10 – Installation et configuration de SpamAssassin
SpamAssassin est un logiciel libre permettant de filtrer les emails afin d’éradiquer au maximum le SPAM. Il fait passer un certain nombre de tests au message et en fonction du résultat de ces tests, il attribue un score qui permettra de savoir si il s’agit d’un email indésirable ou non.
On commence par installer SpamAssassin :
# aptitude install spamassassin spamc
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.
Ajouter aussi à la fin du fichier local.cf:
report_safe 1 whitelist_from *@domain.tld whitelist_from_dkim *@domain.tld 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
Dans le fichier /etc/default/spamassassin, modifier ces deux lignes :
ENABLED=1 CRON=1
Pour finir, ajouter au cron ces 3 lignes avec contab :
# crontab -e # Mise à jour des règles de spamassassin 20 02 * * * /usr/bin/sa-update # Mise à jour de la base virale clamav 15 23 * * * /usr/bin/freshclam --quiet # Auto-apprentissage de spam assassin 30 02 * * * /usr/bin/sa-learn --ham /var/mail/vhosts/domain.tld/utilisateur/mail/cur/* 40 02 * * * /usr/bin/sa-learn --spam /var/mail/vhosts/domain.tld/utilisateur/mail/.Junk/cur/*
Spamassassin est très intelligent, il peut apprendre tout seul au fur et à mesure que vous recevez des mails, lorsque vous ajoutez manuellement un mail dans le dossier spam (ce qui veut dire qu’il ne l’avait pas détecté en tant que tel)
.
11 – Installation et configuration d’Amavis et Clamav
ClamAV est un antivirus destiné aux systèmes UNIX principalement. Il est capable de détecter en temps réel des logiciels malveillants et des virus grâce à une base de détection de plus de 3 500 000 signatures. ClamAV est généralement utilisé avec Postfix pour filtrer les emails comportant des virus, malwares…etc Amavis fera appel à
ClamAV pour les virus et à SpamAssassin pour définir si les e-mails sont des spams ou non.
Installer les paquets :
# aptitude install amavisd-new clamav clamav-daemon clamav-freshclam lha arj rar unrar nomarch lzop cabextract razor pyzor p7zip-full pax zip unzip lha zoo
Pour que ce dernier puisse accéder aux pièces jointes décompressées par Amavis, il faut le rajouter au groupe « Amavis ».
# addgroup clamav amavis
# service clamav-freshclam stop # freshclam # ClamAV update process started at Sat Sep 13 23:42:44 2014 # main.cvd is up to date (version: 55, sigs: 2424225, f-level: 60, builder: neo) # daily.cvd is up to date (version: 19360, sigs: 1098967, f-level: 63, builder: dgoddard) # bytecode.cvd is up to date (version: 242, sigs: 46, f-level: 63, builder: dgoddard)
# service clamav-freshclam start # service clamav-daemon start [ ok ] Starting ClamAV daemon: clamd.
Maintenant, il faut autoriser le filtrage de ClamAV et de SpamAssassin.
Il faut éditer « /etc/amavis/conf.d/15-content_filter_mode » et dé-commenter les lignes suivantes :
@bypass_virus_checks_maps = ( \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re); @bypass_spam_checks_maps = ( \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);
On peaufine certains paramètres
Analysé les pièces jointes
Dans /etc/amavis/conf.d/20-debian_defaults, je suggère d’élargir la liste des pièces jointes interdites (par extension).
# vim /etc/amavis/conf.d/20-debian_defaults # qr'.\.(exe|vbs|pif|scr|bat|cmd|com|cpl)
Comportement lors de détection de spam
Quelques variables importantes à positionner (écraser par rapport à la conf par défaut) :
# vim /etc/amavis/conf.d/20-debian_defaults $sa_spam_subject_tag = '*****SPAM***** '; $sa_tag_level_deflt = 2.0; $sa_tag2_level_deflt = 5.0; $sa_kill_level_deflt = 5.0; $sa_dsn_cutoff_level = 10; $final_virus_destiny = D_REJECT; $final_banned_destiny = D_BOUNCE; $final_spam_destiny = D_PASS; $final_bad_header_destiny = D_PASS;
Enfin, j’avais oublié un point important, la variable « @local_domains_acl ». Elle défini la liste des domaines sur lesquels spamassassin va intervenir. Les domaines non listés ici ne sont tout simplement pas pris en compte, donc pas analysés, donc pas « flaggés »…
Je ne l’avais pas vu au début car avec un seul domaine qui est le nom de la machine etc, tout va bien avec le choix par défaut de Debian dans 05-domain_id:@local_domains_acl = ( “.$mydomain” );.
Là où ça se complique, c’est quand vous gérez plusieurs domaines, suivant comment votre bousin est défini. Par exemple avec des domaines virtuels, gérés en base de données, c’est mort (prochain article à venir sur la gestion de domaines et d’utilisateurs virtuels).
J’ai donc forcé cette variable dans le fichier /etc/amavis/conf.d/05-domain_id :
# vim /etc/amavis/conf.d/05-domain_id @local_domains_acl = ( ".domain.tld" );
Définir une adresse mail pour être notifier lors de la détection d’un virus, spam etc..
# vim /etc/amavis/conf.d/50-user $mailfrom_notify_admin='postmaster@domain.tld'; $mailfrom_notify_recip='postmaster@ddomain.tld'; $mailfrom_notify_spamadmin='postmaster@domain.tld'; $mailfrom_to_quarantine='postmaster@domain.tld';
Amavis est maintenant bien configurer pour filtrer les spams et les virus indésirable !
# service postfix restart # service dovecot restart # service dkimproxy restart # service opendmarc restart # service amavis restart
Amavis est maintenant bien configurer pour filtrer les spams et les virus indésirable !