我发现很多时候可以在 main.cf 和 master.cf 中使用 -o 前缀指定相同的设置。
我的问题是,一个文件是否会覆盖另一个文件?如果是,那么如果在两个文件中都发现相同的设置(具有不同的值),哪个文件优先?
例如,如果
smtpd_tls_auth_only=yes
在 main.cf 中指定,但是
-o smtpd_tls_auth_only=no
是在master.cf中指定的,postfix会关注哪一个?
答案1
据记载,
-o name=value
Override the named main.cf configuration
parameter.
main.cf
设置 master.cf 中定义的所有服务使用的默认值;master.cf 中的 -o 选项可以根据每个服务覆盖这些值。
答案2
基本上,main.cf 中的设置是有效的,并且全局使用,除非它们在 master.cf 中被特定 Postfix 守护进程(smtpd、trivial-rewrite、cleanup、pickup 等)覆盖。例如,您可以smtp_tls_security_level = may
在 main.cf 中指定并为守护进程绑定到 localhost 的提交端口禁用它smtpd
:
localhost:submission inet n - - - - smtpd
-o smtpd_tls_security_level=none
但对于外部 IP 地址上的提交端口,您可以强制加密:
1.2.3.4:submission inet n - - - - smtpd
-o smtpd_tls_security_level=encrypt
-o ...
在某些情况下你可能会有要覆盖全局设置,例如使用 Amavisd 时,通过 Amavisd 守护程序发送邮件时需要禁用地址映射(别名扩展等)smtpd
。否则收件人可能会收到重复的消息:
127.0.0.1:10025 inet n - - - - smtpd
-o content_filter=
-o ...
-o receive_override_options=no_header_body_checks,no_unknown_recipient_checks,no_address_mappings
-o ...
当然,在 Amavis 之外的常规操作期间,您需要地址映射,因此默认情况下它们在 main.cf 中启用。