Administrator
发布于 2022-03-28 / 234 阅读 / 0 评论 / 0 点赞

centos7防火墙设置和docker防火墙失效问题

docker容器防火墙失效

实际操作中遇到过docker启动的容器暴露给外网的端口,即使没有被添加在firewall放行端口中,外网也能够访问到,这是因为docker 默认用的是iptable(用户态)客户端工具管理的docker的filter,如果systemctl start docker 在systemctl start firewalld 这样会把docker的规则破坏,主要是FORWARD规则破坏,比较省事的操作就是关闭docker的iptables。

修改vi /etc/docker/daemon.json

{
  "iptables":false
}

重启docker

systemctl restart docker

firewall防火墙配置

防火墙命令

service firewalld start #启动
systemctl start firewalld #启动

service firewalld stop  #停止
systemctl stop firewalld  #停止

service firewalld restart  #重启
systemctl restart firewalld  #重启

systemctl status firewall   #查看firewall服务状态
    
firewall-cmd --state       #查看firewall的状态 
    
firewall-cmd --list-all #查看防火墙规则(只显示/etc/firewalld/zones/public.xml中防火墙策略)
    
firewall-cmd --list-all-zones #查看所有的防火墙策略(即显示/etc/firewalld/zones/下的所有策略)
    
firewall-cmd --reload  #重新加载配置文件
    

防火墙策略修改

防火墙一般配置分为两种情况:

  • 指定端口开放给任意IP访问

  • 指定端口开放给指定IP访问

修改 /etc/firewalld/zones/public.xml

<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Public</short>
  <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
  <rule family="ipv4">
    <source address="192.168.x.x"/>    ##可以指定放通的IP
    <port protocol="tcp" port="10001-10020"/> ##可以开放端口地址范围"10001-10020",不单只限定一个端口
    <accept/>
  </rule>
  <rule family="ipv4">
    <source address="192.168.1.1/24"/>    ##可以指定放通同一网关下的IP
    <port protocol="tcp" port="8848"/> 
    <accept/>
  </rule>
  <rule family="ipv4">
    <source address="192.168.x.x"/>      ##指定放通的IP,指定端口和协议
    <port protocol="tcp" port="8888"/>
    <accept/>
  </rule>
  <rule family="ipv4">                        
    <port protocol="tcp" port="8080"/>  ##不指定IP,放通任意IP访问服务器的8080端口
    <accept/>
  </rule>
</zone>

修改完成重新加载配置文件:

firewall-cmd --reload

参考

《docker iptable firewall 关系使用等情况分析》https://blog.csdn.net/Michaelwubo/article/details/80997117?utm_source=blogxgwz8


评论