如何更正firewalld和docker/nginx的配置



我有一台CentOS 7服务器,它运行了600多天,直到最近重新启动,在此之后,传入的web请求收到HTTP523(Origin Is Unreachable(错误代码(通过Cloudflare,如果有区别的话?(,除非我停止firewalld服务。没有firewalld一切都很好,但我不想让它被禁用!

我尝试过停止dockerfirewalld,并按不同的顺序重新启动它们,但除非停止firewalld,否则会出现相同的523错误。

/var/log/firewalld包含一些可能有帮助的警告:

  • WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -D FORWARD -i br-8acb606a3b50 -o br-8acb606a3b50 -j DROP' failed: iptables: Bad rule (does a matching rule exist in that chain?).
  • WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -D FORWARD -i docker0 -o docker0 -j DROP' failed: iptables: Bad rule (does a matching rule exist in that chain?).
  • WARNING: AllowZoneDrifting is enabled. This is considered a n insecure configuration option. It will be removed in a future release. Please consider disabling it now.
  • WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -t nat -D PREROUTING -m addrtype --dst-type LOCAL -j DOCKER' failed: iptables v1.4.21: Couldn't load target 'DOCKER':No such file or directory
  • WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -t nat -D PREROUTING' failed: iptables: Bad rule (does a matching rule exist in that chain?).
  • WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -t nat -D OUTPUT' failed: iptables: Bad rule (does a matching rule exist in that chain?)
  • WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -t nat -F DOCKER' failed: iptables: No chain/target/match by that name.

我在这个地方发现了关于所需手动配置/命令的看似矛盾的建议:

  1. firewall-cmd --permanent --zone=trusted --add-interface=docker0
  2. 官方Docker文档上的firewall-cmd --zone=trusted --remove-interface=docker0 --permanent——这肯定与上述相反吗
  3. Docker github问题上的一堆手动firewall-cmd命令——当然所有这些都不是必需的吗
  4. 这个看起来很有前景——nmcliNetworkManagerfirewall-cmd --permanent --zone=trusted --change-interface=docker0

我不完全理解br-8acb606a3b50接口的来源,或者如果我使用像上面的4.这样的解决方案,我是否需要做任何事情来配置它以及docker0?在重启之前的几年里,一切都很顺利!

现在需要一些神奇的firewalld咒语吗(为什么?!(或者有没有办法让系统恢复到重新启动前的正确自动/默认配置?

$ docker -v
Docker version 20.10.5, build 55c4c88
$ firewall-cmd --version
0.6.3
$ firewall-cmd --get-zones
block dmz docker drop external home internal public trusted work

回顾聊天调查,这个特殊的问题与Docker和容器无关。问题出现在firewalld中,NGINX的规则没有作为主机上容器的代理运行。解决方案是为HTTP和HTTPS流量添加永久防火墙规则:

sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload

像这样的警告信息:

警告:COMMAND_FAILED:"/usr/sbin/iptables-w10-D FORWARD-i br-8acb606a3b50-o br-8acb 606a3b50-j DROP"失败:iptables:错误规则(该链中是否存在匹配规则?(

。。。在正常操作期间,当Docker尝试删除规则而不首先检查其存在性时,可能会出现这种情况。换句话说,即使出现这样的警告,容器也可以平稳运行。

我在Podman上遇到了一些类似的问题,为了解决这个问题,我不得不从Debian 9升级到Debian 10,因为firewalld处理iptables和nftables的方式。

最新更新