docker 容器暴露的端口不会因 firewalld 防火墙策略阻断!
最近发现一个问题,docker run 了几个容器,暴雷了 8080, 9090 等等几个端口,一直以为 CentOS 有 firewalld 防火墙在,加了这些端口只允许内网访问,就可以高枕无忧了。
结果有次查看 netstat,居然有一些国外的 IP 连接。这才知道原来有防火墙,容器也不安全!
/etc/docker/daemon.json
增加 iptables: false
{
"iptables": false,
"log-driver": "json-file",
"log-opts": {
"compress": "true",
"max-file": "20",
"max-size": "10m"
}
}
/etc/sysctl.conf
增加 ip_forward
net.ipv4.ip_forward = 1
sysctl -p
保存
查找流量出口的网卡:
ip r get 114.114.114.114|grep dev
dev 后面的如, eno1。
若网卡名为 eno1,执行如下命令,
// 容器访问外网
firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD_direct 0 -i eno1-j ACCEPT
firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD_direct 0 -o eno1-j ACCEPT
// 宿主机端口对容器开放
firewall-cmd --permanent --zone=trusted --change-interface=docker0
有的文章说要加这个
firewall-cmd --zone=public --add-masquerade
完成后保存
firewall-cmd --reload