diff --git a/防火墙.MD b/防火墙.MD index 1c29fca..d5f59ee 100644 --- a/防火墙.MD +++ b/防火墙.MD @@ -289,4 +289,96 @@ nft -f /etc/nftables.conf --check systemctl restart nftables ``` -执行完后,`nft list ruleset` 可以看到完整规则。 \ No newline at end of file +执行完后,`nft list ruleset` 可以看到完整规则。 + +## 配置开机自动填充网段 + +Debian12 `if‑pre‑up.d` 在部分云 vps 网络时序会有问题(网络还没通就运行脚本),改用 **systemd service** 更稳定。 + +创建 systemd 服务文件: + +``` +cat > /etc/systemd/system/update-cn-ipset.service <<'EOF' +[Unit] +Description=Restart nftables && Load CN CIDR into nftables set +After=network-online.target +Wants=network-online.target + +[Service] +Type=oneshot +ExecStart=/usr/bin/systemctl restart nftables +ExecStart=/usr/local/bin/update-cn-set.sh + +[Install] +WantedBy=multi-user.target +EOF +``` + +启用开机自启: + +``` +systemctl daemon-reload +systemctl enable update-cn-ipset.service +``` + +> +> 测试运行这个 systemd 单元: + +``` +systemctl start update-cn-ipset.service +systemctl status update-cn-ipset.service +``` + +## 4、测试效果 + +1. 规则逻辑:**来自中国大陆 IP 访问本机 40000‑50000 端口 (TCP/UDP) 直接丢弃;其他 IP 不受影响;本机对外访问不受限制**。 +2. SSH 端口只要不在 40000‑50000 区间不会被封。 +3. 云服务器:**控制台安全组不能放行 40000‑50000,否则主机防火墙规则被绕过**。 + +## 5、排错 + +- 如果运行脚本卡住:github raw 访问失败。解决方案:预先下载`chnroutes.txt`上传服务器本地,修改脚本把 curl 那一行替换为 `cp /tmp/chnroutes.txt "$TMP"`。 +- 查看 nftables 完整规则依旧是你截图那样,集合内有大量网段 = 整套功能已经就绪。 + +## 快速回退命令 + +``` +#清空所有nftables规则 +nft flush ruleset +systemctl stop nftables +systemctl disable nftables +systemctl disable update-cn-ipset.service +``` + +--- + +执行完脚本后把 `nft list set ip filter cn_ip` 的结果看一眼,确认有网段就全部完成。 + +### 补充 crontab 定期刷新网段(可选) + +每周凌晨 2 点更新 CN 网段: + +``` +crontab -e +#写入 +0 2 * * 0 /usr/local/bin/update-cn-set.sh +``` + +> +> 提醒:raw.githubusercontent 访问不稳定,生产环境建议本地缓存一份`chnroutes.txt`做降级备用。 + +现在执行完后,`nft list set ip filter cn_ip`确认集合内有大量 CN 网段,整套规则就完整可用。 + +~~~ +ipset destroy cn_ip +nft flush ruleset +/usr/local/bin/update-cn-set.sh +nft -f /etc/nftables.conf --check +systemctl start nftables +systemctl stop nftables +systemctl status nftables +systemctl enable nftables +systemctl disable nftables +systemctl restart nftables +nft list set ip filter cn_ip +nft list ruleset \ No newline at end of file