diff options
author | Vsevolod Stakhov <vsevolod@rambler-co.ru> | 2011-03-23 17:08:58 +0300 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@rambler-co.ru> | 2011-03-23 17:08:58 +0300 |
commit | 689855e2bb5a1c911bab1f71da9aa963a8da62a2 (patch) | |
tree | be0ceaeb9aa5107ef8807625a06a1ff400e54994 /src/plugins | |
parent | 4aa3b704739e3398402fbbef1216ae588ff9be2e (diff) | |
download | rspamd-689855e2bb5a1c911bab1f71da9aa963a8da62a2.tar.gz rspamd-689855e2bb5a1c911bab1f71da9aa963a8da62a2.zip |
* Add throttling detection mechanic for dns resolver
* Improve phishing module adding ability to define 'strict' phishing domains
Diffstat (limited to 'src/plugins')
-rw-r--r-- | src/plugins/lua/phishing.lua | 55 |
1 files changed, 49 insertions, 6 deletions
diff --git a/src/plugins/lua/phishing.lua b/src/plugins/lua/phishing.lua index 115688750..1e648768a 100644 --- a/src/plugins/lua/phishing.lua +++ b/src/plugins/lua/phishing.lua @@ -3,6 +3,7 @@ -- local symbol = 'PHISHED_URL' local domains = nil +local strict_domains = {} function phishing_cb (task) local urls = task:get_urls(); @@ -10,17 +11,31 @@ function phishing_cb (task) if urls then for _,url in ipairs(urls) do if url:is_phished() then + local purl = url:get_phished() + if table.maxn(strict_domains) > 0 then + local _,_,tld = string.find(purl:get_host(), '([a-zA-Z0-9%-]+\.[a-zA-Z0-9%-]+)$') + local found = false + if tld then + for _,rule in ipairs(strict_domains) do + if rule['map']:get_key(tld) then + task:insert_result(rule['symbol'], 1, purl:get_host()) + found = true + end + end + if found then + return + end + end + end if domains then - local _,_,tld = string.find(url:get_phished():get_host(), '([a-zA-Z0-9%-]+\.[a-zA-Z0-9%-]+)$') + local _,_,tld = string.find(purl:get_host(), '([a-zA-Z0-9%-]+\.[a-zA-Z0-9%-]+)$') if tld then if domains:get_key(tld) then - if url:is_phished() then - task:insert_result(symbol, 1, url:get_host()) - end + task:insert_result(symbol, 1, purl:get_host()) end end else - task:insert_result(symbol, 1, url:get_phished():get_host()) + task:insert_result(symbol, 1, purl:get_host()) end end end @@ -32,6 +47,7 @@ if type(rspamd_config.get_api_version) ~= 'nil' then if rspamd_config:get_api_version() >= 1 then rspamd_config:register_module_option('phishing', 'symbol', 'string') rspamd_config:register_module_option('phishing', 'domains', 'map') + rspamd_config:register_module_option('phishing', 'strict_domains', 'string') end end @@ -43,8 +59,35 @@ if opts then -- Register symbol's callback rspamd_config:register_symbol(symbol, 1.0, 'phishing_cb') end - if opts['domains'] then + if opts['domains'] and type(opt['domains']) == 'string' then domains = rspamd_config:add_hash_map (opts['domains']) end + if opts['strict_domains'] then + local sd = {} + if type(opts['strict_domains']) == 'table' then + sd = opts['strict_domains'] + else + sd[1] = opts['strict_domains'] + end + for _,d in ipairs(sd) do + local s, _ = string.find(d, ':') + if s then + local sym = string.sub(d, s + 1, -1) + local map = string.sub(d, 1, s - 1) + if type(rspamd_config.get_api_version) ~= 'nil' then + rspamd_config:register_virtual_symbol(sym, 1) + end + local rmap = rspamd_config:add_hash_map (map) + if rmap then + local rule = {symbol = sym, map = rmap} + table.insert(strict_domains, rule) + else + rspamd_logger.info('cannot add map: ' .. map .. ' for symbol: ' .. sym) + end + else + rspamd_logger.info('strict_domains option must be in format <map>:<symbol>') + end + end + end -- If no symbol defined, do not register this module end |