Ubuntu Overlay 场景的防火墙规则配置
一、先明确 Overlay 类型与边界
二、主机层防火墙 UFW 快速配置
sudo apt update
sudo apt install ufw -y
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw enable
sudo ufw allow from 10.0.0.0/24 to any port 22
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 <编号>
三、主机层 nftables 精细化示例(适合 VXLAN 场景)
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
sudo apt install nftables-persistent -y
sudo netfilter-persistent save
sudo nft list ruleset > /etc/nftables.conf
# 重启后
sudo nft -f /etc/nftables.conf
四、容器网络内的策略控制
Docker Swarm
docker service create --name web --network my_overlay_network --publish 80:80 nginx
Kubernetes/Calico
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
五、验证与排障清单
docker network ls/inspect my_overlay_network
docker service ls/ps web
kubectl get networkpolicy -A -o yaml
docker exec -it <容器名> bash
ping <对端IP或服务名>