Centos 7 开启防火墙后docker 无法访问

前言 在腾讯云购买了一个云服务器,默认是关闭防火墙状态,在服务器上面配置了很多Docker服务,服已经正常运行了快有一个月了,最近想着开启Linux本身的防火墙firewalld 在觉得开启防火墙只需要开启对应的端口的时候这时候故障发生了。docker部署的所有服务都无法访问。 警告:本文档是找了一

前言

  • 在腾讯云购买了一个云服务器,默认是关闭防火墙状态,在服务器上面配置了很多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后业务恢复了

云服务器请看以下链接

LICENSED UNDER CC BY-NC-SA 4.0
评论
访问统计
总访问量: 👀| 访客数: 🚶‍♂️