我在使用 Postfix 时遇到了一个奇怪的问题,它让我有点抓狂,因为它似乎有 50% 的时间都在工作,但却没有做出任何改变。
我想要实现的目标:
我在几个不同的外部网络上有许多虚拟服务器,例如 1.2.3.4/24 10.20.30.40/24 11.22.33.44/24
我已经设置了 4 个具有循环 DNS 的 Postfix 服务器,它们都有相同的 main.cf 配置文件。
我只希望那些外部子网中的服务器被允许通过邮件服务器进行中继,不需要用户名或密码。
我读了一些资料,似乎 mynetworks 选项是可行的,但是它似乎只有 50% 的时间有效,即使我将其他 3 台服务器排除在外,只让 1 台邮件服务器在 50% 的时间内运行,我也会收到中继被拒绝错误。
这是正在使用的配置:
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
append_dot_mydomain = no
readme_directory = /usr/share/doc/postfix
smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.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
myhostname = relay.example.co.uk
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = relay.example.co.uk, localhost.example.co.uk, , localhost
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mynetworks = 1.2.3.4/24
mynetworks = 10.20.30.40/24
mynetworks = 11.22.33.44/24
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
html_directory = /usr/share/doc/postfix/html
smtpd_error_sleep_time = 2s
smtpd_hard_error_limit = 20
smtpd_recipient_restrictions = permit_mynetworks
我怀疑 mydestination 可能在这里发挥了一定作用,但我们欢迎任何帮助?
答案1
根据 postconf(5) 手册页:
当同一个参数被定义多次时,只记住最后一次。
这意味着你的变量的定义mynetworks
应该是这样的:
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 1.2.3.4/24 10.20.30.40/24 11.22.33.44/24
或者
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
1.2.3.4/24
10.20.30.40/24
11.22.33.44/24
或者
mynetworks = 127.0.0.0/8, [::ffff:127.0.0.0]/104, [::1]/128,
1.2.3.4/24,
10.20.30.40/24,
11.22.33.44/24,