【docker默认防火墙行为调整】
docker默认防火墙行为调整
docker默认会给iptables中添加映射,这部分映射防火墙管不了。
查看方式:
iptables -t nat -L DOCKER -n
# 会显示docker增加的映射
需要先关了docker操作iptables控制。
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<EOF
{"iptables": false, # 这句禁用了操作iptables"log-driver": "json-file","log-opts": {"max-size": "10m","max-file": "3"}
}
EOF
sudo systemctl restart docker
之后docker容器内部要访问宿主机所在网络中的其他地址的服务时就不通了。接下来需要启用出站逻辑
# 启用 ip_forward + 添加 MASQUERADE
# 查看是否开启
sysctl net.ipv4.ip_forward# 如果是 0,表示未开启
# 临时开启
# sudo sysctl -w net.ipv4.ip_forward=1# 永久开启
# echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf# 假设主网卡是 eth0(根据 `ip a` 确认)
ip a
# 或更通用:所有 Docker 网段
sudo iptables -t nat -A POSTROUTING ! -d 172.16.0.0/12 -s 172.16.0.0/12 -o eth0 -j MASQUERADE
# 允许 FORWARD 流量
sudo iptables -A FORWARD -i docker0 -o eth0 -j ACCEPT
sudo iptables -A FORWARD -i eth0 -o docker0 -m state --state RELATED,ESTABLISHED -j ACCEPT# 永久信任 Docker 网络接口
# docker0、br-ee7c0aad4e58 是我服务器上docker增加的网卡 `ip a` 看到的
sudo firewall-cmd --permanent --zone=trusted --add-interface=docker0
sudo firewall-cmd --permanent --zone=trusted --add-interface=br-ee7c0aad4e58
sudo firewall-cmd --reload