Jump to content
View in the app

A better way to browse. Learn more.

IPBMafia.ru - поддержка Invision Community, релизы, темы, плагины и приложения

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Готовый список правил для блокировки ботов через Nginx.conf

Featured Replies

Готовый список правил для блокировки ботов через Nginx.conf

4.png

Данная раздача представляет собой готовый набор правил для защиты веб-сервера Nginx от вредоносных ботов, сканеров уязвимостей и атак на уровне конфигурации. Она включает блокировку более 190 современных AI-ботов (GPTBot, ClaudeBot, Google-Extended, OpenClaw, DeepSeek, Perplexity и др.), вредоносных сканеров (Nmap, SQLmap, HTTrack, Nikto, Dirb, Gobuster), хостинговых ASN-сетей (IP-адресов дата-центров), а также Headless браузеров и инструментов автоматизации (HeadlessChrome, Puppeteer, Playwright, Electron, Cypress, Selenium). Конфигурация содержит WAF-правила для обнаружения SQL-инъекций, XSS, path traversal, блокировки доступа к служебным файлам (.env, .git, wp-config.php, phpinfo.php), защиты от XML-RPC атак и user enumeration. Добавлена поддержка Cloudflare: блокировка прямых запросов в обход CDN через проверку заголовка X-Forwarded-For, корректное определение реальных IP посетителей через set_real_ip_from, а также возможность раздельной настройки для доменов без Cloudflare с использованием проверок Client Hints (Sec-CH-UA). Встроены ограничения частоты запросов (rate limiting), централизованное логирование причин блокировок с расширенным форматом и передача причины блокировки в бэкенд (Apache) через заголовок X-Block-Reason. Из поисковых роботов разрешены только Googlebot и Bingbot, все остальные (включая Яндекс) заблокированы. Конфигурация протестирована на Nginx 1.24+ и подходит для использования на серверах с PHP (CMS, фреймворки) как замена или дополнение к облачным WAF.

Файлы:

  1. AS_hosting_ipinfo.io_countries_WORLD.txt - список всех известных ASN номеров с типом hosting по версии сайта ipinfo.io/countries на апрель 2026.

  2. IPs_blocks_for_AS_hosting_ipinfo.io_countries_WORLD.txt - список CIDR всех известных ASN номеров с типом hosting из предыдущего файла.

  3. blockcidr.conf, blockcidr_cloudflare.conf - конфигурационный файл nginx со списком CIDR из предыдущего файла с удалёнными дубликатами CIDR.
    blockcidr.conf не блокирует заходы с IP Cloudflare.
    blockcidr_cloudflare.conf (переименуйте в blockcidr.conf при установке) блокирует заходы с IP Cloudflare.
    Используйте один из них.

  4. blockua.conf - конфигурационный файл nginx со списком, который блокирует более 190 современных AI-ботов, вредоносных сканеров и агрессивных краулеров, включая GPTBot, ClaudeBot, Google-Extended, OpenClaw (актуальная угроза 2026 года), а также инструменты вроде Nmap, SQLmap и HTTrack, при этом безопасно разрешая работу основных поисковых роботов (Googlebot, Bingbot), сервисов превью ссылок (Facebook, Telegram) и RSS-агрегаторов (Feedly). Файл представлен в формате готовой map-директивы для Nginx с флагами 0 (разрешить) и 1 (заблокировать). Внимание: поисковый бот yandex в правилах заблокирован!

  5. blockinj.conf - WAF на уровне nginx: проверяет URL и параметры запросов на наличие SQL-инъекций, XSS, path traversal, сканеров и блокирует доступ к служебным путям (.env, .git, админкам CMS).

  6. block_checks.conf - выполняет централизованную проверку входящих запросов на превышение лимитов, черные списки IP, SQL-инъекции, XSS, обход путей, сканеры, плохие user-agent и referer, блокируя их с возвратом кода 444 и указанием причины в логе.

  7. blocksec.conf - конфигурационный файл Nginx для блокировки ботов и автоматизированных инструментов через анализ заголовков Client Hints (Sec-CH-UA). Блокирует фейковые grease-бренды Not/A.*Brand, Not\)A), а также выявляет несовместимые платформы: Chrome на iOS (браузер не существует на данной платформе) и Safari на Windows или Linux (браузер существует только на macOS и iOS). Реальные браузеры (Chrome, Firefox, Safari, Edge, Opera, Brave, Yandex) не блокируются, так как они отправляют корректные значения Sec-CH-UA.

  8. lastconnetions.sh - скрипт показывает в левом блоке уникальные IP с блокировками 444 за последние N минут, в правом — сгруппированные по IP, причине и домену запросы с количеством повторений, кодом 444 и причиной блокировки. Данные обновляются каждые 5 секунд, экран перерисовывается 1 раз в секунду с очисткой старых строк. Скрипт обрабатывает IPv4 и IPv6, исключает IP Cloudflare (если в логе есть второй реальный IP) и читает логи только за последние N минут без ограничения числа записей. Скрипт НЕ БУДЕТ РАБОТАТЬ без предварительной настройки сервера согласно правилам nginx из этой раздачи.

  9. analyze_logs_mafia.sh - скрипт анализирует логи веб-сервера nginx/apache, выявляет атаки и формирует отчет для настройки защиты. Скрипт НЕ БУДЕТ РАБОТАТЬ без предварительной настройки сервера согласно правилам nginx из этой раздачи.

Внимание! В первых четырех файлах добавлен Яндекс, удалите из blockcidr.conf и blockua.conf, если не хотите блокировать бот Яндекса:

AS13238 (Yandex LLC) 
AS200350 (Yandex.Cloud LLC) 
AS208795 (Yandex.Cloud Kazakhstan LLP) 
AS210656 (Yandex.Cloud LLC) 
бот yandex

Настройка для версий 3.6.x:

1. В nginx.conf должны быть следующие директивы (блок НАСТРОЙКИ REAL IP ДЛЯ CLOUDFLARE - только если вы пользователь Cloudflare).

Файлы blockcidr.conf, blockua.conf, blockinj.conf, block_checks.conf, blocksec.conf размещены в папке /etc/nginx - там же, где файл nginx.conf.

Добавить в nginx.conf

http {
    # Инициализация $block_reason по умолчанию (пустая строка)
    map $request_uri $block_reason {
        default "";
    }

    # ============================================
    # ОПРЕДЕЛЯЕМ ДОВЕРЕННЫХ БОТОВ ДЛЯ ИСКЛЮЧЕНИЯ ИЗ ВСЕХ ПРОВЕРОК
    # ============================================
    map $http_user_agent $trusted_bot {
        default 0;
        "~*googlebot" 1;
        "~*bingbot" 1;
        "~*vkrobot"   1;
        "~*linkedinbot" 1;
        "~*twitterbot" 1;
        "~*telegrambot" 1;
        "~*facebookexternalhit" 1;
        "~*cloudflareobservatory" 1;
        "~*feedly" 1;
        "~*feedvalidator" 1;
        "~*google-inspectiontool" 1;
        "~*googleimageproxy" 1;
        "~*ifttt" 1;
        "~*simplepie" 1;
    }
    
    # Для лимитов
    map $http_user_agent $limit_key {
        default $binary_remote_addr;
        "~*googlebot" "";
        "~*bingbot" "";
        "~*vkrobot" "";
        "~*linkedinbot" "";
        "~*twitterbot" "";
        "~*telegrambot" "";
        "~*facebookexternalhit" "";
        "~*cloudflareobservatory" "";
        "~*feedly" "";
        "~*feedvalidator" "";
        "~*google-inspectiontool" "";
        "~*googleimageproxy" "";
        "~*ifttt" "";
        "~*simplepie" "";
    }
    
    # ============================================
    # ЗАЩИТА ОТ DDoS И МЕДЛЕННЫХ АТАК
    # ============================================
    limit_req_zone $limit_key zone=global:10m rate=20r/s;
    limit_req_zone $limit_key zone=one:10m rate=20r/s;
    limit_conn_zone $binary_remote_addr zone=addr:10m;
    
    # ============================================
    # НАСТРОЙКИ REAL IP ДЛЯ CLOUDFLARE
    # ============================================
    set_real_ip_from 103.21.244.0/22;
    set_real_ip_from 103.22.200.0/22;
    set_real_ip_from 103.31.4.0/22;
    set_real_ip_from 104.16.0.0/12;
    set_real_ip_from 108.162.192.0/18;
    set_real_ip_from 131.0.72.0/22;
    set_real_ip_from 141.101.64.0/18;
    set_real_ip_from 162.158.0.0/15;
    set_real_ip_from 172.64.0.0/13;
    set_real_ip_from 173.245.48.0/20;
    set_real_ip_from 188.114.96.0/20;
    set_real_ip_from 190.93.240.0/20;
    set_real_ip_from 197.234.240.0/22;
    set_real_ip_from 198.41.128.0/17;
    set_real_ip_from 2400:cb00::/32;
    set_real_ip_from 2405:b500::/32;
    set_real_ip_from 2405:8100::/32;
    set_real_ip_from 2606:4700::/32;
    set_real_ip_from 2803:f800::/32;
    set_real_ip_from 2a06:98c0::/29;
    set_real_ip_from 2c0f:f248::/32;
    # ============================================

    real_ip_header X-Forwarded-For;
    real_ip_recursive on;

    # ============================================
    # БАЗОВЫЕ НАСТРОЙКИ
    # ============================================
    
    log_format main '$remote_addr - [$time_local] - $status "$block_reason" - "$request" $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_forwarded_for"';
    
    # ============================================
    # ЗАЩИТНЫЕ MAP
    # ============================================
    include /etc/nginx/blockua.conf;
    include /etc/nginx/blockinj.conf;
    include /etc/nginx/blocksec.conf;

    # GEO блок для IP (черный список)
    geo $block_ip {
        default 0;
        include /etc/nginx/blockcidr.conf;
    }

    # ============================================
    # ПОДКЛЮЧЕНИЕ ВИРТУАЛЬНЫХ ХОСТОВ
    # ============================================
    include /etc/nginx/vhosts/*/*.conf;
    
}

2. Настройка конфигурационного файла для отдельного домена /etc/nginx/vhosts/<пользователь>/<ваш домен>.conf (замените <ваш домен> на ваш домен и пропишите правильный путь к логам сайта в строке access_log /var/www/httpd-logs/<ваш домен>.access.log main;)

Важно (выберите одно из двух):

  • Раскомментируйте директивы блока ЗАПРЕТ ПРЯМЫХ ЗАПРОСОВ МИНУЯ CLOUDFLARE, если ваш домен работает через Cloudflare. + Настройка в панели управления доменом на Cloudflare должна быть выключена: Rules → Settings → Managed Transforms → Remove visitor IP headers.

  • Раскомментируйте директивы блока ПРОВЕРКИ SEC-CH-UA (только для доменов без CLOUDFLARE), если ваш домен работает не через Cloudflare.

Настройка /etc/nginx/vhosts/<пользователь>/<ваш домен>.conf

# ======================================================================
#                    ОБЩИЙ СВОД ПРАВИЛ ЗАЩИТЫ NGINX
# ======================================================================
#  В зависимости от типа домена (Cloudflare / без Cloudflare)
#  раскомментируйте нужные блоки и закомментируйте ненужные.
# ======================================================================

server {
    access_log /var/www/httpd-logs/<ваш домен>.access.log main;

    # ============================================
    # RATE LIMITING
    # ============================================
    limit_req zone=one burst=20 nodelay;
    limit_conn addr 10;

    # ============================================
    # ЗАЩИТНЫЕ LOCATION (ВЫНЕСЕНЫ НА УРОВЕНЬ SERVER)
    # ============================================
    # Блокировка WordPress REST API для пользователей и комментариев (защита от сканеров и user enumeration)
    location ~* ^/wp-json/(wp/v2/users|wp/v2/comments) {
        set $block_reason "wp_rest_api";
        return 444;
    }

    # Блок WP REST API enumeration (сканеры)
    location ~* (\.log$|\.conf$|wp-config\.php|config\.php|\.env) {
        set $block_reason "config_file";
        return 444;
    }
    
    # Блок файлов логов/конфигов
    # Защита от PHP info
    location ~* (phpinfo|info\.php|test\.php|eval-stdin\.php) {
        set $block_reason "php_info";
        return 444;
    }

    # ============================================
    # СТАТИЧЕСКИЕ ФАЙЛЫ
    # ============================================
    location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ {
        set $block_reason "";
        include /etc/nginx/block_checks.conf;
        if ($block_reason != "") {
            return 444;
        }
        try_files $uri $uri/ @fallback;
    }

    # ============================================
    # ОСНОВНОЙ LOCATION
    # ============================================
    location / {
        set $block_reason "";

        # ==================================================================
        # ЗАПРЕТ ПРЯМЫХ ЗАПРОСОВ МИНУЯ CLOUDFLARE
        # ДЛЯ ДОМЕНОВ НА CLOUDFLARE (РАСКОММЕНТИРОВАТЬ)
        # ==================================================================
        # Разрешить внутренние IP (сам сервер, локальная сеть)
        # set $skip_cf_check 0;
        # if ($remote_addr ~* "^(127\.0\.0\.1|192\.168\.|10\.|172\.(1[6-9]|2[0-9]|3[0-1])\.)") {
        #     set $skip_cf_check 1;
        # }
        # if ($http_x_forwarded_for = "") {
        #     set $skip_cf_check "${skip_cf_check}1";
        # }
        # if ($skip_cf_check = "01") {
        #     set $block_reason "direct_request";
        #     return 444;
        # }

        # ==================================================================
        # ПРОВЕРКИ SEC-CH-UA
        # ДЛЯ ДОМЕНОВ БЕЗ CLOUDFLARE (РАСКОММЕНТИРОВАТЬ)
        # ==================================================================
        # if ($bad_sec_ch_ua = 1) {
        #     set $block_reason "badagent_sec";
        #     return 444;
        # }

        include /etc/nginx/block_checks.conf;

        if ($block_reason != "") {
            return 444;
        }

        try_files /does_not_exists @fallback;
    }

    # ============================================
    # FALLBACK НА БЭКЕНД
    # ============================================
    location @fallback {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Block-Reason $block_reason;
    }
}

3. Так как я использую связку Apache + Nginx (стандартная связка, если вы используете ISPManager), мне пришлось немного поднастроить формат вывода логов в Apache. Логи пишутся в один файл с логами Nginx, что приводило к разному формату записи. Я изменил формат логов Apache и добавил в лог вывод причины блокировки также, как это сделано для Nginx.

Настройка формата логов Apache

/etc/httpd/conf/httpd.conf

Найти:

    LogFormat "%a %l %u %t \"%r\" %>s %b" common

Добавить после:

  LogFormat "%a - [%t] - %s \"%{X-Block-Reason}e\" - \"%r\" %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{X-Forwarded-For}i\"" nginx_like

/etc/httpd/conf/vhosts/<пользователь>/<домен>

Найти:

	CustomLog /var/www/httpd-logs/<домен>.access.log combined

Заменить на:

	CustomLog /var/www/httpd-logs/<домен>.access.log nginx_like

/etc/nginx/vhosts/<пользователь>/<домен>.conf

Добавить в блок location @fallback:

    proxy_set_header X-Block-Reason $block_reason;   

Теперь в логах вашего домена вы можете наблюдать заблокированные запросы с кодом и пояснением:

  • blocked_ip — IP в черном списке

  • badagent — плохой User-Agent

  • sql_injection — SQL инъекция

  • xss_attack — XSS атака

  • path_traversal — обход пути

  • scanner_params — параметры сканера

  • block_path — заблокированный путь

  • spam_params — спам параметры

  • malicious_upload — вредоносная загрузка

  • user_enumeration — перебор пользователей

  • xmlrpc_block — XML-RPC

  • bad_referer — плохой referer

  • malicious_referer — вредоносный referer

  • suspicious_params — подозрительные параметры

  • bad_method — запрещенный метод

  • rate_limit — превышение лимита запросов (если сработает)

  • conn_limit — превышение лимита соединений (если сработает)

  • wp_rest_api — WP REST API

  • config_file — доступ к конфигам

  • php_info — phpinfo

  • direct_request — запрос напрямую к серверу, минуя Cloudflare (только для доменов через CF)

  • badagent_sec — плохой Sec-CH-UA (Client Hints)

  • platform_mismatch — несоответствие User-Agent и платформы (пример: мобильный на десктопной ОС)

Пример лога с кодом 444 (соединение сброшено) и причиной (кодом) блокировки:

image.png

4. Настройка скрипта lastconnetions.sh

Подробнее читайте в read_me.html

script.jpg

Создание сервиса:

  • Положить скрипт в папку, например, /usr/local/sbin/

  • Открыть скрипт на редактирование и прописать правильный путь к папке с логами в строке LOG_DIR="/var/www/httpd-logs", если он отличается.

  • chmod +x /usr/local/sbin/lastconnetions.sh

  • ln -sf /usr/local/sbin/lastconnetions.sh /usr/local/bin/lastconn

Управление:

  • Запуск: lastconn

  • Пауза вывода в консоли: Ctrl+S

  • Возобновление вывода в консоли: Ctrl+Q

  • Выход с завершением фоновых процессов: Ctrl+C

Рекомендация:

Скрипт не всегда справляется с остановкой своих дубликатов, если вы запускали скрипт несколько раз. Перед запуском скрипта выполните в консоли: pkill -9 -f "lastconn"

5. Настройка скрипта analyze_logs_mafia.sh

Подробнее читайте в read_me.html

script.jpg

  • Положить скрипт в папку, например, /usr/local/sbin/

  • chmod +x /usr/local/sbin/analyze_logs_mafia.sh

  • Открыть скрипт на редактирование и прописать правильный путь к папке с логами в строке LOG_DIR="/var/www/httpd-logs", если он отличается.

  • Запустить скрипт из консоли из папки где лежит скрипт: bash analyze_logs_mafia.sh

  • Лог появится в папке скрипта через некоторое время.

  • Скопировать содержимое лога и попросить чат-бота DeepSeek (https://chat.deepseek.com/) проанализировать лог. Примерный промпт для DeepSeek:

"Вот отчет анализа логов моего веб-сервера, включая error логи и блокировки 444. Проанализируй следующие данные из access логов: атаки path traversal, сканирование CMS, SQL-инъекции, XSS. Блокировки 444: какие IP чаще всего блокируются (исключи Googlebot, Bingbot и и IP самого сервера xxx.xxx.xxx.xxx), какие причины блокировок самые частые, какие URI атакуют. Error логи: какие критические ошибки происходят, какие IP вызывают ошибки (исключи легитимные боты и IP самого сервера xxx.xxx.xxx.xxx). Выдели топ-10 самых опасных IP для немедленной блокировки. При этом если причина блокировки 444 = blocked_ip, такой IP уже заблокирован настройками Nginx, не включай его в рекомендации по блокировке. В список включай только IP, которые ещё не получили 444, но активно атакуют (из error логов, из подозрительных 200 ответов, из сканирования). Проанализируй запросы со статусом 200, которые могут быть новыми типами атак. Для каждой выявленной атаки укажи список IP-адресов (исключая 192.168.0.1 и IP самого сервера xxx.xxx.xxx.xxx). Составь рекомендации по настройке nginx для усиления защиты. Добавь вывод количества заблокированных по типам блокировки в виде таблицы в формате "тип блокировки (краткое описание) — количество". В таблицу включи все типы из следующего списка, даже если их значение равно 0: blocked_ip (IP в черном списке), badagent (плохой User-Agent), sql_injection (SQL инъекция), xss_attack (XSS атака), path_traversal (обход пути), scanner_params (параметры сканера), block_path (заблокированный путь), spam_params (спам параметры), malicious_upload (вредоносная загрузка), user_enumeration (перебор пользователей), xmlrpc_block (XML-RPC), bad_referer (плохой referer), malicious_referer (вредоносный referer), suspicious_params (подозрительные параметры), bad_method (запрещенный метод), rate_limit (превышение лимита запросов), conn_limit (превышение лимита соединений), wp_rest_api (WP REST API), config_file (доступ к конфигам), php_info (phpinfo), direct_request (запрос напрямую к серверу, минуя Cloudflare), badagent_sec (плохой Sec-CH-UA Client Hints), platform_mismatch (несоответствие User-Agent и платформы). Добавь в отчет таблицу с HTTP кодами ответа (кроме 200): 301, 403, 404, 444 и другие, с указанием количества. Исключи из отчета любые упоминания об атаках с IP googlebot, bingbot, а также с IP самого сервера xxx.xxx.xxx.xxx. Не включай в раздел «Анализ атак» информацию об атаках, если их количество 0. Отчет сформируй в виде HTML файла со светлым фоном."

Пример отчета: 18.04.2026.html

Раздается эксклюзивно только на этом сайте ipbmafia.ru. За раздачу на других ресурсах ответственности не несу. Не забываем перезапускать Apache и Nginx после настройки. Волшебная команда nginx -t и бот https://chat.deepseek.com/ в помощь!

Информация

Submitter Zero108

Submitted 19.10.2023

Category Anti-spam and security

Language: английский

Просмотр файла

Готовый список правил для блокировки ботов через Nginx.conf

  • 2 years later...
  • Author

Достали перегрузки сервера, когда видишь, что по top нагрузка зашкаливает. Поставил себе эту блокировку. Вздохнул свободно.

  • Author

Поменял у себя правила блокировки на эти:

    # Проверка сначала блокирует IP, затем для разрешённых User-Agent прерывает дальнейшие проверки (break), а для запрещённых — возвращает 403
    # Проверяем IP и блокируем, если IP заблокирован
    if ($block_ip) {
        return 403;
    }
    # Если User-Agent явно разрешён, завершаем обработку
    if ($badagent = 0) {
        break;  # Завершаем обработку, если агент разрешён
    }
    # Если User-Agent явно запрещён, возвращаем ошибку 403
    if ($badagent = 1) {
        return 403;
    }

А то атака была с заблокированного ip и с разрешенного user agent. И до блокировки не дошло. Теперь всё в порядке с новым правилом: сначала смотрим ip, а потом user agent.

Edited by Zero108

  • Author

Создатели ИИ-ботов будут гореть в специальном аду. Там будет такое мучение: грешник просит стакан воды. Ему приносят пустой графин. Он просит стакан воды опять. Ему играют на рояле, на котором стоит пустой стакан. Он просит стакан воды. Ему приносят стакан, но без воды. И так по кругу.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

Recently Browsing 0

  • No registered users viewing this page.

Account

Navigation

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.