Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 03/08/2016, à 15:20

Arnaudduluoz

Configuration sécurisée de Postfix

Bonjour à tous,

Depuis plusieurs semaines, j'ai mis en place un serveur postfix. Je m'efforce de le sécuriser au maximum et ai pour ce faire combiné plusieurs pistes venant de différents tutos. Je pense à être arrivé à quelque chose de stable mais je souhaiterais avoir votre avis sur la structure du fichier . Il y a en effet une série de paramètres que je maîtrise assez mal, voire ne comprends pas. Aussi, j'aimerais avoir votre avis sur la configuration suivante, mais aussi vos idées d'améliorations !
N'ayant pas trouvé sur internet de fichier modèle de configuration sécurisée, je me disais que cela pourrait aussi, peut-être, servir à d'autres.

Merci pour vos avis !

Voici le résultat de postconf -n

alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
biff = no
broken_sasl_auth_clients = yes
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/lib/postfix
data_directory = /var/lib/postfix
disable_vrfy_command = yes
html_directory = no
inet_interfaces = all
inet_protocols = ipv4
lmtp_tls_session_cache_database = btree:${data_directory}/lmtp_scache
mail_owner = postfix
mailbox_size_limit = 2147483648
mailq_path = /usr/bin/mailq
manpage_directory = /usr/share/man
message_size_limit = 20971520
milter_default_action = accept
milter_protocol = 6
mydestination = 127.0.0.1
mydomain = monsite.eu
myhostname = monsite.eu
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.0.0/24
myorigin = /etc/mailname
newaliases_path = /usr/bin/newaliases
non_smtpd_milters = inet:127.0.0.1:12345
queue_directory = /var/spool/postfix
readme_directory = no
recipient_delimiter = +
relay_domains =
relayhost =
sample_directory = /usr/share/doc/postfix/examples
sendmail_path = /usr/sbin/sendmail
setgid_group = postdrop
smtp_tls_CAfile = /etc/letsencrypt/live/monsite.eu/chain.pem
smtp_tls_cert_file = /etc/letsencrypt/live/monsite.eu/fullchain.pem
smtp_tls_exclude_ciphers = aNULL, eNULL, EXPORT, DES, 3DES, RC2, RC4, MD5, PSK, SRP, DSS, AECDH, ADH
smtp_tls_key_file = /etc/letsencrypt/live/monsite.eu/privkey.pem
smtp_tls_loglevel = 1
smtp_tls_mandatory_ciphers = high
smtp_tls_mandatory_protocols = !SSLv2, !SSLv3
smtp_tls_note_starttls_offer = yes
smtp_tls_protocols = !SSLv2, !SSLv3
smtp_tls_security_level = may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtp_use_tls = yes
smtpd_banner = $myhostname ESMTP $mail_name (Raspbian)
smtpd_client_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unknown_client_hostname, reject_unknown_reverse_client_hostname
smtpd_data_restrictions = reject_unauth_pipelining
smtpd_delay_reject = yes
smtpd_enforce_tls = yes
smtpd_error_sleep_time = 1s
smtpd_hard_error_limit = 20
smtpd_helo_required = yes
smtpd_helo_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_helo_hostname, reject_invalid_helo_hostname
smtpd_milters = inet:127.0.0.1:12345, unix:/opendmarc/opendmarc.sock
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination, reject_non_fqdn_recipient, reject_unknown_recipient_domain, reject_unknown_client_hostname, reject_unknown_reverse_client_hostname, reject_invalid_hostname, reject_non_fqdn_hostname, reject_non_fqdn_sender, reject_unknown_sender_domain, reject_rbl_client zen.spamhaus.org, reject_rbl_client bl.spamcop.net, permit
smtpd_sasl_auth_enable = yes
smtpd_sasl_authenticated_header = yes
smtpd_sasl_local_domain = $mydomain
smtpd_sasl_path = private/auth
smtpd_sasl_tls_security_options = $smtpd_sasl_security_options
smtpd_sasl_type = dovecot
smtpd_sender_restrictions = reject_non_fqdn_sender, reject_unknown_sender_domain
smtpd_soft_error_limit = 10
smtpd_tls_CAfile = /etc/letsencrypt/live/monsite.eu/chain.pem
smtpd_tls_auth_only = yes
smtpd_tls_ccert_verifydepth = 1
smtpd_tls_cert_file = /etc/letsencrypt/live/monsite.eu/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/monsite.eu/privkey.pem
smtpd_tls_loglevel = 1
smtpd_tls_mandatory_ciphers = high
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
smtpd_tls_protocols = !SSLv2, !SSLv3
smtpd_tls_received_header = yes
smtpd_tls_security_level = may
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
strict_rfc821_envelopes = yes
tls_high_cipherlist = ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
tls_preempt_cipherlist = yes
tls_random_source = dev:/dev/urandom
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
virtual_transport = lmtp:unix:private/dovecot-lmtp

Hors ligne

#2 Le 05/08/2016, à 19:41

bobe

Re : Configuration sécurisée de Postfix

Salut,

Quelques remarques :

1/ Tu devrais nous donner le contenu du fichier /etc/postfix/main.cf, ce sera plus lisible ;-)

2/ Tu n'as pas précisé à quel usage est dédié ce serveur :
  a. Envoi d'emails seulement en local ? vers l'extérieur ?
  b. Réception d'emails pour des hôtes virtuels ? (apparamment oui)
  c. mydestination ne contient que "127.0.0.1". Normal ? Il devrait aussi contenir le nom de la machine, pour le courriel local.

3/ smtpd_tls_CAfile doit contenir le certificat utilisé pour signer des certificats clients. Je peux me tromper mais je doute que tes clients s'identifient avec un certificat, probablement simplement un couple login/password ?

smtp_tls_CAfile doit cibler un fichier contenant les certificats permettant de vérifier les certificats des serveurs auxquels postfix est susceptible de se connecter (pour relayer des mails). Sauf cas spécique à des grands intranet, on cible généralement le fichier /etc/ssl/certs/ca-certificates.crt.

4/ Tu n'as pas précisé ce que tu entendais par sécurité. Sécurité au sens où ton serveur ne doit pas être en relais ouvert ? Chiffrement des connexions ?

Hors ligne

#3 Le 07/08/2016, à 10:20

Arnaudduluoz

Re : Configuration sécurisée de Postfix

Bonjour, et merci pour ta réponse !

Voici dans l'ordre la réponse à tes questions.

1/ Voilà d'abord main.cf

smtpd_banner = $myhostname ESMTP $mail_name
biff = no

readme_directory = no

###### Config du serveur Arnaud


myorigin                         = /etc/mailname
mydestination                    = 127.0.0.1
myhostname                       = monsite.eu
mynetworks                       = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.0.0/24
#ai rajoute la plage du reseau local
mydomain                         = monsite.eu
relay_domains                    =
relayhost                        =
alias_maps                       = hash:/etc/aliases
alias_database                   = hash:/etc/aliases
#notify_classes                   = protocol, resource, software
#ligne precedente ajoutee pour recevoir des mails en cas de souci
mailbox_size_limit               = 2147483648
message_size_limit               = 20971520
recipient_delimiter              = +
inet_interfaces                  = all
strict_rfc821_envelopes          = yes

#Handing off local delivery to Dovecot's LMTP, and telling it where to store mail
virtual_transport                = lmtp:unix:private/dovecot-lmtp

#Virtual domains, users, and aliases
virtual_mailbox_domains          = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps             = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
virtual_alias_maps               = mysql:/etc/postfix/mysql-virtual-alias-maps.cf

inet_protocols                   = ipv4

###### Config des filtres

milter_default_action            = accept
#passer la ligne ci-dessus sur reject quand probleme dmarc sera repare
milter_protocol                  = 6
smtpd_milters                    = inet:127.0.0.1:12345, unix:/opendmarc/opendmarc.sock
non_smtpd_milters                = inet:127.0.0.1:12345
sample_directory                 = /usr/share/doc/postfix/examples
sendmail_path                    = /usr/sbin/sendmail
html_directory                   = no
setgid_group                     = postdrop
command_directory                = /usr/sbin
manpage_directory                = /usr/share/man
daemon_directory                 = /usr/lib/postfix
newaliases_path                  = /usr/bin/newaliases
mailq_path                       = /usr/bin/mailq
queue_directory                  = /var/spool/postfix
mail_owner                       = postfix
data_directory                   = /var/lib/postfix

############ Parametres SMTPD INCOMING

smtpd_tls_auth_only              = yes
smtpd_enforce_tls                = yes
smtpd_tls_loglevel               = 1
smtpd_tls_security_level         = may
smtpd_tls_received_header        = yes
smtpd_tls_protocols              = !SSLv2, !SSLv3
smtpd_tls_mandatory_protocols    = !SSLv2, !SSLv3
smtpd_tls_CAfile                 = /etc/letsencrypt/live/monsite.eu/chain.pem
smtpd_tls_cert_file              = /etc/letsencrypt/live/monsite.eu/fullchain.pem
smtpd_tls_key_file               = /etc/letsencrypt/live/monsite.eu/privkey.pem
#smtpd_tls_ask_ccert              = yes
#smtpd_tls_req_ccert              = yes
smtpd_tls_ccert_verifydepth      = 1
smtp_tls_session_cache_database  = btree:${data_directory}/smtp_scache
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
lmtp_tls_session_cache_database  = btree:${data_directory}/lmtp_scache

smtpd_tls_mandatory_ciphers      = high
tls_high_cipherlist              = ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
tls_preempt_cipherlist           = yes
tls_random_source                = dev:/dev/urandom

disable_vrfy_command             = yes
smtpd_delay_reject               = yes
smtpd_helo_required              = yes
smtpd_helo_restrictions          =
				permit_mynetworks,
				permit_sasl_authenticated,
				reject_non_fqdn_helo_hostname,
				reject_invalid_helo_hostname

smtpd_error_sleep_time           = 1s
smtpd_soft_error_limit           = 10
smtpd_hard_error_limit           = 20

smtpd_recipient_restrictions     =
				permit_sasl_authenticated,
				permit_mynetworks,
				reject_unauth_destination,
				reject_non_fqdn_recipient,
				reject_unknown_recipient_domain,
				reject_unknown_client_hostname,
				reject_unknown_reverse_client_hostname,
				reject_invalid_hostname,
				reject_non_fqdn_hostname,
				reject_non_fqdn_sender,
				reject_unknown_sender_domain,
				reject_rbl_client zen.spamhaus.org,
				reject_rbl_client bl.spamcop.net,
				permit
smtpd_client_restrictions        =
				permit_mynetworks,
				#permit_inet_interfaces,
				permit_sasl_authenticated,
				reject_unknown_client_hostname,
                                reject_unknown_reverse_client_hostname
smtpd_data_restrictions          = reject_unauth_pipelining
smtpd_sender_restrictions        =
        			reject_non_fqdn_sender,
        			reject_unknown_sender_domain

smtpd_sasl_type                  = dovecot
smtpd_sasl_path                  = private/auth
smtpd_sasl_auth_enable           = yes
smtpd_sasl_tls_security_options  = $smtpd_sasl_security_options
smtpd_sasl_local_domain          = $mydomain
smtpd_sasl_authenticated_header  = yes

broken_sasl_auth_clients         = yes


############ Smtp mail sortant

smtp_tls_loglevel                = 1
smtp_tls_security_level          = may
smtp_tls_CAfile                  = /etc/letsencrypt/live/monsite.eu/chain.pem
smtp_tls_cert_file               = /etc/letsencrypt/live/monsite.eu/fullchain.pem
smtp_tls_key_file                = /etc/letsencrypt/live/monsite.eu/privkey.pem
smtp_tls_protocols               = !SSLv2, !SSLv3
smtp_tls_mandatory_protocols     = !SSLv2, !SSLv3
smtp_tls_mandatory_ciphers       = high
smtp_tls_exclude_ciphers         = aNULL, eNULL, EXPORT, DES, 3DES, RC2, RC4, MD5, PSK, SRP, DSS, AECDH, ADH
smtp_use_tls                     = yes
smtp_tls_note_starttls_offer     = yes

2/ Ce serveur a vocation à me servir de mail principal : il communique à l'intérieur du domaine, mais aussi à l'extérieur.
Sur le mydestination, il a l'air de fonctionner ainsi mais il est vrai que la doc de Postfix recommande de le préciser ainsi :

mydestination = $myhostname, localhost.$mydomain, localhost

. Crois-tu que je devrais le changer pour cette valeur (tout fonctionne bien niveau mail : je reçois et envoie régulièrement en interne comme en externe) ?

3/ Sur smtpd_tls_CAfile tu as raison : je n'utilise qu'un couple login/password. Cette ligne était présente dans les tutos employés, je pensais qu'elle était utile à l'établissement de la connexion sécurisée. je ne devrais laisser que smtpd_tls_cert_file et smtpd_tls_key_file ? Ou alors renvoyer vers le fichier /etc/ssl/certs/ca-certificates.crt que tu m'indiques ? J'avoue que je n'avais pas bien saisi le sens de ce paramètre et que la doc de Postfix est.... hum... parfois (souvent) cryptique pour un débutant.

4/ Par sécurité, j'entends obtenir :
- Une protection maximale contre les différentes attaques possibles. J'ai été surpris, au début de l'installation de ce serveur, de la quantité de tentatives diverses et variées apparaissant dans les logs. Mon serveur n'étant utilisé que pour 4 comptes bien établis (moi et ma famile), je voudrais blinder le tout au maximum pour éviter de servir de relai ou voir le serveur mis en défaut.
- Un chiffrement des connexions bien carré et bien établi. Sur ce point, je voudrais obtenir le meilleur résultat possible.

Voilà, je te remercie encore pour ton aide et espère que, par nos échanges, nous pourrons donner naissance à un topic qui pourra aider ceux qui s'efforcent de monter leur serveur mail et qui, voulant le sécuriser, ne trouveront finalement pas grand chose de clair sur la toile.

A bientôt,

Arnaud

Dernière modification par Arnaudduluoz (Le 07/08/2016, à 10:54)

Hors ligne

#4 Le 10/08/2016, à 14:39

bruno

Re : Configuration sécurisée de Postfix

Bonjour,

Je n'ai pas tout décortiqué, mais :


- la directive mydestination doit contenir ton nom de domaine (celui sur lequel tu reçois les courriels) et localhost afin de pouvoir traiter les courriels locaux (root@localhost, toto@localhot, etc.). N.B. : cette directive indique à Postfix qu'il doit relayer tous les courriels vers les domaines spécifiés, quel que soit le client d'origine.


- la directive mynetworks en conjonction avec permit_mynetworks doit être maniée avec prudence. Dans ton cas toutes les machines ayant un IP dans la classe 192.168.0.0/24 sont autorisée à envoyer des courriels vers n'importe quelle destination sans s'authentifier. Si une machine de ce réseau est compromise elle pourra donc utiliser ton serveur comme relais à spam… Le mieux est de n'avoir que 127.0.0.1 dans mynetworks (et/ou de retirer les permit_mynetworks) et de forcer l'authentification SASL pour pouvoir envoyer des courriels.


- pour le SMTP côté client (dernières lignes de ton fichier) il est inutile d'indiquer les certificats. D'après la documentation de Postfix cela peut poser des problèmes et ce n'est nécessaire que si ton serveur doit présenter un certificat à d'autres serveurs.


- les restrictions qui normalement sont basées sur :
      - le client qui se connecte : smtpd_client_restrictions ;
      - le «EHLO » envoyé par le client : smtpd_helo_restrictions ;
      - l‘expéditeur du courriel (MAIL FROM ) smtpd_sender_restrictions ;
      - le destinataire du courrier (RCPT TO) smtpd_relay_restrictions et smtpd_recipient_restrictions

me semblent être issues d'un copié/collé d'un tuto mal foutu… (manque de logique)


- pour le renforcement de la sécurité TLS c'est Ok et tu peux regarder ce qui est dans le PDF de http://bettercrypto.org

Hors ligne

#5 Le 10/08/2016, à 18:49

Arnaudduluoz

Re : Configuration sécurisée de Postfix

Bonjour Bruno, et merci pour tes éléments de réponse ! Je viens de faire quelques modifs :

bruno a écrit :

- la directive mydestination doit contenir ton nom de domaine (celui sur lequel tu reçois les courriels) et localhost afin de pouvoir traiter les courriels locaux (root@localhost, toto@localhot, etc.). N.B. : cette directive indique à Postfix qu'il doit relayer tous les courriels vers les domaines spécifiés, quel que soit le client d'origine.

Modifié !

bruno a écrit :

- la directive mynetworks en conjonction avec permit_mynetworks doit être maniée avec prudence. Dans ton cas toutes les machines ayant un IP dans la classe 192.168.0.0/24 sont autorisée à envoyer des courriels vers n'importe quelle destination sans s'authentifier. Si une machine de ce réseau est compromise elle pourra donc utiliser ton serveur comme relais à spam… Le mieux est de n'avoir que 127.0.0.1 dans mynetworks (et/ou de retirer les permit_mynetworks) et de forcer l'authentification SASL pour pouvoir envoyer des courriels.

Modifié ! Les mails s'envoient et sont reçus parfaitement.

bruno a écrit :

- pour le SMTP côté client (dernières lignes de ton fichier) il est inutile d'indiquer les certificats. D'après la documentation de Postfix cela peut poser des problèmes et ce n'est nécessaire que si ton serveur doit présenter un certificat à d'autres serveurs.

Là aussi, j'ai modifié. Je n'ai enlevé que les trois lignes relatives au certificat. Y a-t-il d'autres lignes qui poseraient souci ?

bruno a écrit :

- les restrictions qui normalement sont basées sur :
      - le client qui se connecte : smtpd_client_restrictions ;
      - le «EHLO » envoyé par le client : smtpd_helo_restrictions ;
      - l‘expéditeur du courriel (MAIL FROM ) smtpd_sender_restrictions ;
      - le destinataire du courrier (RCPT TO) smtpd_relay_restrictions et smtpd_recipient_restrictions

me semblent être issues d'un copié/collé d'un tuto mal foutu… (manque de logique)

J'étais sûr qu'il y avait un petit souci à ce niveau. Pourrais-tu m'aider à trouver un paratémtrage sérieux ? Malgré mes recherches, je ne suis jamais parvenu à trouver quelque chose de nickel et je ne comprends pas toujours la doc de Postfix à ce niveau. Quelles restrictions appliquerais-tu et pourquoi ?

bruno a écrit :

- pour le renforcement de la sécurité TLS c'est Ok et tu peux regarder ce qui est dans le PDF de http://bettercrypto.org

Merci beaucoup !

Et s'agissant de smtpd_tls_CAfile, dois-je d'après toile maintenir et, le cas échéant, renvoyer à /etc/ssl/certs/ca-certificates.crt ?

Merci encore pour ton aide. J'espère arriver bientôt à quelque chose de propre !

Bonne soirée,

Hors ligne

#6 Le 11/08/2016, à 11:30

bruno

Re : Configuration sécurisée de Postfix

Pour les diverses autorisations/restrictions d'accès, je te renvoie à la documentation de Postfix : http://www.postfix.org/SMTPD_ACCESS_README.html
car c'est un sujet long et complexe. Tu peux mettre autant de restrictions que tu veux : cela permet de rejeter les courriels avant qu'ils soient placé en file d'attente, mais attention aux autorisations (PERMIT) et à leur place dans la liste.

Dans ta configuration je ne trouve pas logique d'utiliser les listes noires (spamhaus, etc.) sur smtpd_recipient_restrictions qui un filtre sur le destinataire du courriel. Si on veut bloquer les issus de spammeurs connus il faut utiliser smtpd_client_restrictions

Hors ligne