Атака китайских ботов

Вопросы без привязки к версии. Установлена авточистка (2 года).
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ | Как задавать вопросы | Как устанавливать расширения

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
hd321kbps
phpBB 2.0.3
Сообщения: 366
Стаж: 14 лет 4 месяца
Откуда: Россия, Крым, Армянск
Благодарил (а): 191 раз
Поблагодарили: 346 раз

Атака китайских ботов

Сообщение hd321kbps »

Сегодня заметил на нескольких форумах наплыв ботов из китая от 100-300 одновременно, которые создают нагрузку на хостинг.
Все заходят с телефона Android и iphone Os.
Адреса ботов:
54.222.*.*
54.223.*.*
52.80.*.*
52.81.*.*
52.82.*.*
52.83.*.*
220.243.*.*
139.217.*.*
139.219.*.*
У кого наблюдается такое-же отпишитесь)


---------------------------
Варианты блокировки ботов:
Re: Атака китайских ботов - от Nekstati
Re: Атака китайских ботов - от Kuskow, php
Re: Атака китайских ботов - от Kuskow, nginx
Последний раз редактировалось Татьяна5 17.07.2026 15:10, всего редактировалось 1 раз.
Аватара пользователя
Kuskow
phpBB 2.0.5
Сообщения: 481
Стаж: 10 лет 3 месяца
Откуда: 🇰🇿 Караганда
Благодарил (а): 29 раз
Поблагодарили: 47 раз

Re: Атака китайских ботов

Сообщение Kuskow »

Ботов ноль. Спрашивается: зачем огород городли? Бороться не с кем. Скукотища.

Изображение
Мои разработки в phpBB: php-антибот, robots.txt, DiscussionForumPosting.
Аватара пользователя
Kuskow
phpBB 2.0.5
Сообщения: 481
Стаж: 10 лет 3 месяца
Откуда: 🇰🇿 Караганда
Благодарил (а): 29 раз
Поблагодарили: 47 раз

Re: Атака китайских ботов

Сообщение Kuskow »

Новая версия 5.2 антибота для тех, у кого нет доступа к настройкам Apache/Nginx. Отсекаются зловредные боты, оптимизируется нагрузка на базу данных за счёт исправления запросов. Проверено и работает на своём форуме (в профиле есть ссылка). Совместимо с PHP 7.4 и 8.x. Если раньше устанавливали этот скрипт, теперь нужно выполнить только пункт 2. Отличия от предыдущей версии:
  • исключена блокировка неправильной пагинации
  • исключена блокировка запросов с параметрами sid=, view=, вместо этого эффективный редирект
  • введена переадресация неверных, изыточных параметров на каноническую страницу - только для ботов, не для пользователей
1️⃣ В самое начало файла /assets/javascript/core.js добавляем следующий код (прям первой строкой).
* Обязательно повторить это исправление после каждого обновления версии движка, иначе ни один человек на новом устройстве не сможет зайти или зарегистрироваться на форуме.

Код: Выделить всё

document.cookie = "checked=1; path=/; max-age=31104000; SameSite=Lax";

2️⃣ В конец файла config.php добавляем (у кого уже есть, заменяем) следующий код.
** Перед сохранением файла исправить в тексте значения параметров $ppp = 20 и $tpf = 100 на свои. Где их взять - написано там же в тексте.
*** Если у вас страница /index.php отличается от / и это важно - исключите из кода блок "Корень форума" или закомментируйте его.

Код: Выделить всё

### phpBB Antibot & URL Clean v5.2 by Kuskow & AI on Google Search
if ($uri = (string)@$_SERVER['REQUEST_URI']) { # не cli
  if (!@$_COOKIE['checked']) { # не человек в браузере
    $ua = $_SERVER['HTTP_USER_AGENT'] ?? 'python';
    # Невозможный адрес страницы или заведомо плохой бот
    if (preg_match('#(posting|search|memberlist|[um]cp|config|profile)\.php|/adm/#', $uri)
    or preg_match('#ChatGPT|meta-|keys-so|python|Firefox/72#i', $ua)
    or strpos($_SERVER['HTTP_REFERER'] ?? '', '#')) {
      http_response_code(410); die; }
 
    # Корень форума только /
    if (substr($_SERVER['SCRIPT_NAME'], -10) === '/index.php') {
      if ($_GET) { http_response_code(410); die; }
      if ($uri[-1] !== '/') { header('Location: ./', true, 301); die; }}
 
    # Параметры взять из админки: Общие -> Конфигурация -> Размещение сообщений
    $ppp = 20; # количество сообщений на странице темы
    $tpf = 100; # количество тем на странице форума
 
    # p= заменяем на t=[&start=]
    if (($p = (int)@$_GET['p']) && ($conn = @mysqli_connect($dbhost, $dbuser, $dbpasswd, $dbname, $dbport))) {
      if ($post = mysqli_fetch_row(mysqli_query($conn, "SELECT topic_id FROM {$table_prefix}posts WHERE post_id = {$p} AND post_visibility = 1"))) {
        $c = mysqli_fetch_row(mysqli_query($conn, "SELECT COUNT(post_id) FROM {$table_prefix}posts WHERE topic_id = {$post[0]} AND post_id < {$p} AND post_visibility = 1"));
        $start = intdiv($c[0], $ppp) * $ppp;
        header('Location: viewtopic.php?t=' . $post[0] . ($start ? '&start=' . $start : ''), true, 301); die; }
      http_response_code(410); die; }

    # t= приводим к строгому порядку t=[&start=]
    if ($t = (int)@$_GET['t']) {
      $start = intdiv((int)@$_GET['start'], $ppp) * $ppp;
      $expected_query = 't=' . $t . ($start ? '&start=' . $start : '');
      if ($_SERVER['QUERY_STRING'] !== $expected_query) {
        header('Location: viewtopic.php?' . $expected_query, true, 301); die; } }

    # f= приводим к строгому порядку f=[&start=]
    if ($f = (int)@$_GET['f']) {
      $start = intdiv((int)@$_GET['start'], $tpf) * $tpf;
      $expected_query = 'f=' . $f . ($start ? '&start=' . $start : '');
      if ($_SERVER['QUERY_STRING'] !== $expected_query) {
        header('Location: viewforum.php?' . $expected_query, true, 301); die; } }

    # Хороших ботов и новых посетителей объединяем в одном аккаунте без сессии
    $_SERVER['HTTP_USER_AGENT'] = 'Googlebot/'; }
 
  # Избавляемся от сорных параметров
  if (preg_match('#view(topic|forum)\.php|search\.php|/\?#', $uri)
  and ($newuri = rtrim(str_replace('?&', '?', preg_replace('#&(sid|hilit|[fgy][bcs]+lid|utm_\w+)=[^&]*#', '', str_replace('?', '?&', $uri))), '?&')) !== $uri) {
    header('Location: ' . $newuri, true, 308); die; }
}

3️⃣ Заходим в админку своего phpBB:
3.1. ОБЩИЕ -> Очистить кэш.
3.2. ОБЩИЕ -> Сброс рекорда посещаемости (только если этот код внедряется впервые).
Мои разработки в phpBB: php-антибот, robots.txt, DiscussionForumPosting.
Аватара пользователя
Kuskow
phpBB 2.0.5
Сообщения: 481
Стаж: 10 лет 3 месяца
Откуда: 🇰🇿 Караганда
Благодарил (а): 29 раз
Поблагодарили: 47 раз

Re: Атака китайских ботов

Сообщение Kuskow »

Ну что, у кого какой урожай сегодня? У меня с учётом того, что банятся не отдельные IP-адреса, а подсети класса C (1.2.3.X) аж 6 тысяч сетей набанилось за ночь.

Код: Выделить всё

Status for the jail: nginx-bot-444
|- Filter
|  |- Currently failed: 6
|  |- Total failed:     602443
|  `- File list:        /var/log/nginx/domains/SITE.com.log
`- Actions
   |- Currently banned: 6006
   |- Total banned:     10032
Мои разработки в phpBB: php-антибот, robots.txt, DiscussionForumPosting.
Аватара пользователя
Kuskow
phpBB 2.0.5
Сообщения: 481
Стаж: 10 лет 3 месяца
Откуда: 🇰🇿 Караганда
Благодарил (а): 29 раз
Поблагодарили: 47 раз

Re: Атака китайских ботов

Сообщение Kuskow »

Сегодня новая напасть напала. Но я случайно зашёл посмотреть, как там дела, заметил её и быстро причесал. Всё таки, надо отсекать запросы ботов, в которых REFERER включает свой же HOST.

Изображение
Мои разработки в phpBB: php-антибот, robots.txt, DiscussionForumPosting.
Аватара пользователя
Kuskow
phpBB 2.0.5
Сообщения: 481
Стаж: 10 лет 3 месяца
Откуда: 🇰🇿 Караганда
Благодарил (а): 29 раз
Поблагодарили: 47 раз

Re: Атака китайских ботов

Сообщение Kuskow »

Kuskow писал(а): 27.06.2026 16:27
Siava писал(а): 22.03.2026 12:42 Если не секрет, сколько в пике было забаненных адресов в fail2ban? А то я развлекался как-то подобным образом и примерно после 200тыс серверу было не очень комфортно)
Я теперь сделал так. Когда fail2ban обнаруживает 2x444 за две минуты, он банит на сутки не один конкретный адрес, а всю подсеть класса C, то есть, 1.2.3.x. Так что, соседние адреса забанены заранее ещё до того, как начнут лезть на кактус. В бане постоянно около 400 таких подсетей.
Я полностью отказался от блокировки по IP-адресам. Схема себя не оправдала, косяков больше, чем пользы. Из последнего - не перевыпустился сертификат Let's Encrypt (пришлось делать вручную через DNS) и в ловушке оказались пользователи Starlink.
Любопытно, что после отключения блокировки через fail2ban загрузка сервера заметно снизилась. То есть, теперь все отлупы делают Nginx и config.php, и это оказывается легче, чем блокировка по IP-адресам. Парадокс.
Мои разработки в phpBB: php-антибот, robots.txt, DiscussionForumPosting.
Аватара пользователя
волчара
phpBB 1.4.3
Сообщения: 99
Стаж: 9 лет 7 месяцев
Благодарил (а): 4 раза
Поблагодарили: 13 раз

Re: Атака китайских ботов

Сообщение волчара »

Приветствую всех :hat
Проблему с атаками ботов я решил при помощи созданного расширения(Guest IP Log) создано при помощи ИИ, при этом все уведомления приходят с сайта на почту и с Юмани без проблем, так же обновляется сертификат Let's Encrypt(HestiaCP) то же без проблем, так же решена проблема если Board3 Portal установлен главной страницей сайта, вообщем доволен как слон объевшийся шоколаду :D, в расширении можно блокировать как всю подсеть так и отдельно IP адрес, так же есть блокировка на определенное время.
Мудрость заключается не в том, что бы не делать ошибки, а уметь их исправлять вовремя!
Аватара пользователя
southklad
phpBB 3.1.0 RC4
Сообщения: 3463
Стаж: 14 лет 7 месяцев
Благодарил (а): 711 раз
Поблагодарили: 173 раза

Re: Атака китайских ботов

Сообщение southklad »

волчара писал(а): 26.08.2026 16:12Guest IP Log
А где такое можно попробовать?
Изображение
Vlad__
phpBB 2.0.7
Сообщения: 589
Стаж: 9 лет 8 месяцев
Благодарил (а): 246 раз
Поблагодарили: 53 раза

Re: Атака китайских ботов

Сообщение Vlad__ »

Kuskow писал(а): 26.08.2026 6:44Парадокс.
Никакого парадокса, когда в iptables тысячи забаненных айпи. Логично. man ipset и будет НОЛЬ нагрузки )
Kuskow писал(а): 26.08.2026 6:44косяков больше, чем пользы
Естественно, когда банить целыми подсетями.
волчара писал(а): 26.08.2026 16:12создано при помощи ИИ
И что ИИ "придумал"? Алгоритм расширения какой?
Аватара пользователя
волчара
phpBB 1.4.3
Сообщения: 99
Стаж: 9 лет 7 месяцев
Благодарил (а): 4 раза
Поблагодарили: 13 раз

Re: Атака китайских ботов

Сообщение волчара »

:hat
southklad писал(а): 26.08.2026 20:07 А где такое можно попробовать?
Пока ни где, делалось для своего форума, хоть форум у меня и узко направленный но атак не избежал.
Vlad__ писал(а): 26.08.2026 23:57 И что ИИ "придумал"? Алгоритм расширения какой?


Кратко, как работает расширение 
1. Когда срабатывает
  • На каждом запросе гостя (анонима) после инициализации пользователя. Авторизованные и боты, которых phpBB уже пометил как is_bot, не трогаются (кроме случаев ниже).
2. Порядок проверок (алгоритм)
  • Белый список / локальные IP → пропускаем
  • Платежные callback (ЮMoney и др.) → пропускаем
  • SEO: sitemap.xml, robots.txt → пропускаем
  • Поисковые роботы (YandexBot, Googlebot, Applebot…) → пропускаем
  • Ручной бан из ACP (даже если автоблокировка выключена) → 403
  • Если автоблокировка выключена → дальше не идём
  • Подсеть /24: >5 разных IP из одной подсети за окно (5/15/30 мин) → блок всей подсети на выбранный срок → 403 (subnet_block)
  • Время блокировки подсети:
    7 дней
    1 месяц
    3 месяца
    6 месяцев
    Навсегда
  • Запрещённые URI для гостей: posting.php, cron, подозрительная регистрация, сломанный sid (amp;sid) → 403
По режиму:
  • Мягкий — GPTBot, SemrushBot (+ пункты выше)
  • Жёсткий — ещё DotBot, PetalBot и др., fake Chrome, подозрительный UA, лимит запросов с IP
  • Комбо — мягкий + выбранные жёсткие опции
  • Если ничего не сработало → пишем в guests.log (по настройке: раз за сессию / каждый запрос)
3. Что ещё есть
  • Логи: guests.log, blocked.log (просмотр/скачивание в ACP)
  • Автоочистка логов
  • ACP: настройки + таблица заблокированных IP/подсетей с ручным добавлением и разбаном
Суть одной фразой:
Гость проходит цепочку исключений и правил; при совпадении получает 403 и запись в лог блокировок, иначе — только учёт в логе гостей.
Мудрость заключается не в том, что бы не делать ошибки, а уметь их исправлять вовремя!
Аватара пользователя
southklad
phpBB 3.1.0 RC4
Сообщения: 3463
Стаж: 14 лет 7 месяцев
Благодарил (а): 711 раз
Поблагодарили: 173 раза

Re: Атака китайских ботов

Сообщение southklad »

волчара писал(а): 27.08.2026 5:28Пока ни где
Очень жаль, тем более если работает (((
Аватара пользователя
Kuskow
phpBB 2.0.5
Сообщения: 481
Стаж: 10 лет 3 месяца
Откуда: 🇰🇿 Караганда
Благодарил (а): 29 раз
Поблагодарили: 47 раз

Re: Атака китайских ботов

Сообщение Kuskow »

Kuskow писал(а): 26.08.2026 6:44 не перевыпустился сертификат Let's Encrypt (пришлось делать вручную через DNS)
Разобрался, оказалось, дело было совсем не в блокировках, а это раньше я перемудрил с настройками кэширования. Теперь всё в порядке.

Как-то всё откладывал публикацию последней версии своего антибота для тех, у кого нет доступа к Apache/Nginx, потому что мало изменений было. Но так как их давно уже не добавляется, публикую сейчас.
Мои разработки в phpBB: php-антибот, robots.txt, DiscussionForumPosting.
Аватара пользователя
Kuskow
phpBB 2.0.5
Сообщения: 481
Стаж: 10 лет 3 месяца
Откуда: 🇰🇿 Караганда
Благодарил (а): 29 раз
Поблагодарили: 47 раз

Re: Атака китайских ботов

Сообщение Kuskow »

Новая версия 5.3 антибота для тех, у кого нет доступа к настройкам Apache/Nginx. Отсекаются зловредные боты, оптимизируется нагрузка на базу данных за счёт исправления запросов. Проверено и работает на своём форуме (в профиле есть ссылка). Совместимо с PHP 7.4 и 8.x. Если раньше устанавливали этот скрипт, теперь нужно выполнить только пункт 2. Отличия от предыдущей версии:
  • расширена блокировка по referer - бот или новый гость (без кук) не может прийти с этого же сайта
1️⃣ В самое начало файла /assets/javascript/core.js добавляем этот код прям первой строкой.
* Обязательно повторить это исправление после каждого обновления версии движка, иначе ни один человек на новом устройстве не сможет зайти или зарегистрироваться на форуме.

Код: Выделить всё

document.cookie = "checked=1; path=/; max-age=31104000; SameSite=Lax";

2️⃣ В конец файла config.php добавляем (у кого уже есть, заменяем) следующий код.
** Перед сохранением файла исправить в тексте значения параметров $ppp = 20 и $tpf = 100 на свои. Где их взять - написано там же в тексте.
*** Если у вас страница /index.php отличается от / и это важно - исключите из кода блок "Корень форума" или закомментируйте его.

Код: Выделить всё

### phpBB Antibot & URL Clean v5.3 by Kuskow & AI on Google Search
if ($uri = (string)@$_SERVER['REQUEST_URI']) { # не cli
  if (!@$_COOKIE['checked']) { # не человек в браузере
    $ua = $_SERVER['HTTP_USER_AGENT'] ?? 'python';
    # Невозможный адрес страницы или заведомо плохой бот
    if (preg_match('#(posting|search|memberlist|[um]cp|config|profile)\.php|/adm/#', $uri)
    or preg_match('#ChatGPT|meta-|keys-so|python|Firefox/72#i', $ua)
    or strpos($_SERVER['HTTP_REFERER'] ?? '', $_SERVER['HTTP_HOST'])) {
      http_response_code(410); die; }
 
    # Корень форума только /
    if (substr($_SERVER['SCRIPT_NAME'], -10) === '/index.php') {
      if ($_GET) { http_response_code(410); die; }
      if ($uri[-1] !== '/') { header('Location: ./', true, 301); die; }}
 
    # Параметры взять из админки: Общие -> Конфигурация -> Размещение сообщений
    $ppp = 20; # количество сообщений на странице темы
    $tpf = 100; # количество тем на странице форума
 
    # p= заменяем на t=[&start=]
    if (($p = (int)@$_GET['p']) && ($conn = @mysqli_connect($dbhost, $dbuser, $dbpasswd, $dbname, $dbport))) {
      if ($post = mysqli_fetch_row(mysqli_query($conn, "SELECT topic_id FROM {$table_prefix}posts WHERE post_id = {$p} AND post_visibility = 1"))) {
        $c = mysqli_fetch_row(mysqli_query($conn, "SELECT COUNT(post_id) FROM {$table_prefix}posts WHERE topic_id = {$post[0]} AND post_id < {$p} AND post_visibility = 1"));
        $start = intdiv($c[0], $ppp) * $ppp;
        header('Location: viewtopic.php?t=' . $post[0] . ($start ? '&start=' . $start : ''), true, 301); die; }
      http_response_code(410); die; }

    # t= приводим к строгому порядку t=[&start=]
    if ($t = (int)@$_GET['t']) {
      $start = intdiv((int)@$_GET['start'], $ppp) * $ppp;
      $expected_query = 't=' . $t . ($start ? '&start=' . $start : '');
      if ($_SERVER['QUERY_STRING'] !== $expected_query) {
        header('Location: viewtopic.php?' . $expected_query, true, 301); die; } }

    # f= приводим к строгому порядку f=[&start=]
    if ($f = (int)@$_GET['f']) {
      $start = intdiv((int)@$_GET['start'], $tpf) * $tpf;
      $expected_query = 'f=' . $f . ($start ? '&start=' . $start : '');
      if ($_SERVER['QUERY_STRING'] !== $expected_query) {
        header('Location: viewforum.php?' . $expected_query, true, 301); die; } }

    # Хороших ботов и новых посетителей объединяем в одном аккаунте без сессии
    $_SERVER['HTTP_USER_AGENT'] = 'Googlebot/'; }
 
  # Избавляемся от сорных параметров
  if (preg_match('#view(topic|forum)\.php|search\.php|/\?#', $uri)
  and ($newuri = rtrim(str_replace('?&', '?', preg_replace('#&(sid|hilit|[fgy][bcs]+lid|utm_\w+)=[^&]*#', '', str_replace('?', '?&', $uri))), '?&')) !== $uri) {
    header('Location: ' . $newuri, true, 308); die; }
}

3️⃣ Заходим в админку своего phpBB:
3.1. ОБЩИЕ -> Очистить кэш.
3.2. ОБЩИЕ -> Сброс рекорда посещаемости (только если этот код внедряется впервые).
Мои разработки в phpBB: php-антибот, robots.txt, DiscussionForumPosting.

Вернуться в «phpBB-пространство»