Firewall et filtrage du trafic
(Section : Technologie et infrastructure)
Résumé succinct
Le Faervol n'est pas une boîte sur le périmètre, mais un modèle de filtrage en couches de L3-L4 à L7 : Cloud Security Groups/NACL, les politiques réseau de Kubernetes, le contrôle egress (sortie vers l'extérieur), WAF et bot management sur edge, et mTLS/source-true pour le service-to-to-service. Pour iGaming, la clé est de protéger les flux de paiement et les fournisseurs de jeux, les géo-politiques, le contrôle DNS et l'observation (qui, où, quand et pourquoi).
1) Objectifs et principes
Default deny : par défaut interdit, nous autorisons le minimum nécessaire.
Defense-in-depth : les mêmes politiques sur le périmètre, le nuage, le cluster et l'application.
Egress-first : le trafic de sortie est aussi risqué que l'entrée (PSP, fournisseurs de jeux, courrier, analytique).
Identité> adresse : si possible, nous autorisons par identité (mTLS/Spiffe) au lieu d'IP nues.
Observation et audit : logs de solutions (allow/deny), traçabilité, corrélation avec les incidents.
2) Carte des couches de filtrage
1. Edge : CDN/WAF/DDoS/bot-protection, règles L7, terminaison TLS.
2. Cloud : Security Groups/NACL/Firewall Rules au niveau VPC/sous-réseaux/VM.
3. Cluster : Kubernetes NetworkPolicy, service-mesh (Envoy/Istio) avec mTLS et filtres L7.
4. Hôte : iptables/nftables/ufw, filtres eBPF.
5. Application : rate-limit/idempotency/WAF in-app, listes de domaines pour egress.
6. DNS : split-horizon, allowlist de résolveurs, bloc de domaines/types de risque.
3) Périmètre : WAF, DDoS et bot management
WAF : signatures de base + règles de personnalisation sous API (schémas JSON, méthodes/type de contenu).
Bots : scoring comportemental, device fingerprint, captcha dynamique en cas d'anomalies.
DDoS : L3/4 (wolume/synapse) et L7 (HTTP floods) - rejet automatique sur edge.
Geo/ASN : nous limitons les régions/systèmes autonomes aux destinations à risque (p. ex. panneau admin).
nginx
Разрешаем только JSON POST/GET на /api/
location /api/ {
limit_req zone=rl_api burst=50 nodelay;
if ($request_method!~ ^(GET POST)$) { return 405; }
if ($http_content_type!~ "application/json") { return 415; }
proxy_pass http://api_upstream;
}
ModSecurity CRS + собственные правила modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/crs.conf;
4) Cloud : Groupes de sécurité et NACL
Security Group (stateful) - filtres par ports/protocoles/segments.
NACL (stateless) est un filtrage maillé brut des sous-réseaux.
yaml security_group:
name: api-sg ingress:
- proto: tcp; port: 443; cidr: 0.0.0.0/0 # через CDN/WAF egress:
- proto: tcp; port: 443; cidr: 203.0.113.0/24 # PSP-X
- proto: tcp; port: 443; cidr: 198.51.100.0/24 # ProviderA
- proto: udp; port: 53; cidr: 10.10.0.10/32 # только наш DNS
Pratique : pour les paiements, garder des SG et des egress-allowlist distincts sur des diapozones spécifiques de PSP/fournisseurs de jeux. Mises à jour - via IaC et rhubarbe.
5) Kubernetes : NetworkPolicy et service-mesh
NetworkPolicy limite les L3/4 à l'intérieur du cluster ; par défaut, « tout le monde parle à tout le monde » - fermer.
Deny-all + résolution que vous voulez :yaml apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: { name: deny-all, namespace: prod }
spec:
podSelector: {}
policyTypes: [Ingress, Egress]
ingress: []
egress: []
---
Разрешаем API разговаривать с платежным сервисом и DNS apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: { name: api-allow-specific, namespace: prod }
spec:
podSelector: { matchLabels: { app: api } }
policyTypes: [Ingress, Egress]
egress:
- to:
- namespaceSelector: { matchLabels: { name: prod } }
podSelector: { matchLabels: { app: payments } }
ports: [{ protocol: TCP, port: 8080 }]
- to:
- ipBlock: { cidr: 10.10.0.10/32 }
ports: [{ protocol: UDP, port: 53 }]
Service Mesh (Istio/Linkerd/Consul) ajoute :
- mTLS est partout (authentification des services par identité et non par IP).
- L7-filtrage (méthodes/hôtes/chemins/titres), circuit-breaker, outlier-ejection.
- Stratégies d'accès par compte de service/Spiffe ID.
yaml apiVersion: security.istio.io/v1 kind: AuthorizationPolicy metadata: { name: api-to-payments, namespace: prod }
spec:
selector: { matchLabels: { app: payments } }
action: ALLOW rules:
- from:
- source:
principals: ["spiffe://prod/ns/prod/sa/api-sa"]
to:
- operation:
methods: ["POST"]
paths: ["/deposit","/withdraw"]
6) Serveurs : iptables/nftables/eBPF
Exemple de nftables (statful, deny-all) :nft table inet filter {
sets {
psp { type ipv4_addr; elements = { 203.0.113.10, 203.0.113.11 } }
}
chains {
input { type filter hook input priority 0; policy drop;
ct state established,related accept iifname "lo" accept tcp dport {22,443} accept
}
output { type filter hook output priority 0; policy drop;
ct state established,related accept udp dport 53 ip daddr 10.10.0.10 accept # только наш DNS tcp dport 443 ip daddr @psp accept # egress к PSP
}
forward { type filter hook forward priority 0; policy drop; }
}
}
Les agents eBPF (Cilium, etc.) donnent des politiques et une visibilité L3-L7 subtiles (flows, DNS, métadonnées HTTP).
7) Contrôle egress et annuaires de destination
Allowlist des domaines/IP pour les appels externes (PSP, courrier, KYC, fournisseurs de jeux).
DNS-pinning/SNI-polices : résolvez uniquement via un résolver de confiance ; interdire l'IP-egress brut.
VPC/VNet egress séparés pour les circuits de paiement, de jeu et de partage.
Proxy avec inspection TLS pour le trafic non-PII ; flux de paiement - pas de MGTI, seulement direct mTLS/PII-safe.
8) TLS/mTLS et crypto-politique
TLS 1. 2 +, codes modernes, stapling OCSP, HSTS.
mTLS à l'intérieur - référence à Spiffe ID/certification de services-acounts.
Rotation régulière des certificats et vérification des chaînes de confiance.
CORS/CSP sur le proxy L7 pour couper les sources attaquantes sur le front.
9) Taux limite et quotas L7
Limites Edge par IP/ASN/préfixes ; les limites de l'application sont par identité (compte/tenant/clé).
Idempotency-keys pour les opérations de paiement POST afin que les retraits ne créent pas de prises.
Leaky/Token bucket avec gitter ; dans la dégradation - « réponses grises « /captcha/décélération.
10) Sécurité DNS
Seuls les résolveurs d'entreprise (VPC resolver/CoreDNS levé) sont autorisés.
Split-horizon : les noms intérieurs ne résonnent pas de l'extérieur.
Bloc de TLD/catégories nuisibles, interdiction de DoH/DoT des foyers vers l'extérieur.
Logage des requêtes et alerte par anomalie (nouveaux domaines, fréquents NXDOMAIN).
11) Logs, observabilité et tests
Les logs de faervol (allow/deny, règles, octets), l'audit WAF, les logs DNS → SIEM/SOAR.
Exemples : mesures de verrouillage avec 'trace _ id' → un saut rapide dans la piste d'une requête problématique.
Synthétiques : Vérifiez régulièrement la disponibilité des PSP/fournisseurs de jeux dans les bonnes régions.
Les tests de chaos du réseau : packet loss, RTT, erreurs DNS - nous vérifions la réponse des règles et de la remédiation automatique.
12) Automatisation et IaC
Toutes les règles sont comme un code (Terraform/Ansible/Helm/Kyverno/Gatekeeper).
Pull-request-revew avec les politiques de sécurité (OPA).
Versioning et annotations : tout changement de règle est marqué sur les graphiques.
Changements canariens : dérouler les politiques de réseau progressivement (namespace/label, 5 à 10 % des pods).
13) Spécificité iGaming
Itinéraires de paiement (PSP) : groupes d'egress distincts, liste rigoureuse, surveillance des codes/temporisations.
Fournisseurs de jeux : whitelisting des domaines CDN, protection contre les radiations soudaines.
Géo-règles : conformité aux contraintes locales, blocs de régions sur edge.
Backoffice/KYC : accès uniquement à partir de réseaux de confiance/via bastion + MFA.
Fred : limites de velocity sur L7 et requêtes « lourdes » aux API sources anormales.
14) Exemples de règles rapides
UFW (hôte)
bash ufw default deny incoming ufw default deny outgoing ufw allow 22/tcp ufw allow 443/tcp ufw allow out to 10.10.0.10 port 53 proto udp ufw allow out to 203.0.113.0/24 port 443 proto tcp
Istio EnvoyFilter (interdiction des méthodes non standard, idée)
yaml typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router до роутера — Lua/Match для блокировки методов not in [GET,POST,OPTIONS]
NGINX rate-limit
nginx limit_req_zone $binary_remote_addr zone=rl_api:10m rate=10r/s;
server {
location /api/ { limit_req zone=rl_api burst=50 nodelay; proxy_pass http://api; }
}
15) Chèque de mise en œuvre
1. Default deny au niveau du nuage (SG/NACL), du cluster (NetworkPolicy) et des hôtes.
2. Egress-allowlist vers PSP/fournisseurs, résolvez uniquement via DNS de confiance.
3. WAF/bot management/DDoS sur edge, règles L7 sous REST/JSON et téléchargements.
4. mTLS entre les services, autorisation d'identité (Spiffe/SA).
5. Rate-limit/quotas sur edge et dans l'application, idempotency-keys pour les paiements.
6. Politiques DNS : interdiction de DoH/DoT, split-horizon, loging.
7. Logs et SIEM : collecte centralisée allow/deny/WAF/DNS, alertes sur les anomalies.
8. Processus IaC : code de règles, rhubarbe PR, scalaires canariens, annotations.
9. Tests/chaos : échecs RTT/loss/DNS, vérification des itinéraires fallback et des scripts auto.
10. Vérifications régulières : vérification des règles inutilisées, rotation des adresses PSP/CDN.
16) Anti-modèles
« Ouvrir tout et espérer WAF » - le périmètre ne sauvera pas le trafic intérieur.
L'absence de contrôle egress est un tunnel de lampe vers l'extérieur pour les fuites/C2.
Allow-all NetworkPolicy dans Kubernetes - déplacement latéral garanti.
Filtrage uniquement par IP dans le monde des CDN/PSP dynamiques sans contrôle de domaine/DNS.
Le seul point de terminaison TLS sans mTLS à l'intérieur est le remplacement des services.
Les modifications manuelles des règles dans la vente sans IaC/audit sont la non-production et la dette.
C'est juste une boîte noire.
Résultats
Le filtrage efficace du trafic est le tissu architectural de la plate-forme : edge-WAF et cloud SG, NetworkPolicy et mTLS à l'intérieur du cluster, avec un contrôle egress rigoureux pour les PSP/fournisseurs et la gestion via l'IaC. Un tel système réduit les risques de fuites et d'attaques, maintient les paiements et les jeux au sein de SLO et aide à enquêter rapidement sur les incidents grâce à un audit complet et à l'observation.