ngx_lua_waf
ngx_lua_waf е защитна стена за уеб приложение, базирана на ngx_lua, разработена, когато за първи път се присъединих към Fun Travel.
Кодът е прост, а първоначалната цел на разработката е да се използва простота, висока производителност и лекота.
Сега е с отворен код и отговаря на лиценза на MIT. Съдържа нашите правила за филтриране. Ако имате предложения или искате да го направите, моля, не се колебайте да го подобрите с мен.
Приложения:
Предотвратете уеб атаки като SQL инжекция, локално включване, частично препълване, fuzzing testing, xss, SSRF и др Предотвратете изтичане на файлове като SVN/архивиране Предотвратете атаки от инструменти за стрес тестване като ApacheBench Блокирайте често срещани инструменти за хакване на сканиране, скенери Блокиране на необичайни мрежови заявки Блокирайте разрешението за изпълнение на PHP в директорията с прикачени файлове на изображението Предотвратете качването в webshell
Препоръчителна инсталация:
Препоръчва се да се използва lujit2.1 за Lua поддръжка
ngx_lua ако е версия 0.9.2 или по-нова, се препоръчва да се смени обичайната функция за филтър на ngx.re.find, като ефективността на съвпадение ще се увеличи около три пъти.
Указания за употреба:
Предполага се, че пътят за инсталация на nginx е: /usr/local/nginx/conf/
Изтегли ngx_lua_waf от директорията на конференцията, разархивирай я и я наименувам waf
Добавете го в http секцията на nginx.conf
Конфигурирайте директорията с правила на WAF в config.lua (обикновено в директорията waf/conf/)
RulePath = "/usr/local/nginx/conf/waf/wafconf/"
Ако абсолютният път се промени, той трябва да бъде модифициран съответно
После рестартирайте nginx
Детайли за профила:
RulePath = "/usr/local/nginx/conf/waf/wafconf/" --директория за съхранение на правила attacklog = "изключен" --За да активирате логване на информация за атаки, трябва да конфигурирате logdir logdir = "/usr/local/nginx/logs/hack/" --log storage directory, която трябва да бъде създадена лично от потребителя и изисква разрешение за запис от потребителя на nginx UrlDeny="включено" --дали да блокирам достъпа до URL адреси Redirect="on" --дали да пренасоча след прихващане CookieMatch = "включен" --Дали да блокирам атаки с бисквитки postMatch = "on" --дали да блокирам атака след whiteModule = "включен" --дали да включа бял списък на URL адреси black_fileExt={"php","jsp"} --Попълни тип суфикс на файл, който не е позволено да се качва ipWhitelist={"127.0.0.1"} --IP whitelist, множество IP адреси са разделени със запетаи ipBlocklist={"1.0.0.1"} --IP черен списък, множество IP адреси са разделени със запетаи CCDeny="on" --Дали да се активира прихващането на cc атаки (изисква HTTP сегментът на nginx.conf да бъде увеличен lua_shared_dict ограничение от 10m; ) CCrate = "100/60" --Настрой честотата на CC атаката за секунди. --По подразбиране един и същ IP адрес може да иска един и същ адрес само 100 пъти в минута html=[[Моля, отиди си~~]] --Предупредително съдържание, персонализирано в скоби Забележка: Не използвайте двойни кавички, за да бъдете чувствителни към регистри
Проверете дали правилата са в сила
След разгръщането можете да опитате следната команда:
Забележка: По подразбиране машината не филтрира в белия списък и можете сами да настроите конфигурацията на config.lua
Визуализациите са както следват:
Актуализации на правилата:
Като се има предвид проблема с кеширането на редовните клиенти, динамичните правила влияят на производителността, затова не използвам неща като речници за споделена памет и redis за динамично управление.
Актуализациите на правилата могат да се поставят на други сървъри, а правилата могат да се актуализират чрез редовно изтегляне чрез задачата crontab, и зареждането на nginx ще влезе в сила. За да се осигури висока производителност на NGX LUA WAF.
Записвайте само лога на филтъра, не включвайте филтрирането, просто добавете коментар пред отметката в кода, ако трябва да филтрирате, обратно
Някои бележки:
Правилата за филтриране могат да се коригират според вашите нужди под wafconf, а всяко правило трябва да бъде обвито или разделено с |
ARGS правилата получават параметър за филтриране URL адресите са правила, които искат само URL адреси, филтрирани в GET Post е правило за филтриране само при заявки за публикации Белият списък е бял списък, а URL адресите в него съвпадат, така че да не се филтрира user-agent е правило за филтриране на user-agent
Get и post филтрирането са активирани по подразбиране, ако трябва да активирате филтрирането чрез бисквитки, редактирайте waf.lua отмени - коментар
Форматът на името на лог файла е следният: Име на уеб хост _sec.log
|