如何仅使用 Postfix 阻止传入邮件的附件?

Adi*_*a K 9 postfix attachment

我有一个运行 Postfix 和 Dovecot 的邮件服务器 (CentOS 6.5)

Postfix 正在侦听端口 25 的入站邮件和 587 的出站邮件

问题是带有 pdf 附件的出站邮件被阻止,而我只希望带有 pdf 附件的入站邮件被阻止。

我在 main.cf 中有这个配置行

 mime_header_checks = regexp:/etc/postfix/blocked_attachments
Run Code Online (Sandbox Code Playgroud)

blocks_attachments 文件包含:

/name=[^>]*\.(pdf|zip)/ REJECT
Run Code Online (Sandbox Code Playgroud)

因此,带有 pdf 附件的传入邮件被正确阻止,但是当我用 PDF 撰写电子邮件时,当我尝试发送时也被阻止。

如何告诉 postfix 我只希望过滤传入的附件?或者我错过了什么?

mas*_*oeh 8

我将您的问题改写为:

如何为 smtpd(端口 25)和提交(端口 587)使用不同的 _header_checks?

这个规范问题可以分为几个条件

  1. 我想关闭 smtpd 或提交之一的 header_checks。
  2. 我想为 smtpd 和提交运行不同的 header_checks。

1. 我想关闭 smtpd 或提交之一的 header_checks。

对于示例,我假设您要关闭 header_checks 以进行提交(外发电子邮件)

方案一:receive_override_options 方法

您可以使用名为receive_override_options 的后缀参数。使用该参数,您可以覆盖全局 header_check 开关,因此过滤器不会运行。#main.cf header_checks = pcre:/path/to/header_checks

#master.cf
submission inet n       -       n       -       -       smtpd
    -o receive_override_options=no_header_body_checks
Run Code Online (Sandbox Code Playgroud)

注意事项:这将关闭man 5 header_checks 中定义的所有 _header_checks 和 body_checks 。完成控制关闭哪个参数见方案二。

方案二:多种清理服务方式

我们可以针对您的问题采用多种清理服务技术,就像清理服务*_header_checks所执行的那样。您可以在amavisd-new 教程中看到此设置的示例。

此配置的神奇参数是cleanup_service_name。有了这个参数,我们就可以为每个 smtpd 进程使用不同的清理服务。首先,我们在 master.cf 中定义了一个额外的清理服务(称为 no-headerchecks)

no-headerchecks unix    n       -       n       -       0       cleanup
    -o mime_header_checks=
Run Code Online (Sandbox Code Playgroud)

在这次清理中,我们定义了空的 mime_header_checks 来禁用过滤。最后一步是告诉提交服务使用我们的 no-headerchecks

submission inet n       -       n       -       -       smtpd
    -o cleanup_service_name=no-headerchecks 
Run Code Online (Sandbox Code Playgroud)

2.我想为smtpd和提交运行不同的header_checks。

对于这个问题,您可以使用如上所述的多种清理服务方法。

首先,我们在 master.cf 中定义了一个额外的清理服务(称为 second-headerchecks)

second-headerchecks unix    n       -       n       -       0       cleanup
    -o mime_header_checks=pcre:/path/to/2ndheaderchecks
Run Code Online (Sandbox Code Playgroud)

在这次清理中,我们将第二个 mime_header_checks 定义为其他 PCRE 表。最后一步是告诉提交服务使用我们的second-headerchecks

submission inet n       -       n       -       -       smtpd
    -o cleanup_service_name=second-headerchecks
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 您的情况与此问题相似。不幸的是,Laurentiu Roescu 的答案仅在您希望为使用 smtp 作为传输的外发邮件启用 header_checks 时才有效。好消息是他关于cleanupdaemon 的第一句话让我们对第二种解决方案有了一些想法。

  • 如果需要不同的header_checks、body_checks等参数定义,可以应用多种清理服务方法man 5 header_checks