这是一个可直接部署的轻量方案:用 Linux 内核的 nftables interval set 保存中国 IPv4/IPv6 网段,
不启动常驻用户态程序。只有每日更新时才会短暂运行 curl + Python,平时 CPU 为零、用户态内存为零。
在 Ubuntu 22.04 上复制并执行这一整行:
curl -fsSL --proto '=https' --tlsv1.2 https://raw.githubusercontent.com/666speed/cn-firewall/main/install-cn-firewall.sh -o /tmp/install-cn-firewall.sh && sudo bash /tmp/install-cn-firewall.sh install默认会把当前 SSH 客户端 IP 固定加入救援白名单,避免远程安装时把自己锁在门外。如果你确定当前 IP 属于中国列表,并且不希望保留这条例外:
curl -fsSL --proto '=https' --tlsv1.2 https://raw.githubusercontent.com/666speed/cn-firewall/main/install-cn-firewall.sh -o /tmp/install-cn-firewall.sh && sudo bash /tmp/install-cn-firewall.sh install --strict安装结束后不要马上关闭当前 SSH,请另开一个终端验证能否登录。
- 仅过滤进入本机的流量,不影响服务器访问海外网站/API/软件源。
- Docker/Podman 等经过 DNAT 发布的容器端口同样受保护;普通容器出站和其他转发不受影响。
- 中国 IP 或自定义白名单只通过本层地理限制;UFW、Docker 或已有端口规则仍然有效。
- 海外 IP 发起的新连接及其后续数据包被丢弃。
- 默认允许回环、链路本地、RFC1918/CGNAT/ULA 私网;这些不是海外公网。严格环境可把
/etc/cn-firewall/config中的ALLOW_PRIVATE_NETWORKS改为no后执行sudo cn-firewall reload。 - 不逐包写日志,只保留内核计数器,避免攻击流量制造磁盘/CPU 放大。
安装后直接输入下面任一命令即可打开中文交互菜单:
fhq
FHQ菜单包含状态、更新、添加/删除/查看白名单、重新加载、启用、停用、日志、完整健康诊断和卸载。 原来的非交互命令全部保留,方便脚本和自动化调用。
sudo cn-firewall status
sudo cn-firewall doctor
sudo cn-firewall update
sudo cn-firewall reload
sudo cn-firewall allow add 1.2.3.4
sudo cn-firewall allow add 2001:db8:1234::/48
sudo cn-firewall allow remove 1.2.3.4
sudo cn-firewall allow list
sudo cn-firewall disable # 紧急停止,立即删规则并关闭开机恢复
sudo cn-firewall enable
sudo cn-firewall uninstall- systemd 在每次开机、网络启动前从本地缓存恢复规则,不依赖开机时能否访问 GitHub。
- 每日更新前会检查内核表;若被其他工具意外清空,会先用本地快照恢复,再尝试联网更新。
- systemd timer 每天更新,并在关机错过定时任务后补跑。
- 下载强制 HTTPS,带超时和重试;同时校验 UTF-8、每一条 CIDR、地址族、网段数量和单次变化幅度。
- 禁止上游列表出现
/0;异常、空白、HTML 错误页或数量剧变都会被拒绝。 nft --check预检后,在单个 nftables 内核事务中整体替换;失败时旧规则不变。- IPv4 与 IPv6 同时验证成功才更新,不会出现只更新一半。
自动更新日志:
journalctl -u cn-firewall-update.service --since '7 days ago'
systemctl list-timers cn-firewall-update.timer完整自检:
sudo cn-firewall doctor国家 IP 表不是 GPS。它依据互联网注册/分配数据:VPN、代理、CDN、Anycast、运营商调度和网段转让都会 造成现实位置与注册国家不同。因此任何纯 IP 方案都无法做到 100% 地理精准。这个防火墙适合减少海外公网 暴露面,但不能替代 SSH 密钥、端口最小化、及时更新、应用鉴权和云厂商安全组。
上游:
- IPv4:https://raw.githubusercontent.com/ipverse/country-ip-blocks/master/country/cn/ipv4-aggregated.txt
- IPv6:https://raw.githubusercontent.com/ipverse/country-ip-blocks/master/country/cn/ipv6-aggregated.txt
上游仓库说明这些列表由五个 RIR 数据生成、聚合并每日更新;它也明确区分了“正式委派国家”与 “实际运营地理位置”。