只允许国区ip访问服务器

2023-12-06  本文已影响0人  吃豆腐不吐豆腐皮

思路

代码在下一段

  1. 使用 iptablesipset 来解决问题,本人使用 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 里。

代码

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
apt install ipset -y 
ipset create china hash:net hashsize 10000 maxelem 100000

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

bash addchina.ipset.sh
# 查看全部set
ipset list -t
# 查看指定set
ipset list china -t
# 需要看set里的具体ip,就把 -t 给去了
iptables -I INPUT -m set ! --match-set china src -j DROP

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

上一篇 下一篇

猜你喜欢

热点阅读