ngx_lua_waf
ngx_lua_waf — це фаєрвол веб-додатків на основі ngx_lua, розроблений, коли я вперше приєднався до Fun Travel.
Код простий, а початкова мета розробки — використовувати простоту, високу продуктивність і легкість.
Зараз він має відкритий код і відповідає ліцензії MIT. Він містить наші правила фільтрації. Якщо у вас є якісь поради або ви хочете поговорити, будь ласка, покращуйте це разом зі мною.
Застосування:
Запобігайте веб-атакам, таким як SQL-ін'єкція, локальне включення, часткове переповнення, тестування fuzzing, xss, SSRF тощо Запобігайте виточенню файлів, таких як SVN/резервне копіювання Запобігайте атакам за допомогою інструментів для стрес-тестування, таких як ApacheBench Блокуйте поширені інструменти хакерування сканування, сканери Блокування незвичних мережевих запитів Заблокуйте дозвіл на виконання PHP каталогу вкладень зображень Запобігання завантаженню через вебшелл
Рекомендована установка:
Рекомендується використовувати 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/" --каталог зберігання журналів, який має бути створений самим користувачем і потребує дозволу на запис користувача nginx urlDeny="on" --чи варто блокувати доступ до URL Перенаправлення="увімкнено" --чи варто перенаправляти після перехоплення CookieMatch = «увімкнено» --Чи варто блокувати атаки печивом postMatch = "on" --чи варто блокувати пост-атаку whiteModule = «увімкнено» --чи вмикати білий список URL black_fileExt={"php","jsp"} --Введіть тип суфікса файлу, який не можна завантажувати ipWhitelist={"127.0.0.1"} --IP білий список, кілька IP-адрес розділені комами ipBlocklist={"1.0.0.1"} --IP чорний список, кілька IP розділені комами CCDeny="увімкнено" --Чи варто вмикати перехоплення CC-атак (потрібно збільшити HTTP-сегмент nginx.conf lua_shared_dict обмеження 10м; ) CCrate = «100/60» --Встановіть частоту атаки CC за секунди. --За замовчуванням одна й та сама IP-адреса може запитувати одну й ту ж адресу лише 100 разів на хвилину html=[[Будь ласка, йди геть~~]] --Попереджувальний контент, який можна налаштувати в дужках Примітка: не використовуйте подвійні лапки, щоб бути чутливим до регістру
Перевірте, чи діють ці правила
Після розгортання ви можете спробувати наступну команду:
Примітка: за замовчуванням машина не фільтрує у білому списку, і ви можете самостійно налаштувати конфігурацію config.lua
Візуалізації такі::
Оновлення правил:
Враховуючи проблему кешування постійних користувачів, динамічні правила впливають на продуктивність, тому я не використовую такі речі, як словники спільної пам'яті та redis для динамічного управління.
Оновлення правил можна розміщувати на інших серверах, а правила можна регулярно завантажувати через завдання crontab, і перезавантаження nginx набуде чинності. Забезпечити високу продуктивність NGX LUA WAF.
Записуйте лише журнал фільтрів, не вмикайте фільтрацію, просто додайте коментар перед «check» у коді, якщо потрібно фільтрувати, навпаки
Декілька нотаток:
Правила фільтрації можна налаштовувати відповідно до ваших потреб у wafconf, і кожне правило має бути обгорнуте або розділене за допомогою |
Правила ARGS отримують параметр для фільтрації URL — це правила, які запитують лише URL, відфільтровані в GET Post — це правило фільтрації лише у запитах постів Білий список — це білий список, і URL-адреси в ньому збігаються, тому він не фільтрується user-agent — це правило фільтрації для user-agent
Фільтрація Get і Post за замовчуванням увімкнені, якщо потрібно увімкнути фільтрацію cookie, відредагуйте waf.lua скасування — коментар
Формат назви файлу журналу виглядає так: Ім'я веб-хоста _sec.log
|