要使用 SecurityGateway 的定制 Sieve 扩展命令,就必须在会用到该命令的脚本开头包括以下 require 命令:
require “securitygateway”;
ip 测试的执行时机可以是 SMTP 处理过程中的任何阶段(即任何邮件事件中)。
•cidr—第二个参数是要与客户端 IP 地址进行比较的 IP 地址或模式。可以是确切的 IP 地址,用 CIDR 指定的范围(如 10.0.0.0/24 ),或通配符模式:其中 ? (任何单个字符),*(0 个以上字符),#(1 位以上数字)(例如 10.*.*.*)。
代码示例: if not ip :cidr "10.0.0.0/24" { greylist; }
•public—如果客户端 IP 地址不属于 RFC-1918 私有子网,也不是回环地址或 DHCP 自动 IP 地址,则为 true,否则为 false(127.0.0.0/8、192.168.0.0/16、10.0.0.0/8、172.16.0.0/12、169.254.0.0/16)。
代码示例: if ip “public” { greylist; }
•private—public 的逻辑求反。
•ssl—若客户端已成功建立了安全的 (SSL) 连接,则为 true
•des—若客户端为域邮件服务器,则为 true
何时可调用 lookup 测试取决于第一个参数:
•ptr—当它为第一个参数时,可随时执行 lookup 测试。第二个参数可以是标准的标记参数或 “resolves”、“resolvestoclient” 或 “error”。
例如: if lookup "ptr" :matches "*.domain.com" { greylist; }.
•resolves—若存在 PTR 记录,则返回 true。
•resolvestoclient—返回 true,若 PTR 记录匹配的话 – 即 PTR 主机的 A 记录查找返回了客户端的 IP 地址。
•error—若发生临时 DNS 查询错误,则返回 true。
•helo—当它为第一个参数时,只能在 HELO 事件中或之后执行 lookup 测试。第二个参数可以是“resolves”、“resolvestoclient”或“error”。
•resolves—若 HELO 参数为有效 IP 地址或主机名,则返回 true。
•resolvestoclient – 返回 true,若 HELO 参数匹配的话 – 即 HELO 参数的 A 记录查找返回了客户端的 IP 地址。
•error – 若发生临时 DNS 查询错误,则返回 true。
•mail—当它为第一个参数时,可在 MAIL 事件中或之后执行 lookup 测试。第二个参数可以是“resolves”、“resolvestoclient”或“error”。
•resolves—若 MAIL FROM 域为有效域,则返回 true。
•resolvestoclient——返回 true,若 MAIL FROM 域匹配的话 – 即 MAIL FROM 域的 A 记录查找返回客户端的 IP 地址。
•error—若发生临时 DNS 查询错误,则返回 true。
•spf—当它为第一个参数时,可在 MAIL 事件中或之后执行 lookup 测试。第二个参数可以是 “pass”、“fail”或“error”。
•pass—若发件人通过了 SPF 验证则返回 true,若验证结果不确定或失败则返回 false。
•fail—若发件人未通过 SPF 验证则返回 true,若验证结果不确定或通过验证则返回 false。
•error—若处理过程中出错(通常为 DNS 查询错误)则返回 true
•rblip—当它为第一个参数时,可随时执行 lookup 测试。第二个参数可以是“all”、“any”或“error”。
•all—若客户端 IP 地址通过了所有 DNS 黑名单检测,则返回 true
•any—若客户端 IP 地址通过了任一 DNS 黑名单检测,则返回 true
•error—若处理过程中出错(通常为 DNS 查询错误)则返回 true
•rblhdr—当它为第一个参数时,只能在 DATA 事件中执行 lookup 测试。第二个参数可以是“all”、“any”或“error”。
•all—若收到的报头通过了所有 DNS 黑名单检测,则返回 true
•any—若收到的报头通过了任一 DNS 黑名单检测,则返回 true
•error—若处理过程中出错(通常为 DNS 查询错误)则返回 true
port 测试可随时执行。唯一的参数是端口号,用来与客户端连接的实际端口进行比较。
代码示例: if port 25 { greylist; }
何时可调用 auth 测试取决于第一个参数:
•succeeded—若身份验证成功则为 true。当它为第一个参数时,可在 AUTH 事件中或之后执行 auth 测试。
•match—若身份验证成功且 MAIL FROM 地址与经过身份验证的账户相匹配,则为 true。当它为第一个参数时,可在 MAIL 事件中或之后执行 auth 测试。
verify 测试验证地址(参见: 用户验证源)。不同于所有其他测试,即使在 sieve 过滤器中未包含相应代码,该测试也始终会执行。也就是说,对每条 MAIL FROM 和 RCPT TO 地址进行验证并缓存结果。何时可调用 verify 测试取决于第一个参数:
•from—若 MAIL FROM 地址为有效本地地址,则为 true。当它为第一个参数时,可在 MAIL 事件中或之后执行 verify 测试。
•fromdomain—若 MAIL FROM 地址来自有效本地域,则返回 true。当它为第一个参数时,可在 MAIL 事件中或之后执行 verify 测试。
•fail_from—若验证 MAIL FROM 地址时出错则为 true。当它为第一个参数时,可在 MAIL 事件中或之后执行 verify 测试。
•to—若 RCPT TO 地址为有效本地地址,则为 true。当它为第一个参数时,可在 RCPT 事件中或之后执行 verify 测试。
•todomain—若 RCPT TO 地址指向有效本地域,则为 true。当它为第一个参数时,可在 RCPT 事件中或之后执行 verify 测试。
•fail_to—若验证 RCPT TO 地址时出错则为 true。当它为第一个参数时,可在 RCPT 事件中或之后执行 verify 测试。
dkim 测试检查 DomainKeys Identified Mail (DKIM) 验证,并只能在 DATA 事件中执行。
•pass—若邮件由 DKIM 签名且该签名通过了验证,则返回 true。
•fail—若 DKIM 处理返回硬失败,则为 true。(需要使用 SSP 选项)
•error—若 DKIM 处理出错则返回 true。
cbv 测试可在 MAIL 事件中或之后执行。在不含参数的情况下,它返回 true,只要 MAIL FROM 地址通过 回叫验证。
•error—若 CBV 处理出错则返回 true。
spamtotal 测试检查邮件分数并可在任何事件中执行。然而,在大多数情况下,应在 DATA 事件的最后一个过滤器中运行该测试,以便所有其他过滤器都能为邮件打分,以合成最后的邮件分数。
spamtotal 测试具有单个参数: 阈值。若邮件分数不小于阈值,该测试返回 true,否则返回 false。
该测试有一别名: exempt(为了向后兼容)。何时执行该测试取决于第一个参数:
•all——与不含参数作用相同;返回 true,若客户端被列入白名单。可在任何事件中调用,且只使用现有的信息。例如,当在 IP 事件(第一个事件)中调用时,只比较白名单中匹配 PTR 记录的 IP 地址和主机。
•ip—返回 true,若客户端被列入 IP 地址白名单。可在任何事件中执行。
•host—返回 true,若客户端被列入主机白名单。可以是匹配 HELO 参数或 PTR 主机。可在 HELO 事件中或之后执行。
•mail—返回 true,若 MAIL FROM 被列入地址白名单。可在 HELO 事件中或之后执行。
•from—返回 true,若 From: 报头被列入地址白名单。只能在 DATA 事件中执行。
该测试有一别名: blocklist(为了向后兼容)。参数和功能类似于 whitelist 测试,只是比较对象为黑名单。
vbr(即邮件验证)测试具有单个参数:
•comma-delimited list of trusted certifiers—如果邮件经过认证,则返回 true。
•error—若邮件验证出错则返回 true。
error 命令类似于 RFC 3028 中定义的 reject 命令,只是它有 2 个参数。第一个参数为 SMTP 错误代码,第二个参数为文本消息。两者都要发送以响应当前客户端命令。
disconnect 命令类似与 “error” 命令,只是它还关闭了 TCP/IP 套接字。这与 MD 中的关闭选项很相似。
greylist 命令激活灰名单登记。
dynamicscreen 命令激活动态屏蔽。
tarpit 命令激活缓送。
sign 命令为邮件添加签名报头。第一个参数可以是:
•dkim—由 DKIM 为邮件签名。第二个参数是要使用的选择器名称。
•vbr—在邮件中包括 VBR-Info: 报头(用于邮件验证)。第二个参数是要包含在 mv= 参数中的可靠验证源。
throttle 命令激活带宽节流。第一个参数是以“字符/秒”为单位的带宽限制。
ipshield 命令激活 IP 屏蔽。
spamscore 命令将第一个参数添加到邮件的当前邮件分数总额上。参见 spamtotal 测试。
tagheader 命令在邮件中的某个报头前添加标记。第一个参数是要修改的报头。第二个参数是要在报头值中插入的文本。
addheader 命令为邮件添加新报头。第一个参数是要添加的报头,第二个参数是报头值。
removeheader 命令从邮件中删除报头。第一个参数是要删除的报头。
alert 命令发送通知。唯一的参数是包含 from:、to:、subject: 和其他报头的邮件主体。整个字符串取决于宏扩展。
changesender 操作用于更改 SMTP MAIL FROM 命令的值,SecurityGateway 在投递邮件时会使用该命令。例如,在使用仅内部域名时,可以使用此名称;当在域外发送邮件时,必须更改此名称。
示例:
require ["securitygateway", "envelope"];
if envelope :matches "From" "frank@internal.mail"
{
changesender "frank@example.com";
}
•该脚本必须放在“Sieve Executable Path”目录中,可以从“设置 » 系统 » 目录”进行配置。可以将“execute”这个 sieve 关键字用作操作和测试。
• 第一个参数是脚本的名称。支持 .bat、.exe 和 PowerShell。
•第二个参数是将传递给进程的参数。message_filename sieve 变量填充了当前正在处理的邮件的 RFC822 源的完整路径。
示例:
require ["securitygateway","relational","comparator-i;ascii-numeric"];
execute "Test.ps1" "-msg '${message_filename}'";
将记录处理的每封邮件的文件名的 PowerShell 脚本的文本是...
param
(
[string]$msg = ""
)
Add-Content -Path "c:\files_processed.txt" -Value $msg
Write-Host $msg