Rspamd_rule_frame

来源:互联网 发布:软件项目管理标准 编辑:程序博客网 时间:2024/06/01 22:35

        最近在老板的督促下看了一点儿垃圾邮件筛选规则的知识。老板要求把看过的规则的框架提取出来一下,虽然我觉得没多大用处,毕竟都要自己定义规则的人了,还不知道去要写的规则大概长什么样子咩。(不过对于老板还是有点儿用处的,毕竟她不想看代码,就想结合我之前写的规则的解释文档了解一下儿这个东西zzzzzz)。
        下面就贴出大致整理的Rspamd的Html.lua、Forwarding.lua、Subject_checks.lua 和 Compromised_hosts.lua的规则框架。

Rspamd_rule_frameHtml.lua//定义HTML_RULE的框架如下:rspamd_config.HTML_RULE = {    callback = function(task)        return rule_function(task ,arg)  //调用规则函数并且        //得到规则的返回值    end,    score = 2.0,    group = 'html',    description = ‘Rspamd rule’s function description'}//回调函数的框架如下:local function rule_function(task, arg)    local tp = task:get_text_parts() //首先Get all text (and HTML) parts    for _,p in ipairs(tp) do //用ipairs遍历取出所有的part            if p:is_html() then //如果当前部分是HTML context                local hc = p:get_html() //获取html context                        //用户可以取出html中的子标签、数据等,定义自己的规                                                //则,取出这些数据的接口可以参考官网给出的API文档。                end        endendforwarding.lua//检测转发邮箱类别的框架如下:rspamd_config.FWD_MAIL_CATEGORY = {    callback = function (task)        if not (task:has_from(1) and             //首先检测发送方和接收方均使用的是SMTP协议。            task:has_recipients(1)) then             return false        end        local hostname = task:get_hostname()         //然后获取MTA(Mail-Transfer_Agent)提供的发送者        //的.hostname。        if hostname and hostname:lower():        find('%.MAIL_CATEGORY%.相应的regexp') then         //用正则表达式匹配hostname中是否MAIL_CATEGORY。            if task:get_header_raw('MAIL_CATEGORY') then                 //如果含有MAIL_CATEGORY则表明由该                //MAIL_CATEGORY转发。                return true            end        end    return false  end,  score = 0.0,  description = "Message was forwarded by MAIL_CATEGORY",  group = "forwarding"}//检测其他服务转发邮件的框架如下:rspamd_config.FWD_Service = {    callback = function (task)        if not (task:has_from(arg) and task:has_recipients(arg)) then            return false        end        local envfrom = task:get_from(arg) //获取使用相应服务发送者的用户网络地址,arg可以                                           // 取值:0、1、2。    // 0代表:尝试用SMTP服务发送回退到MIME失败    //1代表:只探测SMTP发送者    //2代表:只探测MIME发送者        local envrcpts = task:get_recipients(arg)//获取使用相应服务的接收者的网络地    址    local lu = task:get_xxx() //参考官方API,获取想要操作的部分,下面定义规则                    // 依据这些取得的数据    //最后定义用户自己想要添加的规则:使用前面task.get_xxx()获得的数据,并     //返回相应的值。    end,  score = 0.0,  description = "通过其他服务转发的邮件",  group = "forwarding"}subject_checks.lua根据邮件主题编写规则的框架如下:- rspamd_config.SUBJ_RULE = {    callback = function(task)        return rule_function(task,arg)    end,    score = 3.0,    group = 'subject',    description = '根据邮件主题编写规则'}local function rule_function(task,arg)    local sbj = task:get_header(‘Subject') //获取邮件的Subject header。    // 根据subject编写相应的规则。  return falseendcompromised_hosts.lua检测正则表达式:用于匹配消息的头部信息的框架如下:reconf['HAS_xxx] = {  re = “构造相应的正则表达式",  description = "PHPMailer signature",  group = "compromised_hosts"}检测消息头部是否含有指定的协议、服务的框架如下:reconf[‘HAS_X_xxx’] = {  re = “header_exists('X-xxx')", // 使用Rspamd的内部函数header_exists,来判读头部X-xxx是否存在  description = "Has X-xxxheader",  group = "compromised_hosts"}
原创粉丝点击