Firewall策略和ACL
1)目標和原則
Firewall/ACL是對數據平面的控制:誰、何時、何時以及通過哪個協議運行。基本原則:- Least privilege:只允許必要的(顯式allow, implicit deny)。
- Segmentation:隔離環境(prod/stage/dev)、tenant、關鍵路徑(PCI/KMS/DB)。
- Egress控制:出站流量僅限於FQDN/IP列表和私有endpoint 'ami。
- Identity-aware (L7):通過身份驗證實體(SPIFFE/OIDC)而非僅通過IP做出決策。
- 基礎架構作為代碼:規則作為代碼,評論/CI/CD,更改審核。
2)分類法: 在哪裏和什麼過濾器
2.1層和狀態
L3/L4無狀態:經典ACL(CIDR,協議,端口)。
L3/L4 stateful: security groups/NSG,跟蹤連接。
L7-aware:proxy/WAF/mesh RBAC(方法,路徑,JWT-claims,SNI)。
Inline vs out-of-band: inline faervol路由流量;樂隊外部-分析/警報。
2.2個輪廓
Perimeter: edge/WAF/Anti-DDoS.
Core: transit hub / меж-VPC/VNet.
Workload: SG/NSG на VM/ENI/POD.
App-level: Envoy/Istio/NGINX policy, service-to-service mTLS.
3)雲模型
AWS
Security Group (SG): stateful на ENI/instance/LB.
網絡ACL (NACL):子網無狀態、規則順序、雙向條目。
AWS Network Firewall/GWLB:L7 檢查/IDS。
建議: 「SG是主要控制,NACL是粗粒圍欄/垃圾清單。」
Azure
NSG(靜態),ASG(按標簽的應用程序組),Azure FW for L7/IDS,Private Endpoints。
建議:NSG on Sabnet+NIC,服務標簽通過ASG。
GCP
VPC Firewall Rules(狀態)、Hierarchical FW(組織/文件夾)、Cloud Armor (L7)、Private Service Connect。
建議:org-level guardrails+設計allow。
4)規則設計: 模式
4.1個基本套件
Deny all egress →通過FQDN/IP允許使用:批處理存儲庫,寄存器工件,第三方API(通過私有/固定輸出)。
東西部最低限度:服務僅與必要的依賴項通信。
管理訪問:通過MFA 的基礎/JIT,會話記錄。
4.2 Tagi和樂隊
使用labels/tags代替IP: 「env」、「service」、「tier」、「tenant」、「pci=true」。
更改標記時更新策略-無需手動編輯IP網格。
4.3生命周期
Propose → Evaluate (staging) → Enforce (prod),帶有幹跑/命中日誌。
過時:每個規則的TTL/所有者,自動反駁未使用的規則。
5) Kubernetes和服務-mesh
5.1 NetworkPolicy (L3/L4)
最低限度是「禁止除必要以外的所有內容」。
yaml apiVersion: networking. k8s. io/v1 kind: NetworkPolicy metadata: { name: deny-all, namespace: core }
spec:
podSelector: {}
policyTypes: ["Ingress","Egress"]
kind: NetworkPolicy metadata: { name: api-egress }
spec:
podSelector: { matchLabels: { app: api } }
egress:
- to:
- namespaceSelector: { matchLabels: { ns: db } }
ports: [{ protocol: TCP, port: 5432 }]
- to:
- ipBlock: { cidr: 10. 100. 0. 0/16 } # Private endpoints ports: [{ protocol: TCP, port: 443 }]
5.2 L7 RBAC в mesh (Istio/Envoy)
mTLS+JWT/claims/scopes/path授權。
yaml apiVersion: security. istio. io/v1 kind: AuthorizationPolicy metadata: { name: api-rbac }
spec:
selector: { matchLabels: { app: api } }
rules:
- from:
- source:
principals: ["spiffe://svc. payments"]
to:
- operation: { methods: ["POST"], paths: ["/v1/payouts"] }
when:
- key: request. headers[x-tenant]
values: ["eu-1","eu-2"]
6)Egress控制和私人外圍
首選PrivateLink/Private Service Connect到PaaS/寄存器/存儲。
其余的egress通過NAT/代理使用 allowlist FQDN和固定IP(用於第三方allowlist)。
阻止Pod/VM直接進入互聯網;僅通過egress網關排除。
7) DNS和SNI意識規則
Split-horizon:內部區域不會在外部突出。
FW/Proxy支持外出HTTPS(SNI allow)的FQDN/SNI。
對特定供應商域進行修補;監視他們的IP更改。
8) Logi,審計,可觀察性
啟用flow logs (VPC/VNet/NSG/NACL),發送到SIEM。
通過日誌中的「trace_id」與應用程序相關聯。
度量標準:命中/錯過規則,top-talkers,落差,流量不對稱,「漏電」。
報告:「未使用的規則」,「最廣泛的權限」。
9)代碼管理(IaC)和驗證
Terraform/CloudFormation+模塊化模板策略。
政策作為代碼(OPA/Gatekeeper/Conftest):禁止'0。0.0.0/0',要求「描述/所有者/ttl」,禁止混合prod/dev。
CI:lint,statanalysis,可實現性模擬器(reachability analyzer),計劃查看,授權同行審查。
10)可達性測試和混亂
來自不同子網/AZ/地區的合成樣本:TCP/443,特定的DB/經紀端口。
臨時deny檢查DR路徑:禁用依賴關系→必須運行retries/circuit/fallback。
MTU/MSS: 確保perimeters(尤其是IPsec/NAT-T)上沒有碎片。
11)性能和可靠性
避免集中化瓶頸:水平縮放inline-FW (GWLB/scale sets)。
ECMP/AS-path/BGP用於在中心之間分配。
TLS檢查配置文件:點擊(昂貴)、單獨存儲密鑰打印、遵守合規性。
12)configs示例(參數,縮寫)
12.1 AWS SG: API → Postgres + S3 PrivateLink
hcl resource "aws_security_group" "api" {
name = "sg-api"
description = "Ingress from ALB, egress to DB and PrivateLink"
vpc_id = var. vpc_id
ingress { from_port=8080 to_port=8080 protocol="tcp" security_groups=[aws_security_group. alb. id] }
egress { from_port=5432 to_port=5432 protocol="tcp" security_groups=[aws_security_group. db. id] }
egress { from_port=443 to_port=443 protocol="tcp" prefix_list_ids=[aws_vpc_endpoint. s3. prefix_list_id] }
tags = { owner="team-api", env=var. env, ttl="2026-01-01" }
}
12.2 Azure NSG: deny-by-default + allow bastion
bash az network nsg rule create -g rg -n allow-bastion --nsg-name nsg-app \
--priority 100 --direction Inbound --access Allow --protocol Tcp \
--source-address-prefixes 10. 0. 0. 10 --source-port-ranges "" \
--destination-port-ranges 22 --destination-address-prefixes 10. 1. 0. 0/16
12.3 GCP hierarchical firewall: org-guardrail
yaml direction: INGRESS priority: 1000 action: deny enableLogging: true match:
layer4Configs: [{ ipProtocol: "all" }]
srcIpRanges: ["0. 0. 0. 0/0"]
targetResources: ["organizations/123456"]
12.4 Envoy RBAC (L7 allow)
yaml
- name: envoy. filters. http. rbac typed_config:
rules:
action: ALLOW policies:
payments-post:
permissions: [{ url_path: { path: "/v1/payouts", ignore_case: true } }]
principals: [{ authenticated: { principal_name: { exact: "spiffe://svc. payments" } } }]
13)反模式
`0.0.0.0/0 'in ingress/egress「暫時」→永遠存在。
「雪花」(控制臺中的手動編輯)沒有代碼或修訂。
prod/stage/dev的通用SG/NSG;關鍵和非關鍵子網的混合。
缺乏盲目控制和私人結局,→泄露鑰匙/秘密。
忽視DNS/SNI:允許提供商IP-明天它改變並打開了整個範圍。
沒有flow logs和runbook's → forenzik是不可能的。
14) iGaming/財務細節 (PCI/監管)
PCI CDE在單獨的VRF/細分市場中,沒有Internet;通過mTLS和HMAC的私人連接/代理訪問PSP/Logs。
數據駐留:PII/支付事件-在國內/地區;跨區域-僅聚合/匿名。
KMS/Vault/HSM:單獨的子網/SG,只有證書短的mTLS客戶端。
WORM審核:不變存儲(對象鎖)中的FW/flow邏輯,重構≥監管最小值。
合作夥伴(PSP/KYC):FQDN allowlist,靜態egress IP,跨提供商監視SLA。
15)準備就緒支票清單
- 單一分割模型(hub-and-spoke, VRF), CIDR無交叉點。
[] Deny-by-default на egress;PaaS/存儲的私有端。
- 工作負載的SG/NSG狀態,NACL/路由過濾器-到子網/樞紐。
[] K8s: NetworkPolicy «deny-all», mesh mTLS + L7 RBAC.
- 代替IP的標簽/組;每個規則的主人/TTL/描述。
[] IaC + Policy-as-Code;具有可實現性模擬的CI;強制性同行評審。
- Flow logs包括在內;dashbords top-talkers,drop-rates;「egress泄漏」上的差異。
- 用於管理員訪問的Bastion/JIT;MFA;會議日記。
- Runbook'和:如何添加/刪除規則,如何在事件中工作;定期修訂「死」規則。
- 用於PCI/財務: CDE隔離、WORM審核、PSP/KYC的FQDN allow、靜態egress IP。
16) TL;DR
跨層構建保護:SG/NSG靜態在滑行道上,NACL/路線過濾器在子網上, L7 RBAC在mesh/代理上, WAF/edge在外圍。默認情況下為deny-by-default,egress僅通過受控點或私人終止。將規則描述為代碼,通過策略和可實現性模擬器對其進行驗證,收集流日誌。對於iGaming/financial,在PSP/KYC中添加PCI細分,WORM審核和嚴格的FQDN allow。