Ceci est une ancienne révision du document !


Installer un serveur de mail authentifié

Installation de postfix en mode TLS permettant :

  • la réception de mail pour un domaine donné
  • l'envoi de mail pour les utilisateurs authentifiés du domaine
  • et tout ca avec une authentification sécurisée SSL (TLS)
  • les utilisateurs sont les utilisateurs système de la machine

Prérequis

L'installation se fait sur une debian lenny a jour. Tous les logiciels installés sont disponbles en paquet debian dans les depôts officiels. Ce tutorial est cependant adaptable à d'autres distributions.

Installation des paquets

apt-get install postfix libsasl2-2 libsasl2-modules sasl2-bin procmail

Choisir le mode “Site internet” à l'installation de postfix, même si nous allons changer le fichier de configuration de postfix généré lors de cette installation.

Configuration initiale

On va supposer ici que votre domaine est mondomaine.com.
La machine enverra mail.mondomaine.com comme nom de serveur mail (et qui doit donc etre resolvable en DNS depuis le monde extérieur sous peine de voir vos mails refusés par les autres serveurs)
Les certificats SSL seront générés pour smtp.mondomaine.com

  • fichier /etc/postfix/main.cf :
    # Debian specific:  Specifying a file name will cause the first
    # line of that file to be used as the name.  The Debian default
    # is /etc/mailname.
    myorigin = /etc/mailname
    
    smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
    biff = no
    
    # appending .domain is the MUA's job.
    append_dot_mydomain = no
    
    # Uncomment the next line to generate "delayed mail" warnings
    delay_warning_time = 4h
    
    readme_directory = no
    
    # TLS parameters
    smtpd_tls_cert_file=/etc/ssl/certs/smtp.mondomaine.com.crt
    smtpd_tls_key_file=/etc/ssl/private/smtp.mondomaine.com.key
    smtpd_use_tls=yes
    smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
    smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
    
    # auth smtp TLS
    smtpd_tls_security_level = may
    smtpd_tls_auth_only = yes
    smtpd_tls_received_header = yes
    
    
    # See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
    # information on enabling SSL in the smtp client.
    myhostname = mail.mondomaine.com
    alias_maps = hash:/etc/aliases
    alias_database = hash:/etc/aliases
    mydestination = mail.mondomaine.com, mondomaine.com, localhost
    relayhost = 
    mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
    mailbox_size_limit = 0
    recipient_delimiter = +
    
    inet_interfaces = all
    # filtre les pieces jointes executables pour windows
    body_checks=regexp:/etc/postfix/windows_virus_checks
    
    mailbox_command = procmail -a "$EXTENSION"
    local_destination_concurrency_limit = 4
    # ne pas mettre une bannière avec des indications sur le nom de votre serveur de courrier évite beaucoup de spam
    smtpd_banner = bienvenue sur mon serveur de courrier
    #evite les messages trop volumineux
    message_size_limit=16384000
    #filtrage des MAIL FROM: sans < >  autour de l'adresse email
    strict_rfc821_envelopes = yes
    
    # on rejete les mails des serveurs mal configurés en face en rendant le helo obligatoire (et etant un FQDN valide)
    smtpd_helo_required = yes
    # la table /etc/postfix/helo_access permet d'accepter/rejeter sur des patterns du HELO
    smtpd_helo_restrictions = permit_mynetworks, check_helo_access hash:/etc/postfix/helo_access, reject_invalid_hostname, reject_non_fqdn_hostname, reject_unknown_hostname
    
    smtpd_sasl_auth_enable = yes
    smtpd_sasl_authenticated_header = no
    smtpd_sasl_local_domain =
    smtpd_sasl_security_options = noanonymous
    broken_sasl_auth_clients = yes
    
    smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, permit_tls_clientcerts,
                                    reject_unauth_pipelining, reject_unknown_recipient_domain,
                                    reject_non_fqdn_sender, reject_non_fqdn_recipient,
                                    reject_unauth_destination
    
    smtpd_sender_restrictions = permit_mynetworks, permit_sasl_authenticated
    smtpd_client_restrictions = permit_mynetworks, permit_sasl_authenticated,
                                    reject_unauth_destination, reject_unauth_pipelining
                                    
    # voir http://www.postfix.org/postconf.5.html#reject_unauth_pipelining pour plus d'info
    smtpd_data_restrictions = reject_unauth_pipelining, permit
    
    # filtrage du contenu avec amavis (conteneur antivirus/antispam) : ne pas mettre cette ligne si vous n'avez pas installé/configuré ces logiciels
    content_filter=smtp-amavis:[127.0.0.1]:10024
  • fichier “/etc/postfix/windows_virus_checks” :
    #/^(Content-(Disposition: attachment;|Type:).*|\s+)(file)?name\s*=\s*"?.*\.(lnk|bat|c[ho]m|cmd|com|exe|dll|vxd|pif|scr|hta|jse?|sh[mbs]|vb[esx]|ws[fh])"?\s*$/          REJECT
    /^begin [0-9]{1,4} .*\.(lnk|bat|c[ho]m|cmd|com|exe|dll|vxd|pif|scr|hta|jse?|sh[mbs]|vb[esx]|ws[fh])$/   REJECT
toute modification sur ce fichier doit etre suivie de l'exeution de la commande
postmap /etc/postfix/windows_virus_checks
  • fichier “/etc/postfix/helo_access” :
    vous pouvez accepter/refuser des HELO spécifiques via ce fichier
    serveur.domaine-mal-configure-mais-ami.com                         OK
    localhost                               REJECT Get lost - you're lying about who you are
    localhost.localdomain                   REJECT Get lost - you're lying about who you are
    mail.mondomaine.com                     REJECT Get lost - you're lying about who you are
    smtp.mondomaine.com                     REJECT Get lost - you're lying about who you are
toute modification sur ce fichier doit être suivie de l'execution de la commande
postmap /etc/postfix/helo_access

Configuration de l'authentification SASL

  • Le demon d'authentification SASL (saslauthd) utilise des sockets UNIX pour communiquer avec les autres programmes. Comme Postfix tourne dans un environnement chrooté (dans “/var/spool/postfix/” en l'occurence), nous devons nous assurer que saslauthd et postfix peuvent communiquer. En d'autres mots : il faut demander a saslauthd de créer un socket quelque part dans l'environnement chrooté de postfix. Pour faire cela, éditer le fichier “/etc/default/saslauthd” et modifier comme suit :
    • enlever le # devant
      START=Yes
    • MECHANISMS="pam"
    • changer la derniere ligne en
      OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd"
  • pour dire a postfix d'utiliser saslauthd pour l'authentification
    • créer le repertoire /etc/postfix/sasl avec les droits corrects :
      mkdir /etc/postfix/sasl
      chown root:postfix /etc/postfix/sasl
    • créer un fichier “smtpd.conf” dans ce répertoire /etc/postfix/sasl contenant :
      pwcheck_method: saslauthd
      mech_list: PLAIN
      log_level: 5
      saslauthd_path: /var/run/saslauthd/mux
    • ajouter l'utilisateur postfix au groupe sasl :
      adduser postfix sasl

Fin de l'installation

Il ne reste plus qu'a (re)démarrer tous ces services pour finir l'installation :

/etc/init.d/saslauthd restart
/etc/init.d/postfix restart

Vous n'avez ensuite plus qu'a configurer votre client mail pour utiliser ce serveur SMTP en TLS.

Un peu plus loin

Eviter encore un peu les SPAMS

Dans la configuration choisie, par défaut le nom de votre domaine apparait dans la banière de connexionn SMTP. Le spammeurs peuvent (en ne se gènent pas pour le faire :p ) donc vous envoyer des mails a n'importe-quoi@cedomaine, qui surchargeront inutilement votre serveur.

Une parade simple est donc de remplacer dans le fichier /etc/postfix/main.cf

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)

par une valeur ne comportant pas $myhostname, comme par exemple :

smtpd_banner = bienvenue sur mon serveur de courrier
sysadmin/install_postfix_sasl.1349255161.txt.gz · Dernière modification: 2012/10/03 11:06 par james
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0