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