Что такое WAF?
Web Application Firewall (WAF)
WAF — это набор правил для защиты веб-приложений от атак.
От чего защищает WAF:
- SQL-инъекции (SQLi)
- Cross-Site Scripting (XSS)
- Local/Remote File Inclusion (LFI/RFI)
- Path Traversal
- Command Injection
- XML External Entity (XXE)
- Server-Side Request Forgery (SSRF)
OWASP Top 10:
WAF TrafficVeil защищает от всех уязвимостей OWASP Top 10:
- Broken Access Control
- Cryptographic Failures
- Injection
- Insecure Design
- Security Misconfiguration
- Vulnerable Components
- Authentication Failures
- Data Integrity Failures
- Logging Failures
- SSRF
Количество правил:
75+ правил постоянно обновляются.
Режимы работы
Режимы WAF:
Off (Выключен):
WAF отключён. Все запросы проходят без проверки.
- Используйте только для отладки
- Не рекомендуется для продакшена
Simulate (Симуляция):
WAF работает, но не блокирует — только логирует.
- Для тестирования правил
- Для выявления false positives
- Рекомендуется перед включением
Block (Блокировка):
WAF активно блокирует вредоносные запросы.
- Рекомендуемый режим
- Защита в реальном времени
Challenge:
Подозрительные запросы проходят проверку:
- JavaScript Challenge
- CAPTCHA
- Для снижения false positives
Изменение режима:
- Настройки домена → Безопасность → WAF
- Выберите режим
- Сохраните
Рекомендуемый путь:
- Simulate → смотрите логи 24-48 часов
- Block → включите блокировку
- Добавьте исключения при false positives
Правила WAF
Категории правил:
SQL Injection (20+ правил):
- Обнаружение UNION SELECT
- Обнаружение OR/AND 1=1
- Обнаружение комментариев (--, /*)
- Обнаружение функций (SLEEP, BENCHMARK)
XSS (15+ правил):
- <script> теги
- Event handlers (onerror, onload)
- javascript: URLs
- Encoded payloads
Path Traversal (10+ правил):
- ../ паттерны
- Encoded traversal (%2e%2e)
- Null byte injection
Command Injection (10+ правил):
- Shell команды
- Pipe и redirect
- Backticks
Protocol Attacks (10+ правил):
- HTTP Request Smuggling
- Response Splitting
- CRLF Injection
Scanner Detection (10+ правил):
- Известные сканеры
- Агрессивные краулеры
- Фаззеры
Чувствительность
Уровни чувствительности:
Low (Низкий):
- Блокирует только явные атаки
- Минимум false positives
- Для сайтов с пользовательским контентом
- Paranoia Level: 1
Medium (Средний):
- Балан между защитой и false positives
- Рекомендуется для большинства сайтов
- Paranoia Level: 2
High (Высокий):
- Агрессивная защита
- Больше false positives
- Для чувствительных приложений
- Paranoia Level: 3
Paranoid (Параноидальный):
- Максимальная защита
- Много false positives
- Требует тщательной настройки
- Paranoia Level: 4
Выбор уровня:
- Блог/новости: Low
- Интернет-магазин: Medium
- Финансы/банкинг: High
- Критическая инфраструктура: Paranoid
Настройка:
Можно настроить уровень для каждого правила отдельно.
Исключения
Зачем нужны исключения:
Иногда легитимные запросы блокируются WAF (false positives). Исключения позволяют их пропускать.
Типы исключений:
По URL:
Отключить WAF для конкретного URL:
- /admin/* — отключить для админки
- /api/upload — отключить для загрузки
По IP:
Отключить WAF для IP:
- Ваши IP
- IP партнёров
- IP мониторинга
По правилу:
Отключить конкретное правило:
- ID правила: 942100
- Для конкретного URL или глобально
По параметру:
Исключить параметр из проверки:
- ?content= — для редактора
- ?html= — для WYSIWYG
Создание исключения:
- Найдите заблокированный запрос в логах
- Скопируйте Rule ID
- Настройки → WAF → Исключения
- Добавьте исключение
Рекомендации:
- Делайте исключения максимально точными
- Не отключайте WAF полностью
- Регулярно проверяйте исключения
Кастомные правила
Создание своих правил (Pro+):
Синтаксис правила:
\\\`
SecRule REQUEST_URI "@contains /admin"
"id:100001,
phase:1,
deny,
msg:'Admin access blocked'"
\\\`
Операторы:
- @contains — содержит
- @beginsWith — начинается с
- @endsWith — заканчивается на
- @rx — регулярное выражение
- @eq — равно
- @gt, @lt — больше, меньше
Переменные:
- REQUEST_URI — URL запроса
- REQUEST_HEADERS — заголовки
- REQUEST_BODY — тело запроса
- ARGS — параметры
- REMOTE_ADDR — IP клиента
Действия:
- deny — заблокировать
- allow — разрешить
- log — логировать
- pass — пропустить
- redirect — перенаправить
Примеры:
Блокировать доступ к .git:
\\\`
SecRule REQUEST_URI "@contains /.git" "id:100002,deny"
\\\`