小破站批量屏蔽IP地址实践--容器版

设置iptables屏蔽IP,容器内不生效解决办法

不生效原因分析:

依据容器原理,容器和宿主机共享linux 内核, netfilter是内核的一部分
报文在经过 PREROUTING 环节,就已经被容器设置的链的规则接管,因此我们宿主机设置的规则,容器内不生效
容器的请求没有经过宿主机的 INPUT 链,所以在宿主机的 INPUT 链上做规则是没法限制容器的网络访问的。需要在 DOCKER 链动手脚

运行容器的环境下屏蔽IP地址

原理:把要屏蔽的IP的报文,全部转发到 127.222.222.222

127.222.222.222 是自定义的地址

命令是在宿主机上执行,不是容器里


# 存在先删除
number=$(iptables -t nat   -L PREROUTING -n --line-number | grep 'match-set blocklist-ip src' | wc -l )
for ((i = 1; i <= $number; i = i + 1)); do
  iptables -t nat -D PREROUTING  -m set --match-set blocklist-ip src  -j DNAT --to-destination 127.222.222.222
done

# 存在先删除
number=$(iptables -t filter   -L  INPUT -n --line-number | grep '127.222.222.222' | wc -l )
for ((i = 1; i <= $number; i = i + 1)); do
  iptables -t filter  -D INPUT  -d 127.222.222.222  -j DROP
done

# 3 句话实现运行容器的环境下主机屏蔽IP地址

iptables -t nat -I PREROUTING 1  -m set --match-set blocklist-ip src  -j DNAT --to-destination 127.222.222.222

iptables -t filter -I  INPUT 1 -d 127.222.222.222  -j DROP

ipset create blocklist-ip hash:net

# 下面到了添加屏蔽的IP地址环节
 
ipset add blocklist-ip 34.100.239.202
ipset add blocklist-ip 51.75.123.107
 
# 查看 blocklist-ip 集合的内容
ipset list blocklist-ip

参考文档

  1. 小破站批量屏蔽IP地址实践
  2. iptables四表五链 iptables详解(1):iptables概念
posted @ 2022-11-07 19:12  jingjingxyk  阅读(190)  评论(0编辑  收藏  举报