Каждый вебмастер знает, какое огромное количество паразитного трафика обрушивается на его сайт. Часто это раздражает. Рассмотрим, как nginx может отравить жизнь любителям посканировать.
опубликован: 2024-08-08 15:54
последняя редакция: 2024-08-09 09:31

Замедляем сканеры уязвимостей сайтов

Идея очень простая и реализуемая средствами nginx - ставим "ловушки" на наиболее часто сканируемые урлы, а именно: при запросе определённого url, отдаём вместо ошибки 404/403 какой-нибудь большой файл на маленькой скорости. Я обычно использую для этих целей какой-нибудь "забойный" mp3-файл и ограничиваю скорость в 1 кбит/сек. Опыт показывает, что только 10-20% сканеров, секунде на 15, начинают подозревать что-то неладное и рвут соединение. Оставшиеся часами выкачивают весёлую музыку, иногда по нескольку раз.
Смысл этого мероприятия не в моей личной неприязни к "хакерам" прости господи, а в том, что сканирование сайтов слишком лёгкий и малозатратный для них процесс. Если бы подобные замедляющие заглушки стояли на значительном количестве ресурсов - массовое сканирование стало бы экономически не очень оправданным. Интернет бы немного очистился. Профит!
Итак, переименовываем какой-нибудь музыкальный mp3-файл в trash.bin и кладём его в какую-нибудь директорию на своём сервере. Пусть он будет расположен по такому пути:
/path_to_trash_dir/trash.bin

В nginx-конфигурацию нашего сайта добавляем строки примерно следующего содержания:

    rewrite ^/scripts/WPnBr\.dll$ /fakedata/trash.bin last;
    rewrite /wp-.+$ /fakedata/trash.bin last;
    rewrite /xleet-shell\.php$ /fakedata/trash.bin last;
    rewrite /Deadcode1975xxxxxxxxxxxxxxxxxxxxxxxxxxxx.php$ /fakedata/trash.bin last;
    rewrite /\.git.*$ /fakedata/trash.bin last;
    rewrite /\.env.*$ /fakedata/trash.bin last;
    rewrite /adm.+$ /fakedata/trash.bin last;
    rewrite /Portal.+$ /fakedata/trash.bin last;
    rewrite /phpinfo.*$ /fakedata/trash.bin last;
    rewrite /backup.*$  /fakedata/trash.bin last;
    rewrite /bitrix.*$  /fakedata/trash.bin last;

    rewrite ^/.+\.php$ /fakedata/trash.bin last;
    rewrite ^/.+\.asp$ /fakedata/trash.bin last;

    location /fakedata/ {
        internal;
        limit_rate_after 1;
        limit_rate 1K;
        limit_conn_status 503;
        limit_conn addr 5;
        root /path_to_trash_dir/;
    }

В общем-то это и всё, вам только следует подправить реврайты в соответствии с вашими потребностями. Улучшение этого кода приветствуется!