我运行一个 cPanel 服务器。该服务器最近被入侵,并被发送垃圾邮件,所以我想跟踪 Exim 发送的每封电子邮件。
是否可以让 Exim 在将电子邮件放入队列之前运行脚本?
我想让 Exim 将“发件人:”标头发送到 Python 脚本。此脚本将跟踪该域在 1 小时内发送了多少封电子邮件,并允许发送电子邮件或阻止 cPanel 帐户。
我曾尝试使用和来执行此操作transport_filter
,system_filter
但无法成功。
如何让 Exim 将外发电子邮件发送到 Python 脚本进行处理?
答案1
最简单的方法是制作一些路由器来检查已提交邮件的标头。如果那里没有一些特殊的标头(如 X-Spam-My-Approval),则邮件将路由到带有管道的传输。管道另一端的脚本将执行所有神奇的操作,并将秘密标头添加到邮件中,然后再次提交。现在路由器将其传递给带有 SMTP 驱动程序的传输。
begin routers
pass2script:
driver = accept
transport = myscript
domains = !+local_domains
condition = ${if ! eq{$header_X-Spam-My-Approval:}{YES}} # header is absent or not "YES"
passaway:
driver = accept
transport = relay
domains = !+local_domains
condition = ${if eq{$header_X-Spam-My-Approval:}{YES}}
适当的传输应该是这样的:
begin transports
myscript:
driver = pipe
command = /path/to/script --option1 --option2
relay:
driver = smtp
headers_remove = X-Spam-My-Approval
. . . . . .
请记住,exim 应该具有足够的权限来运行该脚本,并且脚本应该在 exim 的trusted_users
配置行中列出适当的 EUID,以便能够作为任意发件人提交消息。