总体的目标:
阻止发件人信封中包含“姓名”的特定电子邮件。示例:John <[email protected]>
现在的情况:
我已经成功配置了main.cf
了后缀利用。check_sender_access
smtpd_recipient_restrictions
我已经创建了自己的sender_access
文件,并在其上使用了 postmap,因此它生成了 sender_access.db,然后由 使用它main.cf
。
我的 sender_access 文件如下所示:
[email protected] REJECT
[email protected] REJECT
此配置确实有效按预期并在有人发送带有“清除”FROM 信封的入站电子邮件时拒绝电子邮件(例如:):FROM: [email protected]
此配置不起作用当发件人设置了出现在发件人信封中的“名称”时,拒绝电子邮件(例如:或):FROM: John <[email protected]>
FROM: Support <[email protected]>
当“名称”与电子邮件地址相同时,配置“不会捕获”电子邮件地址(某些 MTA /邮件传输代理/中的某些默认行为):
我已尝试过:
我尝试了以下格式的 sender_access 文件:
[email protected] REJECT
John <[email protected]> REJECT
"John <[email protected]>" REJECT
John REJECT
<[email protected]> REJECT
"[email protected]" REJECT
john@ REJECT
这些方法实际上都没有用。唯一有效的方法是拒绝整个域:
example.com REJECT
我的问题:
我已经搜索了两天了,看了很多文章,最后决定在这里问一下。Postfix 是否支持以 FROM 格式阻止发件人?John <[email protected]>
我是否需要尝试一些正则表达式(有趣的是,我没有找到任何 - 人们会认为这是常识?)。
附言:也许有些东西总是“捕获”括号内粗体字样的电子邮件地址:
约翰<[电子邮件保护]>
谢谢你!
答案1
解决方案:
我通过使用正则表达式(regexp)检查解决了这个问题。
主配置文件
smtpd_recipient_restrictions = check_sender_access regexp:/etc/postfix/sender_access
发件人访问
# Exact match: [email protected]
/^john@example\.com$/ REJECT
# Advanced match: John <[email protected]>
/john@example\.com/ REJECT
笔记:请注意,如果您仅使用而不以该字符终止,那么它将匹配该位置的所有字符,换行符除外(例如:,,等等)/[email protected]/
\
.
john@example$.com
john@example!.com
测试
您可以sender_access
使用以下命令测试您的 via:
postmap -q "John <[email protected]" regexp:sender_access
不要忘记使用以下命令来确保您的更改生效:
postmap sender_access
service postfix restart
补充笔记:
1.如果在 sender_access 文件中添加新规则,则仅执行一项postmap sender_access
似乎就足够了。
2.有时,即使电子邮件在前端显示为来自,但实际上是从类似 的地址发送的。 尤其是当发件人使用诸如 Amazon SES 之类的服务时。John <[email protected]
<[email protected]>
在这种情况下,您必须阻止实际域(示例sender_access
:)/^john@example\.com$/ REJECT
。您可以在 Postfix 日志中看到真实地址:
vim /var/log/mail.log