我在 Centos 7 上运行 Postfix+Dovecot 服务,其中包含一些不相关的虚拟域。此 Postfix 服务器还设置为 IP 192.0.2.2 和 203.0.113.2 的智能主机(中继)。现在,无论 IP 192.0.2.2 发送什么邮件,我的 Postfix 都会转发到互联网上,这是理所当然的。来自 192.0.2.2 的所有发件人地址都来自 @example.com 域。但是,有时 IP 192.0.2.2 会发送来自随机发件人域的垃圾邮件,我的 Postfix 会将其转发到互联网上,将我的 IP 列入黑名单。
我想在我的 Postfix 上配置一个限制,这样当 IP 192.0.2.2 尝试中继邮件时,发件人域必须是 example.com,否则我的 Postfix 必须拒绝该邮件。
我在从 @example.net 域发送 IP 203.0.113.2 时遇到了同样的问题。
我无法控制 192.0.2.2 或 203.0.113.2,因此必须仅使用我的 Postfix 来解决问题。
这是现在我的 main.cf 文件中的,用于启用智能主机功能:
mynetworks = 127.0.0.0/8, 192.0.2.2/32, 203.0.113.2/32
编辑:
以下是匿名的 postconf -n 输出:“inet:127.0.0.1:8891”是我用来签署来自 example.org 的外发电子邮件的 OpenDKIM
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
broken_sasl_auth_clients = yes
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
debug_peer_level = 2
debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id & sleep 5
dovecot_destination_recipient_limit = 1
html_directory = no
inet_interfaces = all
inet_protocols = all
mail_owner = postfix
mailbox_size_limit = 51200000
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
message_size_limit = 51200000
milter_default_action = accept
milter_protocol = 6
mydestination = $myhostname, localhost.$mydomain, localhost
mydomain = example.org
myhostname = mail.example.org
mynetworks = 127.0.0.0/8, 192.0.2.2/32, 203.0.113.2/32
myorigin = $mydomain
newaliases_path = /usr/bin/newaliases.postfix
non_smtpd_milters = inet:127.0.0.1:8891
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix-2.10.1/README_FILES
relay_domains = $mydestination, example.com
sample_directory = /usr/share/doc/postfix-2.10.1/samples
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
smtpd_milters = inet:127.0.0.1:8891, unix:/run/spamass-milter/postfix/sock
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_path = private/auth
smtpd_sasl_security_options = noanonymous
smtpd_sasl_type = dovecot
smtpd_tls_auth_only = yes
smtpd_tls_cert_file = /etc/pki/tls/mail.example.org.public.pem
smtpd_tls_key_file = /etc/pki/tls/mail.example.org.private.pem
smtpd_tls_loglevel = 1
smtpd_tls_mandatory_protocols = $smtpd_tls_protocols
smtpd_tls_protocols = !SSLv2, !SSLv3
smtpd_tls_received_header = yes
smtpd_tls_security_level = may
smtpd_tls_session_cache_timeout = 3600s
smtpd_use_tls = yes
tls_random_source = dev:/dev/urandom
transport_maps = hash:/etc/postfix/transport
unknown_local_recipient_reject_code = 550
virtual_alias_maps = hash:/etc/postfix/vmail_aliases
virtual_gid_maps = static:800
virtual_mailbox_base = /var/mail/vhosts
virtual_mailbox_domains = hash:/etc/postfix/vmail_domains
virtual_mailbox_maps = hash:/etc/postfix/vmail_mailboxes
virtual_minimum_uid = 800
virtual_transport = dovecot
virtual_uid_maps = static:800
答案1
该解决方案是变体来自这个解决方案. 但首先,我们将调整一些配置。
第一的:当然,您可以使用mynetworks
和的组合permit_mynetworks
来允许客户端中继。另一种方法是使用check_client_access
参数。因此,请从中删除两个 IP 地址(192.0.2.2/32、203.0.113.2/32)mynetworks
。
第二:我们将逐一应用限制。对于初始步骤,我们仅限制来自 IP 地址 192.0.2.2 的域和 IP 地址。我们可以应用限制类解决方案这里
主配置文件
smtpd_restriction_classes =
firstclient
firstclient =
check_sender_access hash:/etc/postfix/firstsender
reject
smtpd_recipient_restrictions =
permit_sasl_authenticated
permit_mynetworks
check_client_access hash:/etc/postfix/myclient
reject_unauth_destination
在/etc/postfix/myclient中
192.0.2.2 firstclient
/etc/postfix/firstsender
example.com OK
第三:对第二个客户端应用类似的解决方案,因此设置变为
主配置文件
smtpd_restriction_classes =
firstclient, secondclient
firstclient =
check_sender_access hash:/etc/postfix/firstsender
reject
secondclient =
check_sender_access hash:/etc/postfix/secondsender
reject
smtpd_recipient_restrictions =
permit_sasl_authenticated
permit_mynetworks
check_client_access hash:/etc/postfix/myclient
reject_unauth_destination
在/etc/postfix/myclient中
192.0.2.2 firstclient
203.0.113.2 secondclient
/etc/postfix/firstsender
example.com OK
/etc/postfix/secondsender
example.net OK
常问问题:
你能解释一下上述设置是如何工作的吗?
解释其工作原理:Postfix 限制类官方文档
这看起来不可扩展。你能给我提供其他解决方案吗?
是的,你可以使用Postfix SMTP 访问策略委派
嗯,Postfix 策略服务器对我来说看起来不错。但我必须实现自己的脚本吗?
您可以使用任何策略服务器插件例如 policyd、postfwd 和其他。