Postfix:作为智能主机,我如何将收到的邮件限制到发件人域和发件人 IP?

Postfix:作为智能主机,我如何将收到的邮件限制到发件人域和发件人 IP?

我在 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 和其他。

相关内容