使用 iptables + ipset 禁止代理服务器访问中国大陆 IP 地址
是的,请不要使用代理访问境内 IP 网站,这是一个基本实践问题,因为你使用任何代理访问境内网站,代理的 IP 都会被记录、上传、标记。
使用代理服务器访问中国大陆 IP 地址存在被检测的风险,因此有必要从服务端屏蔽所有的境内 IP 访问请求。本文暂不讨论这种检测方式是否被 GFW 使用。
由于并非所有代理工具都支持ACL或分流功能,配置防火墙成了最通用的选项。
安装 ipset
sudo apt update
sudo apt install ipset
创建 IP 集合
我们首先需要下载一个包含所有中国大陆 CIDR 的列表。
curl -o cn.txt https://www.ipdeny.com/ipblocks/data/aggregated/cn-aggregated.zone
创建一个 hash:net
类型的集合,可以让我们导入整个 IP 地址段而不是单个 IP 地址。
sudo ipset create cn hash:net
假设文件每行包括一个 IP 段,批量导入文件的每一行
for ip in $(cat cn.txt); do sudo ipset add cn $ip; done
配置 iptables
别忘了,代理服务器仍然需要将结果发给境内的客户端。所以我们必须允许服务器端口访问任何地址。
sudo iptables -A OUTPUT -p tcp --sport $YOUR_PROXY_SERVER_PORT -j ACCEPT
最后,禁止其它端口访问境内 IP, 我们就完成啦!
sudo iptables -A OUTPUT -p tcp -m set --match-set cn dst -j DROP