Skip to content
Эта страница создана и переведена с помощью ИИ. Если вы заметили неточности, помогите нам улучшить её. Редактировать на GitHub

Устранение неполадок

На этой странице рассмотрены наиболее распространённые проблемы при запуске PRX-WAF, их причины и решения.

Ошибка подключения к базе данных

Симптомы: PRX-WAF не запускается с ошибками "connection refused" или "authentication failed".

Решения:

  1. Проверьте, что PostgreSQL запущен:
bash
# Docker
docker compose ps postgres

# systemd
sudo systemctl status postgresql
  1. Проверьте связность:
bash
psql "postgresql://prx_waf:[email protected]:5432/prx_waf"
  1. Проверьте строку подключения в вашем TOML-файле конфигурации:
toml
[storage]
database_url = "postgresql://prx_waf:[email protected]:5432/prx_waf"
  1. Запустите миграции, если база данных существует, но таблицы отсутствуют:
bash
prx-waf -c configs/default.toml migrate

Правила не загружаются

Симптомы: PRX-WAF запускается, но нет активных правил. Атаки не обнаруживаются.

Решения:

  1. Проверьте статистику правил:
bash
prx-waf rules stats

Если вывод показывает 0 правил, каталог правил может быть пустым или неправильно настроенным.

  1. Проверьте путь к каталогу правил в вашей конфигурации:
toml
[rules]
dir = "rules/"
  1. Проверьте файлы правил:
bash
python rules/tools/validate.py rules/
  1. Проверьте синтаксические ошибки YAML — один неправильно сформированный файл может предотвратить загрузку всех правил:
bash
# Проверяйте по одному файлу для нахождения проблемы
python rules/tools/validate.py rules/owasp-crs/sqli.yaml
  1. Убедитесь, что встроенные правила включены:
toml
[rules]
enable_builtin_owasp   = true
enable_builtin_bot     = true
enable_builtin_scanner = true

Горячая перезагрузка не работает

Симптомы: Файлы правил изменяются, но изменения не вступают в силу.

Решения:

  1. Убедитесь, что горячая перезагрузка включена:
toml
[rules]
hot_reload = true
reload_debounce_ms = 500
  1. Запустите перезагрузку вручную:
bash
prx-waf rules reload
  1. Отправьте SIGHUP:
bash
kill -HUP $(pgrep prx-waf)
  1. Проверьте лимиты inotify (Linux):
bash
cat /proc/sys/fs/inotify/max_user_watches
# Если слишком мало, увеличьте:
echo "fs.inotify.max_user_watches=524288" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

Ложные срабатывания

Симптомы: Легитимные запросы блокируются (403 Forbidden).

Решения:

  1. Определите блокирующее правило из событий безопасности:
bash
curl -H "Authorization: Bearer $TOKEN" http://localhost:9527/api/security-events

Ищите поле rule_id в событии.

  1. Отключите конкретное правило:
bash
prx-waf rules disable CRS-942100
  1. Понизьте уровень паранойи. Если вы используете паранойю 2+, попробуйте снизить до 1.

  2. Переключите правило в режим log для мониторинга вместо блокировки:

Отредактируйте файл правила, измените action: "block" на action: "log", затем перезагрузите:

bash
prx-waf rules reload
  1. Добавьте IP в белый список для доверенных источников:
bash
curl -X POST http://localhost:9527/api/rules/ip \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"ip": "10.0.0.0/8", "action": "allow"}'

TIP

При развёртывании новых правил начинайте с action: log для мониторинга ложных срабатываний перед переключением на action: block.

Проблемы с SSL-сертификатами

Симптомы: Ошибки HTTPS-соединений, ошибки сертификатов или сбои обновления Let's Encrypt.

Решения:

  1. Проверьте статус сертификата в Admin UI в разделе SSL Certificates.

  2. Убедитесь, что порт 80 доступен из интернета для ACME HTTP-01 challenge.

  3. Проверьте пути к сертификатам, если используете сертификаты вручную:

toml
[http3]
cert_pem = "/etc/prx-waf/tls/cert.pem"
key_pem  = "/etc/prx-waf/tls/key.pem"
  1. Убедитесь, что сертификат соответствует домену:
bash
openssl x509 -in /etc/prx-waf/tls/cert.pem -text -noout | grep -A1 "Subject Alternative Name"

Узлы кластера не подключаются

Симптомы: Рабочие узлы не могут присоединиться к кластеру. Статус показывает "disconnected" пиры.

Решения:

  1. Проверьте сетевую связность на кластерном порту (по умолчанию: UDP 16851):
bash
# От рабочего к главному
nc -zuv node-a 16851
  1. Проверьте правила брандмауэра — кластерная коммуникация использует UDP:
bash
sudo ufw allow 16851/udp
  1. Проверьте сертификаты — все узлы должны использовать сертификаты, подписанные одним CA:
bash
openssl verify -CAfile cluster-ca.pem node-b.pem
  1. Проверьте конфигурацию seed на рабочих узлах:
toml
[cluster]
seeds = ["node-a:16851"]   # Должен разрешаться в главный узел
  1. Проверьте журналы с debug-уровнем:
bash
prx-waf -c config.toml run 2>&1 | grep -i "cluster\|quic\|peer"

Высокое использование памяти

Симптомы: Процесс PRX-WAF потребляет больше памяти, чем ожидалось.

Решения:

  1. Уменьшите размер кеша ответов:
toml
[cache]
max_size_mb = 128    # Уменьшить с 256 по умолчанию
  1. Уменьшите пул соединений с базой данных:
toml
[storage]
max_connections = 10   # Уменьшить с 20 по умолчанию
  1. Уменьшите количество рабочих потоков:
toml
[proxy]
worker_threads = 2    # Уменьшить относительно количества CPU
  1. Мониторинг использования памяти:
bash
ps aux | grep prx-waf

Проблемы с подключением к CrowdSec

Симптомы: Интеграция CrowdSec показывает "disconnected" или решения не загружаются.

Решения:

  1. Проверьте связность LAPI:
bash
prx-waf crowdsec test
  1. Проверьте API-ключ:
bash
# На машине с CrowdSec
cscli bouncers list
  1. Проверьте URL LAPI:
toml
[crowdsec]
lapi_url = "http://127.0.0.1:8080"
api_key  = "your-bouncer-key"
  1. Установите безопасное действие при сбое для случая недоступности LAPI:
toml
[crowdsec]
fallback_action = "log"    # Не блокировать при недоступности LAPI

Настройка производительности

Медленное время отклика

  1. Включите кеширование ответов:
toml
[cache]
enabled = true
max_size_mb = 512
  1. Увеличьте количество рабочих потоков:
toml
[proxy]
worker_threads = 8
  1. Увеличьте количество соединений с базой данных:
toml
[storage]
max_connections = 50

Высокая нагрузка на CPU

  1. Уменьшите количество активных правил. Отключите правила уровней паранойи 3-4, если они не нужны.

  2. Отключите неиспользуемые фазы обнаружения. Например, если CrowdSec не используется:

toml
[crowdsec]
enabled = false

Получение помощи

Если ни одно из вышеприведённых решений не устраняет проблему:

  1. Проверьте существующие issues: github.com/openprx/prx-waf/issues
  2. Создайте новый issue с:
    • Версией PRX-WAF
    • Операционной системой и версией ядра
    • Файлом конфигурации (с скрытыми паролями)
    • Соответствующим выводом журналов
    • Шагами для воспроизведения

Следующие шаги

Released under the Apache-2.0 License.