Ci-dessous, les différences entre deux révisions de la page.
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. |