WAF — Web Application Firewall

WAF (Web Application Firewall) — межсетевой экран уровня приложения, который анализирует HTTP-трафик и блокирует запросы, соответствующие сигнатурам атак (SQLi, XSS, LFI, RCE) или нарушающим заданные правила.

Зачем нужно

WAF — дополнительный слой защиты ("defence in depth"), который блокирует атаки даже при наличии уязвимостей в коде. Это не замена исправлению уязвимостей, но ценный буфер времени: защищает, пока разработчики выпускают патч.

Где используется

  • Защита публичных веб-приложений и API от автоматизированных атак
  • Виртуальный патчинг: блокировка эксплуатации CVE до выхода официального исправления
  • PCI DSS Requirement 6.4: требует WAF или аналог для защиты карточных данных
  • Bot-protection: ограничение scraping и credential stuffing

Основной контент

Режимы работы WAF

Detection Mode   → Логирует все совпадения, не блокирует
Prevention Mode  → Блокирует запросы при совпадении правил
Hybrid Mode      → Detection для новых правил, Prevention для проверенных

Cloudflare WAF (managed rules)

# Cloudflare автоматически применяет OWASP CRS и собственные правила
# Настройка через API или Dashboard:

# Пример Custom Rule через Cloudflare API
curl -X POST "https://api.cloudflare.com/client/v4/zones/{zone_id}/firewall/rules" \
  -H "Authorization: Bearer $CF_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "filter": { "expression": "http.request.uri.path contains \"/admin\"" },
    "action": "challenge",
    "description": "Challenge non-whitelisted IPs on /admin"
  }'

ModSecurity + OWASP Core Rule Set (Nginx)

# nginx.conf
load_module modules/ngx_http_modsecurity_module.so;

server {
    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

# Настройка уровня паранойи (1-4):
SecAction "id:900000, phase:1, pass, t:none, setvar:tx.paranoia_level=2"

AWS WAF (пример CDK)

const waf = new wafv2.CfnWebACL(this, 'ApiWAF', {
  scope: 'REGIONAL',
  defaultAction: { allow: {} },
  rules: [
    {
      name: 'AWSManagedRulesCommonRuleSet',
      priority: 1,
      overrideAction: { none: {} },
      statement: {
        managedRuleGroupStatement: {
          vendorName: 'AWS', name: 'AWSManagedRulesCommonRuleSet',
        },
      },
      visibilityConfig: { sampledRequestsEnabled: true, cloudWatchMetricsEnabled: true, metricName: 'CommonRules' },
    },
  ],
});

Частые ошибки

  • Использование WAF вместо исправления уязвимостей — WAF обходим, это временное решение
  • Prevention mode с дефолтными правилами без тюнинга — высокий процент ложных срабатываний
  • Отсутствие мониторинга WAF-логов — WAF работает, но никто не смотрит что блокирует
  • Доверие заголовкам X-Forwarded-For от WAF без верификации — IP spoofing возможен

Связанные темы

Ресурсы