docker 容器安全与firewalld

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