ngx_lua_waf
ngx_lua_waf je firewall webových aplikácií založený na ngx_lua, ktorý som vyvinul, keď som sa prvýkrát pridal k Fun Travel.
Kód je jednoduchý a pôvodným zámerom vývoja je použiť jednoduchosť, vysoký výkon a ľahkosť.
Teraz je open source a spĺňa požiadavky licencie MIT. Obsahuje naše pravidlá filtrovania. Ak máte nejaké návrhy alebo chcete urobiť FA, pokojne to so mnou vylepšite.
Využitie:
Predchádzajte webovým útokom, ako sú SQL injection, lokálne začlenenie, čiastočné pretečenie, fuzzing testovanie, xss, SSRF a podobne Zabrániť úniku súborov, ako je SVN/záloha Prevencia útokov pomocou nástrojov na záťažové testovanie ako ApacheBench Blokujte bežné hackerské nástroje a skenery Blokujte nezvyčajné sieťové požiadavky Zablokujte PHP povolenie na vykonávanie adresára príloh obrázkov Zabránenie nahrávaniu webshellu
Odporúčaná inštalácia:
Odporúča sa používať lujit2.1 na podporu Lua
ngx_lua ak ide o verziu 0.9.2 alebo novšiu, odporúča sa zmeniť bežnú filter funkciu na ngx.re.find, čím sa efektivita párovania zvýši približne trikrát.
Návod na použitie:
Predpokladá sa, že inštalačná cesta nginx je: /usr/local/nginx/conf/
Stiahnite si ngx_lua_waf do adresára conf, rozbalte ho a pomenujte ho waf
Pridajte ho do http sekcie nginx.conf
Nakonfigurujte adresár pravidiel WAF v config.lua (zvyčajne v adresári waf/conf/)
RulePath = "/usr/local/nginx/conf/waf/wafconf/"
Ak sa absolútna cesta zmení, je potrebné ju podľa toho upraviť
Potom reštartuj nginx
Detaily profilu:
RulePath = "/usr/local/nginx/conf/waf/wafconf/" --adresár ukladania pravidiel Attacklog = "vypnuté" --Na povolenie zaznamenávania informácií o útoku je potrebné nakonfigurovať logdir logdir = "/usr/local/nginx/logs/hack/" --log storage adresár, ktorý musí vytvoriť sám používateľ a vyžaduje zápisové povolenie používateľa nginx UrlDeny="zapnuté" --či zablokovať prístup k URL Presmerovanie="zapnuté" --či presmerovať po zachytení CookieMatch = "zapnuté" --Či blokovať útoky sušienok postMatch = "zapnuté" --či zablokovať útok po útoku whiteModule = "zapnuté" --či zapnúť whitelisting URL black_fileExt={"php","jsp"} --Vyplniť typ prípony súboru, ktorý nie je povolený nahrať ipWhitelist={"127.0.0.1"} --IP whitelist, viaceré IP adresy sú oddelené čiarkami ipBlocklist={"1.0.0.1"} --IP blacklist, viaceré IP adresy sú oddelené čiarkami CCDeny="zapnuté" --Či povoliť zachytenie cc útokov (vyžaduje zvýšenie HTTP segmentu nginx.conf lua_shared_dict limit 10m; ) CCrate = "100/60" --Nastavte frekvenciu útokov CC za sekundy. --Štandardne môže tá istá IP adresa žiadať tú istú adresu len 100-krát za minútu html=[[Prosím, odíď~~]] --Varovný obsah, prispôsobiteľný v zátvorkách Poznámka: Nepoužívajte dvojité úvodzovky, aby ste boli citlivé na veľkosť písmen
Skontrolujte, či platia pravidlá
Po nasadení môžete skúsiť nasledujúci príkaz:
Poznámka: V predvolenom nastavení zariadenie nefiltruje v bielom zozname a konfiguráciu config.lua si môžete upraviť sami
Zobrazenia sú nasledovné:
Aktualizácie pravidiel:
Vzhľadom na problém cachovania bežných hráčov dynamické pravidlá ovplyvňujú výkon, takže nepoužívam napríklad zdieľané pamäťové slovníky a redis na dynamickú správu.
Aktualizácie pravidiel je možné umiestniť na iné servery a pravidlá sa dajú pravidelne sťahovať cez úlohu crontab, pričom nginx reload sa aktivuje. Aby sme zabezpečili vysoký výkon NGX LUA WAF.
Zaznamenávajte len záznam filtrov, nezapínajte filtrovanie, len pridajte -- komentár pred kontrolou v kóde, ak potrebujete filtrovať, naopak
Niekoľko poznámok:
Pravidlá filtrovania môžete upraviť podľa vašich potrieb pod wafconf a každé pravidlo musí byť zabalené alebo rozdelené pomocou |
Pravidlá args získajú parameter to filter URL sú pravidlá, ktoré požadujú iba URL filtrované v GET Príspevok je filtračné pravidlo iba pri požiadavkách na príspevok Whitelist je whitelist a URL v ňom sa zhodujú, takže nie je filtrovaný user-agent je filtračné pravidlo pre user-agent
Filtrovanie Get a príspevok sú predvolene zapnuté, ak potrebujete zapnúť filtrovanie cookies, upravte časť waf.lua cancel - komentár
Formát názvu log súboru je nasledovný: Web Host Name _sec.log
|