AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1066381
Accepted
Sreehari Nair
Sreehari Nair
Asked: 2021-06-11 22:21:46 +0800 CST2021-06-11 22:21:46 +0800 CST 2021-06-11 22:21:46 +0800 CST

Posftwd 与 Posftix 和 amavis 一起使用时会重复计算电子邮件

  • 772

我们的 Postfix 邮件服务器使用带有垃圾邮件刺客的 Amavis 进行垃圾邮件和病毒扫描。我们以某种方式对其进行了设置,postfix 将邮件转发到 amavis 和 amavis,然后将电子邮件重新排队返回 postfix 以将其发送到目的地。我已经用一个简单的规则设置了 postfwd 以在发件人阈值之后拒绝电子邮件,但 Postfwd 重复计算了电子邮件。当我通过 Outlook 作为邮件客户端发送一封电子邮件时,Postfwd 将其计为两封。我是 SMTP 协议的新手,正在努力找出问题所在。如果有人可以请帮忙。我粘贴了一些我认为在下面有用的配置片段。

下面是 postconf -n 的输出

append_dot_mydomain = no
biff = no
broken_sasl_auth_clients = yes
content_filter = amavis:[127.0.0.1]:10024
disable_vrfy_command = yes
dovecot_destination_recipient_limit = 1
enable_original_recipient = no
header_checks = regexp:/etc/postfix/header_checks
inet_interfaces = all
mailbox_size_limit = 0
maximal_backoff_time = 8000s
maximal_queue_lifetime = 7d
minimal_backoff_time = 1000s
mydestination = $myhostname
myhostname = pXXX
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128,XXX
mynetworks_style = host
myorigin = /etc/hostname
readme_directory = no
recipient_delimiter = +
relay_domains = hash:/etc/postfix/relay_recipients
smtp_enforce_tls = no
smtp_helo_timeout = 60s
smtp_tls_note_starttls_offer = yes
smtp_tls_security_level = may
smtp_use_tls = yes
smtpd_banner = $myhostname ESMTP $mail_name
smtpd_client_connection_count_limit = 30
smtpd_client_recipient_rate_limit = 300
smtpd_client_restrictions = permit_mynetworks, permit_sasl_authenticated, check_client_access hash:/etc/postfix/whitelist, reject_rbl_client sbl.spamhaus.org
smtpd_data_restrictions = reject_unauth_pipelining
smtpd_delay_reject = yes
smtpd_enforce_tls = no
smtpd_hard_error_limit = 12
smtpd_helo_required = yes
smtpd_helo_restrictions = check_client_access hash:/etc/postfix/whitelist, permit_mynetworks, warn_if_reject reject_non_fqdn_hostname, reject_invalid_hostname
smtpd_recipient_limit = 30
smtpd_recipient_restrictions = reject_unauth_pipelining, check_policy_service inet:127.0.0.1:10040, permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unknown_recipient_domain, reject_unauth_destination, check_policy_service inet:127.0.0.1:10023
smtpd_relay_restrictions = permit_mynetworks, check_client_access hash:/etc/postfix/whitelist, check_sender_access hash:/etc/postfix/whitelist, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unknown_recipient_domain, reject_unauth_destination, check_policy_service inet:127.0.0.1:10023
smtpd_sasl_auth_enable = yes
smtpd_sasl_authenticated_header = yes
smtpd_sasl_local_domain =
smtpd_sasl_path = private/auth
smtpd_sasl_type = dovecot
smtpd_sender_restrictions = check_sender_access hash:/etc/postfix/sender_access, permit_sasl_authenticated, permit_mynetworks, reject_unknown_sender_domain, reject_unauth_pipelining, warn_if_reject reject_sender_login_mismatch, warn_if_reject reject_non_fqdn_sender, warn_if_reject reject_unlisted_sender, warn_if_reject reject_non_fqdn_sender
smtpd_soft_error_limit = 3
smtpd_tls_cert_file = XXX
smtpd_tls_key_file = XXX
smtpd_tls_loglevel = 1
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 = 450
virtual_alias_maps = proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cf, proxy:mysql:/etc/postfix/mysql_virtual_alias_domainaliases_maps.cf
virtual_gid_maps = static:125
virtual_mailbox_base = /home/vmail
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf, proxy:mysql:/etc/postfix/mysql_virtual_mailbox_domainaliases_maps.cf
virtual_transport = dovecot
virtual_uid_maps = static:150

后发规则:

id=20perminute; sender=~/[email protected]/; action=rate(sender/20/60/REJECT only 20 messages per minute for $$sender)

任何人都可以帮助解决这个问题吗?

postfix amavis postfwd
  • 1 1 个回答
  • 163 Views

1 个回答

  • Voted
  1. Best Answer
    Nikita Kipriyanov
    2021-06-11T23:03:48+08:002021-06-11T23:03:48+08:00

    但是……你已经发现了几乎所有的东西!

    你有一个额外的smtpd服务,通常是master.cf这样设置的:

    smtp:10025      inet  n       -       n       -       -       smtpd
    ...
    

    Amavis 配置为将邮件重新注入127.0.0.1:10025(或您使用的任何端口)。这个想法是这样的:你在非默认防火墙端口上运行特殊的私人服务,只接受处理过的邮件。

    这种配置的工作方式如下:

    1. Postfixsmtpd实例之一,邮件交换器或提交,从外部接收邮件并首次记录(并调用策略服务)
    2. 然后,根据一个配置,将其推入 Amavis
    3. Amavis 在处理后将邮件重新注入 Postfix,但它会将其提供给smtpd配置为不将邮件返回给 Amavis 的特殊实例,因为它希望所有邮件都来自 Amavis
    4. 此附加smtpd 记录再次发送邮件(并调用策略服务),然后根据通常的规则转发它。

    在这种设置中无法修复双重日志记录,因为它是由这种通过 SMTP 将 Amavis 插入处理的固有劣质方式引起的。但是您仍然有办法至少减少这种双重日志记录的影响。您可以为您的附加smtpd实例提供不同的日志前缀,从而创建一种方法来区分这次处理邮件的人。在 中定义附加smtpd服务的行之后master.cf,添加以下行:

      -o syslog_name=postfix/reinject
    

    (或任何你将用来将它与其他smtpd实例、邮件交换器和提交区分开来的东西)。

    此外,您可以禁用此实例的策略服务处理,因此postfwd不会计算邮件两次。您必须smtpd_*_restrictions在master.cf此服务中复制您的所有内容,其中不包括此策略服务:

    ...
      -o smtpd_recipient_restrictions=...,reject_unauth_destination
    ...
    

    永远不要在master.cf-o 参数中添加空格!

    乱七八糟的,我知道。这是因为重新注入的整个设置很混乱。

    您可能已经有其他一些参数了;没关系,它们仍然是必需的。另请注意,这只会改变smtpd日志记录行为;然后它将邮件放入公共队列中,其他守护程序将在其中提取并处理它,并且由于我们没有为它们创建特殊的日志记录配置,您将无法轻松区分它们是处理原始邮件还是这次处理(提示:邮件队列 ID 对此很有用)。所以这只是部分修复,但它仍然非常有用。


    要彻底解决双重记录,您必须重新设计您的邮件系统,以便没有一封邮件会通过它两次。所以每封邮件都会被计算一次,就像魔法一样。Postfix 有一种特殊的专用方式来处理邮件,称为milter(“邮件过滤器”),建议您使用它来代替 SMTP 和重新注入。您可以通过此接口连接 Amavis 或任何其他支持 milter 的应用程序(有无数种),您将在邮件系统内获得更清晰的邮件路由路径,并且减少日志和其他问题的麻烦。Postfix 将立即拒绝垃圾邮件,而不是排队、检查然后丢弃。阅读 Postfix 的完美手册,了解Postfix before-queue Milter 支持

    • 2

相关问题

  • Postfix 在特定端口上接受邮件

  • 让 Postfix 以两种方式处理垃圾邮件

  • Postfix 或 exim:自动/程序化和转发电子邮件设置

  • 后缀电子邮件地址

  • 什么是最好的开源电子邮件解决方案包

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve