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

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

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

Postfix 正在监听端口 25 以接收入站邮件,端口 587 以接收出站邮件

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

我在 main.cf 中有此配置行

 mime_header_checks = regexp:/etc/postfix/blocked_attachments

blocked_attachments 文件包含:

/name=[^>]*\.(pdf|zip)/ REJECT

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

我如何告诉 Postfix 我只想过滤传入的附件?还是我遗漏了什么?

答案1

我将把你的问题改写成:

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

这个典型问题可以分为几个条件

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

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

例如,我假设您想要关闭提交的 header_checks(外发电子邮件)

解决方案 1: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

注意事项:这将关闭在以下位置定义的所有 _header_checks 和 body_checksman 5 header_checks有关关闭哪些参数的完整控制,请参阅解决方案 2。

解决方案2:多重清理服务方法

我们可以多重清理服务技术针对您的问题*_header_checks清理服务。您可以在amavisd-new 教程

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

no-headerchecks unix    n       -       n       -       0       cleanup
    -o mime_header_checks=

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

submission inet n       -       n       -       -       smtpd
    -o cleanup_service_name=no-headerchecks 

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

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

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

second-headerchecks unix    n       -       n       -       0       cleanup
    -o mime_header_checks=pcre:/path/to/2ndheaderchecks

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

submission inet n       -       n       -       -       smtpd
    -o cleanup_service_name=second-headerchecks

笔记:

  • 你的情况类似这个问题。 很遗憾Laurentiu Roescu 的回答仅当您想启用 header_checks 时才有效外发邮件使用 smtp 作为传输方式。好消息是,他关于cleanup守护进程的第一句话给了我们一些关于第二种解决方案的想法。

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

答案2

在 /etc/postfix/master.cf 中,而不是 /etc/postfix/main.cf 中,添加(注意必须是制表符空格):

second-headerchecks unix    n   -   n   -   0   cleanup
    -o mime_header_checks=pcre:/etc/postfix/2ndheaderchecks
submission inet n   -   n   -   -   smtpd
    -o cleanup_service_name=second-headerchecks
#
first-headerchecks unix n   -   n   -   0   cleanup
    -o mime_header_checks=pcre:/etc/postfix/1stheaderchecks
smtp inet n -   n   -   -   smtpd
    -o cleanup_service_name=first-headerchecks
#

创建 /etc/postfix/1stheaderchecks,在本例中用于阻止传入的 zip 文件,然后创建 .db 文件:

/name=[^>]*\.zip/ REJECT security issue - please contact....by phone

然后创建 /etc/postfix/2ndtheaderchecks,以允许传出附件(并创建 .db 文件):

# this file being 2ndheaderchecks allows for the sending of zip etc files which otherwise might be blocked
# ie all files can be sent aside from .128 files...I didn't want to leave it blank as was not sure if that would work
/name=[^>]*\.128/ REJECT

相关内容