lil*_*ily 7 networking linux centos firewalld centos7
我有一个使用 CentOS 7 的远程 vps,相关firewalld信息如下,firewalld正在积极运行。
[root@doer mydir]# firewall-cmd --get-zone-of-interface=eth0
no zone
[root@ doer mydir]# firewall-cmd --list-ports
You're performing an operation over default zone ('public'),
but your connections/interfaces are in zone 'home' (see --get-active-zones)
You most likely need to use --zone=home option.
3306/tcp
Run Code Online (Sandbox Code Playgroud)
我运行一个带有 Spring Boot 程序的 Docker 容器,该程序监听端口 8080,该端口映射到主机的 9182,9182 不在开放端口列表中,但我仍然可以通过http://HOST_MACHINE_IP:9182访问 Web 服务器, 怎么了?
我添加eth0到公共区域
firewall-cmd --permanent --zone=home --add-interface=eth0
Run Code Online (Sandbox Code Playgroud)
现在
[root@ doer mydir]# firewall-cmd --get-zone-of-interface=eth0
public
[root@ doer mydir]# firewall-cmd --list-ports
3306/tcp
Run Code Online (Sandbox Code Playgroud)
我仍然可以通过http://HOST_MACHINE_IP:9182访问网络服务器。
# firewall-cmd --list-all-zones
block
target: %%REJECT%%
icmp-block-inversion: no
interfaces:
sources:
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
dmz
target: default
icmp-block-inversion: no
interfaces:
sources:
services: ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
drop
target: DROP
icmp-block-inversion: no
interfaces:
sources:
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
external
target: default
icmp-block-inversion: no
interfaces:
sources:
services: ssh
ports:
protocols:
masquerade: yes
forward-ports:
source-ports:
icmp-blocks:
rich rules:
home (active)
target: default
icmp-block-inversion: no
interfaces: eth1
sources:
services: dhcpv6-client mdns samba-client ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
internal
target: default
icmp-block-inversion: no
interfaces:
sources:
services: dhcpv6-client mdns samba-client ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Run Code Online (Sandbox Code Playgroud)
当您发布端口时,Docker 会直接将自己的防火墙规则安装到主机服务器的内核中,而无需使用抽象层用户友好的防火墙管理工具,例如firewalld 脚注 1和相关的firewall-cmd(或类似的ufw或 Shorewall 等)提供的工具。
由于 docker 不使用它们, 当您仅使用这些工具检查防火墙时,docker 创建的任何规则通常不会显示。
\n要查看 Docker(或创建自己的规则的任何其他应用程序)实际在防火墙中创建的规则,您将需要使用更低级别iptables和/或iptables-save命令来显示内核中的实际实时配置。
尝试
\n [sudo] iptables -L -v -n --line-numbers \nRun Code Online (Sandbox Code Playgroud)\n和
\n[sudo] iptables -L -v -n -t nat --line-numbers\nRun Code Online (Sandbox Code Playgroud)\n或使用
\n[sudo] iptables-save\nRun Code Online (Sandbox Code Playgroud)\n通常,Docker 创建的防火墙规则会有先例,因为它们被插入在用户友好的防火墙管理工具管理的规则之前。
\n\n\n\n\n我运行一个带有 springboot 程序的 docker,监听端口 8080,该端口映射到主机的 9182,9182 不在开放端口列表中,但我仍然可以通过 访问 Web 服务器,有什么
\nhttp://<HOST_MACHINE_IP>:9182问题吗?
没有什么是错的。
\n这正是您在创建已发布端口时指示 Docker 执行的操作:
\n\n\n已发布的端口
\n
\n默认情况下,当您创建容器时,它不会向外界发布任何端口。要使端口可用于 Docker 外部的服务或未连接到容器\xe2\x80\x99s 网络的 Docker 容器,请使用 --publish 或 -p 标志。这将创建一条防火墙规则,将容器端口映射到 Docker 主机上的端口。
\n\nhttps://docs.docker.com/config/containers/container-networking/
\n
要在 Docker 发布的端口上添加更多访问控制,需要在DOCKER-USERiptables 链中创建自己的规则,如下所示: https: //docs.docker.com/network/iptables/
脚注 1自 docker 20.10.0 起,docker 应根据此处的文档与 firewalld 集成:https ://docs.docker.com/network/iptables/#integration-with-firewalld
\n| 归档时间: |
|
| 查看次数: |
7615 次 |
| 最近记录: |