email - 如何使用 postfix 在无效电子邮件进入 smtp 中继之前过滤掉它们
问题描述
我正在尝试使用 postfix 和/或 maildev 或其他一些工具来过滤掉地址错误的电子邮件,然后再将它们发送到我的外部 smtp 服务器。
我有自动测试,这些测试被构建为发送到垃圾邮件包罗万象的站点 mailforspam.com。代码已编写,但我认为不需要将所有这些邮件发送到外部站点。此外,我有一些用户正在向其他不存在的帐户或域发送流量。我在服务器上设置了 maildev,并将我的服务器配置为将其所有邮件发送到 maildev。但是,每次用户使用虚假电子邮件(例如 abc@xyz.com)时,maildev 都会崩溃,因为它等待的响应永远不会到来,或者它无法查找主机。我可以使用 maildev 来接收所有流量(即不是中继),但随后合法流量也会被阻止。我正在尝试使用后缀传输映射来过滤发往某些域或用户的邮件,这样他们就不会通过 smtp 离开网络。
我使用端口 1025 在 10.231.20.201 上运行 maildev。
我在同一台机器(10.231.20.201)的端口 25 上设置了 post fix。我在 /etc/postfix/transport 中添加了一个传输图
它有以下条目:
* relay:10.231.20.201:1025
如果我只有上面的一个条目,所有邮件都会被正确地沉没,但没有邮件出去。
如果我将其更改为:
mailforspam.com 10.231.20.201:1025
* relay:smtp.mydomain.com
它不会将 mailforspam.com 流量路由到邮件服务器,而是将所有内容路由到外部世界。随着大量自动测试的运行,糟糕的电子邮件会阻塞 smtp 服务器——更不用说发送垃圾邮件了。
如果我将后缀传输映射设置为:
mailforspam.com 10.231.20.201:1025
* relay:smtp.mydomain.com
我使用 swaks 发送一条简单的消息,例如:
echo "test message" | swaks --to josephspam@mailforspam.com --from "jishak@mydomain.coom" -s 10.231.20.201 -p 25
然后,当我向该域发送测试邮件时,我在 /var/log/maillog 中看到以下内容:
May 20 20:49:49 maildev postfix/error[12649]: 109C819C5A13: to=<josephspam@mailforspam.com>, relay=none, delay=6111, delays=6111/0.03/0/0.02, dsn=4.3.0, status=deferred (mail transport unavailable)
我试图找出正确的方法将电子邮件标题中继到我无法控制的域到垃圾邮件陷阱,例如 maildev。
我还需要让合法的电子邮件继续发送到正确的 smtp 中继。
有没有人这样做过?有任何想法吗?
我看到的主要问题是 1. 我无法正确弄清楚如何将电子邮件路由到垃圾邮件陷阱 2. 传输映射中有一些规则,但我无法让它们与运行在 1025 上的 maildev 服务器一起使用与规则似乎仅在端口 25 上有效的相同框。
解决方案
我最终做了以下事情:
我将 /etc/postfix/transport 文件设置为将我的开发人员已知滥用的某些域显式列入黑名单,例如配置文件中硬编码的值、拥有我当前公司但不易更改的以前公司的值等。
我明确将人们请求且未被滥用的流量列入白名单,例如:
aol.com smtp:[external_mail_server_ip]:25
gmail.com smtp:[external_mail_server_ip]:25
icloud.com smtp:[external_mail_server_ip]:25
mycompany.com smtp:[external_mail_server_ip]:25
我选择阻止所有流量,只将未被滥用的特定网站和电子邮件地址列入白名单。
* relay:[maildev_mail_server_ip]:1025
此外,在某些时候 mailforspam.com 可能已经厌倦了来自我们域的流量,这些流量是合法的,但超出了他们的处理能力,所以就丢弃了所有的数据包。我最终将该域列入了 maildev 服务器的黑名单,并要求开发人员使用 maildev 的 api 检查 maildev 中的邮件。
推荐阅读
- javascript - 在'...0.0","acorn-globals":' 附近解析时 JSON 输入意外结束
- appium - Mac Safari 浏览器上的 Appium 执行速度非常慢
- javascript - D3:使用 TopoJSON 网格缩放到边界
- c - 以十六进制逐字节打印打开文件
- ios - GCD:线程只有两种类型吗?主线程和后台线程
- ruby-on-rails - 如何在 Rails 中正确使用基本范围
- python - importing functions from another jupyter notebook
- mobile - 基于移动的内部工具的技术堆栈
- android - 在 android studio 3.0.2 的命令行上打开 android sqlite 数据库文件
- php - 如何在 PHP 中创建一个返回 Json 的 Restful Web 服务