ngx_lua_waf
ngx_lua_waf är en ngx_lua-baserad webbapplikationsbrandvägg som utvecklades när jag först började på Fun Travel.
Koden är enkel, och den ursprungliga avsikten med utvecklingen är att använda enkelhet, hög prestanda och lågvikt.
Det är nu öppet källkod och följer MIT-licensen. Den innehåller våra filtreringsregler. Om du har några förslag eller vill göra en FA, tveka inte att förbättra det med mig.
Användningsområden:
Förhindra webbattacker som SQL-injektion, lokal inkludering, partiell överbelastning, fuzzing-testning, xss, SSRF, etc Förhindra filläckage som SVN/backup Förhindra attacker från stresstestningsverktyg som ApacheBench Blockera vanliga skanningshackningsverktyg och skannrar Blockera ovanliga nätverksförfrågningar Blockera PHP-exekveringsbehörigheten för bildbilagan Förhindra webshell-uppladdningar
Rekommenderad installation:
Det rekommenderas att använda lujit2.1 för lua-stöd
ngx_lua om det är en version 0.9.2 eller senare, rekommenderas det att ändra den vanliga filterfunktionen till ngx.re.find, och matchningseffektiviteten kommer att öka ungefär tre gånger.
Bruksanvisning:
nginx-installationsvägen antas vara: /usr/local/nginx/conf/
Ladda ner ngx_lua_waf till conf-katalogen, packa upp den och döp den till waf
Lägg till det i http-sektionen på nginx.conf
Konfigurera WAF-regelkatalogen i config.lua (vanligtvis i waf/conf/-katalogen)
RulePath = "/usr/local/nginx/conf/waf/wafconf/"
Om den absoluta vägen ändras måste den justeras därefter
Sedan startar nginx om
Profildetaljer:
RulePath = "/usr/local/nginx/conf/waf/wafconf/" --regellagringskatalog Attacklog = "av" --För att aktivera loggning av attackinformation måste du konfigurera logdir logdir = "/usr/local/nginx/logs/hack/" --logglagringskatalog, som måste skapas av användaren själv och kräver skrivbehörighet från nginx-användaren UrlDeny="på" --om URL-åtkomst ska blockeras Redirect="på" --om man ska omdirigera efter avlyssning CookieMatch = "på" --Om man ska blockera cookieattacker postMatch = "på" --om man ska blockera en stolpattack whiteModule = "på" --om man ska slå på vitlistning av URL:er black_fileExt={"php","jsp"} --Fyll i filsuffixtypen som inte får laddas upp ipWhitelist={"127.0.0.1"} --IP-vitlista, flera IP-adresser separeras med kommatecken ipBlocklist={"1.0.0.1"} --IP-svartlista, flera IP-adresser separeras av kommatecken CCDeny="på" --Om man ska aktivera avlyssning av cc-attacker (kräver att HTTP-segmentet i nginx.conf ökas lua_shared_dict gräns 10m; ) CCrate = "100/60" --Ställ in CC-attackfrekvensen på sekunder. --Som standard kan samma IP-adress bara begära samma adress 100 gånger per minut html=[[Snälla gå härifrån~~]] --Varningsinnehåll, anpassningsbart inom parentes Obs: Använd inte dubbla citattecken för att vara kasuskänslig
Kontrollera om reglerna gäller
Efter utplacering kan du prova följande kommando:
Observera: Som standard filtrerar inte maskinen i vitlistan, och du kan justera config.lua-konfigurationen själv
Renderingarna är följande:
Regeluppdateringar:
Med tanke på cache-problemet med regulars påverkar dynamiska regler prestandan, så jag använder inte saker som delade minnesordböcker och redis för dynamisk hantering.
Regeluppdateringar kan placeras på andra servrar, och reglerna kan uppdateras genom att ladda ner dem regelbundet via crontab-uppgiften, och nginx-omladdningen träder i kraft. För att säkerställa NGX LUA WAF:s höga prestanda.
Registrera bara filterloggen, slå inte på filtrering, lägg bara till en -- kommentar framför att kontrollera i koden, om du behöver filtrera, vice versa
Några anteckningar:
Filtreringsreglerna kan justeras efter dina behov under wafconf, och varje regel måste wrappas eller delas med |
ARGS-regler får parameter för filter URL:er är regler som endast begär URL:er filtrerade i GET Inlägg är en filtreringsregel endast vid inläggsförfrågningar Vitlistan är en vitlista, och URL:erna i den matchar så att den inte filtreras User-Agent är en filtreringsregel för User-Agent
Get och post-filtrering är aktiverade som standard, om du behöver aktivera cookie-filtrering, redigera waf.lua cancel-delen - kommentera
Loggfilens namnformat är följande: Webbvärdens namn _sec.log
|