我正在采取措施强化我的传出 postfix SMTP 服务器。我想防止用户欺骗他们的发件人地址。
当使用 postfix SMTP 发送电子邮件时,发件人通过三种方式被识别:
- 在电子邮件本身中有一个
From:
标题 - 如RFC 822中所定义 - 使用 SMTP 发送时,有一个
MAIL FROM
地址 - 如RFC 821中所定义 - 登录到 postfix (SMTP) 时,客户端指定一个用户名,该用户名也可以解释为发件人
查看手册,我相信reject_sender_login_mismatch和reject_unlisted_sender将共同保证MAIL FROM
电子邮件与postifx 登录相关联。那是上面的2和3匹配。
我被困在如何确保所有三个匹配。如果结果只是重写消息而不是拒绝,我很高兴,但两者都可以。但是我看不到这样做的方法。我可以看到清理会添加一个缺少的From:
标头,但我看不到检查和重写的方法。
感谢那些指出另一个类似问题的人。不幸的是,这并没有帮助,因为这个问题有两个答案,一个非常模糊,另一个似乎是错误的。
我花了一些时间研究这个,我找不到一个纯粹的后缀方式。使用的一个建议
header_checks
似乎不起作用,因为您不能(AFAIK)将一个标头与另一个标头匹配。可以编写自己的程序/脚本来为您执行检查并将其用作content_filter。
步骤1
这是我用python编写的简化版本。这会从标准输入读取一封电子邮件,
MAIL from
并将RECPT to
地址作为参数。它检查From:
标题MAIL from
是否匹配,如果它们不匹配则替换它。我将其另存为/usr/share/mail_filter/filter.py
:第2步
更新
/etc/postfix/master.cf
:请注意,这引用了步骤 1 中的脚本位置和步骤 3 中定义的用户
第 3 步
filter
我在有权使用的组中添加了一个操作系统用户sendmail
。注意事项
根据说明,简单过滤器(使用 转发
sendmail
)只能应用于 SMTP 客户端,不能过滤通过 sendmail 发送的消息。如果这对您来说是个问题,那么您需要编写一个高级内容过滤器。