Docker 网络隔离与防火墙规则

一、Docker 网络隔离原理

Docker 通过 Linux 命名空间 实现网络隔离,每个容器拥有独立的:

  1. 网络命名空间:隔离网络接口、路由表、ARP 表
  2. 网络栈:独立 IP 地址、端口范围、防火墙规则
  3. 虚拟网络设备veth pair 一端在容器内(如 eth0),另一端在宿主机网桥(如 docker0

默认网络模式:

  • Bridge 模式:容器通过 docker0 网桥通信(默认)
  • Host 模式:直接共享宿主机网络栈
  • None 模式:无网络接口

隔离效果:

  • 容器间通信需通过网桥或自定义网络
  • 子网隔离:例如容器 A 在子网 $172.17.0.0/16$,容器 B 在 $172.18.0.0/16$ 时无法直接互通
二、防火墙规则管理

Docker 自动配置 iptables 规则实现:

  1. 端口转发(DNAT):
    -A DOCKER ! -i docker0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 172.17.0.2:80
    

  2. 访问控制
    • 默认阻止外部访问容器(除非暴露端口)
    • 允许容器出站流量:
      -A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
      

三、安全加固实践
  1. 限制容器间通信

    # 创建自定义网络并禁用容器互通
    docker network create --driver bridge --subnet 192.168.5.0/24 --internal secure-net
    

  2. 防火墙规则定制

    # 仅允许特定 IP 访问容器
    iptables -A DOCKER-USER -s 192.168.1.100 -p tcp --dport 3306 -j ACCEPT
    iptables -A DOCKER-USER -p tcp --dport 3306 -j DROP
    

  3. 启用用户命名空间(UID 隔离):

    # /etc/docker/daemon.json
    { "userns-remap": "default" }
    

四、网络策略验证方法
  1. 测试容器连通性:
    docker exec -it container1 ping 172.17.0.3
    

  2. 检查防火墙规则:
    iptables -L DOCKER-USER -v -n
    

  3. 扫描容器端口:
    nmap -sT -p 1-65535 172.17.0.2
    

关键安全原则

  • 最小权限原则:仅开放必要端口
  • 默认拒绝策略:iptables 默认链设为 DROP
  • 定期审计规则:监控异常流量模式 $(\sum \text{流入流量} > \text{阈值})$
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐