Files
lou b55c0cb7bb 开源化: MIT LICENSE + 详细 README + deploy/watchdog + 全仓脱敏(云服IP/学校域/凭据 → RFC5737 占位)
- LICENSE: MIT © 2026 edgevoid
- README: 三层架构/逐字段伪装对照/部署/验证/安全边界/看门狗自启
- 脱敏(filter-repo 全历史): 8.136.202.225→203.0.113.10, .zjipc.cn→.internal.example, 学校DNS→192.0.2.53
- hook.sh 更新为安全形态(FORWARD-only 绑 WAN, 去掉 OUTPUT 全挂断网形态)
- router_deploy.sh: SSHPASS 改环境变量注入(明文密码清除)
- watchdog.sh 纳入 deploy/(接口变量化)
- 内部语境泛化(认证网关/学校DNS/寝室部署备注)
2026-09-09 18:14:10 +08:00

46 lines
2.2 KiB
Bash
Executable File

#!/bin/sh
# L2/L1 hook - 网关规则(OpenWrt / 任意 iptables 网关, 部署时按实际接口调整)
# 安全形态(断网事故复盘定稿):
# - L1 伪装只挂 FORWARD 且 -o 绑 WAN 口; 网关自身 OUTPUT 零规则
# - NFQUEUE 必带 --queue-bypass(worker 不在 = 放行, 绝不悬挂)
# - HTTP 劫持只挂 PREROUTING 入站 + 内网目标放行(认证/内网站点绝不能走通道)
#
# 用法: sh hook.sh add | del
# 部署前先确认: ① 接口名(LAN_IF/WAN_IF) ② 内网放行段 ③ 本地代理已起
LAN_IF=${LAN_IF:-br-lan}
WAN_IF=${WAN_IF:-eth0}
HTTP_PORT=8080
QUEUE_NUM=100
# 内网/认证目标段(按部署环境调整; 这些目标的明文流量直接放行, 绝不进套壳通道)
INTERNAL_NETS="10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 127.0.0.0/8"
add_rules() {
for net in $INTERNAL_NETS; do
iptables -t nat -C PREROUTING -i "$LAN_IF" -p tcp --dport 80 -d "$net" -j ACCEPT 2>/dev/null ||
iptables -t nat -A PREROUTING -i "$LAN_IF" -p tcp --dport 80 -d "$net" -j ACCEPT
done
iptables -t nat -C PREROUTING -i "$LAN_IF" -p tcp --dport 80 -j REDIRECT --to-ports "$HTTP_PORT" 2>/dev/null ||
iptables -t nat -A PREROUTING -i "$LAN_IF" -p tcp --dport 80 -j REDIRECT --to-ports "$HTTP_PORT"
echo "[hook] HTTP 80 -> $HTTP_PORT (仅 $LAN_IF 入站, 内网段放行)"
# L1 伪装器: FORWARD 出 WAN 的 SYN 送 NFQUEUE(--queue-bypass: worker 不在时放行)
iptables -t mangle -C FORWARD -o "$WAN_IF" -p tcp --syn -j NFQUEUE --queue-num "$QUEUE_NUM" --queue-bypass 2>/dev/null ||
iptables -t mangle -A FORWARD -o "$WAN_IF" -p tcp --syn -j NFQUEUE --queue-num "$QUEUE_NUM" --queue-bypass
echo "[hook] L1 NFQUEUE: FORWARD -o $WAN_IF SYN -> queue $QUEUE_NUM (bypass 兜底)"
}
del_rules() {
iptables -t mangle -D FORWARD -o "$WAN_IF" -p tcp --syn -j NFQUEUE --queue-num "$QUEUE_NUM" --queue-bypass 2>/dev/null
iptables -t nat -D PREROUTING -i "$LAN_IF" -p tcp --dport 80 -j REDIRECT --to-ports "$HTTP_PORT" 2>/dev/null
for net in $INTERNAL_NETS; do
iptables -t nat -D PREROUTING -i "$LAN_IF" -p tcp --dport 80 -d "$net" -j ACCEPT 2>/dev/null
done
echo "[hook] 规则已清"
}
case "$1" in
add) add_rules ;;
del) del_rules ;;
*) echo "usage: $0 add|del"; exit 1 ;;
esac