Installation de postfix en mode TLS permettant :
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.
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.
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
mail.mondomaine.com
# 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 smtpd_tls_mandatory_ciphers = medium tls_medium_cipherlist = AES128+EECDH:AES128+EDH # 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 # on autorise les clients authentifiés si le helo n'est pas interdit dans la table helo_access smtpd_helo_restrictions = permit_mynetworks, check_helo_access hash:/etc/postfix/helo_access, permit_sasl_authenticated, 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) : oupa : ne pas mettre cette ligne si vous n'avez pas installé/configuré ces logiciels #content_filter=amavisfeed:[127.0.0.1]:10024 # exlusion des protocoles pourris smtpd_tls_mandatory_protocols=!SSLv2,!SSLv3,!TLSv1,!TLSv1.1 smtpd_tls_protocols=!SSLv2,!SSLv3,!TLSv1,!TLSv1.1
#/^(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
postmap /etc/postfix/windows_virus_checks
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
postmap /etc/postfix/helo_access
VERBOSE=no SHELL=/bin/bash PATH=/bin:/usr/bin:/usr/local/bin MAILDIR=/var/mail/$LOGNAME/ ORGMAIL=$MAILDIR/emergency-inbox DEFAULT=$MAILDIR LOGFILE=$MAILDIR/.procmail.log
# maildirmake.dovecot /var/mail/monUtilisateur
START=Yes
MECHANISMS="pam"
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd"
mkdir /etc/postfix/sasl chown root:postfix /etc/postfix/sasl
pwcheck_method: saslauthd mech_list: PLAIN log_level: 5 saslauthd_path: /var/run/saslauthd/mux
adduser postfix sasl
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.
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
Je vous conseille la lecture de cet (excellent :p) article : Configurer un antivirus et antispam sur votre serveur de mail
Pour rendre votre serveur mail compatible IPv6, il vous faut :
inet_protocols = ipv4, ipv6
mynetworks = 127.0.0.0/8 [::1]/128, 192.168.0.0/24 [2a01:e32:833f:e2a:2::]/112 192.168.1.0/24 [2a01:e32:833f:e2a:3::]/112 192.168.2.0/24 [2a01:e32:833f:e2a:4::]/112 192.168.3.0/24
# /etc/init.d/postfix restart
Vous pouvez vérifier que postfix ecoute bien en IPv6 aussi maintenant, comme par exemple avec la commande suivante (présence de la ligne tcp6) :
# netstat -tulpen | grep master tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 0 4479144 1552/master tcp6 0 0 :::25 :::* LISTEN 0 4479146 1552/master
; MX servers @ IN MX 10 mail.mondomaine.com. ; Serveur primaire de mail mail A 40.51.254.42 ; pour IPv4 AAAA 2a01:e32:833f:e2a::2 ; pour IPv6
Pour lutter contre le spam plein de FAI ont l'extreme bonne idée de bloquer le port 25 en sortie depuis leur réseau vers les autres. C'est une bonne idée qui ne vous permet plus en revanche d'utiliser votre serveur de mail pour envoyer des mails depuis votre thunderbird fétiche lorsque vous vous déplacez ;).
Du coup on va utiliser le port “submission” (587) sur lequel on va exiger une authentification pour nous permettre d'envoyer nos mails.
Cette configuration s'effectue dans le fichier /etc/postfix/main.cf : décommenter/ajouter les lignes suivantes :
submission inet n - - - - smtpd -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject -o milter_macro_daemon_name=ORIGINATING -o syslog_name=postfix/submission
Il ne reste plus ensuite qu'à redémarrer postfix :
# /etc/init.d/postfix restart
On eut ensuite vérifier qu'il écoute bien sur le port 587 avec netstat, ce qui devrait vous donner un résultat similaire à :
# netstat -tulpen | grep master tcp 0 0 127.0.0.1:10025 0.0.0.0:* LISTEN 0 179608558 28748/master tcp 0 0 0.0.0.0:587 0.0.0.0:* LISTEN 0 179608461 28748/master tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 0 179608453 28748/master tcp6 0 0 :::587 :::* LISTEN 0 179608463 28748/master tcp6 0 0 :::25 :::* LISTEN 0 179608455 28748/master
Une fois votre firewall troué sur ce port 587, vous devriez être capable modulo une configuration de votre client mail (changer le port 25 que vous deviez avoir par ce nouveau port 587 concernant le SMTP sortant) d'envoyer des mails depuis n'importe quel FAI