1

À la demande de squalyl, voilà ma configuration Postfix. J'utilise Ansible donc c'est un template Jinja2, dans lequel j'ai défini les variables suivantes :

- Sur une première machine qui est publique sur internet :
    smtpd_auth: dovecot
    smtpd_domains:
      "mirari.fr": "[limestone]"
      "un-autre-domaine.fr": "[limestone]"
    smtpd_ssl: true

- Sur une seconde machine située dans un réseau privé derrière la première :
    smtpd_auth: dovecot
    smtpd_dkim: true
    smtpd_domains:
      "mirari.fr": "@virtual"
      "un-autre-domaine.fr": "@virtual"
    smtpd_sqld: true
    smtpd_ssl: true
    smtpd_virtual: dovecot

- Le fichier main.cf (désolé pour l'indentation, c'est prévu pour 1 tab = 4 espaces) :# Configuration variables compatibility_level = 2 map_directory = ${config_directory}/map sql_directory = ${config_directory}/sql ssl_directory = ${config_directory}/ssl # System configuration smtp_host_lookup = dns,native # Mailer daemon inet_interfaces = all inet_protocols = all smtpd_banner = {{ hostname }}.{{ domain }} ESMTP $mail_name (Debian/GNU) biff = no append_dot_mydomain = no recipient_delimiter = + smtputf8_enable = yes # TLS support smtp_tls_security_level = may smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache {% if smtpd_ssl is defined %} smtpd_tls_security_level = may smtpd_tls_cert_file = ${ssl_directory}/fr.mirari.smtp.pem smtpd_tls_key_file = ${ssl_directory}/fr.mirari.smtp.key smtpd_tls_CAfile = {{ ssl.public }} smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache {% else %} smtpd_tls_security_level = none {% endif %} smtpd_delay_reject = yes smtpd_helo_required = yes smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, {% if smtpd_sqld is defined %} check_recipient_access mysql:${sql_directory}/check.cf, {% endif %} reject_unauth_destination, reject_unverified_recipient, reject_rbl_client zen.spamhaus.org, reject_rbl_client cbl.abuseat.org smtpd_sender_restrictions = reject_unknown_sender_domain # SASL authentication #smtp_sasl_auth_enable = yes #smtp_sasl_password_maps = hash:${config_directory}/sasl_passwd #smtp_sasl_security_options = noplaintext,noanonymous {% if (smtpd_auth | default('')) == 'dovecot' %} # http://wiki2.dovecot.org/HowTo/PostfixAndDovecotSASL smtpd_sasl_auth_enable = yes smtpd_sasl_type = dovecot smtpd_sasl_path = private/dovecot-auth smtpd_sasl_security_options = noanonymous {% if smtpd_ssl is defined %} smtpd_tls_auth_only = yes {% endif %} {% endif %} #header_checks = regexp:${config_directory}/header_checks {% if smtpd_dkim is defined %} # DKIM signature milter_default_action = accept milter_protocol = 6 smtpd_milters = unix:{{ dkim.socket }} non_smtpd_milters = unix:{{ dkim.socket }} {% endif %} # Server configuration mydestination = mydomain = {{ domain }} myhostname = {{ hostname }}.$mydomain myorigin = $mydomain mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 {{ network }} mynetworks_style = host # Transport configuration (transport per domain) transport_maps = hash:${map_directory}/transport # Relay configuration (accepted domains and relay hosts) sender_dependent_relayhost_maps = hash:${map_directory}/relay_from relay_domains = ${map_directory}/relay_to {% if '@local' in smtpd_domains.itervalues () %} # Local delivery alias_maps = hash:/etc/aliases home_mailbox = .maildir/ mailbox_size_limit = 1073741824 message_size_limit = 102400000 {% else %} # Disable local delivery local_recipient_maps = local_transport = error:local delivery is disabled {% endif %} {% if '@virtual' in smtpd_domains.itervalues () %} # Virtual delivery {% if (smtpd_virtual | default('')) == 'dovecot' %} # http://wiki2.dovecot.org/HowTo/PostfixDovecotLMTP virtual_transport = lmtp:unix:private/dovecot-lmtp {% endif %} virtual_alias_domains = mysql:${sql_directory}/forward_domain.cf virtual_alias_maps = mysql:${sql_directory}/forward_map.cf virtual_mailbox_domains = mysql:${sql_directory}/mailbox_domain.cf {% endif %}Hésite pas à demander si tu as des questions ou que tu veux voir l'un des fichiers liés smile (je n'ai pas tout posté parce qu'il y en a une tripotée, celui-ci est le plus important)
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

2

squalyl a été invité sur ce sujet.
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

3

Merci. C'est bin compliqué, faut que déja je comprenne ce qu'est dovecot, Ansible et Jinja2, c'est probablement pas applicable a ma config qui est une simple machine, un peu légère smile

4

Heu oui pardon, c'est pas évident à décortiquer donc j'ai posté tel quel sorry

Ansible est un outil pour automatiser des installations, mais ici la seule chose qu'il va faire c'est prendre la configuration et appliquer quelques balises spéciales (celles entre {{ }} et {% %}), ce qui me permet d'utiliser des variables, des conditions ou des boucles dans la configuration (par exemple pour répéter une configuration pour chaque domaine à gérer, ou bien activer une option de configuration conditionnellement).

Jinja2 c'est un moteur de template en Python, et c'est lui qu'Ansible utilise. Je pense qu'ici la seule chose à savoir c'est que {{ machin }} permet d'évaluer et d'afficher le résultat de l'expression machin (qui peut contenir des variables) et {% if bidule %} ... {% endif %} permet d'écrire des blocs conditionnels (idem pour les boucles for).

Dovecot est un serveur IMAP, c'est lui qui permet d'accéder aux mails depuis un client (j'utilise Thunderbird comment client lourd et Roundcube comme client web) une fois qu'ils ont été reçus par le serveur SMTP (Postfix). Il apparait ici dans la configuration pour deux raisons : je lui délègue l'authentification pour que les comptes utilisateurs et mots de passe soient partagés entre l'envoi de mail (SMTP) et la lecture (IMAP) (c'est possible grâce à l'authentification SASL gérée par Dovecot, cf. option "smtpd_sasl_type"), et je lui transfère directement les mails une fois reçus par le serveur SMTP plutôt que de les stocker quelque part sur disque et lui laisser aller les chercher ensuite (cf. option "virtual_transport").

Mais c'est clairement une horreur de configurer un serveur mail, j'y ai passé vraiment des heures pour que ça fonctionne. Si tu cherches à faire ça chez toi il faut te prévoir de grosses sessions de lecture de documentations, et si possible un environnement qui te permet de faire des expérimentations facilement (j'utilise Vagrant pour ça). Si tu te lances là-dedans, n'hésite pas quand tu auras des questions smile
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

5

je sais que c'est dur, j'avais galéré aussi grin

mon truc est plus roots, pour IMAP j'utilise courier-imap avec des maildir virtuels, et pour l'authentification j'utilise mysql.

Pour SMTP j'utilise postfix avec des configs dans des tables mysql.

J'espérais que ta config soit simple et me permettre de mieux comprendre ce que je bidouille avec postfix (courier-imap est simple, lui ^^)

en particulier je voulais comprendre ce que sont les transports et a quoi sert cette grosse table dans master.cf, mais je vois que c'est pas simple chez toi non plus grin

finalement c'est ptet ma config qui est plus simple grin

(en gros je suis ca, mais sans patcher postfix parce que je m'en fiche des quotas)
https://www.howtoforge.com/virtual-users-and-domains-with-postfix-courier-mysql-and-squirrelmail-debian-wheezy

6

Le transport c'est le service qui s'occupe d'acheminer le mail à destination. Quand il accepte un mail Postfix doit déjà déterminer quel transport doit s'en occuper, et pour ça il te demande de définir des règles.

Par exemple dans la configuration de ./1, les options virtual_alias_domains et virtual_alias_maps définissent les tables dans lesquelles regarder pour savoir si en fonction du domaine (virtual_alias_domains) ou de l'adresse complète (virtual_alias_maps) le mail doit être délivré à un utilisateur virtuel avec le transport "virtual". Ensuite dans mon cas j'indique avec virtual_transport que le service de transport pour "virtual" est Dovecot pour que Postfix lui transmette directement (par défaut il les stocke sur disque). De la même façon, plus haut dans la configuration tu as l'option relay_domains qui détermine les mails qui doivent être relayés à un autre serveur SMTP, via le transport "relay".
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

7

8

Perso je laisse toute la config à virtualmin, c'est un des gros avantages je trouve, de ne pas avoir à me prendre la tête pour les emails ^^