美文网首页k8s
容器安全之不使用Docker的默认网桥docker0

容器安全之不使用Docker的默认网桥docker0

作者: 微凉哇 | 来源:发表于2021-12-25 21:31 被阅读0次

    描述

    不要使用Docker的默认bridge docker0。 使用Docker的用户定义的网络进行容器联网

    隐患分析

    Docker将以桥模式创建的虚拟接口连接到名为docker0的公共桥。
    这种默认网络模型易受ARP欺骗和MAC洪泛攻击的攻击,因为没有应用过滤

    审计方式

    运行以下命令,并验证容器是否在用户定义的网络上,而不是默认的docker0网桥

    [root@localhost ~]# docker network ls --quiet|xargs docker network inspect --format='{{.Name}}.{{.Options}}'|grep docker0
    bridge.map[com.docker.network.bridge.default_bridge:true com.docker.network.bridge.enable_icc:true com.docker.network.bridge.enable_ip_masquerade:true com.docker.network.bridge.host_binding_ipv4:0.0.0.0 com.docker.network.bridge.name:docker0 com.docker.network.driver.mtu:1500]
    

    若返回值不为空,说明使用docker0网桥

    修复建议

    使用自定义网桥

    关于自定义网桥与默认docker0网桥的主要区别

    1. 自定义网桥自动提供容器间的DNS解析

    默认网桥通过IP地址实现容器间的寻址,也可通过--link参数实现容器DNS解析(容器A名称->容器A IP地址),但不推荐--link方式

    1. 自定义网桥提供更好的隔离

    如果宿主机上所有容器没有指定--network参数,那它们将使用默认网桥docker0,并可以无限制的互相通信,存在一定安全隐患。

    而自定义网桥提供了的网络隔离,只有相同网络域(network)内的容器才能相互访问

    创建自定义网桥

    docker network create nginx-net
    

    运行测试用例

    [root@localhost ~]# docker run -idt --name=nginx --network=nginx-net nginx:1.14-alpine
    [root@localhost ~]# docker run -idt --name=box --network=nginx-net busybox:1.31.1
    [root@localhost ~]# docker exec box wget nginx -S
    Connecting to nginx (172.18.0.2:80)
      HTTP/1.1 200 OK
      Server: nginx/1.14.2
      Date: Sat, 01 May 2021 07:06:59 GMT
      Content-Type: text/html
      Content-Length: 612
      Last-Modified: Wed, 10 Apr 2019 01:08:42 GMT
      Connection: close
      ETag: "5cad421a-264"
      Accept-Ranges: bytes
    

    参考文档

    相关文章

      网友评论

        本文标题:容器安全之不使用Docker的默认网桥docker0

        本文链接:https://www.haomeiwen.com/subject/haxmaltx.html