🍉 Sync 2026-04-27 08:33:04

This commit is contained in:
github-actions[bot] committed 2026-04-27 08:33:04 +08:00
1 parent 576eeccfeb
commit 7ae30bfa80
1284 files changed
+652917 -268

No files matched your search

+1 -1
View File
@@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk
LUCI_TITLE:=LuCI support for Webrestriction
LUCI_PKGARCH:=all
PKG_VERSION:=1.1
PKG_RELEASE:=1
PKG_RELEASE:=2
include $(TOPDIR)/feeds/luci/luci.mk
@@ -1,16 +1,18 @@
module("luci.controller.webrestriction", package.seeall)
function index()
if not nixio.fs.access("/etc/config/webrestriction") then return end
if not nixio.fs.access("/etc/config/luci-app-control-webrestriction") then
return
end
entry({"admin", "control"}, firstchild(), "Control", 44).dependent = false
entry({"admin", "control", "webrestriction"}, cbi("webrestriction"), _("Access Control"), 11).dependent = true
entry({"admin", "control", "webrestriction", "status"}, call("status")).leaf = true
entry({"admin", "control"}, firstchild(), "Control", 44).dependent = false
entry({"admin", "control", "webrestriction"}, cbi("webrestriction"), _("Access Control"), 11).dependent = true
entry({"admin", "control", "webrestriction", "status"}, call("status")).leaf = true
end
function status()
local e = {}
e.status = luci.sys.call("iptables -L FORWARD | grep WEB_RESTRICTION >/dev/null") == 0
luci.http.prepare_content("application/json")
luci.http.write_json(e)
local e = {}
e.status = luci.sys.call("iptables -w -L FORWARD | grep WEB_RESTRICTION >/dev/null") == 0
luci.http.prepare_content("application/json")
luci.http.write_json(e)
end
@@ -1,6 +1,7 @@
local o = require "luci.sys"
a = Map("webrestriction", translate("Access Control"), translate("Use the blacklist or whitelist mode to control whether a client in the list can connect to the Internet."))
a = Map("luci-app-control-webrestriction", translate("Access Control"), translate(
"Use the blacklist or whitelist mode to control whether a client in the list can connect to the Internet."))
a.template = "webrestriction/index"
e = a:section(TypedSection, "basic", translate("Running Status"))
@@ -21,7 +22,8 @@ t.default = "blacklist"
t:value("whitelist", translate("Whitelist"))
t:value("blacklist", translate("Blacklist"))
e = a:section(TypedSection, "macbind", translate("List setting"), translate("In blacklist mode, the client in the list is prohibited from connecting to the Internet. In whitelist mode, only the clients in the list can connect to the Internet."))
e = a:section(TypedSection, "macbind", translate("List setting"), translate(
"In blacklist mode, the client in the list is prohibited from connecting to the Internet. In whitelist mode, only the clients in the list can connect to the Internet."))
e.template = "cbi/tblsection"
e.anonymous = true
e.addremove = true
@@ -32,5 +34,7 @@ t.rmempty = false
t = e:option(Value, "macaddr", translate("MAC Address"))
t.rmempty = true
o.net.mac_hints(function(e, a) t:value(e, "%s (%s)" % {e, a}) end)
o.net.mac_hints(function(e, a)
t:value(e, "%s (%s)" % {e, a})
end)
return a
@@ -0,0 +1,81 @@
#!/bin/sh /etc/rc.common
# Copyright (C) 2016 fw867 <ffkykzs@gmail.com>
# Copyright (C) 2024 Lienol
START=99
CONFIG="luci-app-control-webrestriction"
ipt="iptables -w"
ip6t="ip6tables -w"
iptables_w(){
$ipt 1 "$@"
$ip6t 1 "$@"
}
add_rule(){
action=$1
local items=$(uci show ${CONFIG} | grep "=macbind" | cut -d '.' -sf 2 | cut -d '=' -sf 1)
for i in $items; do
enable=$(uci -q get ${CONFIG}.${i}.enable)
macaddr=$(uci -q get ${CONFIG}.${i}.macaddr)
if [ -z $enable ] || [ -z $macaddr ]; then
continue
fi
if [ "$enable" == "1" ]; then
iptables_w -A WEB_RESTRICTION -m mac --mac-source $macaddr -j $action
[ "$limit_type" == "blacklist" ] && {
iptables_w -t nat -A WEB_RESTRICTION -m mac --mac-source $macaddr -j RETURN
}
fi
unset enable macaddr
done
}
start(){
stop
ENABLED=$(uci -q get ${CONFIG}.@basic[0].enable || echo "0")
[ "${ENABLED}" != "1" ] && exit 0
limit_type=$(uci -q get ${CONFIG}.@basic[0].limit_type)
iptables_w -N WEB_RESTRICTION
if [ "$limit_type" == "blacklist" ]; then
iptables_w -t nat -N WEB_RESTRICTION
add_rule DROP
else
add_rule ACCEPT
iptables_w -A WEB_RESTRICTION -j DROP
fi
FW3_INDEX_4=$($ipt -L FORWARD --line-numbers | tail -n +3 | grep -E ACCEPT | grep ctstate | grep fw3 | awk '{print $1}')
[ -n "$FW3_INDEX_4" ] && let FW3_INDEX_4+=1
$ipt -I FORWARD $FW3_INDEX_4 -j WEB_RESTRICTION
FW3_INDEX_6=$($ip6t -L FORWARD --line-numbers | tail -n +3 | grep -E ACCEPT | grep ctstate | grep fw3 | awk '{print $1}')
[ -n "$FW3_INDEX_6" ] && let FW3_INDEX_6+=1
$ip6t -I FORWARD $FW3_INDEX_6 -j WEB_RESTRICTION
[ "$limit_type" == "blacklist" ] && {
iptables_w -t nat -I PREROUTING 1 -j WEB_RESTRICTION
}
}
stop(){
ipt_del() {
for i in $(seq 1 $($1 -nL $2 | grep -c "WEB_RESTRICTION")); do
local index=$($1 --line-number -nL $2 | grep "WEB_RESTRICTION" | head -1 | awk '{print $1}')
$1 -w -D $2 $index 2>/dev/null
done
}
ipt_del "$ipt" "FORWARD"
ipt_del "$ipt" "INPUT"
ipt_del "$ipt -t nat" "PREROUTING"
ipt_del "$ip6t" "FORWARD"
ipt_del "$ip6t" "INPUT"
ipt_del "$ip6t -t nat" "PREROUTING"
iptables_w -F WEB_RESTRICTION 2>/dev/null
iptables_w -X WEB_RESTRICTION 2>/dev/null
iptables_w -t nat -F WEB_RESTRICTION 2>/dev/null
iptables_w -t nat -X WEB_RESTRICTION 2>/dev/null
}
@@ -1,86 +0,0 @@
#!/bin/sh /etc/rc.common
# Copyright (C) 2016 fw867 <ffkykzs@gmail.com>
# Copyright (C) 2024 Lienol
START=99
CONFIG=webrestriction
ipt="iptables -w"
ip6t="ip6tables -w"
add_rule(){
action=$1
local items=$(uci show ${CONFIG} | grep "=macbind" | cut -d '.' -sf 2 | cut -d '=' -sf 1)
for i in $items; do
enable=$(uci -q get ${CONFIG}.${i}.enable)
macaddr=$(uci -q get ${CONFIG}.${i}.macaddr)
if [ -z $enable ] || [ -z $macaddr ]; then
continue
fi
if [ "$enable" == "1" ]; then
$ipt -A WEB_RESTRICTION -m mac --mac-source $macaddr -j $action
$ip6t -A WEB_RESTRICTION -m mac --mac-source $macaddr -j $action 2>/dev/null
[ "$limit_type" == "blacklist" ] && {
$ipt -t nat -A WEB_RESTRICTION -m mac --mac-source $macaddr -j RETURN
$ip6t -t nat -A WEB_RESTRICTION -m mac --mac-source $macaddr -j RETURN 2>/dev/null
}
fi
unset enable macaddr
done
}
start(){
stop
ENABLED=$(uci -q get ${CONFIG}.@basic[0].enable || echo "0")
[ "${ENABLED}" != "1" ] && exit 0
limit_type=$(uci -q get ${CONFIG}.@basic[0].limit_type)
$ipt -N WEB_RESTRICTION
$ip6t -N WEB_RESTRICTION 2>/dev/null
if [ "$limit_type" == "blacklist" ]; then
$ipt -t nat -N WEB_RESTRICTION
$ip6t -t nat -N WEB_RESTRICTION 2>/dev/null
add_rule DROP
else
add_rule ACCEPT
$ipt -A WEB_RESTRICTION -j DROP
$ip6t -A WEB_RESTRICTION -j DROP 2>/dev/null
fi
#获取FORWARD ACCEPT规则行号
FA_INDEX=`$ipt -L FORWARD --line-numbers | tail -n +3 | grep -E ACCEPT | grep ctstate | grep fw3 | awk '{print $1}'`
[ -n "$FA_INDEX" ] && let FA_INDEX+=1
$ipt -I FORWARD $FA_INDEX -j WEB_RESTRICTION
#获取FORWARD ACCEPT规则行号
FA_INDEX=`$ip6t -L FORWARD --line-numbers | tail -n +3 | grep -E ACCEPT | grep ctstate | grep fw3 | awk '{print $1}'`
[ -n "$FA_INDEX" ] && let FA_INDEX+=1
$ip6t -I FORWARD $FA_INDEX -j WEB_RESTRICTION
[ "$limit_type" == "blacklist" ] && {
$ipt -t nat -I PREROUTING 1 -j WEB_RESTRICTION
$ip6t -t nat -I PREROUTING 1 -j WEB_RESTRICTION 2>/dev/null
}
}
stop(){
ipt_del() {
for i in $(seq 1 $($1 -nL $2 | grep -c "WEB_RESTRICTION")); do
local index=$($1 --line-number -nL $2 | grep "WEB_RESTRICTION" | head -1 | awk '{print $1}')
$1 -w -D $2 $index 2>/dev/null
done
}
ipt_del "$ipt" "FORWARD"
ipt_del "$ipt" "INPUT"
ipt_del "$ipt -t nat" "PREROUTING"
ipt_del "$ip6t" "FORWARD"
ipt_del "$ip6t" "INPUT"
ipt_del "$ip6t -t nat" "PREROUTING"
$ipt -F WEB_RESTRICTION 2>/dev/null
$ipt -X WEB_RESTRICTION 2>/dev/null
$ipt -t nat -F WEB_RESTRICTION 2>/dev/null
$ipt -t nat -X WEB_RESTRICTION 2>/dev/null
$ip6t -F WEB_RESTRICTION 2>/dev/null
$ip6t -X WEB_RESTRICTION 2>/dev/null
$ip6t -t nat -F WEB_RESTRICTION 2>/dev/null
$ip6t -t nat -X WEB_RESTRICTION 2>/dev/null
}
@@ -1,19 +1,19 @@
#!/bin/sh
[ ! -f "/usr/share/ucitrack/luci-app-webrestriction.json" ] && {
cat > /usr/share/ucitrack/luci-app-webrestriction.json << EEOF
[ ! -f "/usr/share/ucitrack/luci-app-luci_app_control_webrestriction.json" ] && {
cat > /usr/share/ucitrack/luci-app-luci_app_control_webrestriction.json << EEOF
{
"config": "webrestriction",
"init": "webrestriction"
"config": "luci_app_control_webrestriction",
"init": "luci_app_control_webrestriction"
}
EEOF
}
uci -q batch <<-EOF >/dev/null
delete ucitrack.@webrestriction[-1]
add ucitrack webrestriction
set ucitrack.@webrestriction[-1].init=webrestriction
delete ucitrack.@luci_app_control_webrestriction[-1]
add ucitrack luci_app_control_webrestriction
set ucitrack.@luci_app_control_webrestriction[-1].init=luci-app-control-webrestriction
commit ucitrack
EOF
rm -f /tmp/luci-indexcache
rm -rf /tmp/luci-*cache
exit 0
@@ -2,10 +2,10 @@
"luci-app-control-webrestriction": {
"description": "Grant UCI access for luci-app-control-webrestriction",
"read": {
"uci": [ "webrestriction" ]
"uci": [ "luci-app-control-webrestriction" ]
},
"write": {
"uci": [ "webrestriction" ]
"uci": [ "luci-app-control-webrestriction" ]
}
}
}
@@ -1,4 +1,4 @@
{
"config": "webrestriction",
"init": "webrestriction"
"config": "luci-app-control-webrestriction",
"init": "luci-app-control-webrestriction"
}