ngx_lua_waf
ngx_lua_waf je firewall založený na webových aplikacích založený na ngx_lua, který jsem vyvinul, když jsem se poprvé připojil k Fun Travel.
Kód je jednoduchý a původním záměrem vývoje je použít jednoduchost, vysoký výkon a lehkost.
Nyní je open source a splňuje licenci MIT. Obsahuje naše pravidla filtrování. Pokud máte nějaké návrhy nebo chcete něco udělat, klidně to se mnou vylepšte.
Použití:
Zabránit webovým útokům, jako je SQL injection, lokální inkluze, částečný přetečení, fuzzing testing, xss, SSRF atd Zabránit úniku souborů, jako je SVN/zálohování Zabránit útokům pomocí nástrojů pro zátěžové testování, jako je ApacheBench Blokujte běžné nástroje pro hackování a skenery Blokujte neobvyklé síťové požadavky Zablokujte PHP oprávnění k provádění adresáře pro přílohy obrázků Zabránit nahrávání webshellu
Doporučená instalace:
Doporučuje se používat lujit2.1 pro podporu Lua
ngx_lua pokud jde o verzi 0.9.2 nebo novější, doporučuje se změnit běžnou filtrační funkci na ngx.re.find, čímž se efektivita párování zvýší přibližně třikrát.
Pokyny k použití:
Předpokládá se, že instalační cesta nginx je: /usr/local/nginx/conf/
Stáhněte si ngx_lua_waf do adresáře conf, rozbalte ho a pojmenujte ho waf
Přidejte ho do http sekce nginx.conf
Nakonfigurujte adresář WAF pravidel v config.lua (obvykle v adresáři waf/conf/)
RulePath = "/usr/local/nginx/conf/waf/wafconf/"
Pokud se absolutní cesta změní, je třeba ji podle toho upravit
Pak restartuj nginx
Podrobnosti profilu:
RulePath = "/usr/local/nginx/conf/waf/wafconf/" --adresář úložiště pravidel Attacklog = "vypnuto" --Pro povolení zaznamenávání informací o útoku je potřeba nakonfigurovat logdir logdir = "/usr/local/nginx/logs/hack/" --log storage directory, který musí vytvořit sám uživatel a vyžaduje oprávnění k zápisu uživatele nginx UrlDeny="zapnuto" --zda zablokovat přístup k URL Přesměrování="zapnuto" --zda přesměrovat po zachycení CookieMatch = "zapnuto" --Zda blokovat útoky sušenkami postMatch = "zapnuto" --zda zablokovat útok po útoku whiteModule = "zapnuto" --zda zapnout whitelisting URL black_fileExt={"php","jsp"} --Vyplňte typ přípony souboru, který není povolen nahrát ipWhitelist={"127.0.0.1"} --IP whitelist, více IP adres je odděleno čárkami ipBlocklist={"1.0.0.1"} --IP blacklist, více IP adres je odděleno čárkami CCDeny="zapnuto" --Zda povolit zachycení útoků cc (vyžaduje zvýšení HTTP segmentu nginx.conf lua_shared_dict limit 10m; ) CCrate = "100/60" --Nastavte frekvenci útoku CC za sekundy. --Ve výchozím nastavení může stejná IP adresa požádat o stejnou adresu pouze 100krát za minutu html=[[Prosím, odejdi~~]] --Varovný obsah, přizpůsobitelný v závorkách Poznámka: Nepoužívejte dvojité uvozovky, aby byly citlivé na velká a písmena
Zkontrolujte, zda platí pravidla
Po nasazení můžete zkusit následující příkaz:
Poznámka: Ve výchozím nastavení se zařízení nefiltruje v whitelistu a konfiguraci config.lua si můžete upravit sami
Ztvárnění jsou následující:
Aktualizace pravidel:
Vzhledem k problému cachování běžných uživatelů dynamická pravidla ovlivňují výkon, takže pro dynamickou správu nepoužívám například sdílené paměťové slovníky a redis.
Aktualizace pravidel lze umístit na jiné servery a pravidla lze pravidelně stahovat přes úlohu crontab, přičemž nginx reload začne fungovat. Aby byl zajištěn vysoký výkon NGX LUA WAF.
Zaznamenávejte pouze záznam filtrů, nezapínejte filtrování, stačí přidat komentář před kontrolou v kódu, pokud potřebujete filtrovat, naopak
Několik poznámek:
Filtrační pravidla lze upravit podle vašich potřeb v rámci wafconf a každé pravidlo musí být zabaleno nebo rozděleno pomocí |
Pravidla ARGs získávají parametr pro filtr URL jsou pravidla, která požadují pouze URL filtrované v GET Post je filtrační pravidlo pouze u požadavků na příspěvky Whitelist je whitelist a URL v něm odpovídají, takže není filtrován user-agent je filtrační pravidlo pro user-agent
Filtrování Get a příspěvků jsou ve výchozím nastavení povoleny, pokud potřebujete filtrování cookies povolit, upravte část waf.lua cancel - comment
Formát názvu log souboru je následující: Web Host Name _sec.log
|