美文网首页
只允许国区ip访问服务器

只允许国区ip访问服务器

作者: 吃豆腐不吐豆腐皮 | 来源:发表于2023-12-06 19:58 被阅读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 里。

代码

  • 创建可执行命令的脚本 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 的一些简单指令请看这里

相关文章

网友评论

      本文标题:只允许国区ip访问服务器

      本文链接:https://www.haomeiwen.com/subject/bzdfgdtx.html