前言
在腾讯云购买了一个云服务器,默认是关闭防火墙状态,在服务器上面配置了很多Docker服务,服已经正常运行了快有一个月了,最近想着开启Linux本身的防火墙
firewalld
在觉得开启防火墙只需要开启对应的端口的时候这时候故障发生了。docker部署的所有服务都无法访问。
警告:本文档是找了一个内网服务器进行测试,只需开放Nginx端口以及相对应的端口。如果是腾讯云,阿里云服务器有公网IP的公网IP将无法访问,需要做公网转发配置。
操作
检查防火墙状态
root@localhost ~]# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
开启防火墙
systemctl start firewalld.service
防火墙状态
[root@localhost ~]# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: active (running) since 四 2023-07-20 14:47:14 CST; 4s ago
Docs: man:firewalld(1)
Main PID: 551008 (firewalld)
Tasks: 2
Memory: 25.4M
CGroup: /system.slice/firewalld.service
└─551008 /usr/bin/python2 -Es /usr/sbin/firewalld --nofork --nopid
7月 20 14:47:13 localhost.localdomain systemd[1]: Starting firewalld - dynamic firewall daemon...
7月 20 14:47:14 localhost.localdomain systemd[1]: Started firewalld - dynamic firewall daemon.
7月 20 14:47:14 localhost.localdomain firewalld[551008]: WARNING: AllowZoneDrifting is enabled. This is considered an insecure configuratio...it now.
Hint: Some lines were ellipsized, use -l to show in full.
Docker服务状态
状态看起来都是正常的
web页面状态
web页面已经处于无法打开状态,目前我还没有开放端口
检查防火墙端口
ports
没有开放任何端口根据上面信息我只需要开启 80 10051 000 3000 161-162这几个端口
80 Nginx代理
10051 是Agent代理端口用来监测ZBX服务的
9000 是 portainer 用开管理docker的
3000是General 是用来自定义监控图表,需要web访问
162 162 是用来监听 SNMP 协议的
[root@localhost ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens192 ens224
sources:
services: dhcpv6-client ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
检查所有区域
默认区域所在
public
[root@localhost ~]# firewall-cmd --get-active-zones
public
interfaces: ens192 ens224
获取活动区域以及接口
这个命令完整的显示了 docker 所在区域
public
以及网络接口
firewall-cmd --get-active-zones
# [root@localhost ~]# firewall-cmd --get-active-zones
# docker
# interfaces: br-3cfdadae6126 docker0
# public
# interfaces: ens192 ens224
放行端口
由于都是通过Nginx转发 我只需要开启
80
端口开启端口后一定要输入重新载入命令
firewall-cmd --reload
刷新防火墙信息
firewall-cmd --zone=public --add-port=80/tcp --permanent
# [root@localhost ~]# firewall-cmd --zone=public --add-port=80/tcp --permanent
#显示这个状态说明成功
# success
firewall-cmd --reload
端口状态
[root@localhost ~]# firewall-cmd --zone=public --add-port=80/tcp --permanent
success
firewall-cmd --reload
# [root@localhost ~]# firewall-cmd --reload
# success
# 再次检查端口开放情况,目前ports 已经有80/tcp了
[root@localhost ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens192 ens224
sources:
services: dhcpv6-client ssh
ports: 80/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
web页面状态
还是无法访问,目前我没有开启服务器本身的
10051
agent 端口经过测试还是没有反应,这次要尝试重启docker 服务,修改本机网络环境要重启docker。
重启docker服务
sudo systemctl restart docker
再次检查端口情况
ports: 80/tcp 10051/tcp 3000/tcp 9000/tcp 161-162/tcp
[root@localhost ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens192 ens224
sources:
services: dhcpv6-client ssh
ports: 80/tcp 10051/tcp 3000/tcp 9000/tcp 161-162/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
重启docker后业务恢复了