Устранение неполадок
На этой странице рассмотрены наиболее распространённые проблемы при запуске PRX-WAF, их причины и решения.
Ошибка подключения к базе данных
Симптомы: PRX-WAF не запускается с ошибками "connection refused" или "authentication failed".
Решения:
- Проверьте, что PostgreSQL запущен:
# Docker
docker compose ps postgres
# systemd
sudo systemctl status postgresql- Проверьте связность:
psql "postgresql://prx_waf:[email protected]:5432/prx_waf"- Проверьте строку подключения в вашем TOML-файле конфигурации:
[storage]
database_url = "postgresql://prx_waf:[email protected]:5432/prx_waf"- Запустите миграции, если база данных существует, но таблицы отсутствуют:
prx-waf -c configs/default.toml migrateПравила не загружаются
Симптомы: PRX-WAF запускается, но нет активных правил. Атаки не обнаруживаются.
Решения:
- Проверьте статистику правил:
prx-waf rules statsЕсли вывод показывает 0 правил, каталог правил может быть пустым или неправильно настроенным.
- Проверьте путь к каталогу правил в вашей конфигурации:
[rules]
dir = "rules/"- Проверьте файлы правил:
python rules/tools/validate.py rules/- Проверьте синтаксические ошибки YAML — один неправильно сформированный файл может предотвратить загрузку всех правил:
# Проверяйте по одному файлу для нахождения проблемы
python rules/tools/validate.py rules/owasp-crs/sqli.yaml- Убедитесь, что встроенные правила включены:
[rules]
enable_builtin_owasp = true
enable_builtin_bot = true
enable_builtin_scanner = trueГорячая перезагрузка не работает
Симптомы: Файлы правил изменяются, но изменения не вступают в силу.
Решения:
- Убедитесь, что горячая перезагрузка включена:
[rules]
hot_reload = true
reload_debounce_ms = 500- Запустите перезагрузку вручную:
prx-waf rules reload- Отправьте SIGHUP:
kill -HUP $(pgrep prx-waf)- Проверьте лимиты inotify (Linux):
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).
Решения:
- Определите блокирующее правило из событий безопасности:
curl -H "Authorization: Bearer $TOKEN" http://localhost:9527/api/security-eventsИщите поле rule_id в событии.
- Отключите конкретное правило:
prx-waf rules disable CRS-942100Понизьте уровень паранойи. Если вы используете паранойю 2+, попробуйте снизить до 1.
Переключите правило в режим log для мониторинга вместо блокировки:
Отредактируйте файл правила, измените action: "block" на action: "log", затем перезагрузите:
prx-waf rules reload- Добавьте IP в белый список для доверенных источников:
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.
Решения:
Проверьте статус сертификата в Admin UI в разделе SSL Certificates.
Убедитесь, что порт 80 доступен из интернета для ACME HTTP-01 challenge.
Проверьте пути к сертификатам, если используете сертификаты вручную:
[http3]
cert_pem = "/etc/prx-waf/tls/cert.pem"
key_pem = "/etc/prx-waf/tls/key.pem"- Убедитесь, что сертификат соответствует домену:
openssl x509 -in /etc/prx-waf/tls/cert.pem -text -noout | grep -A1 "Subject Alternative Name"Узлы кластера не подключаются
Симптомы: Рабочие узлы не могут присоединиться к кластеру. Статус показывает "disconnected" пиры.
Решения:
- Проверьте сетевую связность на кластерном порту (по умолчанию: UDP 16851):
# От рабочего к главному
nc -zuv node-a 16851- Проверьте правила брандмауэра — кластерная коммуникация использует UDP:
sudo ufw allow 16851/udp- Проверьте сертификаты — все узлы должны использовать сертификаты, подписанные одним CA:
openssl verify -CAfile cluster-ca.pem node-b.pem- Проверьте конфигурацию seed на рабочих узлах:
[cluster]
seeds = ["node-a:16851"] # Должен разрешаться в главный узел- Проверьте журналы с debug-уровнем:
prx-waf -c config.toml run 2>&1 | grep -i "cluster\|quic\|peer"Высокое использование памяти
Симптомы: Процесс PRX-WAF потребляет больше памяти, чем ожидалось.
Решения:
- Уменьшите размер кеша ответов:
[cache]
max_size_mb = 128 # Уменьшить с 256 по умолчанию- Уменьшите пул соединений с базой данных:
[storage]
max_connections = 10 # Уменьшить с 20 по умолчанию- Уменьшите количество рабочих потоков:
[proxy]
worker_threads = 2 # Уменьшить относительно количества CPU- Мониторинг использования памяти:
ps aux | grep prx-wafПроблемы с подключением к CrowdSec
Симптомы: Интеграция CrowdSec показывает "disconnected" или решения не загружаются.
Решения:
- Проверьте связность LAPI:
prx-waf crowdsec test- Проверьте API-ключ:
# На машине с CrowdSec
cscli bouncers list- Проверьте URL LAPI:
[crowdsec]
lapi_url = "http://127.0.0.1:8080"
api_key = "your-bouncer-key"- Установите безопасное действие при сбое для случая недоступности LAPI:
[crowdsec]
fallback_action = "log" # Не блокировать при недоступности LAPIНастройка производительности
Медленное время отклика
- Включите кеширование ответов:
[cache]
enabled = true
max_size_mb = 512- Увеличьте количество рабочих потоков:
[proxy]
worker_threads = 8- Увеличьте количество соединений с базой данных:
[storage]
max_connections = 50Высокая нагрузка на CPU
Уменьшите количество активных правил. Отключите правила уровней паранойи 3-4, если они не нужны.
Отключите неиспользуемые фазы обнаружения. Например, если CrowdSec не используется:
[crowdsec]
enabled = falseПолучение помощи
Если ни одно из вышеприведённых решений не устраняет проблему:
- Проверьте существующие issues: github.com/openprx/prx-waf/issues
- Создайте новый issue с:
- Версией PRX-WAF
- Операционной системой и версией ядра
- Файлом конфигурации (с скрытыми паролями)
- Соответствующим выводом журналов
- Шагами для воспроизведения
Следующие шаги
- Справочник конфигурации — тонкая настройка всех параметров
- Движок правил — понимание того, как оцениваются правила
- Кластерный режим — устранение неполадок кластера