Основные возможности
- Многоуровневые правила безопасности:
- IP-адрес/CIDR (с приоритетом точного IP над подсетью).
- User-Agent (типы: содержит, точное совпадение, регулярное выражение).
- Referrer (типы: содержит, точное совпадение, регулярное выражение).
- Request URI (типы: содержит, точное совпадение, регулярное выражение, начинается с; с учетом или без учета query string).
- Гибкие действия по правилам: Block (403), CAPTCHA, Allow.
- Локальная CAPTCHA: Числовая, с заданием "первые/последние 3 цифры" из 6, сессионная.
- Опциональные режимы проверки WAF:
- Проверка на каждый запрос (стандартное поведение).
- Проверка один раз за сессию (снижает нагрузку для уже проверенных пользователей).
- Система логирования: Подробные логи срабатываний, настраиваемые режимы (`full`, `triggered`, `off`), автоматическая очистка старых логов. Логи также отражают, были ли правила WAF пропущены из-за режима "один раз за сессию".
- Анализ IP-адресов: Определение страны, региона, города, ASN и ISP для IP-адресов из логов с помощью локальных баз IP2Location LITE (через CRON).
- Ежедневные отчеты: Агрегированная статистика по событиям WAF, типам правил, хитам поисковых ботов, топ-N нарушителей (в JSON), включая данные геолокации.
- Интерфейс управления (CMP): Вкладки для логов (с отображением страны/города), каждого типа правил и отчетов; создание, редактирование, включение/отключение, удаление правил.
Установка
- Загрузите пакет компонента через "Установщик" (Extras -> Installer) в менеджере MODX.
- Найдите пакет "IskWaf" и нажмите "Установить".
- Следуйте инструкциям на экране.
Конфигурация
После установки компонента необходимо настроить несколько системных параметров, страницу для CAPTCHA и подготовить окружение для баз данных GeoIP.
1. Системные настройки
Найдите их в разделе "Система" (значок шестеренки) -> "Системные настройки", выбрав пространство имен iskwaf
.
Ключ |
Описание |
Возможные значения/Действие |
iskwaf_iskwaf_captcha_resource_id |
ID ресурса MODX для отображения страницы CAPTCHA. |
Создайте новый ресурс MODX (например, с alias captcha-verify ), убедитесь, что он не кэшируемый. В поле "Содержимое ресурса" поместите вызов сниппета [[!IskWafCaptcha]] . Укажите ID этого ресурса здесь. |
iskwaf_iskwaf_option_log |
Режим логирования WAF. |
full : (По умолчанию) Логируются все запросы (сработавшие правила + обычные визиты, включая те, где правила были пропущены из-за сессионной проверки).
triggered : Логируются только запросы, вызвавшие срабатывание правила. Опционально может логировать факт пропуска правил из-за сессионной проверки (см. код плагина).
off : Логирование отключено (но правила продолжают действовать).
|
iskwaf_waf_check_mode |
Режим проверки правил WAF. |
on_every_request : (По умолчанию) Правила WAF проверяются при каждом запросе.
once_per_session : Правила WAF проверяются для пользователя только один раз за сессию. Если проверка пройдена, последующие запросы в той же сессии не проходят полную проверку WAF (но логи посещений могут вестись согласно настройке iskwaf_iskwaf_option_log ).
|
iskwaf_iskwaf_log_retention_days |
Количество дней хранения записей в логе iskwaf_logs . Старые записи удаляются CRON-скриптом. |
Число (например, 7 , 30 ). По умолчанию в скрипте: 7. |
iskwaf_ip2location_download_token |
Ваш персональный токен для скачивания баз данных с сайта IP2Location. |
Получите токен после регистрации на lite.ip2location.com и введите его здесь. |
iskwaf_ip_analysis_limit_per_run |
Максимальное количество новых/устаревших IP для анализа за один запуск CRON-скрипта analyze_ip2location_details.php . |
Число. По умолчанию в скрипте: 5000. |
iskwaf_ip_analysis_update_interval |
Периодичность в днях для обновления информации по IP, уже существующему в таблице деталей. |
Число. По умолчанию в скрипте: 30. |
2. Страница CAPTCHA
Как указано выше, создайте ресурс MODX для отображения CAPTCHA. Он должен быть некэшируемым и содержать вызов сниппета [[!IskWafCaptcha? &tpl=`имя_вашего_чанка_формы`]]
(параметр `&tpl` опционален, по умолчанию `iskWafCaptchaFormTpl`).
3. Настройка GeoIP (IP2Location)
Компонент IskWaf использует базы данных IP2Location LITE для определения геолокации, ASN и другой информации по IP-адресам. Сами файлы баз данных не входят в установочный пакет компонента, а скачиваются с помощью специального CRON-скрипта.
- Получите токен: Зарегистрируйтесь на lite.ip2location.com и получите ваш персональный токен для скачивания. Введите его в системную настройку
iskwaf_ip2location_download_token
.
- PHP-библиотека IP2Location:
Для работы с BIN-файлами баз IP2Location необходима соответствующая PHP-библиотека. Компонент IskWaf использует PHP-файлы библиотеки, которые должны быть размещены в папке core/components/iskwaf/lib/ip2location/src/
. Вы можете скачать "IP2Location PHP Module" (для BIN Data File) с официального сайта IP2Location и разместить содержимое его папки `src` по указанному пути.
- Директории для баз данных: Убедитесь, что на сервере существуют и доступны для записи PHP следующие директории (относительно
core/components/iskwaf/
):
tmp_db_download/
(для временных файлов при скачивании)
geoip_db/
(для хранения распакованных BIN-файлов баз)
- Первоначальное скачивание баз: После настройки токена и размещения PHP-библиотеки, запустите CRON-скрипт
ip2location_download.php
(см. ниже) один раз вручную из командной строки сервера для первоначальной загрузки баз (IP2LOCATION-LITE-DB11.BIN
и IP2LOCATION-LITE-ASN.BIN
).
4. CRON-задачи
Для автоматической работы компонента настройте три CRON-задачи:
Скачивание/обновление баз GeoIP (IP2Location):
- Скрипт:
core/components/iskwaf/elements/cron/ip2location_download.php
- Периодичность: Рекомендуется раз в месяц (например, 1-го числа каждого месяца).
- Пример команды:
/usr/bin/php /path/to/your/site/core/components/iskwaf/elements/cron/ip2location_download.php
Анализ IP-адресов из логов и заполнение деталей GeoIP:
- Скрипт:
core/components/iskwaf/elements/cron/analyze_ip2location_details.php
- Периодичность: Рекомендуется раз в несколько часов или раз в сутки.
- Пример команды:
/usr/bin/php /path/to/your/site/core/components/iskwaf/elements/cron/analyze_ip2location_details.php
Очистка старых логов:
- Скрипт:
core/components/iskwaf/elements/cron/clear_log.php
- Периодичность: Рекомендуется раз в сутки.
- Пример команды:
/usr/bin/php /path/to/your/site/core/components/iskwaf/elements/cron/clear_log.php
Формирования отчетов:
- Скрипт:
core/components/iskwaf/elements/cron/reports_daily.php
- Периодичность: Рекомендуется раз в сутки.
- Пример команды:
/usr/bin/php /path/to/your/site/core/components/iskwaf/elements/cron/reports_daily.php
Убедитесь, что пути к PHP-интерпретатору и к скриптам указаны верно для вашего сервера.
Использование (CMP)
Доступ к интерфейсу управления IskWaf осуществляется через главное меню менеджера MODX (обычно в разделе "Пакеты" или "Приложения").
- Вкладка "Логи": Просмотр всех записей лога WAF с поиском. Теперь должны отображаться колонки "Страна" и "Город" для IP-адресов, по которым есть данные.
- Вкладки правил (IP, User-Agent, Referrer, Request URI): Управление правилами.
- Вкладка "Отчет": Просмотр ежедневных сводных отчетов.
Типы правил (Детально)
IP-правила
Предназначены для блокировки, разрешения или показа CAPTCHA на основе IP-адреса или CIDR-подсети посетителя.
- Поля:
IP/CIDR
, Тип правила (действие)
, Описание
, Активно
.
- Логика приоритета: Точное совпадение IP имеет приоритет над CIDR-подсетью. Среди CIDR-подсетей, содержащих один и тот же IP, приоритет у более узкой (с наибольшей маской).
Примеры паттернов для IP/CIDR
:
- Одиночный IPv4:
192.168.1.100
- IPv4 CIDR (подсеть):
10.0.0.0/8
- IPv6 CIDR:
2001:db8::/32
User-Agent правила
Позволяют применять действия на основе строки User-Agent.
- Поля:
Паттерн User-Agent
, Тип паттерна
('contains', 'exact', 'regex'), Тип правила (действие)
, Описание
, Активно
.
Примеры паттернов для Паттерн User-Agent
:
- Тип:
contains
, Паттерн: AhrefsBot
- Тип:
regex
, Паттерн: /^EvilCorp Crawler\/[0-9\.]+/i
Referrer правила
Фильтруют запросы на основе HTTP Referrer.
- Поля:
Паттерн Referrer
, Тип паттерна
('contains', 'exact', 'regex'), Тип правила (действие)
, Описание
, Активно
.
Примеры паттернов для Паттерн Referrer
:
- Тип:
contains
, Паттерн: spam-site.com
- Тип:
regex
, Паттерн: /^https?:\/\/([\w-]+\.)*spammerdomain\.com/i
Request URI правила
Применяют действия на основе запрашиваемого URI.
- Поля:
Паттерн URI
, Тип паттерна
('contains', 'exact', 'regex', 'starts_with'), Учитывать Query String
(да/нет), Тип правила (действие)
, Описание
, Активно
.
Примеры паттернов для Паттерн URI
:
- Тип:
exact
, Query String: нет
, Паттерн: /wp-login.php
- Тип:
starts_with
, Query String: нет
, Паттерн: /admin-backup/
- Тип:
contains
, Query String: да
, Паттерн: eval(
Система CAPTCHA
IskWaf использует локальную числовую CAPTCHA. Генерируется изображение с 6 цифрами, пользователю предлагается ввести первые или последние три. Прохождение запоминается в сессии. Отображается через сниппет [[!IskWafCaptcha]]
(поддерживает &tpl
).
Система отчетов
Ежедневные сводки в IskWafReportDaily
включают: общее количество событий WAF, блокировок, CAPTCHA, разрешений по правилам, срабатываний по типам правил, хиты поисковых ботов, топ N IP и правил (JSON). Генерируются CRON-скриптом.
Важные замечания
- Порядок выполнения правил: IP -> User-Agent -> Referrer -> Request URI. Первое сработавшее правило определяет действие.
- Регулярные выражения: Должны включать ограничители/флаги (например,
/badbot/i
). Тестируйте.
- IP-адрес посетителя: По умолчанию
$_SERVER['REMOTE_ADDR']
. Для сайтов за прокси может потребоваться адаптация.
- Производительность: Большое количество правил или режим логирования
full
могут влиять на производительность.
- Ложные срабатывания: Возможны. Регулярно проверяйте логи.
Отказ от ответственности
IskWaf является инструментом для базовой защиты и не заменяет собой комплексные корпоративные решения безопасности или специализированные сервисы WAF. Используйте его на свой страх и риск. Рекомендуется всегда иметь актуальные резервные копии вашего сайта.