Docker 绕过了 firewalld 的问题

本文详细介绍了Docker如何绕过firewalld开启端口,以及由此引发的端口访问问题。在firewalld运行时,Docker通过直接修改iptables规则实现端口映射,但firewalld重启会覆盖这些规则,导致容器服务无法通过外网访问。解决办法是让Docker不修改iptables,通过设置"iptables": false使其受firewalld管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Docker 绕过了 firewalld 的问题

前言

我们的 firewalld 上没有开放该端口,但是在使用 Docker 的端口映射后我们就能够通过外网访问到该端口。

原因

默认情况下当Docker启动容器映射端口时,会直接在iptables添加规则开启添加端口。而 firewalld 实际上也是在iptables写入规则。因此 firewallddocker属于是同级的应用,但是firewalld不会去检测 docker 写入的规则,就会导致 docker 可以开启firewalld没有允许的端口:

# 首先关闭 docker 和防火墙
systemctl stop docker
systemctl stop firewalld

# 查看 iptables
iptables --list

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

# 打开 docker
systemctl start docker
iptables --list
# 我们会发现在 iptables 里增加了许多 docker 的规则

# 我们启动一个容器并开启端口映射
docker run -dit -p 80:80 nginx
iptables --list

# 我们发现在 iptables 里增加了一条规则
# 它将 80(http) 端口的流量转发到了 172.17.0.2(我们开启的容器的地址)
...
Chain DOCKER (1 references)
target     prot opt source               destination
ACCEPT     tcp  --  anywhere             172.17.0.2           tcp dpt:http
...

通过上面的分析我们就知道了 docker 是通过在 iptables 中添加规则实现的端口映射。

那这个时候我们再开启防火墙,看看防火墙是如何修改的 iptables:

# 开启防火墙观察 iptables 的变化
systemctl start firewalld
iptables --list

...
Chain IN_public_allow (1 references)
target     prot opt source               destination
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh ctstate NEW,UNTRACKED
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh ctstate NEW,UNTRACKED
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:postgres ctstate NEW,UNTRACKED
...

开启防火墙后我们果然发现了我们通过 firewalld开启的端口规则。这下子我们终于弄懂了 docker 和 firewalld 之间的关系。

等等!!!

我们之前看到的 docker 的规则呢?

开启防火墙后我们发现在上面添加的 docker 的 iptables 的规则已经不见了,这个时候从外网访问 80 端口也被拒绝了!这又是怎么一回事呢?

原来 firewalld在开启时会自动刷新覆盖掉原来的 iptables 规则,这就导致了 docker 的规则被丢失。

因此 firewalld重启后需要再重启 docker的服务才能使 docker 正常启动。

使 docker 在防火墙规则下工作

由于 docker 这种脱离防火墙控制的行为具有一定危险性,并且为运维带来一定难度,因此我们需要让 docker 接受防火墙的管理。

既然 docker 是修改的 iptables 脱离的防火墙控制,那我们让他不修改 iptables 就可以解决问题了:

# 添加规则
vim /etc/docker/daemon.json

{
...
"experimental" : true,
"iptables": false
}

# 重启 docker
systemctl daemon-reload
systemctl restart docker

# 启动一个容器检验
docker run -d -p 80:80 nginx
iptables --list
# 发现 docker 没有添加规则
### 回答1: Ntrip 1.0通信协议是一种用于实时差分全球定位系统(GNSS)数据传输的协议。Ntrip是Networked Transport of RTCM via Internet Protocol的缩写,意为通过互联网传输实时差分信号的网络传输协议。 要下载Ntrip 1.0通信协议,可以通过以下步骤进行: 1. 在互联网浏览器中搜索Ntrip 1.0通信协议下载。 2. 找到适用的下载链接,并单击下载按钮。 3. 等待下载完成。 4. 下载完成后,使用解压缩软件(如WinRAR或7-Zip)解压缩下载的文件。确保解压缩的文件夹位置方便访问。 5. 打开解压缩后的文件夹,其中应该包含Ntrip 1.0通信协议的文件和文档。 6. 如果有文档,请阅读文档以了解如何使用和配置Ntrip 1.0通信协议。 7. 在需要使用Ntrip 1.0通信协议的应用程序或设备中将其配置为接收实时差分数据的传输协议。 需要注意的是,Ntrip 1.0通信协议是为特定目的而设计的,主要用于实时差分GNSS数据的传输。在下载和使用协议之前,确保了解相关的技术要求和使用方法。此外,在使用Ntrip 1.0通信协议传输差分数据时,还需要考虑网络连接的稳定性和带宽要求,以确保数据传输的准确性和实时性。 ### 回答2: Ntrip(Networked Transport of RTCM via Internet Protocol)是一种用于实时传输差分GPS数据的通信协议。Ntrip协议的版本1.0用于下载Ntrip数据流,以便进行GPS差分校准。 要进行Ntrip 1.0通讯协议的下载,首先需要确保计算机已经连接到互联网,并且有相应的Ntrip客户端软件。接下来,可以按照以下步骤进行下载: 1. 打开Ntrip客户端软件,并进入配置设置。 2. 在配置设置中,输入Ntrip服务器的IP地址和端口号。这些信息通常由提供差分校准数据的服务提供商提供。 3. 输入用户名和密码,以进行身份验证。这些登录凭据也由服务提供商提供。 4. 确认所需的差分数据流的类型。这可以是RTCM格式或其他格式,具体取决于差分数据的提供商。 5. 点击“连接”按钮,以建立与Ntrip服务器的连接。 6. 一旦连接建立成功,Ntrip客户端将开始接收差分数据流。 7. 下载过程可能需要一段时间,具体取决于数据流的大小和网络连接的速度。 8. 下载完成后,可以将下载的数据应用于GPS设备以进行差分校准。 需要注意的是,使用Ntrip 1.0通讯协议进行下载时,应确保网络连接稳定,以避免下载过程中的传输中断或数据丢失。 希望以上对于Ntrip 1.0通讯协议下载有所帮助。 ### 回答3: NTRIP 1.0通讯协议是一种用于实时数据传输的协议,主要用于全球定位系统(GPS)和地理信息系统(GIS)应用中的数据传输和接收。它允许用户从参考站获取高精度的定位数据,以提高测量和定位的准确性。 要下载NTRIP 1.0通讯协议,可以按照以下步骤进行: 1. 首先,进入NTRIP协议的官方网站,例如www.ntrip.org。 2. 在官方网站上,寻找关于NTRIP协议的下载链接或资源页面。 3. 点击下载链接,将NTRIP 1.0通讯协议的安装文件下载到您的计算机中。通常,该文件为一个压缩文件(例如.zip或.gz),您需要解压缩文件以获取安装程序。 4. 解压缩文件后,在您的计算机上找到安装程序。双击运行安装程序,并按照提示完成NTRIP 1.0通讯协议的安装过程。 5. 安装完成后,您可以启动NTRIP 1.0通讯协议的应用程序,并根据您的需要进行设置和配置。 请注意,下载和安装NTRIP 1.0通讯协议可能需要一定的计算机技术知识和技能。如果您不确定如何进行下载和安装,建议咨询相关领域的专家或技术支持人员,以获取更详细的指导和帮助。与此同时,还可以通过查阅相关的用户手册、教程和在线资源来了解NTRIP 1.0通讯协议的具体用法和操作步骤。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值