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 в каталог conf, распаковали его и назвали 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.
Записывайте только журнал фильтров, не включайте фильтрацию, просто добавляйте комментарий перед чеком в коде, если нужно фильтровать, наоборот
Некоторые заметки:
Правила фильтрации можно подстраивать под ваши нужды в wafconf, и каждое правило должно быть упаковано или разделено |
Правила ARGS получают параметры для фильтрации URL — это правила, которые запрашивают только те URL, отфильтрованные в GET Post — это правило фильтрации только в запросах постов Белый список — это белый список, и URL-адреса в нём совпадают, чтобы он не фильтровался. user-agent — это правило фильтрации для user-agent
Фильтрация Get и Post по умолчанию включены, если нужно включить фильтрацию cookie, отредактируйте waf.lua отмену — комментарий
Формат имени файла журнала следующий: Имя веб-хоста _sec.log
|