温馨提示×

Ubuntu Overlay如何配置防火墙规则

小樊
41
2025-12-18 02:25:18
栏目: 智能运维

Ubuntu Overlay 场景的防火墙规则配置

一、先明确 Overlay 类型与边界

  • Docker Swarm Overlay:跨主机容器网络,依赖 Swarm 控制面分发网络;通常通过服务发布端口(–publish)对外暴露,内部服务默认仅在 Overlay 内可达。
  • Kubernetes/Calico Overlay:在 K8s 中由 CNI(如 Calico)提供数据面,网络策略以 NetworkPolicy/GlobalNetworkPolicy 声明式管理,适合细粒度与大规模场景。
  • 云环境注意:除主机防火墙外,还需检查云厂商的安全组/NACL是否放行相关端口(如 VXLAN 4789/UDP)。

二、主机层防火墙 UFW 快速配置

  • 基础启用与默认策略
    sudo apt update
    sudo apt install ufw -y
    sudo ufw default deny incoming
    sudo ufw default allow outgoing
    sudo ufw enable
    
  • 仅允许 Overlay 子网访问 SSH(示例子网 10.0.0.0/24
    sudo ufw allow from 10.0.0.0/24 to any port 22
    
  • 仅允许 Overlay 子网访问某服务端口(示例 80/TCP
    sudo ufw allow from 10.0.0.0/24 to any port 80 proto tcp
    
  • 查看与维护
    sudo ufw status verbose
    sudo ufw status numbered
    sudo ufw delete <编号>
    
  • 提示:UFW 适合“主机边界”的最小暴露;Overlay 内部的细粒度东西向流量建议交给容器网络策略(Swarm 服务划分或 K8s NetworkPolicy)。

三、主机层 nftables 精细化示例(适合 VXLAN 场景)

  • 假设 Overlay 封装接口为 vxlan0,Overlay 网段为 10.0.0.0/24,仅放行 VXLAN 与控制面端口(示例 22/TCP):
    sudo apt install nftables -y
    sudo nft add table inet filter
    sudo nft add chain inet filter input { type filter hook input priority 0\; policy drop\; }
    sudo nft add rule inet filter input iifname "lo" accept
    sudo nft add rule inet filter input ct state established,related accept
    sudo nft add rule inet filter input udp dport 4789 accept    # VXLAN
    sudo nft add rule inet filter input tcp dport 22 accept       # SSH
    sudo nft add rule inet filter input ip saddr 10.0.0.0/24 accept
    
    sudo nft add chain inet filter forward { type filter hook forward priority 0\; policy drop\; }
    sudo nft add rule inet filter forward iifname "vxlan0" ip saddr 10.0.0.0/24 ip daddr 10.0.0.0/24 accept
    
  • 持久化(按发行版选择其一)
    • 使用 nftables-persistent:
      sudo apt install nftables-persistent -y
      sudo netfilter-persistent save
      
    • 或手动保存/恢复:
      sudo nft list ruleset > /etc/nftables.conf
      # 重启后
      sudo nft -f /etc/nftables.conf
      
  • 说明:nftables 可基于接口与子网精确放行,便于在承载 Overlay 的主机上实施“白名单式”边界控制。

四、容器网络内的策略控制

  • Docker Swarm

    • 原则:仅将需要对外暴露的服务通过 –publish 发布到主机端口;其余服务默认仅在 Overlay 内可达,减少攻击面。
    • 示例:
      docker service create --name web --network my_overlay_network --publish 80:80 nginx
      
    • 细粒度访问控制建议结合主机/边界防火墙对 Overlay 子网与服务端口 做限制(见第二、三节)。
  • Kubernetes/Calico

    • 原则:使用 NetworkPolicy/GlobalNetworkPolicy 声明式控制 Pod 间 E/W 向 流量,遵循最小暴露。
    • 示例(仅允许 default 命名空间访问某服务 80/TCP,其余默认拒绝):
      apiVersion: projectcalico.org/v3
      kind: NetworkPolicy
      metadata:
        name: allow-default-to-svc
        namespace: default
      spec:
        selector: app == 'myapp'
        ingress:
        - action: Allow
          source:
            namespaceSelector: name == 'default'
          destination:
            ports:
            - protocol: TCP
              port: 80
        egress:
        - action: Allow
          protocol: TCP
          destination:
            nets:
            - 10.0.0.0/16
      
    • 验证:
      kubectl get networkpolicy -A
      kubectl describe networkpolicy allow-default-to-svc -n default
      
    • 提示:在 K8s 中优先用 NetworkPolicy 管理东西向流量,主机防火墙主要做节点边界收敛。

五、验证与排障清单

  • 查看与连通性
    • 查看网络与服务:
      docker network ls/inspect my_overlay_network
      docker service ls/ps web
      kubectl get networkpolicy -A -o yaml
      
    • 进入容器验证:
      docker exec -it <容器名> bash
      ping <对端IP或服务名>
      
  • 常见问题
    • 节点未加入 Swarm 导致 Overlay 不通。
    • VXLAN 4789/UDP 被主机/云安全组阻断。
    • 策略 selector 不匹配导致放行/拒绝结果与预期不符。
    • 变更前备份规则并在维护窗口操作,避免与 Docker/K8s 的 iptables/nftables 规则冲突。

0