ngx_lua_waf
ngx_lua_waf to zapora aplikacji sieciowych oparta na ngx_lua, opracowana, gdy dołączyłem do Fun Travel.
Kod jest prosty, a pierwotnym celem rozwoju jest zastosowanie prostoty, wysokiej wydajności i lekkiej wagi.
Obecnie jest open source i spełnia wymagania licencji MIT. Zawiera nasze zasady filtrowania. Jeśli macie jakieś sugestie lub chcecie się z tym zdobyć, śmiało poprawcie to razem ze mną.
Zastosowania:
Zapobiegaj atakom webowym takim jak wtrysk SQL, lokalne włączenie, częściowe przepełnienie, testy fuzzing, xss, SSRF itd Zapobieganie wycieku plików, takich jak SVN/kopia zapasowa Zapobiegaj atakom przez narzędzia do testów obciążeniowych, takie jak ApacheBench Blokuj popularne narzędzia do skanowania i skanery Blokuj nietypowe żądania sieciowe Zablokuj uprawnienia do wykonywania PHP w katalogu załącznika obrazów Zapobieganie przesyłaniu webshellu
Zalecana instalacja:
Zaleca się używanie lujit2.1 do wsparcia dla Lua
ngx_lua jeśli jest to wersja 0.9.2 lub nowsza, zaleca się zmianę regularnej funkcji filtra na ngx.re.find, a efektywność dopasowania wzrośnie około trzykrotnie.
Instrukcje użycia:
Zakłada się, że ścieżka instalacji nginx to: /usr/local/nginx/conf/
Pobierz ngx_lua_waf do katalogu conf, rozpakuj go i nazwij WAF
Dodaj go do sekcji http na nginx.conf
Konfiguruj katalog reguł WAF w config.lua (zwykle w katalogu waf/conf/)
RulePath = "/usr/local/nginx/conf/waf/wafconf/"
Jeśli ścieżka absolutna się zmieni, trzeba ją odpowiednio zmodyfikować
Następnie zrestartuj nginx
Szczegóły profilu:
RulePath = "/usr/local/nginx/conf/waf/wafconf/" --katalog przechowywania reguł Attacklog = "wyłączone" --Aby umożliwić rejestrowanie informacji o ataku, musisz skonfigurować logdir logdir = "/usr/local/nginx/logs/hack/" --katalog przechowywania logów, który musi być utworzony przez samego użytkownika i wymaga uprawnień do zapisu użytkownika nginx UrlDeny="on" --czy zablokować dostęp do adresu URL Przekierowanie="włączone" --czy przekierować po przechwyceniu CookieMatch = "włączony" --Czy blokować ataki ciasteczek postMatch = "włączony" --czy zablokować atak po postprodukcji whiteModule = "on" --czy włączyć whitelist URL black_fileExt={"php","jsp"} --Wypełnij typ przyrostka pliku, który nie może być przesyłany ipWhitelist={"127.0.0.1"} --biała lista IP, wiele IP jest oddzielonych przecinkami ipBlocklist={"1.0.0.1"} --lista IP, wiele IP jest rozdzielonych przecinkami CCDeny="włączone" --Czy umożliwić przechwytywanie ataków cc (wymaga zwiększenia segmentu HTTP nginx.conf lua_shared_dict ograniczenia 10m; ) CCrate = "100/60" --Ustaw częstotliwość ataku CC na sekundy. --Domyślnie ten sam adres IP może żądać tego samego adresu tylko 100 razy na minutę html=[[Proszę, odejdź~~]] --Ostrzeżenia o treści, które można dostosować w nawiasie Uwaga: Nie używaj podwójnych cudzysłowów, aby były rozróżniane na wielka literę
Sprawdź, czy zasady obowiązują
Po wdrożeniu możesz spróbować wykonać następującą komendę:
Uwaga: Domyślnie komputer nie filtruje na białej liście, a konfigurację config.lua można samodzielnie dostosować
Przedstawienia przedstawiają się następująco:
Aktualizacje zasad:
Biorąc pod uwagę problem buforowania regularnych rzeczy, dynamiczne reguły wpływają na wydajność, więc nie używam takich rzeczy jak słowniki pamięci współdzielonej czy redis do zarządzania dynamiczną.
Aktualizacje reguł można umieszczać na innych serwerach, a zasady można regularnie pobierać za pomocą zadania crontab, a wchodzi w życie przeładowanie nginx. Aby zapewnić wysoką wydajność NGX LUA WAF.
Zapisuj tylko log filtrów, nie włączaj filtrowania, po prostu dodaj -- komentarz przed checkiem w kodzie, jeśli musisz filtrować, odwrotnie
Kilka uwag:
Zasady filtrowania można dostosować do potrzeb w ramach wafconf, a każdą regułę trzeba opakować lub podzielić z |
Reguły ARGs pobierają parametr do filtrowania URL-e to reguły, które żądają tylko adresów filtrowanych w GET post jest regułą filtrowania tylko w postowych żądaniach Biała lista jest białą listą, a adresy URL w niej pasują tak, że nie jest filtrowana user-agent to reguła filtrująca dla user-agent
Filtrowanie Get i post jest domyślnie włączone, jeśli musisz włączyć filtrowanie ciasteczek, edytuj część waf.lua cancel - comment
Format nazwy pliku loga jest następujący: Nazwa hosta sieciowego _sec.log
|