Postfix

De Wiki de Nelly & Richard
Sauter à la navigation Sauter à la recherche

Postfix

  • Bon, cette fois-ci on s'attaque à postfix, relativement simple à installer et configurer.

Installation

$ sudo apt-get install postfix

Configuration

  • On travaillera essentiellement sur le fichier /etc/postfix/main.cf mais aussi brièvement avec le fichier master.cf situé au même endroit.

Minimaliste

# fichier /etc/postfix/main.cf
myorigin = /etc/mailname
smtpd_banner = $myhostname ESMTP
biff = no
append_dot_mydomain = no
delay_warning_time = 4h
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = localhost, domaine1.com, domaine2.com, ....
# il est important de déclarer myhostname APRÈS mydestination (erreur dans les logs : mail loops back to myself)
myhostname = hostname
# smarthost :
relayhost = smtp.fai.com
mynetworks = 127.0.0.0/8, 192.168.0.0/16, ...
mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all

Authentification SASL

  • L'authentificatin SASL seule avec le mécanisme plain login se négocie en clair il est donc nécessaire de l'encapsuler avec TLS

à moins que votre serveur mail, imap et web (dans le cadre d'une utilisation avec un webmail) soit hébergé sur la même machine.

  • fichiers
  1. /etc/postfix/master.cf
  2. /etc/postfix/main.cf
  3. /etc/postfix/sasl/smtpd.conf
  4. /etc/dovecot/dovecot.conf

Configuration

  • /etc/postfix/master.cf
# port 465
smtps     inet  n       -       -       -       -       smtpd
 -o smtpd_sasl_auth_enable=yes
 -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  • /etc/postfix/main.cf
# SASL parameters
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = toto.com
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
  • /etc/dovecot/dovecot.conf
# modifier votre fichier suivant vos besoins
# certaines info étant déjà déclarées dans le fichier
auth default {
 mechanisms = plain login
 passdb pam {
 }
 userdb passwd {
 }
 socket listen {
  client {
   path = /var/spool/postfix/private/auth
   mode = 0660
   user = postfix
   group = postfix
  }
 }
}

SSL wrappermode

  • fichiers
  1. /etc/postfix/master.cf
  2. /etc/postfix/main.cf
  • /etc/postfix/master.cf
# port 465
smtps     inet  n       -       -       -       -       smtpd
 -o smtpd_tls_wrappermode=yes
 -o smtpd_sasl_auth_enable=yes
 -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  • /etc/postfix/main.cf
smtpd_use_tls=yes
#smtpd_enforce_tls = yes
smtpd_tls_auth_only = yes
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.pem
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.key
smtpd_tls_loglevel = 2
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
smtpd_tls_ask_ccert = yes
smtpd_tls_req_ccert = no
smtpd_tls_session_cache_database = btree:${queue_directory}/smtpd_scache
tls_random_source = dev:/dev/urandom
smtp_use_tls = yes
smtp_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key
smtp_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem
smtp_tls_session_cache_database = btree:${queue_directory}/smtp_scache

STARTTLS

Certificat

  • Créez vous un compte sur le site de CAcert
    • Enregistrez-y votre/vos domaine(s)
    • Installer le paquet ca-certificates (contenant les différents certificats d'autorités nécessaires)
$ sudo apt-get install ca-certificates
  • On génère nos paire de certificat/clé :
$ sudo openssl genrsa -out host.key 2048
$ sudo openssl req -new -key host.key -out host.csr
  • on copie/colle le host.csr sur le site de CAcert
  • on récupère le résultat dans le fichier certificat.crt
  • on teste :
$ sudo openssl verify certificat.crt
certificat.crt: OK

Configuration

  • fichiers
  1. /etc/postfix/master.cf
  2. /etc/postfix/main.cf
  • /etc/postfix/master.cf
# port 587
submission inet n       -       -       -       -       smtpd
 -o smtpd_enforce_tls=yes
  • /etc/postfix/main.cf
# STARTTLS parameters
smtpd_use_tls=yes
#smtpd_enforce_tls = yes
smtpd_tls_auth_only = yes
# déclaration des clé, certicat, et certificat d'autorité
smtpd_tls_key_file=/etc/postfix/certs/key_file.key
smtpd_tls_cert_file=/etc/postfix/certs/certificat.crt
smtpd_tls_CAfile=/etc/ssl/certs/ca-certificates.crt
# log level
smtpd_tls_loglevel = 2
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
smtpd_tls_ask_ccert = yes
smtpd_tls_req_ccert = no
smtpd_tls_session_cache_database = btree:${queue_directory}/smtpd_scache
tls_random_source = dev:/dev/urandom
smtp_use_tls = yes
smtp_tls_note_starttls_offer = yes
# déclaration des clé, certicat, côté client
smtp_tls_key_file = /etc/postfix/certs/key_file.key
smtp_tls_cert_file = /etc/postfix/certs/certificat.crt
smtp_tls_CAfile=/etc/ssl/certs/ca-certificates.crt
smtp_tls_session_cache_database = btree:${queue_directory}/smtp_scache

Source

Postfix TLS with free CAcert.org certificates

Règles

  • Pour le moment je fais que poser le contenu d'une machine standard :
# filtrage
smtpd_client_restrictions =
 permit_mynetworks,
 reject_unauth_pipelining,
 reject_unknown_reverse_client_hostname,
 reject_rbl_client sbl-xbl.spamhaus.org,
 reject_rbl_client list.dsbl.org,
 reject_rbl_client dnsbl.njabl.org

smtpd_helo_required = yes
smtpd_helo_restrictions =
 permit_mynetworks,
 reject_invalid_helo_hostname,
 reject_non_fqdn_helo_hostname

smtpd_sender_restrictions =
 permit_mynetworks,
 permit_sasl_authenticated,
 permit_tls_clientcerts,
 reject_unauth_pipelining,
 reject_non_fqdn_sender,
 reject_unknown_sender_domain,
 permit

smtpd_recipient_restrictions =
 permit_mynetworks,
 permit_tls_clientcerts,
 permit_sasl_authenticated,
 reject_non_fqdn_hostname,
 reject_non_fqdn_sender,
 reject_non_fqdn_recipient,
 reject_unauth_pipelining,
 reject_unknown_recipient_domain,
 reject_invalid_hostname,
 reject_unlisted_recipient,
 reject_unlisted_sender,
 reject_unauth_destination,
 reject_rbl_client zen.spamhaus.org,
 permit

Réécriture/modification du message

  • Il vous est parfois nécessaire de réécrire vos en-têtes pour éviter de laisser trop de "traces" sur vos actifs et/ou vos machines.
  • Le paquet postfix-pcre est fait pour ceci.
$ sudo apt-get install postfix-pcre
  • Réécriture de l'en-tête par exemple :
# ajout de la ligne qui suit au fichier /etc/postfix/main.cf
$ sudo postconf -e "header_checks = pcre:/etc/postfix/header_checks"
$ sudo /etc/init.d/postfix force-reload
  • Il vous faut créer le fichier /etc/postfix/header_checks
# exemple de réécriture des headers
/10\.0\.0\.25/ IGNORE
  • Votre en-tête du type sera supprimée :
Received: from 10.0.0.25
       by siteweb.titi.com with HTTP;
       Mon, 10 Nov 2008 11:52:47 +0100 (CET)
  • La page de man vous en dira plus suivant vos besoins : PCRE_TABLE(5)

Problèmes

Mails à destination de hotmail.fr & Cie

  • Si vos mails à destination de hotmail.fr, hotmail.com, msn.com, ... n'aboutissent pas ou atterissent dans les courriers indésirables
  • Renseigner le champs SPF de votre DNS en vérifiant sa syntaxe sur le site openspf ou plus précisément ici et , si ce n'est pas déjà fait.
  • Rendez-vous sur sender ID afin de vous faire accepter par Microsoft

mail loops back to myself

  • Vérifier vos variables myhostname et mydestination
  • Il est important de déclarer myhostname APRÈS mydestination dans main.cf (erreur dans les logs : mail loops back to myself)