DDoS პაკეტების დაცვა და ფილტრაცია
1) რატომ არის ეს აუცილებელი?
DDoS არის რესურსების „მასიური დეგრადაცია“: ზოლები/pps, სახელმწიფო ცხრილები, ბირთვის CPU/IRQ, ნაერთების აუზები, პროგრამების ლიმიტები. მიზანია თავდაცვის მოდუნება: ქსელის პერიმეტრზე მოცულობის ჩაქრობა, პროტოკოლის ანომალიების განეიტრალება TCP/IP დასტამდე, ხოლო L7- ზე არასასურველი მოთხოვნების გაწყვეტა, ლეგიტიმური მომხმარებლებისთვის SLO- ს შენარჩუნება.
2) თავდასხმის კლასები
2. 1 L3/L4 (volumetric/protocol)
Volumetric: UDP flood, UDP-reflection/amplification (DNS/CLDAP/NTP/SSDP/memcached/mDNS), GRE flood.
Protocol/state exhaustion: SYN flood, ACK/RST flood, TCP connection-exhaustion, ICMP flood, TCP fragmentation.
QUIC/UDP მახასიათებლები: ყალბი Initial/Retry ქარიშხლები, spoofed წყარო.
2. 2 L7 (application)
HTTP/1. 1: მოთხოვნები ძვირადღირებული მარშრუტებისთვის, header oversize/field smuggling.
HTTP/2: Rapid Reset, stream-flood, HEADERS flood, PRIORITY abuse.
HTTP/3 (QUIC): კავშირი/ნაკადები დასრულების გარეშე, intial flood.
Slow-атаки: slowloris/slow-read/slow-POST.
GRPC/WebSocket: გაუთავებელი ნაკადები, შეტყობინებების ნაკადი, დიდი ჩარჩოები.
3) თავდაცვის ძირითადი არქიტექტურა
1. Anycast + Scrubbing
დაარღვიეთ ტრეფიკი გლობალურად და გადაიტანეთ პროვაიდერის სკრუბინგის ცენტრები (შეწყვიტეთ volumetric/spuffing ზღვარზე).
2. Multi-CDN / Multi-Edge
დომენების განსხვავება (ვებ, API, სტატიკა), თავდაცვისა და ქეშის ერთობლიობა read დატვირთვისთვის.
3. დაბალი დონის ფილტრები მის პერიმეტრზე
ACL ბორდერ მარშრუტიზატორებზე (RFC1918, ბოგონი, განზრახ ყალბი პორტები).
eBPF/XDP early-drop- ისთვის ხელმოწერებზე და საბაზო ლიმიტებზე კონტრაკამდე.
4. L7 პერიმეტრი (NGINX/Envoy/WAF)
RPS შეკუმშვა კლავიშებზე, challenge (captcha/PoW), ქეში, „ძვირადღირებული“ ბილიკების პრიორიტეტი.
5. შინაგანი სტაბილურობა
ნაერთების, რიგების, circuit/timeout, bulkhead და autoscaling ერთად „shedder“.
4) ქსელის „სარქველები“: რა უნდა ჩართოთ დაუყოვნებლივ
4. 1 Linux sysctl (ბირთვი/დასტის)
bash
TCP SYN flood sysctl -w net. ipv4. tcp_syncookies=1 sysctl -w net. ipv4. tcp_max_syn_backlog=4096 sysctl -w net. ipv4. tcp_synack_retries=3
Conntrack/sysctl -w net tables. netfilter. nf_conntrack_max=262144 sysctl -w net. netfilter. nf_conntrack_tcp_timeout_established=300
ICMP/redirect sysctl -w net. ipv4. icmp_echo_ignore_broadcasts=1 sysctl -w net. ipv4. conf. all. accept_redirects=0 sysctl -w net. ipv4. conf. all. send_redirects=0
sysctl -w net socket resources. core. somaxconn=4096 sysctl -w net. core. netdev_max_backlog=250000 sysctl -w net. core. rmem_max=134217728 sysctl -w net. core. wmem_max=134217728
4. 2 nftables: საბაზო ფილტრები და ratelimit პაკეტებზე
nft table inet filter {
sets {
bogon { type ipv4_addr; flags interval; elements = { 0. 0. 0. 0/8, 10. 0. 0. 0/8, 100. 64. 0. 0/10,
127. 0. 0. 0/8, 169. 254. 0. 0/16, 172. 16. 0. 0/12, 192. 0. 2. 0/24, 192. 168. 0. 0/16, 198. 18. 0. 0/15, 224. 0. 0. 0/4 } }
}
chains {
input {
type filter hook input priority 0; policy drop;
ip saddr @bogon drop ct state established,related accept
UDP amplification ports - limit pps udp dport {53,123,1900,11211,389,1900,5353} limit rate over 2000/second drop
SYN rate-limit tcp flags syn tcp dport {80,443} limit rate over 2000/second drop
ICMP flood ip protocol icmp limit rate 100/second accept
}
}
}
4. 3 XDP/eBPF (იდეა)
Spoofed წყაროს Early-drop პაკეტები (მარშრუტიზატორზე uRPF მისასალმებელია).
ჰაშის ბაკეტები pps per/32 და per/24; დინამიური „კარანტინის“ წყაროები.
UDP ხელმოწერები: DNS response-like შესასვლელთან (გაფილტვრა კონტექსტის გარეთ).
5) UDP amplification: ინვენტარი და ბლოკები
ხშირი რეფლექტორები/გამაძლიერებლები: DNS (Open Resolvers), NTP (monlist), CLDAP, SSDP, mDNS, Memcached (UDP), C.
ზომები:- დახურეთ/შეზღუდეთ UDP სერვისები, შეამციროთ ღია პორტები.
- პერიმეტრზე შეზღუდეთ pps/bitrate ცნობილი პორტებისთვის.
- DNS რეკომენდაცია: რეკურსირება მხოლოდ მისი ქსელებისთვის, RRL (Response Rate Limiting), ANY- ის მინიმიზაცია.
- NTP - მხოლოდ ნდობის „bootstrap“, საჯარო „noquery“.
6) TCP state exhaustion
SYN flood: 'tcp _ syncookies = 1', გაზრდილი 'tcp _ max _ syn _ backlog', 'synack _ retries = 3', pps drop.
ACK/RST flood: დაბალი დონის ლიმიტები, არალეგიტიმური რიგითების შემცირება (nftables/ebpf).
Conntrack-less ბორბალზე: არ დახარჯოთ სახელმწიფო ცხრილი, სადაც ფილტრი შესაძლებელია სახელმწიფო ხელმოწერით.
7) HTTP/2/3 და ჭკვიანი L7 შეტევები
HTTP/2 Rapid Reset: RST ჩარჩოების სიხშირის ლიმიტი და ღია ნაკადების რაოდენობა; კავშირის დახურვა ანომალიებში.
Stream abuse: лимит concurrent streams, headers size, max frame size.
QUIC/HTTP/3: შეზღუდეთ Intial ppps, ჩართეთ Retry; მოკლე ტაიმაუტები handshake.
NGINX (ფრაგმენტი L7)
nginx
Header/body constraint client_max_body_size 1m;
large_client_header_buffers 4 8k;
HTTP/2 limits http2_max_concurrent_streams 128;
http2_recv_buffer_size 256k;
Rate limit by IP (example)
limit_req_zone $binary_remote_addr zone=reqs:20m rate=100r/s;
limit_req zone=reqs burst=200 nodelay;
Envoy (ანტი-reset და ლიმიტები)
yaml http2_protocol_options:
max_concurrent_streams: 128 initial_stream_window_size: 65536 max_outbound_frames: 10000 stream_error_on_invalid_http_messaging: true
8) Slow შეტევები და რესურსების დაცვა
Slowloris/slow-read/slow-POST: ჩართეთ 'proxy _ request _ buffering on', დაბალი idle-timeout, მინიმალური მისაღები 'read _ rate ".
შეაჩერეთ კავშირები გრძელვადიანი ინტერაქტიული ინტერვალით თხოვნით.
განაცხადს აქვს სხეულის ადრეული კითხვა/გამოტოვება, JSON ზომის/სიღრმის ლიმიტები.
9) L7 ფილტრაცია: ვინ არის უფრო მნიშვნელოვანი - მოდით გადავიდეთ
ტრაფიკის კლასიფიკაცია: known good (პარტნიორები mTLS/JWT), რეგისტრირებული მომხმარებლები, ანონიმები.
პრიორიტეტები: „ძვირადღირებული“ თავისუფალი მარშრუტები (ანაბრები/დასკვნები) - დაცვა, მაგრამ დადასტურებული გამოტოვება; read კატალოგები - ქეში + throttle.
Challenge ფენა: captcha/PoW/JS Challengi მწვერვალზე ნაცრისფერი ზონებისთვის.
10) კეში, კოლესინგი და დეგრადაცია
Edge ქეში სტატიკური/კვაზისტიკური პასუხებისთვის, „stale-while-revalidate“.
Request coalescing: ერთი გასაღების პარალელური თხოვნების დაჭერა - მარიონეტულ და განაცხადში.
Degrade რეჟიმი: გამორთეთ მეორეხარისხოვანი ფიჩები (პერსონალიზაცია, მძიმე მოხსენებები), გასცეს „მსუბუქი“ გვერდები.
11) დაკვირვება და ტელემეტრია
მეტრიკა (per ROR/კვანძი/მტევანი):- L3/L4: `pps_in/out`, `bps_in/out`, `drop_pps{reason}`, `syn_recv`, `conntrack_used/limit`, `xdp_drop_pps`.
- L7: `requests_total{route}`, `429_total`, `challenge_total{type}`, `h2_rst_rate`, `slow_req_total`.
- დამოკიდებულება: CPU IRQ soft/hard, NIC queue drops, run-queue length.
Logs: მოდულირებული, საერთო/24, ASN, პორტები და ხელმოწერები; PII- ის გარეშე.
ტრეისი: შეიტანეთ თეთრ სიებში, დაუყოვნებლივ გააფართოვეთ განბაჟების ნიმუში.
12) საპასუხო გეგმები (runbook)
1. დეტაჟი: pps/bps/429/h2 _ rst _ rate ბარიერების მოქმედება.
2. კლასიფიკაცია: დონე (L3/4/7), პროტოკოლი (UDP/TCP/h2/h3), გეო/ASN.
- ჩართეთ პროფილები scrubbing/blackhole პროვაიდერზე,
- გაძლიერება nftables/ebpf ლიმიტები,
- შეამცირეთ L7 ლიმიტები და გაზარდეთ Challengi,
- ჩართეთ retry for QUIC (Intial flood).
- 4. კომუნიკაციები: სტატუსის გვერდი, პარტნიორების შეტყობინებების შაბლონები.
- 5. Forenzic: PCAP- ის დაჭერა 60-120 წამში, ASNs/ports talkers ნიმუში.
- 6. რეტროსპექტივა: ხელმოწერების განახლება, ბარიერები, რეფლექტორების სიები.
13) ტესტირება და სავარჯიშოები
DDoS-drill playbuks კვარტალურია: სინთეზური UDP/HTTP bursts, slow ტრაფიკი, HTTP/2 reset.
თამაშის დღე: Anycast გადართვა/მიგრაცია CDN- ს შორის, დეგრადაცია „მსუბუქ რეჟიმში“.
პროვაიდერის გადამოწმება: SLA scrubbing, ფილტრების ჩართვის/გამორთვის დრო, max ppps/bps.
14) ანტიპატერები
დაეყრდნო მხოლოდ L7-WAF- ს volumetric შეტევით.
URPF/ACL- ის არარსებობა ბორდერზე და conntrack heavy ფილტრაცია „შუბლზე“.
შეუზღუდავი სათაურები/სხეულები და გრძელი keep-alive მწვერვალზე.
ერთი რეგიონი/ROR Anycast/multi edge გარეშე.
NIC/IRQ/CPU- ს რეზერვების ნაკლებობა და რიგების მონიტორინგი.
არცერთი ქეში/კოალესინგი - დამატებითი RPS უკანა პლანზე.
15) iGaming/ფინანსების სპეციფიკა
დროებითი მწვერვალები (მატჩები/დერბი/ლოტო გათამაშებები): წინასწარ გააფართოვეთ POP შესაძლებლობები, ჩართეთ კოეფიციენტების აგრესიული ქეში, განათავსეთ კანარი-ჩელენჯი ანონიმებისთვის.
გადახდის/გაყვანის მარშრუტები: ცალკეული edge-pul mTLS- ით, მოკლე Timauts, კონკურენციის ლიმიტები; არა 0-RTT.
გეო პოლიტიკოსები: რეგიონალური ალოუ-ლაისტები, ASN ჰოსტინგის ფილტრაცია, სწრაფი geo გადართვა.
ანტიფროდთან კვეთა: velocity ლიმიტები და Risk API გადადიან „რთულ“ პროფილში DDoS ინციდენტში.
16) მზადყოფნის სიის სია
- Anycast или multi-edge/CDN; შემოწმებულია არხები.
- ბორდერი-ACL/uRPF; nftables/ebpf/XDP პროფილები, conntrack-less ფილტრაცია.
- Sysctl tuning TCP/SYN, შეზღუდული pps UDP გამაძლიერებელი პორტებისთვის.
- HTTP/2/3 ლიმიტები (streams, frames, headers), slow დაცვა, body/header-limits.
- L7 ლიმიტები და გამოწვევა; ქეში და კოლესინგი პერიმეტრზე.
- დაშბორდები pps/bps/conntrack/IRQ + L7 RED; ალერტები ანომალიებში h2 _ rst/429.
- Runbook/playbooks, პროვაიდერის კონტაქტები, პროფილების ერთჯერადი ჩართვა.
- სწავლებები: bursts, slow, HTTP/2 reset; ანგარიში და გაუმჯობესების დაფიქსირება.
- გაყოფილი აუზები გადახდის/კრიტიკული მარშრუტებისთვის, mTLS და მკაცრი შეზღუდვებისთვის.
17) TL; DR
დაისვენეთ დაცვა: Anycast + scrubbing ააფეთქებს მოცულობას, eBPF/XDP + nftables ჭრის ნაგავს დასტაში, L7 ლიმიტები/chellenghi/ქეში ინარჩუნებს SLA. Tunit TCP (SYN cookies, backlog), შეზღუდეთ UDP გამაძლიერებლები, განათავსეთ HTTP/2/3 და slow დაცვა. გქონდეთ runbook და გაწვრთნათ იგი; iGaming- ისთვის - წინასწარ გააფართოვეთ edge პიკის საათებში და გამოყავით გადახდის მარშრუტები mTLS- ით და მკაცრი ლიმიტებით.