一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Ubuntu Overlay怎样配置防火墙规则

时间:2026-07-16 07:59:55 编辑:袖梨 来源:一聚教程网

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

Ubuntu Overlay如何配置防火墙规则

一、先明确 Overlay 类型与边界

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

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

  • 基础启用与默认策略
    sudo apt updatesudo apt install ufw -ysudo ufw default deny incomingsudo ufw default allow outgoingsudo 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 verbosesudo ufw status numberedsudo ufw delete <编号>
  • 提示:UFW 适合“主机边界”的最小暴露;Overlay 内部的细粒度东西向流量建议交给容器网络策略(Swarm 服务划分或 K8s NetworkPolicy)。

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

  • 假设 Overlay 封装接口为 vxlan0,Overlay 网段为 10.0.0.0/24,仅放行 VXLAN 与控制面端口(示例 22/TCP):
    sudo apt install nftables -ysudo nft add table inet filtersudo nft add chain inet filter input { type filter hook input priority 0; policy drop; }sudo nft add rule inet filter input iifname "lo" acceptsudo nft add rule inet filter input ct state established,related acceptsudo nft add rule inet filter input udp dport 4789 accept# VXLANsudo nft add rule inet filter input tcp dport 22 accept # SSHsudo nft add rule inet filter input ip saddr 10.0.0.0/24 acceptsudo 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 -ysudo 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/v3kind: NetworkPolicymetadata:name: allow-default-to-svcnamespace: defaultspec:selector: app == 'myapp'ingress:- action: Allowsource:namespaceSelector: name == 'default'destination:ports:- protocol: TCPport: 80egress:- action: Allowprotocol: TCPdestination:nets:- 10.0.0.0/16
    • 验证:
      kubectl get networkpolicy -Akubectl describe networkpolicy allow-default-to-svc -n default
    • 提示:在 K8s 中优先用 NetworkPolicy 管理东西向流量,主机防火墙主要做节点边界收敛。

五、验证与排障清单

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

热门栏目