Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

中国 IP 入站白名单防火墙(Ubuntu 22.04)

这是一个可直接部署的轻量方案:用 Linux 内核的 nftables interval set 保存中国 IPv4/IPv6 网段, 不启动常驻用户态程序。只有每日更新时才会短暂运行 curl + Python,平时 CPU 为零、用户态内存为零。

GitHub 一键安装

在 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 密钥、端口最小化、及时更新、应用鉴权和云厂商安全组。

上游:

上游仓库说明这些列表由五个 RIR 数据生成、聚合并每日更新;它也明确区分了“正式委派国家”与 “实际运营地理位置”。

About

Ubuntu 22.04 轻量中国 IP 白名单防火墙,支持 IPv4/IPv6、自动更新、systemd 和中文管理菜单

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages