Stručně: ModSecurity je webový aplikační firewall, který běží ve webovém serveru; OWASP Core Rule Set (CRS) k němu dodává volně dostupná pravidla proti rozšířeným druhům útoků. Pro Apache projekt CRS doporučuje ModSecurity v2, pro Nginx přichází v úvahu konektor v3 nebo Coraza. Začněte v blokovacím režimu s velmi vysokými prahy anomálií, postupně je snižujte a falešné poplachy řešte cílenými výjimkami. Aktualizaci PHP to nenahrazuje.
Vlastní WAF jako další vrstva
Od PHP2Shell se mnoho firem ptá, zda potřebují webový aplikační firewall. Kdo své weby doručuje přes Cloudflare, má podle Cloudflare od 21. října 2026 automaticky aktivní ochranná pravidla. Kdo to nedělá nebo nechce provoz směrovat přes třetí stranu, může provozovat WAF přímo na vlastním serveru.
Nejznámější kombinací je ModSecurity s OWASP Core Rule Set. Obojí je open source a zdarma. CRS je sbírka obecných pravidel rozpoznávání, například proti SQL injection, cross-site scripting nebo vkládání souborů. Projekt sám popisuje svůj cíl jako obecné rozpoznávání útoků s co nejmenším počtem falešných poplachů, jako jeden stavební kámen z několika.
Tím je pojmenována i hranice. WAF kontroluje požadavky a odpovědi, neopravuje zranitelnost v interpretu PHP. Proč potřebujete obojí, popisuje WAF, nebo aktualizace: proč potřebujete obojí.
Který engine se hodí k vašemu webovému serveru
Pravidla potřebují engine, který je spouští. Podle dokumentace CRS existují tři kompatibilní možnosti:
| Engine | Webový server | Zařazení podle projektu CRS |
|---|---|---|
| ModSecurity v2 | Apache (modul) | referenční implementace, doporučeno pro Apache |
| ModSecurity v3 (libModSecurity) | hlavně Nginx přes konektor | skutečně produkčně použitelný je jen konektor pro Nginx; neprojde 2 až 4 procenty testů CRS |
| Coraza | proxy a integrace založené na Go | úspěšně projde celou testovací sadu CRS v4 |
K pozadí: ModSecurity dlouho vyvíjel Trustwave. Trustwave v roce 2021 oznámil, že vývoj v roce 2024 ukončí. Dne 25. ledna 2024 přešel projekt na nadaci OWASP Foundation. U nových instalací zkontrolujte, kterou verzi vaše distribuce dodává a jak je aktuální.
Jak Core Rule Set funguje
CRS ve výchozím nastavení neblokuje při první podezřelé nápadnosti. Pracuje s body anomálií: každé spuštěné pravidlo přičte body podle závažnosti a teprve když součet překročí práh, je požadavek odmítnut.
- Stupně závažnosti: kritická 5 bodů, chyba 4, varování 3, upozornění 2.
- Práh pro požadavky:
tx.inbound_anomaly_score_threshold, výchozí 5. - Práh pro odpovědi:
tx.outbound_anomaly_score_threshold, výchozí 4. - Úroveň paranoie 1 až 4 v
crs-setup.conf: úroveň 1 je základní zabezpečení pro každý server v internetu, úroveň 2 se podle projektu hodí pro aplikace se skutečnými daty uživatelů, například e-shopy, úrovně 3 a 4 přinášejí výrazně více falešných poplachů.
Vyšší úroveň paranoie rozpozná víc, ale vytváří i víc falešných poplachů. Pro většinu firemních webů je úroveň 1 začátkem a úroveň 2 pozdějším cílem.
Zavést ModSecurity s OWASP CRS, aniž by web vypadl
Projekt CRS doporučuje u nových instalací zapnout blokovací režim hned od začátku, ale s velmi vysokými prahy, až 10000, a ty pak postupně snižovat. Tak získáte zkušenosti se skutečnými přístupy, aniž byste uživatele vyloučili. Prahy nastavíte v crs-setup.conf:
# crs-setup.conf: úvodní fáze s velmi vysokými prahy
SecAction \
"id:900110,\
phase:1,\
pass,\
t:none,\
nolog,\
setvar:tx.inbound_anomaly_score_threshold=10000,\
setvar:tx.outbound_anomaly_score_threshold=10000"
Zapojení pod Apache se řídí pořadím, které dokumentace CRS pro pluginy předepisuje. Cesty se podle distribuce liší:
<IfModule security2_module>
SecRuleEngine On
Include /etc/modsecurity/crs/crs-setup.conf
Include /etc/modsecurity/crs/plugins/*-config.conf
Include /etc/modsecurity/crs/plugins/*-before.conf
Include /etc/modsecurity/crs/rules/*.conf
Include /etc/modsecurity/crs/plugins/*-after.conf
</IfModule>
Poté vyhodnocujte audit log, který je určen v SecAuditLog. Jak protokoly systematicky prohledávat, popisuje Vyhodnocení logů webového serveru po útoku. Prahy snižujte po stupních, například v průběhu několika týdnů, až dosáhnete výchozí hodnoty.
Falešné poplachy řešit cíleně
Falešné poplachy jsou normální, zvlášť v backendech CMS s editory, které ukládají HTML. Nejhorší reakcí je WAF vypnout. Lepší jsou dva nástroje.
Za prvé pluginy: Projekt CRS udržuje pluginy s pravidly výjimek pro rozšířené aplikace, například pro WordPress. Zkopírují se do složky pluginů a načtou se pomocí výše uvedených řádků Include. Oficiální seznam projekt vede ve svém adresáři pluginů.
Za druhé vlastní, úzce vymezené výjimky. Místo vypnutí pravidla všude ho vyjmete jen pro cestu, kde překáží:
# Vlastní výjimka, načíst PŘED pravidly CRS (např. v souboru *-before.conf)
SecRule REQUEST_URI "@beginsWith /admin/editor/speichern" \
"id:1000010,\
phase:1,\
pass,\
nolog,\
ctl:ruleRemoveById=941100"
ID pravidla zjistíte z audit logu falešného poplachu. Každou výjimku zdokumentujte s důvodem a datem, aby ji bylo možné později přezkoumat.
Po každé změně prahů nebo výjimek otestujte kritické cesty své aplikace: přihlášení, objednávku, platbu, kontaktní formulář a redakci. WAF, která blokuje objednávky, se brzy zase vypne.
U serverů Apache se vyplatí WAF řešit společně se zbytkem konfigurace; základy jsou v článku Bezpečné nastavení Apache pro PHP. Jak pravidla Cloudflare srovnat, ukazuje Ochranná pravidla Cloudflare proti PHP2Shell. Přechodná opatření na samotném serveru jsou na stránce Okamžitá opatření, když zatím nemůžete záplatovat.
Závěr: WAF potřebuje péči
ModSecurity s OWASP Core Rule Set vám dává výkonný webový aplikační firewall bez licenčních nákladů a bez závislosti na externí službě. Cenou je práce: zvolit engine odpovídající webovému serveru, začít s vysokými prahy, vyhodnocovat falešné poplachy, udržovat výjimky a udržovat pravidla aktuální.
Kdo tuto pracnost nezvládne, často lépe zvolí dobře nakonfigurovanou cloudovou WAF. Kdo ji zvládne, získá vrstvu, která zachytí mnoho standardních útoků a v audit lozích poskytuje cenná vodítka. V žádném případě nenahrazuje aktualizaci: proti PHP2Shell chrání jen PHP 8.5.12, 8.4.27, 8.3.36, 8.2.35 nebo potvrzený backport, následovaný restartem všech procesů PHP.
Jak konkrétně pomáhá PHP SOS?
- Zvolit engine: Zkontrolujeme webový server, distribuci a dostupné balíčky a doporučíme vhodnou kombinaci.
- Zavést: Nainstalujeme CRS s vysokými počátečními prahy, zapojíme vhodné pluginy a nastavíme protokolování.
- Vyladit: Po několik týdnů vyhodnocujeme falešné poplachy, vytváříme cílené výjimky a snižujeme prahy.
- Zařadit: V rámci WAF a virtuálního záplatování spojujeme WAF s přechodnými opatřeními a cestou k řádné záplatě.
Časté dotazy
Chrání OWASP CRS před PHP2Shell?
Nepočítejte s tím. Core Rule Set rozpoznává obecné vzorce útoků a není šitý na konkrétní zranitelnost. Cloudflare navíc upozorňuje, že u PHP2Shell pravidla jen podle dat požadavku nestačí. Aktualizace PHP zůstává povinná.
Který engine mám zvolit pro Nginx?
Podle projektu CRS je u ModSecurity v3 skutečně produkčně použitelný jen konektor pro Nginx a v3 neprojde malou část testů CRS. Alternativou je Coraza, která podle údajů projektu úspěšně projde celou testovací sadu CRS v4. Pro Apache projekt doporučuje ModSecurity v2.
Je ModSecurity stále udržováno?
Podle dokumentace CRS Trustwave oznámil, že vývoj v roce 2024 ukončí. Dne 25. ledna 2024 byl projekt předán nadaci OWASP Foundation a od té doby se tam rozvíjí dál.
Jak zabráním tomu, aby WAF ochromila můj e-shop?
Začněte s velmi vysokými prahy anomálií, jak doporučuje projekt CRS, a postupně je snižujte. Přitom vyhodnocujte protokoly a pro svou aplikaci vytvářejte cílené výjimky místo plošného vypínání pravidel.