只允许国区ip访问服务器

思路

代码在下一段

  1. 使用 iptables 和 ipset 来解决问题,本人使用 ubuntu20.04,默认开启 ufw ,在下个 ipset 即可。
  2. 获取国区ip段。
  3. 生成一份添加 ip 段到 ipset 的脚本,并加入私有网络ip。
  4. 使用 ipset 生成存放国区 ip 段的 set ,并执行步骤3生成的脚本,将 ip 塞入 set 。
  5. 接下来就和 iptables 玩一下,把该匹配规则塞入 input 链里即可。
    小意外?
    针对步骤5,塞入 input 链有个前提,你的服务监听的网络接口是公网对应的网络接口,比如 eth0 ,如果你的服务是 docker ,那么请放到 forward 里。

代码

  • 创建可执行命令的脚本 addchina.ipset.sh。
echo "#!/bin/bash" > addchina.ipset.sh

# 将私有网络网段写入, -exist作用:如果存在该地址不提示
echo "ipset add -exist china 10.0.0.0/8" >> addchina.ipset.sh
echo "ipset add -exist china 172.16.0.0/12" >> addchina.ipset.sh
echo "ipset add -exist china 192.168.0.0/16" >> addchina.ipset.sh

# 下载国区ip段。这里的-#是进度条,美观点
curl -# -O http://www.ipdeny.com/ipblocks/data/countries/cn.zone

# 将国区ip段写入
for i in `cat cn.zone`; do echo "ipset -exist add -exist china $i" >>addchina.ipset.sh; done

# 给个执行权限
sudo chmod +x addchina.ipset.sh
  • 安装、配置 ipset。
apt install ipset -y 
  • 创建一个 set 存放网段
ipset create china hash:net hashsize 10000 maxelem 100000

如果不想存放 ip 段,想写 ip ,比如做个白名单:ipset create whitelist hash:ip。

  • 运行添加脚本。
bash addchina.ipset.sh
  • ipset 查看。
# 查看全部set
ipset list -t
# 查看指定set
ipset list china -t
# 需要看set里的具体ip,就把 -t 给去了
  • 把我们的规则插入到 input 链的第一条,只要不满足 ipset.china 的全部丢掉。
iptables -I INPUT -m set ! --match-set china src -j DROP

如果想了解下 iptables 的一些简单指令请看这里。

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容