物料准备:获得国家ip段,地址:http://www.ipdeny.com/ipblocks/

  1. 安装 ipset
  • Debian或ubuntu:
    apt-get -y install ipset
  • centos:
    yum -y install ipset
  1. 创建规则
#创建一个名为cnip的规则
ipset -N cnip hash:net
#下载国家IP段
wget -P . http://www.ipdeny.com/ipblocks/data/countries/cn.zone
#将IP段添加到cnip规则中
for i in $(cat /root/cn.zone ); do ipset -A cnip $i; done
  1. 开始屏蔽

iptables -I INPUT -p tcp -m set --match-set cnip src -j DROP

  1. 解除屏蔽
    #-D为删除规则 iptables -D INPUT -p tcp -m set --match-set cnip src -j DROP

2023.02.17更新

将ip段加入白名单

  1. 清空之前规则
#防止设置不生效,建议清空下之前的防火墙规则
iptables -P INPUT ACCEPT
iptables -F
#放行IP段(还是以中国ip为例)
iptables -A INPUT -p tcp -m set --match-set cnip src -j ACCEPT
#关掉所有端口(谨慎操作)
iptables -P INPUT DROP
#关闭指定端口,比如80/443
iptables -A INPUT -p tcp --dport 80 -j DROP
iptables -A INPUT -p tcp --dport 443 -j DROP
  1. 清除规则
#将参数里的-A改成-D就是删除规则了,如
iptables -D INPUT -p tcp -m set --match-set cnip src -j ACCEPT
iptables -D INPUT -p tcp --dport 443 -j DROP

参考文章: