#!/usr/local/bin/bash
# rudimentary checking - more complex checking will be done by
# the pfctl and spamdb commands
ADDRESS=${1%%[!0-9.]*}
if [[ ! ${#ADDRESS} = ${#1} ]]
then
echo "Invalid characters in IP address"
exit 1
fi
if [ ! ${ADDRESS} ]
then
echo "Usage: $0 <address>"
exit 1
fi
/usr/local/sbin/spamdb -t -a ${ADDRESS}
if [ "$?" -ne 0 ]
then
echo "Failed to add ${ADDRESS} to spamdb"
exit 1
fi
/sbin/pfctl -qt spamd -T add ${ADDRESS}
if [ "$?" -ne 0 ]
then
echo "Failed to add ${ADDRESS} to pf"
exit 1
fi
/usr/bin/logger -t spamtrap "Spamtrap caught ${ADDRESS}"
概述
贝叶斯过滤器和模式匹配以及 RBL 都是打击垃圾邮件的一部分。此设置旨在增强而不是替换这些设置。
请注意,我没有列入灰名单。灰名单在理论上很棒,但在实践中它对您的用户来说非常烦人。有些人在这方面取得了巨大的成功。我不是那些人中的一员。
我所做的是设置一些电子邮件地址(我有大约 10,000 个,但你可以用几百个)作为垃圾邮件陷阱。这些地址的列表与各种高流量站点分开链接,机器人会在这些站点找到它们,但人们不会。这些地址被收集,卖给垃圾邮件发送者,现在我知道垃圾邮件会从哪里进来。
Postfix 被配置为将消息重定向到这些地址中的任何一个到我的垃圾邮件陷阱脚本,该脚本将它们添加到 PF 中的一个表中,以便来自该客户端的任何进一步的消息最终在我的 tarpit 中。
优点:
缺点:
如何?
您的邮件服务器必须能够运行 PF 和 spamd。据我所知,这意味着 OpenBSD 或 FreeBSD。我确信这些说明可以适应 Linux 及其防火墙的风格,但这超出了我的回答范围。
我已经为 FreeBSD 编写了这个。OpenBSD 用户应该能够主要通过更改路径来适应这些步骤。
最后,这一切都适用于 Postfix 2.5+
重新加载 PF
创建 /usr/local/scripts/get-spamtrapped:
启动垃圾邮件:/usr/local/etc/rc.d/obspamd start
Cronjob 每小时一次以仅黑名单模式运行 spamd-setup。黑名单模式强制它更新 <spamd> pf 表而不是 spamd 的内部表。由于 spamd 只是缓送和存储数据,因此其他所有内容都需要在 PF 中。(将 XX 替换为您希望它运行的任何分钟)
每个被垃圾邮件捕获的电子邮件地址都需要做两件事。首先,它必须解析为一个实际的邮箱,这样它才不会在 SMTP 对话期间被拒绝。我使用了别名为 spamtrap@localhost 的虚拟用户。其次,它需要匹配 Postfix 中的 check_recipient_access 规则并被重定向到 spamtrap@localhost,因此收件人列表中包含的合法用户永远不必看到它。我是如何做这部分的:
此时,所有向您的垃圾邮件陷阱地址发送邮件的客户端都应添加到 spamdb 和 <spamd>。尚未向 spamd 发送任何内容。要使整个阻塞机制生效,请添加到 /etc/pf.conf 并重新加载 pf:
就是这样。
可能的扩展
修改垃圾邮件陷阱脚本以将邮件副本存储在贝叶斯垃圾邮件语料库中是微不足道的。
如果您订阅了任何 RBL rsync 服务,将这些消息的弹跳卸载到 spamd 是微不足道的。
好吧,看起来你已经完成了自己的答案。只是不要责怪 postfix-policyd,它比您想象的要灵活得多,因为它提供了多种机制来对抗垃圾邮件:
您不需要使用所有这些武器,并且您可能会在
smtpd_recipient_restrictions
.无论如何,试一试(并阅读文档)或建立您自己的解决方案 - 这取决于您。
OP 提出的解决方案相当复杂。我使用了一种更简单的方法:
第 1 步:设置过滤器文件
/etc/postfix/spamtraps
这只是一个简单的“匹配列表”:一个正则表达式(用于垃圾邮件陷阱),在遇到时会应用一个操作:
调整您的地址。
第二步:设置规则
/etc/postfix/main.cf
查找
smtpd_recipient_restrictions
块,并将相应的规则放在您的网络检查之前(负载较少),但在经过身份验证的用户之后。例如:第 3 步:重新加载守护进程
当然,您现在需要重新加载 postfix,以便您的更改生效。根据您的发行版,这可以通过
service postfix reload
、/etc/init.d/postfix reload
或类似命令完成。第 4 步:现在将那些垃圾邮件发送者拒之门外
这是您可能希望考虑的可选步骤:使用Fail2ban,并让它监视您的邮件日志文件。一旦有人解决了垃圾邮件陷阱,就立即禁止该 IP(例如 30 分钟,或者可能 1 小时 - 不要太长,因为垃圾邮件发送者可能使用一个很快就会变得“无辜”的动态 IP)。
只是一个快速提示:使用 postfix-policyd,示例包含在配置中...
在您的 main.cf中将其设置为策略服务
smtpd_recipient_restrictions
,即:就像启用了灰名单的魅力垃圾邮件陷阱一样。祝你好运!
如果有人需要第 4 步的示例脚本,我们开始...