diff --git a/autoinstall/2.x/autoinstall.sh b/autoinstall/2.x/autoinstall.sh index 2b31dac..021aeef 100755 --- a/autoinstall/2.x/autoinstall.sh +++ b/autoinstall/2.x/autoinstall.sh @@ -10,9 +10,9 @@ LUCI_APP=1 HTTPS_DNS_PROXY=1 OWRT_VERSION="current" -RUAB_VERSION="2.1.2-r1" -RUAB_MOD_LUA_VERSION="2.1.2-r1" -RUAB_LUCI_APP_VERSION="2.1.2-r1" +RUAB_VERSION="2.1.3-r1" +RUAB_MOD_LUA_VERSION="2.1.3-r1" +RUAB_LUCI_APP_VERSION="2.1.3-r1" BASE_URL="https://raw.githubusercontent.com/gSpotx2f/packages-openwrt/master" PKG_DIR="/tmp" diff --git a/luci-app-ruantiblock/Makefile b/luci-app-ruantiblock/Makefile index 623d874..a9023f5 100644 --- a/luci-app-ruantiblock/Makefile +++ b/luci-app-ruantiblock/Makefile @@ -5,7 +5,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-ruantiblock -PKG_VERSION:=2.1.2 +PKG_VERSION:=2.1.3 PKG_RELEASE:=1 LUCI_TITLE:=LuCI support for ruantiblock LUCI_DEPENDS:=+ruantiblock diff --git a/luci-app-ruantiblock/htdocs/luci-static/resources/view/ruantiblock/settings.js b/luci-app-ruantiblock/htdocs/luci-static/resources/view/ruantiblock/settings.js index 157d659..09f07e4 100644 --- a/luci-app-ruantiblock/htdocs/luci-static/resources/view/ruantiblock/settings.js +++ b/luci-app-ruantiblock/htdocs/luci-static/resources/view/ruantiblock/settings.js @@ -149,13 +149,6 @@ return view.extend({ '
poker
[ck]?a[sz]ino?
[vw]ulkan
slots?
' ); - let user_entries_edit = new tools.fileEditDialog( - tools.userEntriesFile, - _('User entries'), - _('One entry (IP, CIDR or FQDN) per line. In the FQDN records, you can specify the DNS server for resolving this domain (separated by a space). You can also comment on lines (# is the first character of a line).
Examples:') + - '
#comment
domain.net
sub.domain.com 8.8.8.8
sub.domain.com 8.8.8.8#53
74.125.131.19
74.125.0.0/16
' - ); - let bypass_entries_edit = new tools.fileEditDialog( tools.bypassEntriesFile, _('Exclusion list'), diff --git a/ruantiblock-mod-lua/Makefile b/ruantiblock-mod-lua/Makefile index 29f1681..81e2d7c 100644 --- a/ruantiblock-mod-lua/Makefile +++ b/ruantiblock-mod-lua/Makefile @@ -5,7 +5,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=ruantiblock-mod-lua -PKG_VERSION:=2.1.2 +PKG_VERSION:=2.1.3 PKG_RELEASE:=1 PKG_MAINTAINER:=gSpot @@ -18,6 +18,7 @@ define Package/$(PKG_NAME) URL:=https://github.com/gSpotx2f/ruantiblock_openwrt PKGARCH:=all DEPENDS:=+ruantiblock +lua +luasocket +luasec +luabitop +iconv +idn + #DEPENDS:=+ruantiblock +lua +luasocket +luasec +luabitop +iconv +idn +lua-lzlib endef define Package/$(PKG_NAME)/description diff --git a/ruantiblock-mod-lua/files/usr/libexec/ruantiblock/ruab_parser.lua b/ruantiblock-mod-lua/files/usr/libexec/ruantiblock/ruab_parser.lua index 05bd798..9be06f9 100755 --- a/ruantiblock-mod-lua/files/usr/libexec/ruantiblock/ruab_parser.lua +++ b/ruantiblock-mod-lua/files/usr/libexec/ruantiblock/ruab_parser.lua @@ -251,6 +251,12 @@ if not it then Config.BLLIST_SUMMARIZE_CIDR = false Config.BLLIST_SUMMARIZE_IP = false end +--[[ +local zlib = prequire("zlib") +if Config.BLLIST_ENABLE_IDN and not idn then + error("You need to install lua-lzlib...") +end +--]] -- Iconv check @@ -392,6 +398,12 @@ function BlackListParser:parser_func() error("Method BlackListParser:parser_func() must be overridden by a subclass!") end +function BlackListParser:prepare_data() + return function(chunk) + return chunk + end +end + function BlackListParser:chunk_buffer() local ret_value = "" local last_chunk @@ -425,7 +437,7 @@ function BlackListParser:get_http_data(url) end ret_val, ret_code, ret_headers = http_module.request{url = url, method="HEAD", headers = self.http_send_headers} if ret_val and ret_code == 200 then - local http_sink = ltn12.sink.chain(self:chunk_buffer(), self:parser_func()) + local http_sink = ltn12.sink.chain(self:prepare_data(), self:chunk_buffer(), self:parser_func()) ret_val, ret_code, ret_headers = http_module.request{url = url, sink = http_sink, headers = self.http_send_headers} self.http_codes[ret_code] = true if not ret_val or ret_code ~= 200 then @@ -437,7 +449,7 @@ function BlackListParser:get_http_data(url) print(string.format("Connection error! (%s) URL: %s", ret_code, url)) end else - local wget_sink = ltn12.sink.chain(self:chunk_buffer(), self:parser_func()) + local wget_sink = ltn12.sink.chain(self:prepare_data(), self:chunk_buffer(), self:parser_func()) ret_val = ltn12.pump.all(ltn12.source.file(io.popen(self.WGET_CMD .. self.wget_user_agent .. ' "' .. url .. '"', 'r')), wget_sink) end return (ret_val == 1) and true or false @@ -695,21 +707,25 @@ function OptimizeConfig:new(t) return instance end -function OptimizeConfig:_optimize_ip_table() - local optimized_table = {} - for ipaddr, subnet in pairs(self.ip_table) do - if self.ip_subnet_table[subnet] then - if (self.BLLIST_IP_LIMIT and self.BLLIST_IP_LIMIT > 0 and not self.BLLIST_GR_EXCLUDED_NETS_PATTERNS[subnet]) and self.ip_subnet_table[subnet] >= self.BLLIST_IP_LIMIT then - self.cidr_table[string.format("%s0/24", subnet)] = true - self.ip_subnet_table[subnet] = nil - self.cidr_count = self.cidr_count + 1 - else - optimized_table[ipaddr] = true - self.ip_records_count = self.ip_records_count + 1 +function OptimizeConfig:_remove_subdomains() + local tld_table = {} + for fqdn, sld in pairs(self.fqdn_table) do + if not tld_table[sld] then + tld_table[sld] = {} + end + tld_table[sld][fqdn] = true + end + for _, v in pairs(tld_table) do + for i in pairs(v) do + if self.fqdn_table[i] then + for j in pairs(v) do + if (j ~= i) and j:find("." .. i, 1, true) then + self.fqdn_table[j] = nil + end + end end end end - self.ip_table = optimized_table end function OptimizeConfig:_optimize_fqdn_table() @@ -728,6 +744,23 @@ function OptimizeConfig:_optimize_fqdn_table() self.fqdn_table = optimized_table end +function OptimizeConfig:_optimize_ip_table() + local optimized_table = {} + for ipaddr, subnet in pairs(self.ip_table) do + if self.ip_subnet_table[subnet] then + if (self.BLLIST_IP_LIMIT and self.BLLIST_IP_LIMIT > 0 and not self.BLLIST_GR_EXCLUDED_NETS_PATTERNS[subnet]) and self.ip_subnet_table[subnet] >= self.BLLIST_IP_LIMIT then + self.cidr_table[string.format("%s0/24", subnet)] = true + self.ip_subnet_table[subnet] = nil + self.cidr_count = self.cidr_count + 1 + else + optimized_table[ipaddr] = true + self.ip_records_count = self.ip_records_count + 1 + end + end + end + self.ip_table = optimized_table +end + function OptimizeConfig:_group_ip_ranges() for i in Summarize:summarize_ip_ranges(self.ip_table, true) do self.cidr_table[string.format("%s/%s", it.int_to_ip(i[1]), i[2])] = true @@ -759,6 +792,7 @@ function OptimizeConfig:optimize() self:_union(self.fqdn_table, i.fqdn_table) self:_union(self.sld_table, i.sld_table) end + self:_remove_subdomains() self:_optimize_fqdn_table() self:_optimize_ip_table() if self.BLLIST_SUMMARIZE_IP then @@ -909,6 +943,43 @@ local Zi = Class(BlackListParser, { site_encoding = Config.ZI_ENCODING, }) +-- for https://raw.githubusercontent.com/zapret-info/z-i/master/dump.csv.gz +-- lua-lzlib -- +--[[ +function Zi:prepare_data() + local curr_chunk + local stream = zlib.inflate({ + read = function(self, consume) + return curr_chunk + end, + }) + return function(chunk) + if chunk then + curr_chunk = chunk + return (stream:read(2048)) or "" + end + stream:close() + return nil + end +end +--]] +-- lua-zlib -- +--[[ +function Zi:prepare_data() + local stream = zlib.inflate() + return function(chunk) + if chunk then + local inflated, eos = stream(chunk) + if eos then + stream = zlib.inflate() + end + return inflated + end + return nil + end +end +--]] + function Zi:parser_func() return function(chunk) if chunk and chunk ~= "" then @@ -1075,7 +1146,6 @@ if parser_classes then for _, i in ipairs(parser_instances) do ret_list[i:run()] = true end - local return_sum = 0 for i, _ in pairs(ret_list) do return_sum = return_sum + i @@ -1091,5 +1161,4 @@ if parser_classes then else error("Wrong configuration! (Config.BLLIST_MODE, Config.BLLIST_SOURCE)") end - os.exit(ret_list[1] and 1 or (ret_list[2] and 2 or 0)) diff --git a/ruantiblock-mod-py/Makefile b/ruantiblock-mod-py/Makefile index bce4a76..8404cd6 100644 --- a/ruantiblock-mod-py/Makefile +++ b/ruantiblock-mod-py/Makefile @@ -5,7 +5,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=ruantiblock-mod-py -PKG_VERSION:=2.1.2 +PKG_VERSION:=2.1.3 PKG_RELEASE:=1 PKG_MAINTAINER:=gSpot diff --git a/ruantiblock-mod-py/files/usr/libexec/ruantiblock/ruab_parser.py b/ruantiblock-mod-py/files/usr/libexec/ruantiblock/ruab_parser.py index 5629c34..b7c1806 100755 --- a/ruantiblock-mod-py/files/usr/libexec/ruantiblock/ruab_parser.py +++ b/ruantiblock-mod-py/files/usr/libexec/ruantiblock/ruab_parser.py @@ -15,6 +15,7 @@ import socket import ssl import sys from urllib import request +#import zlib class Config: @@ -281,8 +282,12 @@ class BlackListParser(Config): if not chunk: break - def _align_chunk(self, url): + def prepare_data(self, url): for chunk in self._download_data(url): + yield chunk + + def _align_chunk(self, url): + for chunk in self.prepare_data(url): if chunk is None: yield self.rest continue @@ -458,7 +463,6 @@ class Summarize: @classmethod def _group_nets(cls, cidr_list, raw_list=None): - def remove_items(start, end): for ip in range(int(start), int(end) + 1, 256): raw_list.remove(str(IPv4Address(ip)) + "/24") @@ -507,6 +511,18 @@ class OptimizeConfig(Config): self.ip_count = 0 self.output_fqdn_count = 0 + def _remove_subdomains(self): + tld_dict = {} + for fqdn, sld in self.fqdn_dict.items(): + tld_dict.setdefault(sld, []) + tld_dict[sld].append(fqdn) + for v in tld_dict.values(): + for i in v: + if i in self.fqdn_dict: + for j in v: + if (j != i) and j.endswith("." + i): + self.fqdn_dict.pop(j, None) + def _optimize_fqdn_dict(self): optimized_set = set() for fqdn, sld in self.fqdn_dict.items(): @@ -555,6 +571,7 @@ class OptimizeConfig(Config): self.ip_subnet_dict.update(i.ip_subnet_dict) self.fqdn_dict.update(i.fqdn_dict) self.sld_dict.update(i.sld_dict) + self._remove_subdomains() self._optimize_fqdn_dict() self._optimize_ip_dict() self._group_ip_ranges() @@ -666,6 +683,16 @@ class ZiFQDN(BlackListParser): self.site_encoding = self.ZI_ENCODING self.fields_separator = ";" self.ips_separator = "|" + # self.decomp_obj = zlib.decompressobj(wbits=47) + + # def prepare_data(self, url): + # """ + # for https://raw.githubusercontent.com/zapret-info/z-i/master/dump.csv.gz + # """ + # for chunk in self._download_data(url): + # if chunk: + # data = self.decomp_obj.decompress(chunk) + # yield data def parser_func(self): for url in self.url: @@ -693,7 +720,6 @@ class ZiIp(ZiFQDN): for i in entry_list[0].split(self.ips_separator): self.ip_value_processing(i) - class AfFQDN(BlackListParser): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) diff --git a/ruantiblock/Makefile b/ruantiblock/Makefile index f2885e8..ec852f7 100644 --- a/ruantiblock/Makefile +++ b/ruantiblock/Makefile @@ -5,7 +5,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=ruantiblock -PKG_VERSION:=2.1.2 +PKG_VERSION:=2.1.3 PKG_RELEASE:=1 PKG_MAINTAINER:=gSpot diff --git a/ruantiblock/files/usr/bin/ruantiblock b/ruantiblock/files/usr/bin/ruantiblock index 9abf7c7..d81c94b 100755 --- a/ruantiblock/files/usr/bin/ruantiblock +++ b/ruantiblock/files/usr/bin/ruantiblock @@ -73,7 +73,7 @@ export ENABLE_LOGGING=1 ### Вывод дополнительных сообщений в лог (0 - выкл, 1, 2) export DEBUG=0 ### Файл для вывода некоторых отладочных сообщений -export DEBUG_FILE="/tmp/ruanliblock.debug" +export DEBUG_FILE="/tmp/${NAME}.debug" ### Html-страница с инфо о текущем статусе (0 - выкл, 1 - вкл) (не используется в OpenWrt) export ENABLE_HTML_INFO=0 ### Максимальное кол-во элементов списка nftables @@ -998,7 +998,7 @@ GetMainInstanceEntries() { } GetBlacklistFiles() { - local _return_code=1 _user_entries_ret_code=1 + local _return_code=0 _user_entries_ret_code=1 AddBypassEntries GetMainInstanceEntries case $? in