mirror of
https://github.com/caiwx86/small-packages.git
synced 2026-07-28 17:32:00 +08:00
81 lines
2.6 KiB
Bash
81 lines
2.6 KiB
Bash
#!/bin/sh /etc/rc.common
|
|
#
|
|
# Copyright (C) 2025-2026 sirpdboy herboy2008@gmail.com https://github.com/sirpdboy/luci-app-watchdog
|
|
#
|
|
|
|
START=99
|
|
STOP=10
|
|
USE_PROCD=1
|
|
config=watchdog
|
|
dir="/tmp/$config/"
|
|
|
|
start_service() {
|
|
clear_rule
|
|
procd_open_instance
|
|
enable_value=$(uci get $config.config.enable 2>/dev/null || echo "0")
|
|
[ "$enable_value" -ne "0" ] && procd_set_param command /usr/share/$config/$config && echo "$config is starting now ..."
|
|
procd_close_instance
|
|
}
|
|
|
|
reload_service() {
|
|
stop
|
|
sleep 1
|
|
start
|
|
}
|
|
|
|
detect_firewall_type() {
|
|
if command -v nft >/dev/null && [ -x /sbin/fw4 ]; then
|
|
echo "nft"
|
|
elif command -v iptables >/dev/null || command -v ip6tables >/dev/null; then
|
|
echo "iptables"
|
|
else
|
|
echo "unknown"
|
|
fi
|
|
}
|
|
clear_rule(){
|
|
|
|
|
|
local fw_type=$(detect_firewall_type)
|
|
|
|
if [ "$fw_type" = "nft" ]; then
|
|
|
|
local drop_handles=$(nft -a list ruleset 2>/dev/null | grep -E "watchdog Drop rule" | awk '{print $NF}')
|
|
for handle in $drop_handles; do
|
|
nft delete rule inet fw4 input handle $handle 2>/dev/null
|
|
done
|
|
nft delete rule inet fw4 watchdog_input ip saddr @watchdog_blacklist 2>/dev/null
|
|
nft delete rule inet fw4 watchdog_input ip6 saddr @watchdog_blacklistv6 2>/dev/null
|
|
nft delete rule inet fw4 watchdog_input ether saddr @watchdog_blacklistbridge 2>/dev/null
|
|
nft delete chain inet fw4 watchdog_input 2>/dev/null
|
|
nft delete set inet fw4 watchdog_blacklist 2>/dev/null
|
|
nft delete set inet fw4 watchdog_blacklistv6 2>/dev/null
|
|
nft delete set inet fw4 watchdog_blacklistbridge 2>/dev/null
|
|
elif [ "$fw_type" = "iptables" ]; then
|
|
iptables -D INPUT -m set --match-set watchdog_blacklist src -j DROP 2>/dev/null
|
|
iptables -D INPUT -m set --match-set watchdog_range src -j DROP 2>/dev/null
|
|
ip6tables -D INPUT -m set --match-set watchdog_blacklistv6 src -j DROP 2>/dev/null
|
|
ipset destroy watchdog_blacklist 2>/dev/null
|
|
ipset destroy watchdog_blacklistv6 2>/dev/null
|
|
ipset destroy watchdog_range 2>/dev/null
|
|
fi
|
|
|
|
}
|
|
stop_service() {
|
|
[ -f ${dir}child_pid ] && parent_pid=$(cat ${dir}child_pid)
|
|
clear_rule
|
|
[ -n "$parent_pid" ] && {
|
|
child_pids=$(pgrep -P $parent_pid)
|
|
echo "Terminating child processes of $config..."
|
|
for child_pid in $child_pids; do
|
|
kill $child_pid
|
|
done
|
|
}
|
|
local pids=$(ps | grep "$config" | grep -v grep | grep -v $$ | awk '{print $1}')
|
|
[ -n "$pids" ] && echo "$pids" | xargs kill 2>/dev/null
|
|
echo "Terminating $config process..."
|
|
}
|
|
|
|
service_triggers() {
|
|
procd_add_reload_trigger $config
|
|
}
|