Zasady zapory i ACL
1) Cele i zasady
Firewall/ACL to sterowanie płaszczyzną danych: kto, gdzie, kiedy i na którym idzie protokole. Podstawowe zasady:- Najmniejszy przywilej: zezwalaj tylko na niezbędne (wprost zezwalaj, domyślnie zaprzeczaj).
- Segmentacja: izolacja środowisk (prod/stage/dev), najemców, konturów krytycznych (PCI/KMS/DB).
- Kontrola Egress: ruch wychodzący jest ograniczony do list FQDN/IP i prywatnych punktów końcowych.
- Świadomość tożsamości (L7): Decyzje podejmowane są przez uwierzytelniony podmiot (SPIFFE/OIDC), nie tylko przez IP.
- Infrastruktura jako kod: zasady jako kod, przegląd/CI/CD, zmiany audytu.
2) Taksonomia: gdzie i co filtrujemy
2. 1 Warstwy i status
L3/L4 bezpaństwowe: klasyczne ACL (CIDR, protokół, port).
L3/L4 statious: grupy zabezpieczeń/NSG, połączenia monitorujące.
L7-aware: proxy/WAF/mesh RBAC (metody, ścieżki, twierdzenia JWT, SNI).
Inline vs out-of-band: Inline firewall routes traffic; out-of-band - analiza/alert.
2. 2 Kontury
Obwód: krawędź/WAF/anty-DDoS.
Rdzeń: piasta tranzytowa/меς-VPC/VNet.
Obciążenie pracą: SG/NSG на VM/ENI/POD.
Poziom aplikacji: Wysłannik/Istio/NGINX polityka, service-to-service mTLS.
3) Modele w chmurze
AWS
Grupa Bezpieczeństwa (SG): stateful на ENI/instance/LB.
Sieć ACL (NACL): bezpaństwowiec w podsieci, kolejność zasad, wpisy dwukierunkowe.
Zapora sieciowa AWS/GWLB: Inspekcja L7/IDS.
Zalecenie: „SG - podstawowa kontrola, NACL - ogrodzenie gruboziarniste/lista odmowy”.
Azure
NSG (statious), ASG (grupy aplikacji według tagów), Azure FW dla L7/IDS, Prywatne punkty końcowe.
Zalecenie: NSG on sabnet + NIC, serwis tags via ASG.
GCP
VPC Firewall Rules (Statious), Hierarchical FW (organizacyjny/folder), Cloud Armor (L7), Private Service Connect.
Zalecenie: org-level barierki + projekt pozwalają.
4) Rule Design: Wzory
4. 1 Zestawy podstawowe
Odmowa wszystkich egress → dozwolone za pośrednictwem FQDN/IP do: repozytoria partii, rejestry artefaktów, API osób trzecich (za pośrednictwem prywatnych/stałych wyjść).
Minimum wschód-zachód: usługi komunikują się tylko z niezbędnymi zależnościami.
Dostęp administratora: poprzez bastion/JIT z MFA, sesje nagraniowe.
4. 2 Tagi i grupy
Użyj etykiet/znaczników zamiast IP: 'na', 'service', 'tier', 'lokator', 'pci = true'.
Aktualizacja zasad po zmianie znacznika - brak ręcznej edycji sieci IP.
4. 3 Cykl życia
Zaproponuj → Oceń (ustawianie) → Wymuś (prod), z dziennikami dry-run/hit.
Starzenie się: TTL/właściciel dla każdej reguły, automatyczne sprawdzanie nieużywane.
5) Kubernety i siatka serwisowa
5. 1 „Polityka” (L3/L4)
Minimalnym jest „zakaz wszystkiego poza tym, co jest potrzebne”.
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 Siatka RBAC (Istio/Envoy)
authorization/claims/scopes/paths MTLS + JWT.
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) Kontrola wyjścia i obwodów prywatnych
Wybierz Usługę Prywatną Łączcie się przez PaaS/rejestry/repozytoria.
Reszta wyjścia za pośrednictwem NAT/proxy z listą dopuszczalną FQDN i stałym IP (dla third-party permlist).
Blok bezpośredniego dostępu strąków/VM do Internetu; wyjątki tylko przez bramę wyjścia.
7) Zasady DNS i SNI
Split-horizon: wewnętrzne strefy nie rozdzielają się z zewnątrz.
FW/Proxy z obsługą FQDN/SNI dla wychodzącego HTTPS (pozwala SNI).
Naprawić szpilki do określonych domen dostawcy; monitorować zmiany w ich IP.
8) Dzienniki, audyt, obserwowalność
Włącz dzienniki przepływu (VPC/VNet/NSG/NACL), wyślij do SIEM.
Koreluj z aplikacjami za pomocą 'trace _ id' w dziennikach.
Wskaźniki: zasady hitu/miss, top-talkers, drop-rates, asymetria ruchu, wycieki wycieków.
Raporty: „niewykorzystane reguły”, „najszersze uprawnienia”.
9) Zarządzanie jako kod (IaC) i kontrole
Terraform/CloudFormation + zasady modułowe według szablonów.
Polityka jako kod (OPA/Gatekeeper/Conftest): nie '0. 0. 0. 0/0 „, wymóg” opis/właściciel/ttl', zakaz mieszania prod/dev.
CI: lint, analiza statyczna, analizator osiągalności, widok planu, obowiązkowa wzajemna ocena.
10) Testowanie osiągalności i chaos
Próbki syntetyczne z różnych podsieci/AZ/regionów: TCP/443, określone porty bazy danych/brokerów.
Tymczasowe zaprzeczenie sprawdzania ścieżek DR: wyłączenie → zależność powinna wywołać ponowne próby/obwód/awaria.
MTU/MSS: Upewnij się, że na obwodach nie ma fragmentacji (zwłaszcza IPsec/NAT-T).
11) Wydajność i niezawodność
Unikaj scentralizowanego wąskiego gardła: Scale inline-FW (zestawy GWLB/scale).
ECMP/AS-path/BGP dla dystrybucji pomiędzy węzłami.
Profile kontroli TLS: zawierać punkt (drogie), przechowywać druki kluczy oddzielnie, przestrzegać zgodności.
12) Przykłady konfiguracji (odniesienia, skrócenie)
12. 1 AWS SG: API → Postgres + S3
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: odmowa domyślnie + zezwala na 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 zapora hierarchiczna: 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 Wysłannik RBAC (L7 zezwala)
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) Antypattery
`0. 0. 0. 0/0 'w ingress/egress „tymczasowo” → pozostaje na zawsze.
„Płatki śniegu” (ręczne edycje w konsoli) bez kodu i wersji.
Wspólne SG/NSG dla prod/stage/dev; mieszanie podsieci krytycznych i niekrytycznych.
Brak kontroli wyjścia i prywatnych punktów końcowych → wyciekające klucze/sekrety.
Ignorowanie DNS/SNI: pozwolił dostawcy na IP - jutro to się zmieniło i cały asortyment został otwarty.
Nie ma dzienników przepływu i runbooks → fazowanie jest niemożliwe.
14) Specyfikacje iGaming/Finance (PCI/Regulatory)
PCI CDE w oddzielnym VRF/segmencie, brak internetu; dostęp do PSP/logów - poprzez prywatną łączność/serwer proxy z mTLS i HMAC.
Miejsce zamieszkania: PII/zdarzenia płatnicze - w kraju/regionie; międzyregionalnie - tylko agregaty/anonimowe.
KMS/Vault/HSM: poszczególne podsieci/SG, tylko klienci mTLS z krótkimi certyfikatami.
Audyt WORM: dzienniki FW/przepływu w niezmienionej pamięci masowej (Object Lock), retencja ≥ minimum regulacyjne.
Partnerzy (PSP/KYC): FQDN permlist, static egress IP, SLA monitoring przez dostawcę.
15) Lista kontrolna gotowości Prod
- Jednolity model segmentacji (piasta i głos, VRF), CIDR bez skrzyżowań.
- Odmowa niewykonania zobowiązania „на egress”; prywatne punkty końcowe do PaaS/storage.
- SG/NSG stacjonarne dla obciążenia pracą, NACL/filtry trasy - w podsieciach/piastach.
- K8s: „Zaprzeczam”, siatka mTLS + L7 RBAC.
- Tagi/grupy zamiast IP; właściciel/TTL/opis dla każdej reguły.
- IaC + Policy-as-Code; CI z symulacją osiągalności; obowiązkowa wzajemna ocena.
- Włączone dzienniki przepływu; deski rozdzielcze top-talkers, drop-rates; wpisy do „wycieku wyjścia”.
- Bastion/JIT dla dostępu administratora; MSZ; sesje logowania.
- Runbook "oraz: jak dodać/usunąć regułę, jak pracować w incydencie; regularne zmiany „martwych” zasad.
- W przypadku PCI/Finance: izolacja CDE, audyt WORM, zezwolenie FQDN dla PSP/KYC, static egress IP.
16) TL; DR
Ochrona budowa warstw: SG/NSG statious na obciążeniach roboczych, NACL/route-filtry na podsieciach, L7 RBAC w siatce/proxy, WAF/krawędź na obwodzie. Domyślnie - odmowa domyślnie, wyjście tylko za pomocą kontrolowanych punktów lub prywatnych punktów końcowych. Opisz zasady jako kod, sprawdź je za pomocą zasad i symulatorów osiągalności, zbieraj dzienniki przepływu. W przypadku iGaming/Finance dodaj segmentację PCI, audyt WORM i ścisłe zezwolenie FQDN do PSP/KYC.