Outils pour utilisateurs

Outils du site


email

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
email [2012/11/28 15:14]
nicolas Ajout de spamassassin DKIM
email [2019/04/18 14:46] (Version actuelle)
mart
Ligne 12: Ligne 12:
   * multi-utilisateur   * multi-utilisateur
   * pas de base de donnée   * pas de base de donnée
-  * OpenDKMI+  * OpenDKIM
   * SpamAssassin   * SpamAssassin
  
Ligne 65: Ligne 65:
  
 Le fichier de config principal est ''/​etc/​postfix/​main.cf''​ Le fichier de config principal est ''/​etc/​postfix/​main.cf''​
-Voici un exemple de fichier ​fonctionnant,​ a adapter selon vos besoin.+Voici les options importantes (ou à modifier) par rapport au fichier ​par défaut
  
 <​code>​ <​code>​
-smtpd_banner = $myhostname ESMTP $mail_name (Debian/​GNU) +# Les domaines depuis lesquels on va recevoir des mails 
-biff no +virtual_mailbox_domains ​example.com,​ domain.net, monsite.org 
-append_dot_mydomain = no +Dossier de base de stockage des mails 
-readme_directory = no +virtual_mailbox_base ​= /home/vmail 
- +# C'est là qu'on va stocker la liste des emails 
-TLS parameters +virtual_mailbox_maps ​hash:/etc/postfix/vmaps 
-smtpd_tls_cert_file ​= /etc/ssl/​certs/​smtpd.crt +virtual_minimum_uid ​100 
-smtpd_tls_key_file ​= /etc/ssl/private/​smtpd.key +# UID du user et group vmail 
-smtpd_use_tls=yes +virtual_uid_maps ​static:5000 
-smtpd_tls_session_cache_database ​btree:${data_directory}/​smtpd_scache +virtual_gid_maps ​static:5000 
-smtp_tls_session_cache_database ​btree:${data_directory}/​smtp_scache +virtual_alias_maps ​hash:/etc/postfix/virtual 
-smtp_tls_security_level = may +# 5GB de taille max des boites virtuelles 
-smtpd_tls_security_level = may +virtual_mailbox_limit ​5368709120
-smtpd_tls_auth_only = no +
-smtp_tls_note_starttls_offer = yes +
-smtpd_tls_CAfile ​= /etc/ssl/certs/​cacert.pem +
-smtpd_tls_loglevel = 1 +
-smtpd_tls_received_header ​yes +
-smtpd_tls_session_cache_timeout = 3600s +
-tls_random_source = dev:/​dev/​urandom+
  
-# remplacer par votre FQDN (hostname --long) 
-myhostname = example.com 
-mydomain = localhost 
-alias_maps = hash:/​etc/​aliases 
-alias_database = hash:/​etc/​aliases 
-# Verifiez que /​etc/​mailname contient le résultat de "​hostname --long"​ 
-myorigin = /​etc/​mailname 
-# on va utiliser des virtual_mailbox_domains donc pas de domaine ici 
-mydestination = localhost 
-relayhost =  
 # la liste des ip depuis lesquelles on peut accéder au serveur smtp # la liste des ip depuis lesquelles on peut accéder au serveur smtp
 # on commente car on va utiliser SASL-auth pour contrôler # on commente car on va utiliser SASL-auth pour contrôler
 # mynetworks = 127.0.0.0/8 [::​ffff:​127.0.0.0]/​104 [::1]/128 # mynetworks = 127.0.0.0/8 [::​ffff:​127.0.0.0]/​104 [::1]/128
 +
 # 5GB de mailbox max # 5GB de mailbox max
 mailbox_size_limit = 5368709120 mailbox_size_limit = 5368709120
 +
 +# faire du dot addressing
 recipient_delimiter = + recipient_delimiter = +
-inet_interfaces = all + 
-inet_protocols = all +# 50MB de piece jointe max, on est plus en 2000
-home_mailbox = Maildir/ +
-# 50MB de piece jointe max+
 message_size_limit = 52428800 message_size_limit = 52428800
  
 # SASL # SASL
 smtpd_sasl_auth_enable = yes smtpd_sasl_auth_enable = yes
-smtpd_recipient_restrictions = permit_sasl_authenticated,​permit_mynetworks,​reject_unauth_destination 
 smtpd_sasl_security_options = noplaintext,​noanonymous smtpd_sasl_security_options = noplaintext,​noanonymous
-# on confie l'​authentification à Dovecot, configuration plus bas 
 smtpd_sasl_type = dovecot smtpd_sasl_type = dovecot
 smtpd_sasl_path = private/​auth-client smtpd_sasl_path = private/​auth-client
 +smtpd_sender_restrictions = reject_unlisted_sender,​reject_unknown_sender_domain,​reject_non_fqdn_sender,​reject_sender_login_mismatch,​reject_authenticated_sender_login_mismatch
 +smtpd_recipient_restrictions = permit_sasl_authenticated,​permit_mynetworks,​reject_unauth_destination
 +smtpd_client_restrictions = permit_sasl_authenticated,​sleep 1,​reject_unauth_pipelining
  
-Virtual +Ajoute une ligne désignant l'​utilisateur authentifié dans le header.A décommenter pour lutter contre les emails forgés
-# Les domaines depuis lesquels on va recevoir des mails +#smtpd_sasl_authenticated_header ​yes 
-virtual_mailbox_domains = example.com, domain.net, monsite.org + 
-Dossier de base de stockage des mails +Table d'autorisation d'adresse mail par login SASL 
-virtual_mailbox_base ​/home/vmail +smtpd_sender_login_maps ​= hash:/​etc/​postfix/​sender_login
-C'est là qu'on va stocker la liste des emails +
-virtual_mailbox_maps ​= hash:/​etc/​postfix/​vmaps +
-virtual_minimum_uid = 100 +
-# UID du user et group vmail +
-virtual_uid_maps = static:​5000 +
-virtual_gid_maps = static:​5000 +
-virtual_alias_maps = hash:/​etc/​postfix/​virtual +
-# 5GB de taille max des boites virtuelles +
-virtual_mailbox_limit = 5368709120+
  
 # pour refuser les adresses non définies # pour refuser les adresses non définies
 local_transport = virtual local_transport = virtual
 local_recipient_maps = $virtual_mailbox_maps local_recipient_maps = $virtual_mailbox_maps
 +
 +# Trick IPv6 pour résoudre le problème de "​address not listed for hostname"​
 +import_environment = MAIL_CONFIG MAIL_DEBUG MAIL_LOGTAG TZ XAUTHORITY DISPLAY LANG=C RESOLV_MULTI=on
 </​code>​ </​code>​
  
Ligne 178: Ligne 157:
 postmaster@example.com ​ bob+postmaster@example.com</​code>​ postmaster@example.com ​ bob+postmaster@example.com</​code>​
  
-Pour que tout les mails de Bob reçu à la première adresse soit reçu par la deuxième (ça fonctionne aussi pour les adresses sur des domaines externes. Notez que selon la [[https://​tools.ietf.org/​html/​rfc5321#​section-4.5.1|RFC5321]] demande d'​avoir une adresse ''​postmaster@''​ existante pour chaque domaine. Ce fichier est un bon endroit pour faire les redirections nécessaires.+Pour que tout les mails de Bob reçu à la première adresse soit reçu par la deuxième (ça fonctionne aussi pour les adresses sur des domaines externes. Notez que selon la [[https://​tools.ietf.org/​html/​rfc5321#​section-4.5.1|RFC5321]] demande d'​avoir une adresse ''​postmaster@''​ existante pour chaque domaine.
  
 Pour générer la base de donnée de vmaps et virtual. Pour générer la base de donnée de vmaps et virtual.
Ligne 187: Ligne 166:
 Et on redémarre le serveur ! Et on redémarre le serveur !
  
-<​code>​/​etc/​init.d/​postfix ​restart</​code>​+<​code>​systemctl ​restart ​postfix</​code>​ 
 + 
 +=== Astuce anti-spam === 
 + 
 +Via le fichier ''​virtual'',​ vous pouvez facilement créer des alias et faire votre service d'​email jetables. En vous inscrivant sur un site suspect, ajoutez une ligne ''​nom-site-suspect@example.com compte-principal+nom-site=suspect@example.com''​ et régénérez le fichier via ''​postmap''​. Tous les emails seront delivres a votre adresse principale et vous pourrez facilement identifier la source de spam et la supprimer en enlevant la ligne ou la redirigeant vers un autre compte.
  
 ==== Test SMTP ==== ==== Test SMTP ====
Ligne 225: Ligne 208:
 Si vous testez de vous connecter depuis l'​extérieur,​ vous aurez besoin de vous authentifier. Configurez d'​abord Dovecot (suite du tutoriel). Un exemple de communication SMTP avec authentification est donné [[http://​gerardnico.com/​wiki/​smtp_telnet|ici]]. Si vous testez de vous connecter depuis l'​extérieur,​ vous aurez besoin de vous authentifier. Configurez d'​abord Dovecot (suite du tutoriel). Un exemple de communication SMTP avec authentification est donné [[http://​gerardnico.com/​wiki/​smtp_telnet|ici]].
 ==== Maildrop ==== ==== Maildrop ====
 +
 +//TODO remplacer cette section par sieve//
  
 Cette section est **optionnelle**. Le serveur mail fonctionnera très bien si vous laissez Postfix gérer la réception des mails. Seulement, si l'on veut appliquer des filtres, SpamAssassin et autres, l'​utilisation de maildrop peut être utile. Si vous utilisez maildrop, le contenu du fichier ''/​etc/​postfix/​vmaps''​ change de rôle. Il est nécessaire de continuer à lister chaque adresse email présente dans ce fichier (sinon les mail reçu seront rejetés) mais la seconde partie de la ligne (le dossier de destination),​ n'a plus d'​importance. Cette section est **optionnelle**. Le serveur mail fonctionnera très bien si vous laissez Postfix gérer la réception des mails. Seulement, si l'on veut appliquer des filtres, SpamAssassin et autres, l'​utilisation de maildrop peut être utile. Si vous utilisez maildrop, le contenu du fichier ''/​etc/​postfix/​vmaps''​ change de rôle. Il est nécessaire de continuer à lister chaque adresse email présente dans ce fichier (sinon les mail reçu seront rejetés) mais la seconde partie de la ligne (le dossier de destination),​ n'a plus d'​importance.
Ligne 249: Ligne 234:
 <​code>​DEFAULT="/​home/​vmail/​$1/​$2"</​code>​ <​code>​DEFAULT="/​home/​vmail/​$1/​$2"</​code>​
  
-Le [[http://​en.gentoo-wiki.com/​wiki/​Maildrop#​Configuration|wiki de Gentoo]] donne plusieurs exemples de règles de filtrage que l'on peut mettre. Voici par exemple, une que j'​utilise pour rediriger les mails venant d'une instance StatusNet dans le sous dossier StatusNet et une autre pour rediriger sur base de l'​adresse de la personne qui envoie.+Le [[http://​en.gentoo-wiki.com/​wiki/​Maildrop#​Configuration|wiki de Gentoo]] ​(down ? [[http://​web.archive.org/​web/​20130404224643/​http://​en.gentoo-wiki.com/​wiki/​Maildrop|archive]]) ​donne plusieurs exemples de règles de filtrage que l'on peut mettre. Voici par exemple, une que j'​utilise pour rediriger les mails venant d'une instance StatusNet dans le sous dossier StatusNet et une autre pour rediriger sur base de l'​adresse de la personne qui envoie.
  
 <​code>#​ Redirect to statusnet subdomain <​code>#​ Redirect to statusnet subdomain
Ligne 344: Ligne 329:
     args = /​etc/​dovecot/​users     args = /​etc/​dovecot/​users
 } }
 +
 +## /​etc/​dovecot/​10-auth.conf
 +!include auth-passwdfile.conf.ext
 +
 +## /​etc/​dovecot/​conf.d/​auth-passwdfile.conf.ext
 +passdb {
 +  driver = passwd-file
 +  args = scheme=CRAM-MD5 username_format=%u /​etc/​dovecot/​passwd
 +}
 +
 </​code>​ </​code>​
  
 +==== Multidomaine et SSL ====
 +
 +Si vous avez plusieurs domaines email, il y a des chances que vous ayez également plusieurs certificats SSL. Si vous voulez éviter les grosses alertes de sécurité lorsque vous accédez à vos emails, vous pouvez modifier la configuration Dovecot pour utiliser des certificats en fonction du domaine.
 +
 +<​code>​
 +ssl_cert = </​etc/​ssl/​certs/​certificat_global.pem
 +ssl_key = </​etc/​ssl/​certs/​clef_global.key
 +...
 +local_name imap.domaine1.org {
 +  ssl_cert = </​etc/​ssl/​certs/​imap.domaine1.org.pem
 +  ssl_key = </​etc/​ssl/​private/​imap.domaine1.org.key
 +}
 +local_name imap.domaine2.org {
 +  ssl_cert = </​etc/​ssl/​certs/​imap.domaine2.crt
 +  ssl_key = </​etc/​ssl/​private/​imap.domaine2.key
 +}
 +</​code>​
 +
 +Et pour vérifier que le bon certificat est bien sélectionné:​ ''​openssl s_client -connect imap.domaine2.org:​993 -servername imap.domaine2.org''​.
 +
 +Attention que le filtre est fait sur le //TLS SNI (Server Name Indication)//,​ une fonctionnalité que tous les clients mail n'​implémentent pas. Thunderbird le fait, pas K9 mail (Android) par exemple. Dans le cas d'un client qui ne l'​implémente pas, vous retomberez sur le certificat global. Il suffit de retirer le ''​-servername imap.domaine2.org''​ dans la commande openssl pour voir le résultat.
 ==== Création d'​utilisateur ==== ==== Création d'​utilisateur ====
  
Ligne 352: Ligne 368:
 Utilisez simplement avec ''​./​newuser.sh alice@example.com''​ Utilisez simplement avec ''​./​newuser.sh alice@example.com''​
  
-<​code>​wget http://​paste.mart-e.be/​raw/​nalesikipe ​-O ~/​newuser.sh</​code>​+<​code>​wget http://​paste.mart-e.be/​raw/​curireqale ​-O ~/​newuser.sh</​code>​
  
-<​code>#​!/​bin/​sh+<​code>​ 
 +#!/bin/sh
 if [ ! $# = 1 ] if [ ! $# = 1 ]
  then  then
Ligne 386: Ligne 403:
   /​usr/​bin/​maildirmake.dovecot /​home/​vmail/​$domain/​$user/​.Trash 5000:5000   /​usr/​bin/​maildirmake.dovecot /​home/​vmail/​$domain/​$user/​.Trash 5000:5000
  
-  # To add user to Postfix virtual map file and relode ​Postfix+  # To add user to Postfix virtual map file and relod Postfix
   echo "​Adding user to /​etc/​postfix/​vmaps"​   echo "​Adding user to /​etc/​postfix/​vmaps"​
-  echo "$1               ​$domain/​$user/​" ​>> /​etc/​postfix/​vmaps+  echo $1               ​$domain/​$user/​ >> /​etc/​postfix/​vmaps
   postmap /​etc/​postfix/​vmaps   postmap /​etc/​postfix/​vmaps
 +
 + # Add user's mail address to the list of addresses he is allowed to use
 +  echo "​Adding user to /​etc/​postfix/​sender_login"​
 +  echo $1 $1 >> /​etc/​postfix/​sender_login
 +  postmap /​etc/​postfix/​sender_login
   postfix reload   postfix reload
 fi fi
-echo "\nCreate ​a password for the new email user"​ +echo "Create ​a password for the new email user"​ 
-#Some old dovecot versions use dovecotpw, swap if needed+#SWAP THE FOLLOWING passwd LINES IF USING A UBUNTU VERSION PRIOR TO 12.04
 #​passwd=`dovecotpw` #​passwd=`dovecotpw`
 passwd=`doveadm pw -u $user` passwd=`doveadm pw -u $user`
Ligne 404: Ligne 426:
 echo  "​$user@$domain:​$passwd"​ >> /​etc/​dovecot/​passwd echo  "​$user@$domain:​$passwd"​ >> /​etc/​dovecot/​passwd
  
-exit 0</​code>​+# Register special mailboxes (Junk, Trash...) 
 +for mailbox in `doveadm mailbox list -u $user@$domain` 
 +do 
 + doveadm mailbox subscribe -u $user@$domain $mailbox 
 +done 
 + 
 + 
 +exit 0 
 + 
 +</​code>​
  
 ==== Suppression d'​utilisateur ==== ==== Suppression d'​utilisateur ====
Ligne 410: Ligne 441:
 La même chose pour la suppression,​ ''​./​deluser.sh alice@example.com''​. La même chose pour la suppression,​ ''​./​deluser.sh alice@example.com''​.
  
-<​code>​wget http://​paste.mart-e.be/​raw/​gadekiyihe ​-O ~/​deluser.sh</​code>​+<​code>​wget http://​paste.mart-e.be/​raw/​hewisesido ​-O ~/​deluser.sh</​code>​
  
-<​code>#​!/​bin/​bash+<​code>​ 
 +#!/bin/bash
 # #
 # deldovecotuser - for deleting virtual dovecot users # deldovecotuser - for deleting virtual dovecot users
Ligne 436: Ligne 468:
   new_passwd=`grep -v $user@$domain /​etc/​dovecot/​passwd`   new_passwd=`grep -v $user@$domain /​etc/​dovecot/​passwd`
   new_vmaps=`grep -v $user@$domain /​etc/​postfix/​vmaps`   new_vmaps=`grep -v $user@$domain /​etc/​postfix/​vmaps`
 +  new_sender=`grep -v "​^$1"​ /​etc/​postfix/​sender_login`
   echo "​Deleting $user@$domain from /​etc/​dovecot/​users"​   echo "​Deleting $user@$domain from /​etc/​dovecot/​users"​
   echo "​$new_users"​ > /​etc/​dovecot/​users   echo "​$new_users"​ > /​etc/​dovecot/​users
Ligne 442: Ligne 475:
   echo "​Deleting $user@$domain from /​etc/​postfix/​vmaps"​   echo "​Deleting $user@$domain from /​etc/​postfix/​vmaps"​
   echo "​$new_vmaps"​ > /​etc/​postfix/​vmaps   echo "​$new_vmaps"​ > /​etc/​postfix/​vmaps
 +  echo "​Deleting $user@$domain from /​etc/​postfix/​sender_login"​
 +  echo "​$new_sender"​ > /​etc/​postfix/​sender_login
 +  postmap /​etc/​postfix/​sender_login
   postmap /​etc/​postfix/​vmaps   postmap /​etc/​postfix/​vmaps
   postfix reload   postfix reload
Ligne 459: Ligne 495:
   echo "​Aborting..."​   echo "​Aborting..."​
  ;;  ;;
-esac</​code>​+esac 
 +</​code>​
  
 Et on redémarre ! Et on redémarre !
  
-<​code>​/​etc/​init.d/​dovecot ​restart</​code>​+<​code>​systemcl ​restart ​dovecot</​code>​
  
 ===== Score de spam ===== ===== Score de spam =====
Ligne 487: Ligne 524:
  
 Si vous possédez comme moi plusieurs domaines pointant sur la même IP, sachez qu’il est inutile de mettre plusieurs entrées DNS PTR, cela pourrait être même contre productif ([[http://​serverfault.com/​a/​66060/​61652|source]]). Si vous possédez comme moi plusieurs domaines pointant sur la même IP, sachez qu’il est inutile de mettre plusieurs entrées DNS PTR, cela pourrait être même contre productif ([[http://​serverfault.com/​a/​66060/​61652|source]]).
 +
 +Si votre serveur de mail est amené à utiliser de l'IPv6 il faut aussi mettre à jour de reverse DNS de la ou des adresse(s) IPv6.
 ==== SPF ==== ==== SPF ====
  
Ligne 613: Ligne 652:
  
  
-Le fichier de configuration ​principale ​est ''/​etc/​spamassassin/​local.cf''​. Lisez le et décommentez les lignes pour activer les options qui vous intéresse. On a par exemple :+Le fichier de configuration ​principal ​est ''/​etc/​spamassassin/​local.cf''​. Lisez le et décommentez les lignes pour activer les options qui vous intéresse. On a par exemple :
  
 <​code>#​ mettre SPAM dans le sujet du message suspecté <​code>#​ mettre SPAM dans le sujet du message suspecté
Ligne 634: Ligne 673:
 Pour accélérer la procédure, vous pouvez compilez vos règles SA (spamassassin 3.2 min) avec la commande ''​sa-compile''​. Décommentez ensuite la ligne ''​loadplugin Mail::​SpamAssassin::​Plugin::​Rule2XSBody''​ dans ''/​etc/​spamassassin/​v320.pre''​. Pour accélérer la procédure, vous pouvez compilez vos règles SA (spamassassin 3.2 min) avec la commande ''​sa-compile''​. Décommentez ensuite la ligne ''​loadplugin Mail::​SpamAssassin::​Plugin::​Rule2XSBody''​ dans ''/​etc/​spamassassin/​v320.pre''​.
  
 +Vous pourrez désormais, voir passer des superbes échantillons de spam [[http://​paste.mart-e.be/​bugodivoce|comme celui-ci]] (efficace n'est ce pas).
 ==== Vérification SPF ==== ==== Vérification SPF ====
 +
 +Pour faire simple, installez le paquet **libmail-spf-perl**. Si vous ne possédez pas ce paquet ou que vous aimez compilez tout à la main, on va utiliser CPAN (attention, c'est lent), package manager perl.
  
 Pour que SA vérifie les champs SPF, on a besoin du plugin ''​Mail::​SPF::​Query''​. ​ Pour que SA vérifie les champs SPF, on a besoin du plugin ''​Mail::​SPF::​Query''​. ​
Ligne 674: Ligne 716:
 add_header spam Waw c'est du spam _STARS(*)_ ca</​code>​ add_header spam Waw c'est du spam _STARS(*)_ ca</​code>​
  
 +==== fail2ban ====
 +
 +Installer le package **fail2ban** et activer dans ''/​etc/​fail2ban/​jail.conf''​ les regles ''​postfix'',​ ''​dovecot''​ et ''​sasl''​.
  
 ===== Autre ===== ===== Autre =====
  
-==== Liens utiles ​====+==== plus-addressing ​====
  
 +Une fonctionnalité intéressante dans Gmail est le "​plus-addressing",​ le fait de pouvoir créer une infinité d'​adresse email de type nom+alias@serveur.com. Dans postfix, c'est facilement reproductible (sans doute même activé par défaut il me semble).
  
 +Dans le fichier ''/​etc/​postfix/​main.cf'',​ chercher la ligne suivante (l'​ajouter si inexistante)
 +
 +<​code>​recipient_delimiter = +</​code>​
 +
 +Cela spécifie que le symbole + sera considéré comme délimiteur. Si vous changez le "​+"​ par "​.",​ "​_"​ ou autre, il deviendra le nouveau délimiteur. Cela vous permet donc de crever des adresses de type nom.alias@serveur.com a la place. Certains formulaires refusant les + ou les retirant automatiquement,​ vous servez ainsi paré (évidement ne fonctionne pas si votre adresse est prenom.nom@serveur.com).
 +==== Prolongements ====
 +La page [[fonction_mail_php|msmtp]] explique comment envoyer des mails en ligne de commande et avec PHP après avoir configuré ce serveur mail.
 +
 +==== Liens utiles ====
 [[http://​www.emailsecuritygrader.com/​|Email Security Grader]] permet de tester son serveur mail. Fait la vérification de SPF, reverse DNS, quelques points de sécurité... Pratique pour s'​assurer qu'on a rien oublié. Si vous suivez l'​ensemble de ce tuto, vous devriez décrocher le rang de "VERY STRONG SECURITY",​ pas mal hein ;-) [[http://​www.emailsecuritygrader.com/​|Email Security Grader]] permet de tester son serveur mail. Fait la vérification de SPF, reverse DNS, quelques points de sécurité... Pratique pour s'​assurer qu'on a rien oublié. Si vous suivez l'​ensemble de ce tuto, vous devriez décrocher le rang de "VERY STRONG SECURITY",​ pas mal hein ;-)
 +
 +[[http://​www.checktls.com|CheckTLS]] permet de tester la connexion sécurisée de votre serveur de mail en testant la validité de votre certificat et permet la visualisation complète du déroulement du protocole SMTP.
email.1354112053.txt.gz · Dernière modification: 2019/04/02 11:14 (modification externe)