diff --git a/autoinstall/autoinstall.sh b/autoinstall/autoinstall.sh index 1049c5f..bd5f913 100755 --- a/autoinstall/autoinstall.sh +++ b/autoinstall/autoinstall.sh @@ -4,13 +4,14 @@ PREFIX="" TOR_USER="tor" PROXY_MODE=1 -LUA_MODULE=1 +BLACKLIST=0 +LUA_MODULE=0 LUCI_APP=1 OWRT_VERSION="current" -RUAB_VERSION="0.9.5-0" -RUAB_MOD_LUA_VERSION="0.9.5-0" -RUAB_LUCI_APP_VERSION="0.9.5-0" +RUAB_VERSION="0.9.6-0" +RUAB_MOD_LUA_VERSION="0.9.6-0" +RUAB_LUCI_APP_VERSION="0.9.6-0" BASE_URL="https://raw.githubusercontent.com/gSpotx2f/packages-openwrt/master" PKG_DIR="/tmp" @@ -177,11 +178,15 @@ InstallBaseConfig() { RemoveFile "$FILE_RUAB_PKG" > /dev/null DlFile "$URL_RUAB_PKG" "$FILE_RUAB_PKG" && $OPKG_CMD install "$FILE_RUAB_PKG" > /dev/null _return_code=$? - # костыль для остановки сервиса, который запускается автоматически после установки пакета! AppStop return $_return_code } +EnableBlacklist() { + $UCI_CMD set ruantiblock.config.bllist_preset="ruantiblock-fqdn" + $UCI_CMD commit ruantiblock +} + InstallVPNConfig() { local _if_vpn $UCI_CMD set ruantiblock.config.proxy_mode="2" @@ -189,6 +194,12 @@ InstallVPNConfig() { $UCI_CMD commit ruantiblock } +InstallTPConfig() { + local _if_vpn + $UCI_CMD set ruantiblock.config.proxy_mode="3" + $UCI_CMD commit ruantiblock +} + TorrcSettings() { local _lan_ip=`$UCI_CMD get network.lan.ipaddr | $AWK_CMD -F "/" '{print $1}'` if [ -z "$_lan_ip" ]; then @@ -208,7 +219,6 @@ InstallTorConfig() { TorrcSettings $UCI_CMD set ruantiblock.config.proxy_mode="1" $UCI_CMD commit ruantiblock - # dnsmasq rebind protection $UCI_CMD set dhcp.@dnsmasq[0].rebind_domain='.onion' $UCI_CMD commit dhcp } @@ -243,7 +253,7 @@ InputError () { ConfirmProxyMode() { local _reply - printf " Select configuration [1: Tor | 2: VPN] (default: 1, quit: q) > " + printf " Select configuration [ 1: Tor | 2: VPN | 3: Transparent proxy ] (default: 1, quit: q) > " read _reply case $_reply in 1|"") @@ -254,6 +264,10 @@ ConfirmProxyMode() { PROXY_MODE=2 break ;; + 3) + PROXY_MODE=3 + break + ;; q|Q) printf "Bye...\n"; exit 0 ;; @@ -263,9 +277,31 @@ ConfirmProxyMode() { esac } +ConfirmBlacklist() { + local _reply + printf " Select blacklist [ 1: User entries only | 2: RKN blacklist ] (default: 1, quit: q) > " + read _reply + case $_reply in + 1|"") + BLACKLIST=1 + break + ;; + 2) + BLACKLIST=2 + break + ;; + q|Q) + printf "Bye...\n"; exit 0 + ;; + *) + InputError ConfirmBlacklist + ;; + esac +} + ConfirmLuaModule() { local _reply - printf " Would you like to install the lua module? [y|n] (default: y, quit: q) > " + printf " Would you like to install the lua module? [ y | n ] (default: y, quit: q) > " read _reply case $_reply in y|Y|"") @@ -287,7 +323,7 @@ ConfirmLuaModule() { ConfirmLuciApp() { local _reply - printf " Would you like to install the LuCI application? [y|n] (default: y, quit: q) > " + printf " Would you like to install the LuCI application? [ y | n ] (default: y, quit: q) > " read _reply case $_reply in y|Y|"") @@ -309,7 +345,7 @@ ConfirmLuciApp() { ConfirmProcessing() { local _reply - printf " Next, the installation will begin... Continue? [y|n] (default: y, quit: q) > " + printf " Next, the installation will begin... Continue? [ y | n ] (default: y, quit: q) > " read _reply case $_reply in y|Y|"") @@ -325,6 +361,8 @@ ConfirmProcessing() { } ConfirmProxyMode +ConfirmBlacklist +#ConfirmLuaModule ConfirmLuciApp ConfirmProcessing AppStop @@ -338,6 +376,9 @@ if [ $? -eq 0 ]; then if [ $PROXY_MODE = 2 ]; then PrintBold "Installing VPN configuration..." InstallVPNConfig + elif [ $PROXY_MODE = 3 ]; then + PrintBold "Installing transparent proxy configuration..." + InstallTPConfig else PrintBold "Installing Tor configuration..." InstallTorConfig @@ -346,6 +387,11 @@ if [ $? -eq 0 ]; then fi fi + if [ $BLACKLIST = 2 ]; then + PrintBold "Set RKN blacklist..." + EnableBlacklist + fi + if [ $LUA_MODULE = 1 ]; then PrintBold "Installing lua module..." InstallLuaModule diff --git a/luci-app-ruantiblock/Makefile b/luci-app-ruantiblock/Makefile index 82bd7ef..bd70704 100644 --- a/luci-app-ruantiblock/Makefile +++ b/luci-app-ruantiblock/Makefile @@ -4,7 +4,7 @@ include $(TOPDIR)/rules.mk -PKG_VERSION:=0.9.5-0 +PKG_VERSION:=0.9.6-0 LUCI_TITLE:=LuCI support for ruantiblock LUCI_DEPENDS:=+ruantiblock LUCI_PKGARCH:=all 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 f5ef89d..efd2dce 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 @@ -8,7 +8,7 @@ 'require view.ruantiblock.tools as tools'; return view.extend({ - availableParsers: {}, + parsers: {}, appStatusCode : null, @@ -20,10 +20,6 @@ return view.extend({ }; }, - dependsBllistModule: function(elem) { - this.depends(elem, 'bllist_module', Object.values(this.availableParsers)); - }, - validateIpPort: function(section, value) { return (/^$|^([0-9]{1,3}\.){3}[0-9]{1,3}(#[\d]{2,5})?$/.test(value)) ? true : _('Expecting:') + ` ${_('One of the following:')}\n - ${_('valid IP address')}\n - ${_('valid address#port')}\n`; @@ -32,8 +28,8 @@ return view.extend({ load: function() { return Promise.all([ L.resolveDefault(fs.exec(tools.execPath, [ 'raw-status' ]), 1), - fs.list(tools.parsersDir), - uci.load('network'), + L.resolveDefault(fs.list(tools.parsersDir), null), + uci.load(tools.appName), ]).catch(e => { ui.addNotification(null, E('p', _('Unable to read the contents') + ': %s [ %s ]'.format( @@ -47,18 +43,32 @@ return view.extend({ return; }; this.appStatusCode = data[0].code; - let p_dir_arr = data[1]; - let vpn_iface = uci.get('network', 'VPN', 'ifname') || 'tun0'; + let p_dir_arr = data[1]; + let curent_module = uci.get(tools.appName, 'config', 'bllist_module'); + let curent_preset = uci.get(tools.appName, 'config', 'bllist_preset'); if(p_dir_arr) { p_dir_arr.forEach(e => { let fname = e.name; if(fname.startsWith('ruab_parser')) { - this.availableParsers[fname] = tools.parsersDir + '/' + fname; + this.parsers[fname] = tools.parsersDir + '/' + fname; }; }); }; + let availableParsers = Object.keys(this.parsers).length > 0; + if(!availableParsers) { + for(let i of Object.keys(tools.blacklistPresets)) { + if(!new RegExp('^($|' + tools.appName + ')').test(i) && i !== curent_preset) { + delete tools.blacklistPresets[i]; + }; + }; + }; + + if(curent_module) { + this.parsers[curent_module.match(/([^/]*)$/)[0]] = curent_module; + }; + let ip_filter_edit = new tools.fileEditDialog( tools.ipFilterFile, _('IP filter'), @@ -111,6 +121,7 @@ return view.extend({ _('Proxy mode')); o.value('1', 'Tor'); o.value('2', 'VPN'); + o.value('3', _('Transparent proxy')); }; // PROXY_LOCAL_CLIENTS @@ -156,7 +167,7 @@ return view.extend({ // TOR_TRANS_PORT o = s.taboption('tor_settings', form.Value, 'tor_trans_port', - _('Transparent proxy port for iptables rules')); + _('Transparent proxy port')); o.rmempty = false; o.datatype = "port"; @@ -189,121 +200,153 @@ return view.extend({ o.multiple = false; o.noaliases = true; o.rmempty = false; - o.default = vpn_iface; + o.default = 'tun0'; + + + /* Proxy tab */ + + s.tab('proxy_settings', _('Transparent proxy mode')); + + // T_PROXY_PORT_TCP + o = s.taboption('proxy_settings', form.Value, 't_proxy_port_tcp', + _('Transparent proxy TCP port')); + o.rmempty = false; + o.datatype = "port"; + + //T_PROXY_ALLOW_UDP + o = s.taboption('proxy_settings', form.Flag, 't_proxy_allow_udp', + _("Send UDP traffic to transparent proxy")); + o.rmempty = false; + + // T_PROXY_PORT_UDP + o = s.taboption('proxy_settings', form.Value, 't_proxy_port_udp', + _('Transparent proxy UDP port')); + o.rmempty = false; + o.datatype = "port"; }; - /* Parser settings tab */ + /* Blacklist module tab */ - s.tab('parser_settings', _('Blacklist settings')); - - // BLLIST_MODULE - let bllist_module = s.taboption('parser_settings', form.ListValue, - 'bllist_module', _('Blacklist module')); - bllist_module.value('', _('none (user entries only)')); - Object.entries(this.availableParsers).forEach( - e => bllist_module.value(e[1], e[0])); + s.tab('blacklist_tab', _('Blacklist settings')); // BLLIST_PRESET - let bllist_preset = s.taboption('parser_settings', form.ListValue, + let bllist_preset = s.taboption('blacklist_tab', form.ListValue, 'bllist_preset', _('Blacklist update mode')); bllist_preset.description = _("Blacklist sources") + ':'; + bllist_preset.value('', _('user entries only')); Object.entries(tools.blacklistPresets).forEach(e => { - bllist_preset.value(e[0], `${e[1][0]} - ${e[1][1]}`); + bllist_preset.value(e[0], ((e[1][1]) ? `${e[1][0]} - ${e[1][1]}` : e[1][0])); }); let bllist_sources = {}; - Object.values(tools.blacklistPresets).forEach(v => {bllist_sources[v[0]] = v[2]}); + Object.values(tools.blacklistPresets).forEach(v => { bllist_sources[v[0]] = v[2] }); Object.entries(bllist_sources).forEach(e => { - bllist_preset.description += `
${e[0]} - ${e[1]}`; + if(e[1]) { + bllist_preset.description += `
${e[0]} - ${e[1]}`; + }; }); - // BLLIST_IP_LIMIT - o = s.taboption('parser_settings', form.Value, 'bllist_ip_limit', _("IP limit")); - o.description = _("The number of IP addresses in the subnet, upon reaching which the entire '/24' subnet is added to the list"); - o.rmempty = false; - o.datatype = 'uinteger'; + // BLLIST_MODULE + let bllist_module = s.taboption('blacklist_tab', form.ListValue, + 'bllist_module', _('Blacklist module') + '*'); + bllist_module.value('', _('disabled')); + bllist_module.depends({ bllist_preset: new RegExp('^($|' + tools.appName + ')'), '!reverse': true }); + + Object.entries(this.parsers).forEach( + e => bllist_module.value(e[1], e[0])); + + if(availableParsers) { + bllist_preset.description += '
( * - ' + _('requires installed blacklist module') + ' )'; + + + /* Parser settings tab */ + + s.tab('parser_settings_tab', _('Module settings')); + + // BLLIST_FQDN_FILTER + o = s.taboption('parser_settings_tab', form.Flag, 'bllist_fqdn_filter', + _("Enable FQDN filter")); + o.description = _('Exclude domains from blacklist by FQDN filter patterns'); + o.rmempty = false; + + // BLLIST_FQDN_FILTER_FILE edit dialog + o = s.taboption('parser_settings_tab', form.Button, '_fqdn_filter_btn', + _("FQDN filter")); + o.onclick = () => fqdn_filter_edit.show(); + o.inputtitle = _('Edit'); + o.inputstyle = 'edit btn'; + + // BLLIST_SD_LIMIT + o = s.taboption('parser_settings_tab', form.Value, 'bllist_sd_limit', + _("Subdomains limit")); + o.description = _('The number of subdomains in the domain, upon reaching which the entire 2nd level domain is added to the list'); + o.rmempty = false; + o.datatype = 'uinteger'; + + // BLLIST_GR_EXCLUDED_SLD + o = s.taboption('parser_settings_tab', form.DynamicList, 'bllist_gr_excluded_sld', + _('2nd level domains that are excluded from optimization')); + o.description = _('e.g:') + ' livejournal.com'; + o.placeholder = _('e.g:') + ' livejournal.com'; + o.datatype = "hostname"; + + // BLLIST_ENABLE_IDN + o = s.taboption('parser_settings_tab', form.Flag, 'bllist_enable_idn', + _("Convert cyrillic domains to punycode")); + o.rmempty = false; + + // BLLIST_ALT_NSLOOKUP + o = s.taboption('parser_settings_tab', form.Flag, 'bllist_alt_nslookup', + _('Use optional DNS resolver')); + o.rmempty = false; + + // BLLIST_ALT_DNS_ADDR + o = s.taboption('parser_settings_tab', form.Value, 'bllist_alt_dns_addr', + _("Optional DNS resolver"), 'ipaddress[#port]'); + o.rmempty = false; + o.validate = this.validateIpPort; + + // BLLIST_IP_FILTER + o = s.taboption('parser_settings_tab', form.Flag, 'bllist_ip_filter', + _("Enable IP filter")); + o.description = _('Exclude IP addresses from blacklist by IP filter patterns'); + o.rmempty = false; + + // BLLIST_IP_FILTER_FILE edit dialog + o = s.taboption('parser_settings_tab', form.Button, '_ip_filter_btn', + _("IP filter")); + o.onclick = () => ip_filter_edit.show(); + o.inputtitle = _('Edit'); + o.inputstyle = 'edit btn'; + + // BLLIST_IP_LIMIT + o = s.taboption('parser_settings_tab', form.Value, 'bllist_ip_limit', _("IP limit")); + o.description = _("The number of IP addresses in the subnet, upon reaching which the entire '/24' subnet is added to the list"); + o.rmempty = false; + o.datatype = 'uinteger'; + + // BLLIST_GR_EXCLUDED_NETS + o = s.taboption('parser_settings_tab', form.DynamicList, 'bllist_gr_excluded_nets'); + o.title = _('IP subnet patterns (/24) that are excluded from optimization'); + o.description = _('e.g:') + ' 192.168.1.'; + o.placeholder = _('e.g:') + ' 192.168.1.'; + o.validate = (section, value) => { + return (/^$|^([0-9]{1,3}[.]){3}$/.test(value)) ? true : _('Expecting:') + + ' ' + _('net pattern') + ' (' + _('e.g:') + ' 192.168.3.)\n'; + }; + + // BLLIST_SUMMARIZE_IP + o = s.taboption('parser_settings_tab', form.Flag, 'bllist_summarize_ip', + _("Summarize IP ranges")); + o.rmempty = false; + + // BLLIST_SUMMARIZE_CIDR + o = s.taboption('parser_settings_tab', form.Flag, 'bllist_summarize_cidr', + _("Summarize '/24' networks")); + o.rmempty = false; - // BLLIST_GR_EXCLUDED_NETS - o = s.taboption('parser_settings', form.DynamicList, 'bllist_gr_excluded_nets'); - o.title = _('IP subnet patterns (/24) that are excluded from optimization'); - o.description = _('e.g:') + ' 192.168.1.'; - o.placeholder = _('e.g:') + ' 192.168.1.'; - o.validate = (section, value) => { - return (/^$|^([0-9]{1,3}[.]){3}$/.test(value)) ? true : _('Expecting:') - + ' ' + _('net pattern') + ' (' + _('e.g:') + ' 192.168.3.)\n'; }; - // BLLIST_SUMMARIZE_IP - o = s.taboption('parser_settings', form.Flag, 'bllist_summarize_ip', - _("Summarize IP ranges")); - o.rmempty = false; - - // BLLIST_SUMMARIZE_CIDR - o = s.taboption('parser_settings', form.Flag, 'bllist_summarize_cidr', - _("Summarize '/24' networks")); - o.rmempty = false; - - // BLLIST_SD_LIMIT - o = s.taboption('parser_settings', form.Value, 'bllist_sd_limit', - _("Subdomains limit")); - o.description = _('The number of subdomains in the domain, upon reaching which the entire 2nd level domain is added to the list'); - o.rmempty = false; - o.datatype = 'uinteger'; - - // BLLIST_GR_EXCLUDED_SLD - o = s.taboption('parser_settings', form.DynamicList, 'bllist_gr_excluded_sld', - _('2nd level domains that are excluded from optimization')); - o.description = _('e.g:') + ' livejournal.com'; - o.placeholder = _('e.g:') + ' livejournal.com'; - o.datatype = "hostname"; - - // BLLIST_ENABLE_IDN - o = s.taboption('parser_settings', form.Flag, 'bllist_enable_idn', - _("Convert cyrillic domains to punycode")); - o.rmempty = false; - - // BLLIST_ALT_NSLOOKUP - o = s.taboption('parser_settings', form.Flag, 'bllist_alt_nslookup', - _('Use optional DNS resolver')); - o.rmempty = false; - - // BLLIST_ALT_DNS_ADDR - o = s.taboption('parser_settings', form.Value, 'bllist_alt_dns_addr', - _("Optional DNS resolver"), 'ipaddress[#port]'); - o.rmempty = false; - o.validate = this.validateIpPort; - - - /* Blacklist entry filters tab */ - - s.tab('entries_filter_tab', _('Blacklist entry filters')); - - // BLLIST_IP_FILTER - o = s.taboption('entries_filter_tab', form.Flag, 'bllist_ip_filter', - _("Enable IP filter")); - o.description = _('Exclude IP addresses from blacklist by IP filter patterns'); - o.rmempty = false; - - // BLLIST_IP_FILTER_FILE edit dialog - o = s.taboption('entries_filter_tab', form.Button, '_ip_filter_btn', - _("IP filter")); - o.onclick = () => ip_filter_edit.show(); - o.inputtitle = _('Edit'); - o.inputstyle = 'edit btn'; - - // BLLIST_FQDN_FILTER - o = s.taboption('entries_filter_tab', form.Flag, 'bllist_fqdn_filter', - _("Enable FQDN filter")); - o.description = _('Exclude domains from blacklist by FQDN filter patterns'); - o.rmempty = false; - - // BLLIST_FQDN_FILTER_FILE edit dialog - o = s.taboption('entries_filter_tab', form.Button, '_fqdn_filter_btn', - _("FQDN filter")); - o.onclick = () => fqdn_filter_edit.show(); - o.inputtitle = _('Edit'); - o.inputstyle = 'edit btn'; - /* User entries tab */ @@ -314,7 +357,7 @@ return view.extend({ _('Enable'), _("Add user entries to the blacklist when updating")); o.rmempty = false; o.default = 0; - this.dependsBllistModule(o); + o.depends({ bllist_preset: '', '!reverse': true }); // USER_ENTRIES_DNS o = s.taboption('user_entries_tab', form.Value, 'user_entries_dns', diff --git a/luci-app-ruantiblock/htdocs/luci-static/resources/view/ruantiblock/tools.js b/luci-app-ruantiblock/htdocs/luci-static/resources/view/ruantiblock/tools.js index afa5af8..bca5159 100644 --- a/luci-app-ruantiblock/htdocs/luci-static/resources/view/ruantiblock/tools.js +++ b/luci-app-ruantiblock/htdocs/luci-static/resources/view/ruantiblock/tools.js @@ -50,13 +50,13 @@ return baseclass.extend({ infoLabelError : '' + _('Error') + '', blacklistPresets: { - 'zapret-info-fqdn': [ 'zapret-info', 'fqdn', 'https://github.com/zapret-info/z-i' ], - 'zapret-info-ip' : [ 'zapret-info', 'ip', 'https://github.com/zapret-info/z-i' ], - 'rublacklist-fqdn': [ 'rublacklist', 'fqdn', 'https://rublacklist.net' ], - 'rublacklist-ip' : [ 'rublacklist', 'ip', 'https://rublacklist.net' ], - 'antifilter-ip' : [ 'antifilter', 'ip', 'https://antifilter.download' ], 'ruantiblock-fqdn': [ 'ruantiblock', 'fqdn', 'https://github.com/gSpotx2f/ruantiblock_blacklist' ], 'ruantiblock-ip' : [ 'ruantiblock', 'ip', 'https://github.com/gSpotx2f/ruantiblock_blacklist' ], + 'zapret-info-fqdn': [ '*zapret-info', 'fqdn', 'https://github.com/zapret-info/z-i' ], + 'zapret-info-ip' : [ '*zapret-info', 'ip', 'https://github.com/zapret-info/z-i' ], + 'rublacklist-fqdn': [ '*rublacklist', 'fqdn', 'https://rublacklist.net' ], + 'rublacklist-ip' : [ '*rublacklist', 'ip', 'https://rublacklist.net' ], + 'antifilter-ip' : [ '*antifilter', 'ip', 'https://antifilter.download' ], }, callInitStatus: rpc.declare({ @@ -172,8 +172,8 @@ return baseclass.extend({ (app_status_code != 2 && proxy_mode == 2 && vpn_route_status_code != 0) ? '' + _('VPN routing error! Need restart') + '' : '', - (proxy_mode == 1) ? 'Tor' : 'VPN', - (!bllist_module || bllist_module === '') ? _('user entries only') : + (proxy_mode == 3) ? _('Transparent proxy') : (proxy_mode == 2) ? 'VPN' : 'Tor', + (!bllist_preset || bllist_preset === '') ? _('user entries only') : (this.blacklistPresets[bllist_preset]) ? ` ${this.blacklistPresets[bllist_preset][0]} - ${this.blacklistPresets[bllist_preset][1]}` diff --git a/luci-app-ruantiblock/po/ru/ruantiblock.po b/luci-app-ruantiblock/po/ru/ruantiblock.po index f498e0d..2d98e1f 100644 --- a/luci-app-ruantiblock/po/ru/ruantiblock.po +++ b/luci-app-ruantiblock/po/ru/ruantiblock.po @@ -37,9 +37,6 @@ msgstr "Применить" msgid "Apply proxy rules to router application traffic" msgstr "Применять правила прокси к трафику приложений роутера" -msgid "Blacklist entry filters" -msgstr "Фильтры записей блэклиста" - msgid "Blacklist module" msgstr "Модуль блэклиста" @@ -230,8 +227,8 @@ msgstr "Фильтр сообщений" msgid "Minute" msgstr "Минута" -msgid "Module operation mode" -msgstr "Режим работы модуля" +msgid "Module settings" +msgstr "Настройки модуля" msgid "Name" msgstr "Имя" @@ -321,6 +318,9 @@ msgstr "Сохранить" msgid "Send UDP traffic to Tor" msgstr "Отправлять в Tor UDP-трафик" +msgid "Send UDP traffic to transparent proxy" +msgstr "Отправлять в прозрачный прокси UDP-трафик" + msgid "Service" msgstr "Служба" @@ -395,8 +395,20 @@ msgstr "Конфигурационный файл Tor" msgid "Tor mode" msgstr "Режим Tor" -msgid "Transparent proxy port for iptables rules" -msgstr "Порт прозрачного прокси для правил iptables" +msgid "Transparent proxy" +msgstr "Прозрачный прокси" + +msgid "Transparent proxy mode" +msgstr "Режим прозрачного прокси" + +msgid "Transparent proxy port" +msgstr "Порт прозрачного прокси" + +msgid "Transparent proxy TCP port" +msgstr "TCP порт прозрачного прокси" + +msgid "Transparent proxy UDP port" +msgstr "UDP порт прозрачного прокси" msgid "Type an expression..." msgstr "Введите выражение..." @@ -467,6 +479,9 @@ msgstr "шаблон сети" msgid "none (user entries only)" msgstr "нет (только записи пользователя)" +msgid "requires installed blacklist module" +msgstr "необходим установленный модуль блэклиста" + msgid "user entries only" msgstr "только записи пользователя" diff --git a/luci-app-ruantiblock/po/templates/ruantiblock.pot b/luci-app-ruantiblock/po/templates/ruantiblock.pot index 3a44892..bd71ac8 100644 --- a/luci-app-ruantiblock/po/templates/ruantiblock.pot +++ b/luci-app-ruantiblock/po/templates/ruantiblock.pot @@ -22,9 +22,6 @@ msgstr "" msgid "Apply proxy rules to router application traffic" msgstr "" -msgid "Blacklist entry filters" -msgstr "" - msgid "Blacklist module" msgstr "" @@ -210,7 +207,7 @@ msgstr "" msgid "Minute" msgstr "" -msgid "Module operation mode" +msgid "Module settings" msgstr "" msgid "Name" @@ -292,6 +289,9 @@ msgstr "" msgid "Send UDP traffic to Tor" msgstr "" +msgid "Send UDP traffic to transparent proxy" +msgstr "" + msgid "Service" msgstr "" @@ -359,7 +359,19 @@ msgstr "" msgid "Tor mode" msgstr "" -msgid "Transparent proxy port for iptables rules" +msgid "Transparent proxy" +msgstr "" + +msgid "Transparent proxy mode" +msgstr "" + +msgid "Transparent proxy port" +msgstr "" + +msgid "Transparent proxy TCP port" +msgstr "" + +msgid "Transparent proxy UDP port" msgstr "" msgid "Type an expression..." @@ -428,6 +440,9 @@ msgstr "" msgid "none (user entries only)" msgstr "" +msgid "requires installed blacklist module" +msgstr "" + msgid "user entries only" msgstr "" diff --git a/ruantiblock-mod-lua/Makefile b/ruantiblock-mod-lua/Makefile index a5bf058..e2bc51f 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:=0.9.5 +PKG_VERSION:=0.9.6 PKG_RELEASE:=0 PKG_MAINTAINER:=gSpot @@ -34,6 +34,8 @@ define Package/$(PKG_NAME)/install $(INSTALL_BIN) ./files/usr/libexec/ruantiblock/ruab_parser.lua $(1)/usr/libexec/ruantiblock/ruab_parser.lua $(INSTALL_DIR) $(1)/usr/lib/lua $(INSTALL_DATA) ./files/usr/lib/lua/ruab_sum_ip.lua $(1)/usr/lib/lua/ruab_sum_ip.lua + $(INSTALL_DIR) $(1)/etc/uci-defaults + $(INSTALL_DATA) ./files/etc/uci-defaults/ruantiblock-mod-lua $(1)/etc/uci-defaults/ruantiblock-mod-lua endef $(eval $(call BuildPackage,$(PKG_NAME))) diff --git a/ruantiblock-mod-lua/files/etc/uci-defaults/ruantiblock-mod-lua b/ruantiblock-mod-lua/files/etc/uci-defaults/ruantiblock-mod-lua new file mode 100644 index 0000000..252b0cf --- /dev/null +++ b/ruantiblock-mod-lua/files/etc/uci-defaults/ruantiblock-mod-lua @@ -0,0 +1 @@ +uci set ruantiblock.config.bllist_module='/usr/libexec/ruantiblock/ruab_parser.lua'; uci commit ruantiblock diff --git a/ruantiblock-mod-py/Makefile b/ruantiblock-mod-py/Makefile index 4781fe4..18026c3 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:=0.9.5 +PKG_VERSION:=0.9.6 PKG_RELEASE:=0 PKG_MAINTAINER:=gSpot @@ -34,6 +34,8 @@ define Package/$(PKG_NAME)/install $(INSTALL_BIN) ./files/usr/libexec/ruantiblock/ruab_parser.py $(1)/usr/libexec/ruantiblock/ruab_parser.py $(INSTALL_DIR) $(1)/usr/lib/python3.10 $(INSTALL_DATA) ./files/usr/lib/python3.10/ruab_sum_ip.py $(1)/usr/lib/python3.10/ruab_sum_ip.py + $(INSTALL_DIR) $(1)/etc/uci-defaults + $(INSTALL_DATA) ./files/etc/uci-defaults/ruantiblock-mod-py $(1)/etc/uci-defaults/ruantiblock-mod-py endef $(eval $(call BuildPackage,$(PKG_NAME))) diff --git a/ruantiblock-mod-py/files/etc/uci-defaults/ruantiblock-mod-py b/ruantiblock-mod-py/files/etc/uci-defaults/ruantiblock-mod-py new file mode 100644 index 0000000..ab8f632 --- /dev/null +++ b/ruantiblock-mod-py/files/etc/uci-defaults/ruantiblock-mod-py @@ -0,0 +1 @@ +uci set ruantiblock.config.bllist_module='/usr/libexec/ruantiblock/ruab_parser.py'; uci commit ruantiblock diff --git a/ruantiblock/Makefile b/ruantiblock/Makefile index 58d670c..8b443a0 100644 --- a/ruantiblock/Makefile +++ b/ruantiblock/Makefile @@ -5,7 +5,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=ruantiblock -PKG_VERSION:=0.9.5 +PKG_VERSION:=0.9.6 PKG_RELEASE:=0 PKG_MAINTAINER:=gSpot diff --git a/ruantiblock/files/etc/config/ruantiblock b/ruantiblock/files/etc/config/ruantiblock index db3da3f..f33239f 100644 --- a/ruantiblock/files/etc/config/ruantiblock +++ b/ruantiblock/files/etc/config/ruantiblock @@ -6,11 +6,13 @@ config main 'config' option allowed_hosts_mode '0' option if_vpn 'tun0' option tor_trans_port '9040' - option tor_allow_udp '1' + option tor_allow_udp '0' option onion_dns_addr '127.0.0.1#9053' + option t_proxy_port_tcp '1100' + option t_proxy_port_udp '1100' + option t_proxy_allow_udp '0' option add_user_entries '0' option enable_logging '1' - option bllist_preset 'ruantiblock-fqdn' option bllist_ip_limit '0' option bllist_summarize_ip '1' option bllist_summarize_cidr '1' diff --git a/ruantiblock/files/etc/ruantiblock/ruantiblock.conf b/ruantiblock/files/etc/ruantiblock/ruantiblock.conf index 93530cd..ef3027d 100644 --- a/ruantiblock/files/etc/ruantiblock/ruantiblock.conf +++ b/ruantiblock/files/etc/ruantiblock/ruantiblock.conf @@ -12,7 +12,7 @@ DNSMASQ_RESTART_CMD="/etc/init.d/dnsmasq restart" ### Директория для html-страницы статуса (не используется в OpenWrt) HTML_DIR="/www" -### Режим обработки пакетов в правилах iptables (1 - Tor, 2 - VPN) +### Режим обработки пакетов в правилах iptables (1 - Tor, 2 - VPN, 3 - Прозрачный прокси) PROXY_MODE=1 ### Применять правила проксификации для трафика локальных сервисов роутера (0 - off, 1 - on) PROXY_LOCAL_CLIENTS=1 @@ -24,12 +24,20 @@ export ALLOWED_HOSTS_MODE=0 export ALLOWED_HOSTS_LIST="" ### VPN интерфейс для правил маршрутизации IF_VPN="tun0" -### Порт транспарентного proxy Tor (параметр TransPort в torrc) +### Порт прозрачного прокси Tor (параметр TransPort в torrc) TOR_TRANS_PORT=9040 -### Отправлять в Tor UDP-трафик -TOR_ALLOW_UDP=1 +### Отправлять в Tor UDP-трафик (0 - off, 1 - on) +TOR_ALLOW_UDP=0 ### DNS-сервер для резолвинга в домене .onion (Tor) ONION_DNS_ADDR="127.0.0.1#9053" +### --set-mark для отбора пакетов в VPN туннель +VPN_PKTS_MARK=8 +### TCP порт прокси в режиме прозрачного прокси +T_PROXY_PORT_TCP=1100 +### UDP порт прокси в режиме прозрачного прокси +T_PROXY_PORT_UDP=1100 +### Отправлять в прозрачный прокси UDP-трафик (0 - off, 1 - on) +T_PROXY_ALLOW_UDP=0 ### Добавление в список блокировок пользовательских записей из файла $USER_ENTRIES_FILE (0 - off, 1 - on) ### В $DATA_DIR можно создать текстовый файл user_entries с записями IP, CIDR или FQDN (одна на строку). Эти записи будут добавлены в список блокировок ### В записях FQDN можно задать DNS-сервер для разрешения данного домена, через пробел (прим.: domain.com 8.8.8.8) @@ -43,8 +51,6 @@ USER_ENTRIES_FILE="/etc/ruantiblock/user_entries" ENABLE_LOGGING=1 ### Html-страница с инфо о текущем статусе (0 - off, 1 - on) (не используется в OpenWrt) ENABLE_HTML_INFO=0 -### --set-mark для отбора пакетов в VPN туннель -VPN_PKTS_MARK=8 ### Максимальное кол-во элементов списка ipset IPSET_MAXELEM=2000000 ### Таймаут для записей в сете $IPSET_DNSMASQ @@ -60,8 +66,8 @@ BLLIST_MODULE="" ### Настройки модулей-парсеров ### -### Режим обхода блокировок: zapret-info-ip, zapret-info-fqdn, rublacklist-ip, rublacklist-fqdn, antifilter-ip, ruantiblock-ip, ruantiblock-fqdn -BLLIST_PRESET="zapret-info-fqdn" +### Режим обхода блокировок: ruantiblock-ip, ruantiblock-fqdn, zapret-info-ip, zapret-info-fqdn, rublacklist-ip, rublacklist-fqdn, antifilter-ip +BLLIST_PRESET="" ### В случае если из источника получено менее указанного кол-ва записей, то обновления списков не происходит BLLIST_MIN_ENTRIES=30000 ### Лимит ip адресов. При достижении, в конфиг ipset будет добавлена вся подсеть /24 вместо множества ip-адресов пренадлежащих этой сети (0 - off) diff --git a/ruantiblock/files/etc/ruantiblock/scripts/config_script b/ruantiblock/files/etc/ruantiblock/scripts/config_script index 7a69ced..98f02ef 100644 --- a/ruantiblock/files/etc/ruantiblock/scripts/config_script +++ b/ruantiblock/files/etc/ruantiblock/scripts/config_script @@ -1,6 +1,6 @@ AWK_CMD="awk" UCI_SECTION="ruantiblock.config" -UCI_VARS="proxy_mode proxy_local_clients ipset_clear_sets allowed_hosts_mode allowed_hosts_list if_vpn tor_trans_port tor_allow_udp onion_dns_addr add_user_entries user_entries_dns enable_logging bllist_module bllist_preset bllist_ip_limit bllist_gr_excluded_nets bllist_summarize_ip bllist_summarize_cidr bllist_ip_filter bllist_sd_limit bllist_gr_excluded_sld bllist_fqdn_filter bllist_enable_idn bllist_alt_nslookup bllist_alt_dns_addr update_at_startup" +UCI_VARS="proxy_mode proxy_local_clients ipset_clear_sets allowed_hosts_mode allowed_hosts_list if_vpn tor_trans_port tor_allow_udp onion_dns_addr t_proxy_port_tcp t_proxy_port_udp t_proxy_allow_udp add_user_entries user_entries_dns enable_logging bllist_module bllist_preset bllist_ip_limit bllist_gr_excluded_nets bllist_summarize_ip bllist_summarize_cidr bllist_ip_filter bllist_sd_limit bllist_gr_excluded_sld bllist_fqdn_filter bllist_enable_idn bllist_alt_nslookup bllist_alt_dns_addr update_at_startup" eval `uci show "$UCI_SECTION" | $AWK_CMD -F "=" -v UCI_VARS="$UCI_VARS" ' BEGIN { diff --git a/ruantiblock/files/etc/ruantiblock/scripts/ipt_functions b/ruantiblock/files/etc/ruantiblock/scripts/ipt_functions index 3904308..102d4e0 100644 --- a/ruantiblock/files/etc/ruantiblock/scripts/ipt_functions +++ b/ruantiblock/files/etc/ruantiblock/scripts/ipt_functions @@ -77,6 +77,12 @@ IptMainAdd() { if [ "$PROXY_MODE" = "2" ]; then IptCmdWrapper $IPT_CMD -t "$IPT_TABLE" -A "$IPT_ACTION_CHAIN" -j MARK --set-mark $VPN_PKTS_MARK IPT_IPSETS="${IPSET_CIDR} ${IPSET_IP} ${IPSET_DNSMASQ}" + elif [ "$PROXY_MODE" = "3" ]; then + IptCmdWrapper $IPT_CMD -t "$IPT_TABLE" -A "$IPT_ACTION_CHAIN" -p tcp -j REDIRECT --to-ports ${T_PROXY_PORT_TCP} + if [ "$T_PROXY_ALLOW_UDP" = "1" ]; then + IptCmdWrapper $IPT_CMD -t "$IPT_TABLE" -A "$IPT_ACTION_CHAIN" -p udp -j REDIRECT --to-ports ${T_PROXY_PORT_UDP} + fi + IPT_IPSETS="${IPSET_CIDR} ${IPSET_IP} ${IPSET_DNSMASQ}" else IptCmdWrapper $IPT_CMD -t "$IPT_TABLE" -A "$IPT_ACTION_CHAIN" -p tcp -j REDIRECT --to-ports ${TOR_TRANS_PORT} if [ "$TOR_ALLOW_UDP" = "1" ]; then diff --git a/ruantiblock/files/usr/bin/ruantiblock b/ruantiblock/files/usr/bin/ruantiblock index a88d742..7e1d20a 100755 --- a/ruantiblock/files/usr/bin/ruantiblock +++ b/ruantiblock/files/usr/bin/ruantiblock @@ -26,7 +26,7 @@ export HTML_DIR="/www" ########################## Default Settings ############################ -### Режим обработки пакетов в правилах iptables (1 - Tor, 2 - VPN) +### Режим обработки пакетов в правилах iptables (1 - Tor, 2 - VPN, 3 - Прозрачный прокси) export PROXY_MODE=1 ### Применять правила проксификации для трафика локальных сервисов роутера (0 - off, 1 - on) export PROXY_LOCAL_CLIENTS=1 @@ -38,12 +38,20 @@ export ALLOWED_HOSTS_MODE=0 export ALLOWED_HOSTS_LIST="" ### VPN интерфейс для правил маршрутизации export IF_VPN="tun0" -### Порт транспарентного proxy Tor (параметр TransPort в torrc) +### Порт прозрачного прокси Tor (параметр TransPort в torrc) export TOR_TRANS_PORT=9040 -### Отправлять в Tor UDP-трафик -export TOR_ALLOW_UDP=1 +### Отправлять в Tor UDP-трафик (0 - off, 1 - on) +export TOR_ALLOW_UDP=0 ### DNS-сервер для резолвинга в домене .onion (Tor) export ONION_DNS_ADDR="127.0.0.1#9053" +### --set-mark для отбора пакетов в VPN туннель +export VPN_PKTS_MARK=8 +### TCP порт прокси в режиме прозрачного прокси +export T_PROXY_PORT_TCP=1100 +### UDP порт прокси в режиме прозрачного прокси +export T_PROXY_PORT_UDP=1100 +### Отправлять в прозрачный прокси UDP-трафик (0 - off, 1 - on) +export T_PROXY_ALLOW_UDP=0 ### Добавление в список блокировок пользовательских записей из файла $USER_ENTRIES_FILE (0 - off, 1 - on) ### В $DATA_DIR можно создать текстовый файл user_entries с записями IP, CIDR или FQDN (одна на строку). Эти записи будут добавлены в список блокировок ### В записях FQDN можно задать DNS-сервер для разрешения данного домена, через пробел (прим.: domain.com 8.8.8.8) @@ -57,8 +65,6 @@ export USER_ENTRIES_FILE="${CONFIG_DIR}/user_entries" export ENABLE_LOGGING=1 ### Html-страница с инфо о текущем статусе (0 - off, 1 - on) (не используется в OpenWrt) export ENABLE_HTML_INFO=0 -### --set-mark для отбора пакетов в VPN туннель -export VPN_PKTS_MARK=8 ### Максимальное кол-во элементов списка ipset export IPSET_MAXELEM=2000000 ### Таймаут для записей в сете $IPSET_DNSMASQ @@ -74,8 +80,8 @@ export BLLIST_MODULE="" ############################## -### Режим обхода блокировок: zapret-info-fqdn, zapret-info-ip, rublacklist-fqdn, rublacklist-ip, antifilter-ip, ruantiblock-fqdn, ruantiblock-ip -export BLLIST_PRESET="zapret-info-fqdn" +### Режим обхода блокировок: ruantiblock-fqdn, ruantiblock-ip, zapret-info-fqdn, zapret-info-ip, rublacklist-fqdn, rublacklist-ip, antifilter-ip +export BLLIST_PRESET="" ### В случае если из источника получено менее указанного кол-ва записей, то обновления списков не происходит export BLLIST_MIN_ENTRIES=30000 ### Лимит IP адресов. При достижении, в конфиг ipset будет добавлена вся подсеть /24 вместо множества IP адресов пренадлежащих этой сети (0 - off) @@ -138,40 +144,7 @@ STOP_SCRIPT="${CONFIG_DIR}/scripts/stop_script" ### Config script [ -f "$CONFIG_SCRIPT" ] && . "$CONFIG_SCRIPT" -### Blacklist source and mode -case "$BLLIST_PRESET" in - zapret-info-ip) - ### Источник для обновления списка блокировок (zapret-info, rublacklist, antifilter, ruantiblock) - export BLLIST_SOURCE="zapret-info" - ### Режим обхода блокировок: ip, fqdn - export BLLIST_MODE="ip" - ;; - rublacklist-ip) - export BLLIST_SOURCE="rublacklist" - export BLLIST_MODE="ip" - ;; - rublacklist-fqdn) - export BLLIST_SOURCE="rublacklist" - export BLLIST_MODE="fqdn" - ;; - antifilter-ip) - export BLLIST_SOURCE="antifilter" - export BLLIST_MODE="ip" - ;; - ruantiblock-ip) - export BLLIST_SOURCE="ruantiblock" - export BLLIST_MODE="ip" - ;; - ruantiblock-fqdn) - export BLLIST_SOURCE="ruantiblock" - export BLLIST_MODE="fqdn" - ;; - *) - export BLLIST_SOURCE="zapret-info" - export BLLIST_MODE="fqdn" - ;; -esac - +### Utilities AWK_CMD="awk" IPSET_CMD=`which ipset` if [ $? -ne 0 ]; then @@ -184,7 +157,15 @@ if [ $ENABLE_LOGGING = "1" -a $? -ne 0 ]; then ENABLE_LOGGING=0 fi LOGGER_PARAMS="-t `basename $0`" +WGET_CMD=`which wget` +if [ $? -ne 0 ]; then + echo " Error! Wget doesn't exists" >&2 + exit 1 +fi +WGET_PARAMS="--no-check-certificate -q -O" + export IP_DATA_FILE="${DATA_DIR}/${NAME}.ip" + export IPSET_ALLOWED_HOSTS="r_allowed_ip" export IPSET_ONION="r_onion" export IPSET_CIDR="rc" @@ -192,6 +173,7 @@ export IPSET_CIDR_TMP="${IPSET_CIDR}t" export IPSET_IP="ri" export IPSET_IP_TMP="${IPSET_IP}t" export IPSET_DNSMASQ="rd" + export UPDATE_STATUS_FILE="${DATA_DIR}/update_status" UPDATE_PID_FILE="/var/run/${NAME}_update.pid" START_PID_FILE="/var/run/${NAME}_start.pid" @@ -213,7 +195,7 @@ fi Help() { cat << EOF - Usage: `basename $0` start|force-start|stop|destroy|restart|update|force-update|data-files|status|status-html|help + Usage: `basename $0` start|force-start|stop|destroy|restart|update|force-update|data-files|status|raw-status|html-info|help start : Start force-start : Removing the pid-file before running stop : Stop @@ -241,6 +223,29 @@ cat << EOF EOF } +Download() { + $WGET_CMD $WGET_PARAMS "$1" "$2" + if [ $? -ne 0 ]; then + echo "Connection error (${2})" >&2 + return 1 + fi +} + +DownloadRuabBlacklist() { + case "$1" in + "ip") + Download "$IP_DATA_FILE" "$RA_IP_IPSET_URL" && Download "$DNSMASQ_DATA_FILE" "$RA_IP_DMASK_URL" && Download "$UPDATE_STATUS_FILE" "$RA_IP_STAT_URL" + ;; + "fqdn") + Download "$DNSMASQ_DATA_FILE" "$RA_FQDN_DMASK_URL" && Download "$IP_DATA_FILE" "$RA_FQDN_IPSET_URL" && Download "$UPDATE_STATUS_FILE" "$RA_FQDN_STAT_URL" + ;; + *) + echo "Blacklist configuration error (${1})" >&2 + exit 1 + ;; + esac +} + MakeLogRecord() { if [ $ENABLE_LOGGING = "1" ]; then $LOGGER_CMD $LOGGER_PARAMS -p "user.${1}" "$2" @@ -406,14 +411,14 @@ GetDataFiles() { local _return_code=1 _attempt=1 _update_string PreStartCheck echo "$$" > "$UPDATE_PID_FILE" - if [ -n "$BLLIST_MODULE" ]; then + if [ -n "$BLLIST_PRESET" -a -n "$BLLIST_MODULE" ]; then while : do $BLLIST_MODULE _return_code=$? [ $_return_code -eq 0 ] && break ### STDOUT - echo " Module run attempt ${_attempt}: failed [${BLLIST_MODULE}]" + echo " Module run attempt ${_attempt}: failed [${BLLIST_MODULE}]" >&2 MakeLogRecord "err" "Module run attempt ${_attempt}: failed [${BLLIST_MODULE}]" _attempt=`expr $_attempt + 1` [ $_attempt -gt $MODULE_RUN_ATTEMPTS ] && break @@ -430,13 +435,17 @@ GetDataFiles() { MakeLogRecord "notice" "${_update_string}" printf " `date +%d.%m.%Y-%H:%M`\n" >> "$UPDATE_STATUS_FILE" fi - else + elif [ -z "$BLLIST_PRESET" -a -z "$BLLIST_MODULE" ]; then ClearDataFiles ADD_USER_ENTRIES=1 AddUserEntries _return_code=0 + else + _return_code=2 + rm -f "$UPDATE_PID_FILE" + return $_return_code fi - if [ "$PROXY_MODE" = "2" ]; then + if [ "$PROXY_MODE" = "2" -o "$PROXY_MODE" = "3" ]; then printf "\n" >> "$DNSMASQ_DATA_FILE" else ### Запись для .onion в $DNSMASQ_DATA_FILE @@ -476,8 +485,8 @@ Update() { MakeLogRecord "notice" "Blacklist updated" ;; 2) - echo " Error! Blacklist update error" >&2 - MakeLogRecord "err" "Error! Blacklist update error" + echo " Blacklist update error!" >&2 + MakeLogRecord "err" "Blacklist update error!" _return_code=1 ;; *) @@ -561,7 +570,7 @@ Reload() { Status() { local _set if CheckStatus; then - printf "\n \033[1m${NAME} status\033[m: \033[1;32mEnabled\033[m\n\n PROXY_MODE: ${PROXY_MODE}\n PROXY_LOCAL_CLIENTS: ${PROXY_LOCAL_CLIENTS}\n BLLIST_MODULE: ${BLLIST_MODULE}\n" + printf "\n \033[1m${NAME} status\033[m: \033[1;32mEnabled\033[m\n\n PROXY_MODE: ${PROXY_MODE}\n PROXY_LOCAL_CLIENTS: ${PROXY_LOCAL_CLIENTS}\n BLLIST_PRESET: ${BLLIST_PRESET}\n BLLIST_MODULE: ${BLLIST_MODULE}\n" if [ -f "$UPDATE_STATUS_FILE" ]; then $AWK_CMD '{ update_string=(NF < 4) ? "No data" : $4" (CIDR: "$1" | IP: "$2" | FQDN: "$3")"; @@ -605,6 +614,46 @@ StatusOutput() { ############################ Main section ############################## +### Blacklist source and mode +case "$BLLIST_PRESET" in + zapret-info-ip) + ### Источник для обновления списка блокировок (zapret-info, rublacklist, antifilter, ruantiblock) + export BLLIST_SOURCE="zapret-info" + ### Режим обхода блокировок: ip, fqdn + export BLLIST_MODE="ip" + ;; + zapret-info-fqdn) + export BLLIST_SOURCE="zapret-info" + export BLLIST_MODE="fqdn" + ;; + rublacklist-ip) + export BLLIST_SOURCE="rublacklist" + export BLLIST_MODE="ip" + ;; + rublacklist-fqdn) + export BLLIST_SOURCE="rublacklist" + export BLLIST_MODE="fqdn" + ;; + antifilter-ip) + export BLLIST_SOURCE="antifilter" + export BLLIST_MODE="ip" + ;; + ruantiblock-ip) + export BLLIST_SOURCE="ruantiblock" + export BLLIST_MODE="ip" + BLLIST_MODULE="DownloadRuabBlacklist $BLLIST_MODE" + ;; + ruantiblock-fqdn) + export BLLIST_SOURCE="ruantiblock" + export BLLIST_MODE="fqdn" + BLLIST_MODULE="DownloadRuabBlacklist $BLLIST_MODE" + ;; + *) + export BLLIST_SOURCE="" + export BLLIST_MODE="" + ;; +esac + return_code=1 case "$1" in start|force-start) diff --git a/screenshots/01.jpg b/screenshots/01.jpg index 61aebe2..2db737d 100644 Binary files a/screenshots/01.jpg and b/screenshots/01.jpg differ diff --git a/screenshots/02.jpg b/screenshots/02.jpg index 5a956df..d08f636 100644 Binary files a/screenshots/02.jpg and b/screenshots/02.jpg differ diff --git a/screenshots/03.jpg b/screenshots/03.jpg index a32a0b4..9f3528a 100644 Binary files a/screenshots/03.jpg and b/screenshots/03.jpg differ diff --git a/screenshots/04.jpg b/screenshots/04.jpg index 926e3eb..f4345d2 100644 Binary files a/screenshots/04.jpg and b/screenshots/04.jpg differ