# Конфигурация

# Новая страница



# Системные настройки

После установки компонента необходимо настроить несколько системных параметров, страницу для CAPTCHA и подготовить окружение для баз данных GeoIP.

#### 1. Системные настройки

Найдите их в разделе "Система" (значок шестеренки) -&gt; "Системные настройки", выбрав пространство имен `iskwaf`.

<table class="table is-bordered is-striped is-fullwidth" id="bkmrk-%D0%9A%D0%BB%D1%8E%D1%87-%D0%9E%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5-%D0%92%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6"><thead><tr><th>Ключ</th><th>Описание</th><th>Возможные значения/Действие</th></tr></thead><tbody><tr><td>`iskwaf_iskwaf_captcha_resource_id`</td><td>ID ресурса MODX для отображения страницы CAPTCHA.</td><td>Создайте новый ресурс MODX (например, с alias `captcha-verify`), убедитесь, что он **не кэшируемый**. В поле "Содержимое ресурса" поместите вызов сниппета `[[!IskWafCaptcha]]`. Укажите ID этого ресурса здесь.</td></tr><tr><td>`iskwaf_iskwaf_option_log`</td><td>Режим логирования WAF.</td><td>- `full`: (По умолчанию) Логируются все запросы (сработавшие правила + обычные визиты, включая те, где правила были пропущены из-за сессионной проверки).
- `triggered`: Логируются только запросы, вызвавшие срабатывание правила. Опционально может логировать факт пропуска правил из-за сессионной проверки (см. код плагина).
- `off`: Логирование отключено (но правила продолжают действовать).

</td></tr><tr><td>`iskwaf_waf_check_mode`</td><td>Режим проверки правил WAF.</td><td>- `on_every_request`: (По умолчанию) Правила WAF проверяются при каждом запросе.
- `once_per_session`: Правила WAF проверяются для пользователя только один раз за сессию. Если проверка пройдена, последующие запросы в той же сессии не проходят полную проверку WAF (но логи посещений могут вестись согласно настройке `iskwaf_iskwaf_option_log`).

</td></tr><tr><td>`iskwaf_iskwaf_log_retention_days`</td><td>Количество дней хранения записей в логе `iskwaf_logs`. Старые записи удаляются CRON-скриптом.</td><td>Число (например, `7`, `30`). По умолчанию в скрипте: 7.</td></tr><tr><td>`iskwaf_ip2location_download_token`</td><td>Ваш персональный токен для скачивания баз данных с сайта IP2Location.</td><td>Получите токен после регистрации на [lite.ip2location.com](https://lite.ip2location.com) и введите его здесь.</td></tr><tr><td>`iskwaf_ip_analysis_limit_per_run`</td><td>Максимальное количество новых/устаревших IP для анализа за один запуск CRON-скрипта `analyze_ip2location_details.php`.</td><td>Число. По умолчанию в скрипте: 500.</td></tr><tr><td>`iskwaf_ip_analysis_update_interval`</td><td>Периодичность в днях для обновления информации по IP, уже существующему в таблице деталей.</td><td>Число. По умолчанию в скрипте: 30.</td></tr><tr class="is-selected"><td colspan="3">**Автоматическое управление правилами и блокировка по странам**</td></tr><tr><td>`iskwaf_iskwaf_blocked_countries`</td><td>Блокируемые страны</td><td>Укажите двухбуквенные коды стран (ISO 3166-1 alpha-2) через запятую. Трафик из этих стран будет блокироваться, за исключением доверенных ботов. Пример: `CN,RU,KP`</td></tr><tr><td>`iskwaf_iskwaf_auto_allow_as_names`</td><td>Разрешенные имена компаний (AS Name)</td><td>Имена компаний (ASN), чьи подсети будут автоматически разрешены. Разделитель - вертикальная черта (`|`). Пример: `GOOGLE|Yandex|Microsoft`</td></tr><tr><td>`iskwaf_iskwaf_auto_allow_as_numbers`</td><td>Разрешенные номера AS (ASN)</td><td>Номера автономных систем (ASN), чьи подсети будут автоматически разрешены. Разделитель - вертикальная черта (`|`). Пример: `AS15169|AS13238`</td></tr><tr><td>`iskwaf_iskwaf_auto_block_as_names`</td><td>Блокируемые имена компаний (AS Name)</td><td>Имена компаний (ASN), чьи подсети будут автоматически заблокированы. Разделитель - вертикальная черта (`|`). Пример: `DigitalOcean|OVH`</td></tr><tr><td>`iskwaf_iskwaf_auto_block_as_numbers`</td><td>Блокируемые номера AS (ASN)</td><td>Номера автономных систем (ASN), чьи подсети будут автоматически заблокированы. Разделитель - вертикальная черта (`|`). Пример: `AS14061|AS16276`</td></tr></tbody></table>

# Страница CAPTCHA

#### Страница CAPTCHA

Как указано выше, создайте ресурс MODX для отображения CAPTCHA. Он должен быть некэшируемым и содержать вызов сниппета `[[!IskWafCaptcha? &tpl=`имя_вашего_чанка_формы`]]` (параметр `&tpl` опционален, по умолчанию `iskWafCaptchaFormTpl`).

#### 3. Настройка GeoIP (IP2Location)

Компонент IskWaf использует базы данных IP2Location LITE для определения геолокации, ASN и другой информации по IP-адресам. Сами файлы баз данных не входят в установочный пакет компонента, а скачиваются с помощью специального CRON-скрипта.

1. **Получите токен:** Зарегистрируйтесь на [lite.ip2location.com](https://lite.ip2location.com) и получите ваш персональный токен для скачивания. Введите его в системную настройку `iskwaf_ip2location_download_token`.
2. **PHP-библиотека IP2Location:**Для работы с BIN-файлами баз IP2Location необходима соответствующая PHP-библиотека. Компонент IskWaf использует PHP-файлы библиотеки, которые должны быть размещены в папке `core/components/iskwaf/lib/ip2location/src/`. Вы можете скачать "IP2Location PHP Module" (для BIN Data File) с официального сайта IP2Location и разместить содержимое его папки `src` по указанному пути.
3. **Директории для баз данных:** Убедитесь, что на сервере существуют и доступны для записи PHP следующие директории (относительно `core/components/iskwaf/`): 
    - `tmp_db_download/` (для временных файлов при скачивании)
    - `geoip_db/` (для хранения распакованных BIN-файлов баз)
4. **Первоначальное скачивание баз:** После настройки токена и размещения PHP-библиотеки, запустите CRON-скрипт `ip2location_download.php` (см. ниже) один раз вручную из командной строки сервера для первоначальной загрузки баз (`IP2LOCATION-LITE-DB11.BIN` и `IP2LOCATION-LITE-ASN.BIN`).

# Настройка GeoIP (IP2Location)

Компонент IskWaf использует базы данных IP2Location LITE для определения геолокации, ASN и другой информации по IP-адресам. Сами файлы баз данных не входят в установочный пакет компонента, а скачиваются с помощью специального CRON-скрипта.

1. **Получите токен:** Зарегистрируйтесь на [lite.ip2location.com](https://lite.ip2location.com) и получите ваш персональный токен для скачивания. Введите его в системную настройку `iskwaf_ip2location_download_token`.
2. **PHP-библиотека IP2Location:**Для работы с BIN-файлами баз IP2Location необходима соответствующая PHP-библиотека. Компонент IskWaf использует PHP-файлы библиотеки, которые должны быть размещены в папке `core/components/iskwaf/lib/ip2location/src/`. Вы можете скачать "IP2Location PHP Module" (для BIN Data File) с официального сайта IP2Location и разместить содержимое его папки `src` по указанному пути.
3. **Директории для баз данных:** Убедитесь, что на сервере существуют и доступны для записи PHP следующие директории (относительно `core/components/iskwaf/`): 
    - `tmp_db_download/` (для временных файлов при скачивании)
    - `geoip_db/` (для хранения распакованных BIN-файлов баз)
4. **Первоначальное скачивание баз:** После настройки токена и размещения PHP-библиотеки, запустите CRON-скрипт `ip2location_download.php` (см. ниже) один раз вручную из командной строки сервера для первоначальной загрузки баз (`IP2LOCATION-LITE-DB11.BIN` и `IP2LOCATION-LITE-ASN.BIN`).

# CRON-задачи

#### CRON-задачи

Для автоматической работы компонента настройте три CRON-задачи:

<div class="box" id="bkmrk-%D0%A1%D0%BA%D0%B0%D1%87%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%2F%D0%BE%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8">**Скачивание/обновление баз 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`

</div><div class="box" id="bkmrk-%D0%90%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7-ip-%D0%B0%D0%B4%D1%80%D0%B5%D1%81%D0%BE%D0%B2%2C-%D0%B7">**Анализ IP-адресов, заполнение GeoIP и авто-создание правил:**- Скрипт: `core/components/iskwaf/elements/cron/analyze_ip2location_details.php`
- Периодичность: Рекомендуется раз в 5-15 минут для оперативного создания правил.
- Пример команды: `/usr/bin/php /path/to/your/site/core/components/iskwaf/elements/cron/analyze_ip2location_details.php`

</div><div class="box" id="bkmrk-%D0%9E%D1%87%D0%B8%D1%81%D1%82%D0%BA%D0%B0-%D1%81%D1%82%D0%B0%D1%80%D1%8B%D1%85-%D0%BB%D0%BE%D0%B3%D0%BE%D0%B2">**Очистка старых логов:**- Скрипт: `core/components/iskwaf/elements/cron/clear_log.php`
- Периодичность: Рекомендуется раз в сутки.
- Пример команды: `/usr/bin/php /path/to/your/site/core/components/iskwaf/elements/cron/clear_log.php`

</div><div class="box" id="bkmrk-%D0%A4%D0%BE%D1%80%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F-%D0%BE%D1%82%D1%87%D0%B5%D1%82%D0%BE%D0%B2">**Формирования отчетов:**- Скрипт: `core/components/iskwaf/elements/cron/reports_daily.php`
- Периодичность: Рекомендуется раз в сутки.
- Пример команды: `/usr/bin/php /path/to/your/site/core/components/iskwaf/elements/cron/reports_daily.php`

</div>*Убедитесь, что пути к PHP-интерпретатору и к скриптам указаны верно для вашего сервера.*

### Использование (CMP)

Доступ к интерфейсу управления IskWaf осуществляется через главное меню менеджера MODX (обычно в разделе "Пакеты" или "Приложения").

- **Вкладка "Логи":** Просмотр всех записей лога WAF с поиском. Теперь должны отображаться колонки "Страна" и "Город" для IP-адресов, по которым есть данные.
- **Вкладки правил (IP, User-Agent, Referrer, Request URI):** Управление правилами.
- **Вкладка "Отчет":** Просмотр ежедневных сводных отчетов.