Налаштування WAF: ModSecurity, Cloudflare та AWS WAF
WAF виявляє атаки на рівні HTTP, які мережевий фаєрвол пропускає. SQL-ін'єкція в параметрі запиту, XSS у заголовку User-Agent, path traversal в URL — все це проходить через Security Groups і потрапляє в додаток. WAF аналізує тіло запиту та приймає рішення до того, як код обробить дані. Щодня через наш WAF проходять мільйони запитів, лише одиниці дають хибні спрацьовування.
WAF — необхідний бар'єр
Розробники іноді покладаються лише на WAF, відкладаючи виправлення коду. Але WAF не панацея — він блокує відомі вектори, а не логічні вразливості. Наш досвід: правильне налаштування WAF дає 90% покриття OWASP Top 10 при грамотному управлінні виключеннями. За 5+ років ми впровадили WAF на понад 30 проєктах — від високонавантажених SaaS до legacy-рішень. Інженери мають сертифікати AWS та Cloudflare, середній стаж — 6 років. Завдяки WAF середній час реакції на інциденти скоротився на 40%.
Порівняння WAF-рішень
| Критерій | ModSecurity + OWASP CRS | AWS WAF | Cloudflare WAF |
|---|---|---|---|
| Розміщення | Сервер / reverse proxy | ALB, CloudFront, API Gateway | CDN-рівень |
| Управління | Конфігураційні файли | Terraform / CloudFormation | Dashboard / Terraform |
| Готові правила | OWASP CRS (90% покриття) | AWS Managed Rules (оновлювані) | Cloudflare Managed Rules |
| Кастомні правила | SecRule (мова ModSecurity) | WebACL (JSON/Terraform) | Expression Language |
| Хибні спрацьовування | Високі (потребують кастомних виключень) | Середні | Низькі (автоматичні оновлення) |
| Вартість (орієнтовна) | Безкоштовний (лише ресурси сервера), налаштування від 2000$ | Плата за WebACL + правила, налаштування від 1000$ | Тарифікація за планом, налаштування від 500$ |
Вибір WAF залежить від архітектури: ModSecurity краще для самописних рішень, AWS WAF — якщо інфраструктура вже в AWS, Cloudflare — при використанні їхнього CDN. Cloudflare WAF налаштовується в 2 рази швидше за ModSecurity.
Чому WAF потрібно впроваджувати з моніторингу?
Типова помилка — ввімкнути WAF одразу в блокуючий режим. На одному проєкті з legacy PHP після ввімкнення AWS WAF у Count mode ми отримали 340 спрацьовувань CRS на нормальні POST-запити форм. Налаштування виключень зайняло 3 дні. Якби одразу блокували — додаток би впав. Режим моніторингу дозволяє зібрати статистику й уникнути відключення важливих функцій. Після тижня спостереження та кастомних виключень кількість false positives знижується до 2-5%. Рекомендації OWASP CRS підкреслюють важливість поетапного впровадження.
Приклад логу моніторингу ModSecurity
У режимі DetectionOnly кожне спрацьовування записується в audit_log: timestamp, URI, rule ID. На основі цього ми виявляємо хибні спрацьовування та точково відключаємо правила.Модуль ModSecurity з OWASP CRS на Nginx
ModSecurity — open source WAF, працює як модуль Nginx або Apache. OWASP Core Rule Set (CRS) — база правил з охопленням понад 90% відомих атак.
Встановлення та конфігурація:
# Ubuntu/Debian apt install libmodsecurity3 libmodsecurity-dev
git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx.git
# Перекомпілюйте Nginx з модулем або використовуйте пакет з nginx.org load_module modules/ngx_http_modsecurity_module.so;
http {
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main.conf;
} # /etc/nginx/modsec/main.conf
Include /etc/nginx/modsec/modsecurity.conf
Include /usr/share/modsecurity-crs/crs-setup.conf
Include /usr/share/modsecurity-crs/rules/*.confРежими: DetectionOnly (логіює, не блокує) та On (блокує). Завжди починаємо з DetectionOnly, налаштовуємо виключення, потім перемикаємо.
Налаштування виключень WAF
OWASP CRS в aggressive mode дає багато false positives на реальних додатках. Наприклад, форма з rich-text редактором генерує запити, які CRS вважає XSS:
# /etc/nginx/modsec/exclusions.conf
SecRule REQUEST_URI "@beginsWith /admin/editor" \
"id:1001,phase:1,pass,nolog,ctl:ruleRemoveById=941100"
SecRuleUpdateTargetById 942100 "!ARGS:content"Точні виключення зберігають захист для решти endpoint'ів. Щомісяця ми публікуємо звіти про спрацьовування, що підвищує прозорість.
AWS WAF
AWS WAF простіший в операційці — не потрібен сервер, керується через API/Terraform, вбудований в CloudFront, ALB, API Gateway. Порівняно з ModSecurity, налаштування managed rules займає в 2-3 рази менше часу.
resource "aws_wafv2_web_acl" "main" {
name = "production-waf"
scope = "REGIONAL"
default_action {
allow {}
}
rule {
name = "AWSManagedRulesCommonRuleSet"
priority = 10
override_action {
none {}
}
statement {
managed_rule_group_statement {
name = "AWSManagedRulesCommonRuleSet"
vendor_name = "AWS"
rule_action_override {
name = "SizeRestrictions_BODY"
action_to_use {
count {}
}
}
}
}
visibility_config {
cloudwatch_metrics_enabled = true
metric_name = "AWSManagedRulesCommonRuleSet"
sampled_requests_enabled = true
}
}
rule {
name = "RateLimitRule"
priority = 1
action {
block {}
}
statement {
rate_based_statement {
limit = 2000
aggregate_key_type = "IP"
}
}
visibility_config {
cloudwatch_metrics_enabled = true
cloudwatch_metrics_enabled = true
metric_name = "RateLimit"
sampled_requests_enabled = true
}
}
visibility_config {
cloudwatch_metrics_enabled = true
metric_name = "ProductionWAF"
sampled_requests_enabled = true
}
}Використовуємо AWS WAF — це офіційна документація. Ми налаштовуємо метрики для CloudWatch, щоб моніторити 99.9% аптайм.
Cloudflare WAF
Cloudflare WAF працює до того, як трафік добирається до вашої інфраструктури. Managed Rules автоматично оновлюються під актуальні загрози.
resource "cloudflare_ruleset" "zone_waf" {
zone_id = var.zone_id
name = "Custom WAF Rules"
kind = "zone"
phase = "http_request_firewall_custom"
rules {
action = "block"
expression = "(http.request.uri.path contains \"wp-admin\" and not ip.src in {10.0.0.0/8})"
description = "Block wp-admin from outside"
enabled = true
}
rules {
action = "challenge"
expression = "(cf.threat_score gt 20)"
description = "Challenge high threat score"
enabled = true
}
} Що входить у роботу з налаштування WAF під ключ?
- Аудит додатка та трафіку: аналіз логів, виявлення вразливих місць.
- Вибір WAF (ModSecurity / AWS / Cloudflare) з урахуванням вашої інфраструктури.
- Розгортання в режимі моніторингу: збір спрацьовувань, аналіз false positives.
- Налаштування виключень для легітимних запитів.
- Перемикання в блокуючий режим з кастомними правилами (rate limiting, geo-blocking).
- Документування: список правил, виключень, інструкція для команди.
- Навчання розробників роботі з WAF-логами.
Вартість налаштування залежить від складності: Cloudflare WAF — від 500$, AWS WAF — від 1000$, ModSecurity — від 2000$. Економія на безпеці — до 30% завдяки нашому досвіду.
Терміни та вартість
| Варіант | Термін | Орієнтовна вартість |
|---|---|---|
| Cloudflare WAF — базове налаштування managed rules | 1 день | від 500$ |
| AWS WAF для ALB з кастомними правилами | 1–2 дні | від 1000$ |
| ModSecurity на Nginx з OWASP CRS | 2–3 дні | від 2000$ |
| Будь-який варіант з налаштуванням виключень за реальним трафіком | +1–2 дні | +50% до базової вартості |
Вартість розраховується індивідуально після аудиту додатка та аналізу трафіку.
Як ми гарантуємо результат?
Сертифіковані інженери з багаторічним досвідом роботи з WAF (середній стаж — 6 років, понад 30 проєктів). Використовуємо офіційні best practices: рекомендації OWASP CRS, AWS Well-Architected Framework. На кожному етапі надаємо артефакти: звіти моніторингу, зміни в конфігурації, runbook інцидентів. Гарантуємо зниження кількості хибних спрацьовувань до 2-5% після налаштування.
Бажаєте захистити свій проєкт? Отримайте консультацію — розберемо вашу архітектуру та запропонуємо оптимальне рішення. Замовте аудит WAF і ми покажемо, як скоротити бюджет на безпеку на 30%.







