Software /
code /
prosody-modules
Comparison
mod_firewall/mod_firewall.lua @ 5727:ad5c77793750
mod_firewall: Add FROM COUNTRY condition based on GeoIP DB
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sun, 12 Nov 2023 16:37:47 +0100 |
parent | 5542:048284447643 |
child | 5816:e304e19536f2 |
comparison
equal
deleted
inserted
replaced
5726:0ac4545cb4f9 | 5727:ad5c77793750 |
---|---|
261 return code, { "search:"..search_name, "pattern:"..pattern_name }; | 261 return code, { "search:"..search_name, "pattern:"..pattern_name }; |
262 end; | 262 end; |
263 }; | 263 }; |
264 scan_list = { | 264 scan_list = { |
265 global_code = [[local function scan_list(list, items) for item in pairs(items) do if list:contains(item) then return true; end end end]]; | 265 global_code = [[local function scan_list(list, items) for item in pairs(items) do if list:contains(item) then return true; end end end]]; |
266 } | 266 }; |
267 iplib = { | |
268 global_code = [[local iplib = require "util.ip";]]; | |
269 }; | |
270 geoip_country = { | |
271 global_code = [[ | |
272 local geoip_country = require "geoip.country"; | |
273 local geov4 = geoip_country.open(module:get_option_string("geoip_ipv4_country", "/usr/share/GeoIP/GeoIP.dat")); | |
274 local geov6 = geoip_country.open(module:get_option_string("geoip_ipv6_country", "/usr/share/GeoIP/GeoIPv6.dat")); | |
275 local function get_geoip(ips, what) | |
276 if not ips then | |
277 return "--"; | |
278 end | |
279 local ip = iplib.new_ip(ips); | |
280 if not ip then | |
281 return "--"; | |
282 end | |
283 if ip.proto == "IPv6" and geov6 then | |
284 local geoinfo = geoinfo:query_by_addr6(ip.addr); | |
285 if geoinfo then | |
286 return geoinfo[what or "code"]; | |
287 end | |
288 elseif ip.proto == "IPv4" and geov4 then | |
289 local geoinfo = geoinfo:query_by_addr(ip.addr); | |
290 if geoinfo then | |
291 return geoinfo[what or "code"]; | |
292 end | |
293 end | |
294 return "--"; | |
295 end | |
296 ]]; | |
297 depends = { | |
298 "iplib" | |
299 } | |
300 }; | |
267 }; | 301 }; |
268 | 302 |
269 local function include_dep(dependency, code) | 303 local function include_dep(dependency, code) |
270 local dep, dep_param = dependency:match("^([^:]+):?(.*)$"); | 304 local dep, dep_param = dependency:match("^([^:]+):?(.*)$"); |
271 local dep_info = available_deps[dep]; | 305 local dep_info = available_deps[dep]; |