Пример конфигурации 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;
            ...
        }
    }
}