k8s

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

2021-12-25  本文已影响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

参考文档

上一篇下一篇

猜你喜欢

热点阅读