小破站批量屏蔽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