我在我的服务器上安装了几个docker容器。所有容器都在同一个docker网络中,基本结构是每个容器都在nginxproxymanager反向代理容器后面。
到目前为止一切顺利,一切正常。所以我试图通过添加 fail2ban 来强化结构,但我没能让它工作。我努力去理解更好的 iptables,但我无法让它工作。重新启动 docker 并检查 iptables 文件 (/etc/iptables/iptables.rules) 后,我有这个
# Generated by iptables-save v1.8.7 on Fri Oct 29 09:48:00 2021
*nat
:PREROUTING ACCEPT [82:13454]
:INPUT ACCEPT [71:12758]
:OUTPUT ACCEPT [72:4846]
:POSTROUTING ACCEPT [858:45979]
:DOCKER - [0:0]
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
-A POSTROUTING -s 172.19.0.0/16 ! -o br-0aee38841ef3 -j MASQUERADE
-A POSTROUTING -s 172.19.0.2/32 -d 172.19.0.2/32 -p tcp -m tcp --dport 3000 -j MASQUERADE
-A DOCKER -i docker0 -j RETURN
-A DOCKER -i br-0aee38841ef3 -j RETURN
-A DOCKER ! -i br-0aee38841ef3 -p tcp -m tcp --dport 3000 -j DNAT --to-destination 172.19.0.2:3000
COMMIT
# Completed on Fri Oct 29 09:48:00 2021
# Generated by iptables-save v1.8.7 on Fri Oct 29 09:48:00 2021
*filter
:INPUT ACCEPT [98:7750]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [77:11194]
:DOCKER - [0:0]
:DOCKER-ISOLATION-STAGE-1 - [0:0]
:DOCKER-ISOLATION-STAGE-2 - [0:0]
:DOCKER-USER - [0:0]
-A INPUT -s 37.XXX.XXX.XX/32 -j DROP
-A INPUT -j DOCKER-USER
-A FORWARD -j DOCKER-USER
-A FORWARD -j DOCKER-ISOLATION-STAGE-1
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -o docker0 -j DOCKER
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT
-A FORWARD -i docker0 -o docker0 -j ACCEPT
-A FORWARD -o br-0aee38841ef3 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -o br-0aee38841ef3 -j DOCKER
-A FORWARD -i br-0aee38841ef3 ! -o br-0aee38841ef3 -j ACCEPT
-A FORWARD -i br-0aee38841ef3 -o br-0aee38841ef3 -j ACCEPT
-A DOCKER -d 172.19.0.2/32 ! -i br-0aee38841ef3 -o br-0aee38841ef3 -p tcp -m tcp --dport 3000 -j ACCEPT
-A DOCKER-ISOLATION-STAGE-1 -i docker0 ! -o docker0 -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -i br-0aee38841ef3 ! -o br-0aee38841ef3 -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -j RETURN
-A DOCKER-ISOLATION-STAGE-2 -o docker0 -j DROP
-A DOCKER-ISOLATION-STAGE-2 -o br-0aee38841ef3 -j DROP
-A DOCKER-ISOLATION-STAGE-2 -j RETURN
-A DOCKER-USER -s 37.XXX.XXX.XX/32 -j DROP
COMMIT
# Completed on Fri Oct 29 09:48:00 2021
我刚刚删除了其他容器规则,因为它们与我留下的规则(dport 3000)的概念相同。
br-0aee38841ef3
是我创建容器所在docker网络时创建的桥。
如您所见,我尝试在 INPUT 和 DOCKER-USER 链中为我的公共 IP 地址 (37.XXX.XXX.XX) 添加 DROP 规则,但我仍然可以浏览我的容器(我有一个自定义域,其中 A 记录指向我的 IP),因此该规则不起作用。当然,iptables 已启动并重新加载新规则,那么我缺少什么才能禁止 IP?
答案1
您可能需要:
iptables -A DOCKER-USER -j RETURN
我认为,在没有做出决定的情况下,控制权已经从链条的末端脱落。