注:docker和firewall底层都会操作iptable,但是docker操作的iptable不会在firewall上留记录,firewalld每次重启也会重置iptables端口规则,所以会导致下面两个问题:
1、后启动的docker服务会在firewalld上打个洞,firewalld没有允许的端口也会开放出去
2、后启动的firewalld服务,会清空iptables规则,重置规则会影响docker容器的启动,解决办法就是修改docker配置,不操作iptables,查看第二步的操作
在防火墙开启的状态下安装ZCBUS
systemctl start firewalld
systemctl enable firewalld

一、修改软件安装包中server_full/commom/.zcbus.common文件

   ###tj
   note "TJ"
   info "OK : ${ok_num} ERROR : ${error_num} WARNING : ${warn_num}"
   if [[ ${error_num} -gt 1 ]] || [[ ${warn_num} -gt 0 ]];then           ### 将原本的${error_num} -gt 0 改为 ${error_num} -gt 1 允许有一个错误,保存后再使用zcmgr.sh安装软件
      note "modify command"
      cat ${tmp_file_1}
      if [ ${tmp_file_1} ];then
###        sh ${tmp_file_1}
        cat ${tmp_file_1}     ### 将sh ${tmp_file_1} 注释掉,在下面改个命令即可(我改的是cat ${tmp_file_1})
      fi
      rm -rf ${tmp_file_1}
      let cktimes=cktimes+1

二、修改docker配置,不操作iptables

# 修改配置
vim /etc/docker/daemon.json

{
"iptables":false
}

保存并重启docker
systemctl restart docker

三、、配置端口白名单

firewall-cmd --zone=public --add-port=8890/tcp --permanent
## 开放8890端口(即所有机器都可以访问该端口)

firewall-cmd --zone=public --remove-port=8890/tcp --permanent
## 关闭8890端口 (除本机外所有机器都不可访问)

firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.37.1" port protocol="tcp" port="8890" accept" 
## 配置使IP为192.168.0.109能够访问本机的8890端口

firewall-cmd --reload
## 重新载入一下防火墙设置,使之生效

firewall-cmd --zone=public --list-rich-rules
## 查看白名单

firewall-cmd --zone=public --list-ports
## 查看开放的端口

注:修改完成后最好将firewalld重启一下

文档更新时间: 2023-06-01 22:40   作者:操李红