Vícevrstvá filtrace provozu: ipset, automatické blokování a CrowdSec pro servery
Systém filtrace založený na ipset, automatické blokování podezřelých IP adres a CrowdSec snižuje zbytečný provoz z 12 % na méně než 0,3 %. Blokování probíhá na úrovni jádra Linux (L3/L4), před zpracováním nginx a PHP-FPM. Tím se minimalizuje zatížení serveru komerčního projektu na Bitrix, kde skenování .env, wp-login.php a config.php způsobovalo špičky selhání až do 99 %.
Výhody přístupu: úplná transparentnost blokování, atomické aktualizace seznamů IP adres, modulární architektura pro rychlou konfiguraci podle projektu.
Výhody oproti externím WAF a CDN
Externí WAF a CDN jsou vhodné pro globální projekty, ale pro lokální řešení s nízkou zátěží je preferována soběstačná filtrace.
Klíčové důvody pro výběr vlastního systému:
- Úplná kontrola: jsou viditelné blokované IP adresy, pravidlo a doba blokování.
- Blokování před aplikací: zdroje nginx/PHP se neplýtvají na zbytečný provoz.
- Flexibilita: rychlé přidávání pravidel podle vzorců Bitrix (.env, .git).
- Jednoduchost: bez nadbytečných vrstev v architektuře.
Analýza je vedena podle HTTP logů (L7), ale drop paketů – v iptables s ipset na úrovni jádra.
Struktura třívrstvé obrany
Systém je rozčleněn pro postupnou filtraci.
Vrstva 1: Geo-blokování. Pakety z nerelevantních zemí jsou odříznuty okamžitě, bez parsování HTTP.
Vrstva 2: Automatické blokování podezřelých IP. Po geo-blokování se kontrolují vzorce skenování: wp-login.php, shell.php, .env. IP adresa je blokována na 2 hodiny.
Vrstva 3: CrowdSec. Integrace přes bouncer přidává globální černou listinu do ipset s TTL.
Modularita umožňuje vypínat vrstvy nezávisle, snižující riziko falešných poplachů.
Ipset jako základ škálovatelnosti
Běžné iptables s tisíci pravidly IP vedou k lineárnímu prohledávání O(n), což degraduje výkon při zátěži.
Ipset používá hash:ip nebo hash:net pro O(1) kontroly:
-m set --match-set blocked_ips src
Aktualizace sad atomicky přes temp-sadu a swap, bez přerušení filtrace:
ipset create "${country}_temp" hash:net 2>/dev/null || ipset flush "${country}_temp"
if [[ -s "$temp_file" ]]; then
while read network; do
ipset add "${country}_temp" "$network"
done < "$temp_file"
ipset swap "${country}_temp" "$country"
fi
ipset destroy "${country}_temp"
Toto zajišťuje nepřetržitou ochranu i při hromadné aktualizaci seznamů.
Detekce skenerů podle vzorců
Skript auto-block-suspicious.sh monitoruje logy tail -n, zaměřující se na podezřelé požadavky:
- wp-login.php (na Bitrix).
- shell.php, shoha.php.
- .env, .git, .aws/credentials.
IP adresa je automaticky blokována na 2 hodiny. Příklad: vlna požadavků na /wp-login.php (200+ pokusů) neutralizována za 20–30 sekund, zatížení normalizováno.
Statistika blokování:
- Čína: 8802 IP.
- Podezřelé: 10 IP (příklady: 4.193.97.168, 195.178.110.109).
Integrace CrowdSec
Bouncer CrowdSec doplňuje ipset crowdsec_blacklist s TTL:
- Autosynchronizace globálních signatur.
- Autoodstranění po timeout.
CrowdSec doplňuje vlastní moduly, uzavírající známé hrozby bez nahrazení projektové logiky.
Výsledky zavedení
Srovnání metrik (2025 bez WAF vs 2026 s WAF):
| Ukazatel | Bez ochrany | S WAF |
|----------------|-------------|-----------|
| Zbytečný provoz | ~12 % | <0,3 % |
| Zátěž průměr | 1,8–2,5 | 0,9–1,2 |
| Selhání | Až 40 % | 12–15 % |
Špičky RPS od skenování jsou přerušeny na jádru, analýza je očištěna od botů.
Omezení:
- Neochrání před L4 útoky velkým provozem.
- Vyžaduje aktualizace CMS (Bitrix).
- Neeffektivní proti residential IP.
- Ne pro globální projekty s CDN.
Co je důležité
- Škálovatelnost: ipset zajišťuje O(1) kontroly pro miliony IP.
- Atomičnost: swap předchází přerušením ve filtraci.
- Modularita: Nezávislé vrstvy (země, podezřelé, CrowdSec) pro přesné nastavení.
- Efektivita: Snížení zbytečného provozu na 0,3 %, LA poloviční.
- Transparentnost: Úplná kontrola bez černých skříněk.
— Editorial Team
Zatím žádné komentáře.