Пример конфигурации SEnginx для защиты от ddos-атак 7 уровня
Пример конфигурации SEnginx, которая использует защиту от ddos-атак и защиту от сканирования уязвимостей чувствительного URL.
Файл конфигурации
http { # Оригинальная конфигурация nginx ... statistics_zone 10m; # Выделить 10 MB памяти для статистики SEnginx ip_blacklist on; # Включить черный список IP-адресов SEnginx ip_blacklist_size 10240; # Максимальное количество адресов в черном списке ip_blacklist_timeout 120; # Время хранения IP в черном списке (секунд) ip_blacklist_mode local; # Режим работы черного списка limit_req_zone $binary_remote_addr zone=mudoom:10m rate=10r/s; ip_behavior_zone zone=brand:10m sample_base=10 sample_cycle=2s; # Зона размером 10 MB для учета доступа к чувствительным ресурсам, минимальным количеством запросов 10 и интервалом 2 секунды # Белый список IP-адресов geo $ip_wl { ranges; default 0; 127.0.0.1-127.0.0.1 1; } # Белый список на основе User Agent для известных поисковых ботов whitelist_ua $ua_wl { caseless; # Игнорировать регистр "Baiduspider" ".*\.baidu\.com"; "Baidu-YunGuanCe-SLABot" ".*\.baidu\.com"; "Googlebot" ".*\.google\.com"; "360Spider" ".*\.360\.cn"; "360JK" ".*\.360\.cn"; "Sosospider" ".*\.soso\.com"; "Sogou web spider" ".*\.sogou\.com"; "bingbot" ".*\.bing\.com"; } server { virtual_server_name www.mudoom.com; # Имя виртуального сервера для учета статистики SEnginx ip_behavior zone=brand type=sensitive_url; # Включить для server учет доступа к чувствительным URL # location для проверки ботов location @process { robot_mitigation_global_whitelist ua_var_name=ua_wl ip_var_name=ip_wl ip_var_value=1; # Использовать глобальный белый список IP-адресов и белый список на основе User Agent robot_mitigation on; # Включить модуль Robot Mitigation robot_mitigation_mode js; # Режим проверки robot_mitigation_blacklist 50; # Лимит неудачных проверок для попадания в черный список robot_mitigation_timeout 600; # Таймаут до следующей проверки в случае успешной проверки (секунд) robot_mitigation_challenge_ajax off; # Запретить проверку для ajax-запросов #php-fpm и другие директивы оригинальной конфигурации nginx fastcgi_pass 127.0.0.1:9000; ... } # Просмотр черного списка. Доступ должен быть ограничен по соображениям безопасности. location /blacklist_show { allow 127.0.0.1; deny all; ip_blacklist_show; } # Принудительная очистка черного списка. Доступ должен быть ограничен по соображениям безопасности. location /blacklist_flush { allow 127.0.0.1; deny all; ip_blacklist_flush; } # Просмотр статистики SEnginx. Доступ должен быть ограничен по соображениям безопасности. location /stats { allow 127.0.0.1; deny all; statistics; } # Location для запрета доступа location /RequestDenied { return 403; } location /mudoom { ip_behavior_sensitive; # Данный location помечается как чувствительный limit_req zone=mudoom burst=100 forbid_action=@process condition=$cond; # Определение лимита запросов, при превышении которого производится перенаправление на @process ifall ($insensitive_percent >= 0) ($insensitive_percent < 30) { # limit_req будет включен, если количество запросов к нечувствительным ресурсам менее 30% от общего количества запросов set $cond 1; } cookie_poisoning_whitelist ua_var_name=ua_wl ip_var_name=ip_wl ip_var_value=1; # Использовать белый список IP-адресов и белый список по User Agent для модуля Сookie Poisoning cookie_poisoning on; # Включить модуль Сookie Poisoning cookie_poisoning_action block; # Блокировать запрос, если обнаружена подмена cookie cookie_poisoning_log on; # Записать подмену cookie в журнал naxsi_whitelist ua_var_name=ua_wl ip_var_name=ip_wl ip_var_value=1; # Использовать белый список IP-адресов и белый список по User Agent для Naxsi # Параметры Naxsi LearningMode; SecRulesEnabled; #SecRulesDisabled; DeniedUrl "/RequestDenied"; CheckRule "$XSS >= 4" BLOCK; CheckRule "$TRAVERSAL >= 4" BLOCK; CheckRule "$EVADE >= 8" BLOCK; CheckRule "$UPLOAD >= 8" BLOCK; CheckRule "$RFI >= 8" BLOCK; CheckRule "$SQL >= 8" BLOCK; #php-fpm и другие директивы оригинальной конфигурации nginx fastcgi_pass 127.0.0.1:9000; ... } } }