Атака китайских ботов
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ | Как задавать вопросы | Как устанавливать расширения
Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение
).
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ | Как задавать вопросы | Как устанавливать расширения
Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение
-
hd321kbps
- phpBB 2.0.3
- Сообщения: 366
- Стаж: 14 лет 4 месяца
- Откуда: Россия, Крым, Армянск
- Благодарил (а): 191 раз
- Поблагодарили: 346 раз
Атака китайских ботов
Сегодня заметил на нескольких форумах наплыв ботов из китая от 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
Все заходят с телефона 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 раз.
-
MasterX
- phpBB 1.4.4
- Сообщения: 166
- Стаж: 6 лет 5 месяцев
- Благодарил (а): 24 раза
- Поблагодарили: 19 раз
Re: Атака китайских ботов
Настройка fastcgi_cache в Nginx позволяет отдавать готовый HTML-код страниц из оперативной памяти или дискового кэша. PHP-FPM и MySQL перестают вызываться для гостей, что полностью снимает нагрузку со скраперов.Leo Angel писал(а): Вчера 15:09 Ещё не пробовал.
Опишите как делать, плиз. Ну или дайте наводку куда смотреть.
Для форума phpBB ключевая задача — не закэшировать сессию авторизованного пользователя, иначе гости увидят чужие профили.
Шаг 1. Конфигурация Nginx (nginx.conf)
В основной блок http (обычно в /etc/nginx/nginx.conf) добавь объявление зоны кэширования:
http {
# Путь к кэшу, размер ключей 10MB (хватит на ~80k URL), размер самого кэша до 1GB
fastcgi_cache_path /var/cache/nginx_phpbb levels=1:2 keys_zone=PHPBB_CACHE:10m max_size=1g inactive=60m use_temp_path=off;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
# Защита от сбоев: если PHP "лежит", отдаем старый кэш
fastcgi_cache_use_stale error timeout invalid_header updating http_500 http_503;
fastcgi_cache_lock on;
}
Шаг 2. Конфигурация виртуального хоста (конфиг сайта)
В файле конфигурации твоего сайта (например, /etc/nginx/sites-available/forum.conf) внеси изменения внутри блока server:
server {
listen 80;
server_name myforum.com;
# --- ПЕРЕМЕННАЯ ДЛЯ ОТКЛЮЧЕНИЯ КЭША ---
set $no_cache 0;
# 1. Не кэшируем POST-запросы (отправка сообщений, авторизация)
if ($request_method = POST) {
set $no_cache 1;
}
# 2. Не кэшируем URL с GET-параметрами (поиск, служебные действия)
if ($query_string != "") {
set $no_cache 1;
}
# 3. Не кэшируем личный кабинет, админку и служебные страницы phpBB
if ($request_uri ~* "/(adm|ucp|mcp|posting\.php|download)") {
set $no_cache 1;
}
# 4. Проверка куки авторизации phpBB (если кука есть — юзер залогинен, кэш отключаем)
# Внимание: замени 'phpbb3_x' на префикс кук твоего форума (смотрится в браузере DevTools -> Application -> Cookies)
if ($http_cookie ~* "phpbb3_[a-z0-9]+_u=(?!1;)[0-9]+") {
set $no_cache 1;
}
# Для XenForo проверка куки авторизации выглядит так:
# if ($http_cookie ~* "xf_user|xf_session") { set $no_cache 1; }
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# Подключение твоих стандартных параметров FastCGI
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:/run/php/php8.2-fpm.sock; # Укажи свой сокет или IP:порт PHP-FPM
# --- НАСТРОЙКИ КЭША ---
fastcgi_cache PHPBB_CACHE;
fastcgi_cache_valid 200 301 302 10m; # Время жизни кэша для гостей (10 минут)
fastcgi_cache_no_cache $no_cache;
fastcgi_cache_bypass $no_cache;
# Заголовок для отладки (показывает, сработал ли кэш: HIT, MISS или BYPASS)
add_header X-Cache-Status $upstream_cache_status;
}
}Шаг 3. Создание директории и проверка
1. Создай папку под кэш и задай права для пользователя веб-сервера (www-data или nginx):
mkdir -p /var/cache/nginx_phpbb
chown -R www-data:www-data /var/cache/nginx_phpbb2.Проверь синтаксис конфигурации Nginx:
nginx -t 3. Перезапусти Nginx, если нет ошибок:
systemctl reload nginxКак проверить работу
1. Открой форум в режиме инкогнито (как гость).
2. Открой консоль разработчика (F12) -> вкладка Network -> выбери заголовок страницы.
3. Проверь заголовок X-Cache-Status:
- MISS — страница сгенерирована PHP и записана в кэш (при первом заходе).
- HIT — страница отдана напрямую из кэша Nginx (при повторном обновлении). PHP и MySQL не вызывались.
4. Авторизуйся под пользователем — статус должен смениться на BYPASS (кэш полностью обходится).
-
Evangelion
- phpBB 2.0.5
- Сообщения: 474
- Стаж: 14 лет 8 месяцев
- Благодарил (а): 58 раз
- Поблагодарили: 104 раза
Re: Атака китайских ботов
Имеется ещё такое расширение, против нашествия ботов https://www.phpbb.com/community/viewtopic.php?t=2662765
-
MasterX
- phpBB 1.4.4
- Сообщения: 166
- Стаж: 6 лет 5 месяцев
- Благодарил (а): 24 раза
- Поблагодарили: 19 раз
Re: Атака китайских ботов
фигня это все. боты сильно эволюционировали.
А эти проверки только отпугнут реальных пользователей.
А эти проверки только отпугнут реальных пользователей.
-
Siava
- Поддержка

- Сообщения: 5550
- Стаж: 21 год 7 месяцев
- Откуда: Питер
- Благодарил (а): 187 раз
- Поблагодарили: 774 раза
Re: Атака китайских ботов
Этой теме уже лет 15 как) только надо довольно тщательно настроить всё, чтобы не было проблем с авторизацией/выкидыванием или перехватом чужих сессий. Вашу инструкцию ИИ писал что ли? Там есть косяк как минимум в этом:MasterX писал(а): Вчера 15:31 Настройка fastcgi_cache в Nginx позволяет отдавать готовый HTML-код страниц из оперативной памяти или дискового кэша
Дело в том, что в phpbb дофига чего отдаётся с GET-параметрами. Взять любую тему хотя бы. В общем полностью таким инструкциям доверяться не стоит.MasterX писал(а): Вчера 15:31 # 2. Не кэшируем URL с GET-параметрами (поиск, служебные действия)
if ($query_string != "") {
set $no_cache 1;
}
Еще одно нарушение правил и будете забанены. © Mr. Anderson
Ты очистил кеш? © Sheer
https://siava.ru (phpbb2.0.x 3.5.x)
Ты очистил кеш? © Sheer
https://siava.ru (phpbb
-
Kuskow
- phpBB 2.0.5
- Сообщения: 486
- Стаж: 10 лет 3 месяца
- Откуда: 🇰🇿 Караганда
- Благодарил (а): 29 раз
- Поблагодарили: 47 раз
Re: Атака китайских ботов
Зловредные - совсем не сильно. Тупые они. Палятся на мелочах. Потому что защитные экраны мало где стоят - им хватает незащищённых сайтов, они не тратятся на эволюцию.
Была такая мысль, тут обсуждалась. Но нет, этого не произошло. Количество регистраций реальныйх пользователей выросло. Так что, это предположение не подтвердилось.
-
волчара
- phpBB 1.4.4
- Сообщения: 102
- Стаж: 9 лет 7 месяцев
- Благодарил (а): 4 раза
- Поблагодарили: 13 раз
Re: Атака китайских ботов
MasterX, а не проще ли тогда просто установить [Расширение] (phpBB 3.2-3.3) Cache guests & bots pages: Кэширование страниц для гостей и ботов ????
Ну не знаю, херня или нет, но я знаю точно, что как создал с ИИ расширения Guest IP Log и установил на рабочем форуме, проблема с атакой пропала, уже 2 месяца тишина и благодать.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Мудрость заключается не в том, что бы не делать ошибки, а уметь их исправлять вовремя!
-
Kuskow
- phpBB 2.0.5
- Сообщения: 486
- Стаж: 10 лет 3 месяца
- Откуда: 🇰🇿 Караганда
- Благодарил (а): 29 раз
- Поблагодарили: 47 раз
Re: Атака китайских ботов
Концепцию придумал я сам:Leo Angel писал(а): Вчера 15:09 Кэширование Nginx (fastcgi_cache) для гостей
Опишите как делать, плиз. Ну или дайте наводку куда смотреть.
- если посетитель без cookies (боты и первый визит гостя) - все страницы phpBB записываются в кэш и выдаются из кэша;
- аватары выдаются из кэша безусловно для всех: ботов, гостей, пользователей.
* Дисклеймер: Я свой сервер настраивал не по этой инструкции, а методом проб и ошибок. Эта инструкция написана уже по следам моей настройки, точность её не проверялась, по ней я ничего не настраивал. Как она себя поведёт в конкретных условиях - я не знаю.
Остальное написал уже ИИ:
Вот универсальная выжимка, которую поймет владелец FastPanel, ISPmanager или просто чистого VestaCP/Nginx.
Шаг 1. Глобальная настройка кэша (для всех панелей одинаково)
В главный файл nginx.conf (в секцию http { ... }) или в /etc/nginx/conf.d/fastcgi_cache.conf добавляется одна строка, создающая зону кэша:
Код: Выделить всё
fastcgi_cache_path /var/cache/nginx/phpbb levels=1:2 keys_zone=phpbb_cache:100m max_size=10g inactive=24h use_temp_path=off;(Папку
/var/cache/nginx/phpbb нужно создать вручную и дать ей права chown -R www-data:www-data или nginx:nginx в зависимости от ОС).Шаг 2. Разница в настройках сайтов для разных панелей
Вам нужно найти конфигурационный файл HTTPS (порт 443) нужного сайта. В зависимости от панели он лежит в разных местах:
* FastPanel: /etc/nginx/fastpanel2/sites/ваш_пользователь/ваш_домен.conf
* ISPmanager: /etc/nginx/vhosts/ваш_пользователь/ваш_домен.conf
* HestiaCP: Изменяется не сам конфиг сайта, а кастомный шаблон в /usr/local/hestia/data/templates/web/nginx/php-fpm/ваш-шаблон.stpl (после чего нужно перестроить пользователя).
* Чистый Nginx (без панелей): /etc/nginx/sites-available/ваш_домен.conf
Шаг 3. Что конкретно добавить в конфиг HTTPS (443) вашего сайта
Внутрь блока
server { ... } добавляем две вещи:1. Кэширование тяжелых аватарок (Добавить ДО блока location /)
Поскольку аватарки в phpBB отдаются динамически через PHP, мы кэшируем их намертво на 7 дней, полностью игнорируя куки.
(Внимание: замените переменную
%sdocroot% или $document_root на реальный путь к корню вашего сайта, если настраиваете вручную без HestiaCP, например /var/www/user/data/www/site.com).
Код: Выделить всё
location = /download/file.php {
if ($arg_avatar = "") {
return 405; # Если это обычное вложение, а не аватарка — уходим в fallback
}
fastcgi_cache phpbb_cache;
fastcgi_cache_valid 200 7d;
fastcgi_cache_bypass "";
fastcgi_no_cache "";
fastcgi_hide_header "Set-Cookie";
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
expires 7d;
add_header Cache-Control "public, no-transform";
add_header X-FastCGI-Cache $upstream_cache_status;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # Для HestiaCP тут %sdocroot%
fastcgi_pass 127.0.0.1:9000; # Или ваш сокет/переменная панели (например %backend_lsnr%)
}
error_page 405 = @download_fallback;
location @download_fallback {
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root/download/file.php;
fastcgi_pass 127.0.0.1:9000; # Или ваш сокет/переменная панели
}
2. Защита от утечки данных и кэш страниц (Добавить ВНУТРЬ блока обработки PHP)
Найдите в конфиге блок
location ~ [^/]\.php(/|$) { ... } (куда уходят все PHP-запросы форума) и добавьте туда эти строки:
Код: Выделить всё
# Железобетонная безопасность: если есть хоть одна кука, кэш отключается.
# Гости видят кэш, авторизованные пользователи идут напрямую в PHP и никогда не увидят чужой контент.
set $no_cache 0;
if ($http_cookie != "") {
set $no_cache 1;
}
fastcgi_cache phpbb_cache;
fastcgi_cache_valid 200 301 302 24h; # Кэшируем гостевые страницы на сутки
fastcgi_ignore_headers Cache-Control Expires Set-Cookie; # Игнорируем запреты кэша от самого phpBB
fastcgi_cache_bypass $no_cache;
fastcgi_no_cache $no_cache;
fastcgi_cache_use_stale error timeout invalid_header http_500 http_503;
add_header X-FastCGI-Cache $upstream_cache_status; # Строка для проверки HIT/MISS в браузере
После внесения изменений обязательно проверяем Nginx командой
nginx -t и перезапускаем его systemctl reload nginx.P.S. Единственный нюанс, который стоит держать в голове (но в сам пост добавлять не нужно, чтобы не усложнять): если кто-то из пользователей FastPanel или ISPmanager скопирует конфигурацию аватарок «как есть» и у них упадет Nginx с ошибкой, это будет означать, что в их панелях бэкенд PHP-FPM слушает не порт 127.0.0.1:9000, а сокет (например, unix:/var/run/php-fpm.sock). Но вы это честно указали в комментариях к коду, так что админы разберутся.
-
Kuskow
- phpBB 2.0.5
- Сообщения: 486
- Стаж: 10 лет 3 месяца
- Откуда: 🇰🇿 Караганда
- Благодарил (а): 29 раз
- Поблагодарили: 47 раз
Re: Атака китайских ботов
Чтобы понять, насколько эффективна эта схема, смотрим на статистику ответов Nginx из логов живого форума:
* 31 873 HIT (Попадание в кэш) — Почти 32 тысячи запросов от гостей Nginx отдал моментально из своей памяти. До тяжелого PHP-FPM и базы данных MySQL эти запросы вообще не дошли. Нагрузка на процессор от них равна нулю.
* 20 795 MISS (Мимо кэша) — Страницы, которые гости/боты открыли впервые. Nginx сходил в PHP, сгенерировал их, отдал гостю и бережно сохранил в кэш для следующих посетителей.
* 8 458 BYPASS (Обход кэша) — Это запросы от авторизованных пользователей (или тех, у кого есть куки). Как и задумывалось, они идут напрямую к PHP и базе данных, видят абсолютно «живой» контент и на 100% защищены от показа чужих сессий.
* 392 EXPIRED (Просрочено) — Страницы, у которых истек 24-часовой срок жизни. Nginx обновил их при первом же новом заходе гостя.
Подводим итоги:
С одной стороны у нас HIT (запросы, которые Nginx обработал сам), а с другой стороны — BYPASS + MISS + EXPIRED (все запросы, которые заставили сервер напрячься, запустить PHP и сходить в базу данных).
Если сложить все тяжелые запросы, которые дошли до интерпретатора PHP (BYPASS + MISS + EXPIRED), мы получим 29 645 запросов.
А чистых попаданий в кэш (HIT) у нас — 31 873.
Это значит, что Nginx в одиночку заблокировал и обработал только половину общего трафика форума. Так что, кэширование считаю неэффективной мерой для разгрузки сервера.
Код: Выделить всё
8458 BYPASS
31873 HIT
20795 MISS
392 EXPIRED
* 20 795 MISS (Мимо кэша) — Страницы, которые гости/боты открыли впервые. Nginx сходил в PHP, сгенерировал их, отдал гостю и бережно сохранил в кэш для следующих посетителей.
* 8 458 BYPASS (Обход кэша) — Это запросы от авторизованных пользователей (или тех, у кого есть куки). Как и задумывалось, они идут напрямую к PHP и базе данных, видят абсолютно «живой» контент и на 100% защищены от показа чужих сессий.
* 392 EXPIRED (Просрочено) — Страницы, у которых истек 24-часовой срок жизни. Nginx обновил их при первом же новом заходе гостя.
Подводим итоги:
С одной стороны у нас HIT (запросы, которые Nginx обработал сам), а с другой стороны — BYPASS + MISS + EXPIRED (все запросы, которые заставили сервер напрячься, запустить PHP и сходить в базу данных).
Если сложить все тяжелые запросы, которые дошли до интерпретатора PHP (BYPASS + MISS + EXPIRED), мы получим 29 645 запросов.
А чистых попаданий в кэш (HIT) у нас — 31 873.
Это значит, что Nginx в одиночку заблокировал и обработал только половину общего трафика форума. Так что, кэширование считаю неэффективной мерой для разгрузки сервера.
-
MasterX
- phpBB 1.4.4
- Сообщения: 166
- Стаж: 6 лет 5 месяцев
- Благодарил (а): 24 раза
- Поблагодарили: 19 раз
Re: Атака китайских ботов
Так поделитесь опытом с людьми.волчара писал(а): Сегодня 7:02 Ну не знаю, херня или нет, но я знаю точно, что как создал с ИИ расширения Guest IP Log и установил на рабочем форуме, проблема с атакой пропала, уже 2 месяца тишина и благодать.
Но подозреваю, что это расширение рубит и реальных юзверей.
Учитывая продолжительность темы - проблема все равно не решается, либо решается крайне краткосрочно и не полностью.
Пы Сы: Я не знаю, как оно работает, но на главную вашего форума я попасть не смог. Multiboot by Volchara -Портал это все что я увидел на вкладке.
Так что как и предполагал, оно работает некорректно.
Последний раз редактировалось MasterX 30.08.2026 10:03, всего редактировалось 1 раз.
-
Kuskow
- phpBB 2.0.5
- Сообщения: 486
- Стаж: 10 лет 3 месяца
- Откуда: 🇰🇿 Караганда
- Благодарил (а): 29 раз
- Поблагодарили: 47 раз
Re: Атака китайских ботов
Анализ общей статистики сервера (Кэш + Антибот в действии)
Чтобы оценить реальную картину, посмотрим на распределение HTTP-кодов ответов Nginx по всему входящему трафику:
Как это работает в связке и почему это эффективно:
1. Антибот срезает «грязный» трафик на подлете (Коды 444 и 410)
* 444 в Nginx означает «закрыть соединение и не отдавать ни одного байта в ответ». Антибот распознал спамеров, сканеров уязвимостей или левых парсеров и моментально их сбросил. Сервер не потратил ни мегабайта трафика, ни капли процессора.
* 410 (Gone) — PHP-антибот ответил ботам, что запрашиваемый ресурс «удален навсегда». Это заставляет нормальных роботов вычеркнуть адрес из базы и больше не спамить сервер.
2. Ловушка Антибота на редиректах (Код 301)
34 550 запросов с кодом 301 — Огромная часть из этих редиректов создана Антиботом, который на лету перехватывает старые ссылки (превращает p= в t=&start=). В чем здесь магия: огромное количество спам-ботов написаны крайне примитивно. Получив в ответ на свой запрос любой легитимный ответ от сервера (в данном случае редирект 301), они ставят у себя галочку «готово» и уходят. Они физически не идут по новому адресу! В итоге тяжелый движок phpBB для обработки темы форума даже не просыпается, а сервер экономит прорву ресурсов.
3. Кэш разгружает то, что пропустил Антибот (Код 200)
Всего сервер успешно отдал контент (код 200) 96 761 раз. И вот тут вступают в силу те самые цифры из лога кэширования, которые мы разбирали ранее (где половина ушла в HIT).
Из общего объема трафика (около 160 000 кликов в логе) до реального «тяжелого» выполнения PHP и MySQL доходит лишь малая часть. Антибот отсекает явных вредителей, а FastCGI-кэш берет на себя половину легитимных гостей и поисковиков.
Именно в такой связке форум phpBB может стабильно жить и летать даже на самом дешевом VPS.
Чтобы оценить реальную картину, посмотрим на распределение HTTP-кодов ответов Nginx по всему входящему трафику:
Код: Выделить всё
_200 96761 (Успешные запросы — контент отдан)
_301 34550 (Редиректы, в основном p= на t=&start=)
_444 24553 (Запросы сброшены Антиботом без ответа)
_410 1699 (Запросы к удаленным/несуществующим ресурсам для ботов)
_302 1117 (после пользовательских действий)
_404 829 (несуществующие страницы обработал phpBB)
_304 812 (ограничение доступа обработал phpBB)
_308 629 (перенаправление пользователей Антиботом)
Как это работает в связке и почему это эффективно:
1. Антибот срезает «грязный» трафик на подлете (Коды 444 и 410)
* 444 в Nginx означает «закрыть соединение и не отдавать ни одного байта в ответ». Антибот распознал спамеров, сканеров уязвимостей или левых парсеров и моментально их сбросил. Сервер не потратил ни мегабайта трафика, ни капли процессора.
* 410 (Gone) — PHP-антибот ответил ботам, что запрашиваемый ресурс «удален навсегда». Это заставляет нормальных роботов вычеркнуть адрес из базы и больше не спамить сервер.
2. Ловушка Антибота на редиректах (Код 301)
34 550 запросов с кодом 301 — Огромная часть из этих редиректов создана Антиботом, который на лету перехватывает старые ссылки (превращает p= в t=&start=). В чем здесь магия: огромное количество спам-ботов написаны крайне примитивно. Получив в ответ на свой запрос любой легитимный ответ от сервера (в данном случае редирект 301), они ставят у себя галочку «готово» и уходят. Они физически не идут по новому адресу! В итоге тяжелый движок phpBB для обработки темы форума даже не просыпается, а сервер экономит прорву ресурсов.
3. Кэш разгружает то, что пропустил Антибот (Код 200)
Всего сервер успешно отдал контент (код 200) 96 761 раз. И вот тут вступают в силу те самые цифры из лога кэширования, которые мы разбирали ранее (где половина ушла в HIT).
Из общего объема трафика (около 160 000 кликов в логе) до реального «тяжелого» выполнения PHP и MySQL доходит лишь малая часть. Антибот отсекает явных вредителей, а FastCGI-кэш берет на себя половину легитимных гостей и поисковиков.
Именно в такой связке форум phpBB может стабильно жить и летать даже на самом дешевом VPS.
Последний раз редактировалось Kuskow 30.08.2026 10:11, всего редактировалось 1 раз.
-
Kuskow
- phpBB 2.0.5
- Сообщения: 486
- Стаж: 10 лет 3 месяца
- Откуда: 🇰🇿 Караганда
- Благодарил (а): 29 раз
- Поблагодарили: 47 раз
Re: Атака китайских ботов
Нет такой логики. Лично я тему продолжаю чисто от нечего делать. А от ботов жду, когда они уже реально нападут на мой сервер, как это было в начале года, когда пользователи не могли даже листать форум, когда было по 200 тысяч гостей за 5 минут. Очень хочется посмотреть, как с этим наплывом справится мой антибот.MasterX писал(а): Сегодня 9:56 Учитывая продолжительность темы - проблема все равно не решается, либо решается крайне краткосрочно и не полностью.
-
Michel
- Поддержка

- Сообщения: 623
- Стаж: 14 лет 7 месяцев
- Откуда: Липецк
- Благодарил (а): 143 раза
- Поблагодарили: 80 раз
Re: Атака китайских ботов
Хорошее расширение. Не отпугивает ни гостей, ни ботов - и тем более пользователей. Нагрузку косит сильно. По идее и не было задачи свести нагрузку на "0". Главное чтоб всё работало, дышало свободно и не падало даже при большой нагрузке. Данное расширение справляется на все 100% на мой взгляд.волчара писал(а): Сегодня 7:02 а не проще ли тогда просто установить [Расширение] (phpBB 3.2-3.3) Cache guests & bots pages: Кэширование страниц для гостей и ботов ????
-
волчара
- phpBB 1.4.4
- Сообщения: 102
- Стаж: 9 лет 7 месяцев
- Благодарил (а): 4 раза
- Поблагодарили: 13 раз
Re: Атака китайских ботов
Так у меня Портал установлен как главная страница сайта(к стати тоже расширением), а не список форума, что бы перейти в список форума, на это есть кнопочка в горизонтальном меню.MasterX писал(а): Сегодня 9:56 Я не знаю, как оно работает, но на главную вашего форума я попасть не смог. Multiboot by Volchara -Портал это все что я увидел на вкладке.
скрин
если только тех кто находиться в забаненной подсети, а так пользователи регистрируются без проблем, потому что для гостей только режим чтения, как и для ботов
Guest IP Log — полное описание функционала и алгоритм работы
================================================================================
Guest IP Log — полное описание функционала и алгоритм работы
Расширение phpBB: vse/guestiplog
Версия: 1.2.5
Требования: phpBB >= 3.3.0, PHP >= 7.4
Лицензия: GPL-2.0-only
================================================================================
1. НАЗНАЧЕНИЕ
--------------------------------------------------------------------------------
Расширение Guest IP Log решает две задачи для форума phpBB:
1) Логирование IP-адресов анонимных посетителей (гостей) в текстовый файл.
2) Блокировка вредоносных ботов и скраперов с гибкими настройками в ACP.
Расширение срабатывает только для гостей (неавторизованных пользователей).
Зарегистрированные пользователи, официальные боты phpBB (is_bot), cron,
установка и админ-панель не обрабатываются.
2. ТОЧКА ВХОДА И ОБЩИЙ ПОРЯДОК РАБОТЫ
--------------------------------------------------------------------------------
Событие: core.user_setup_after (класс event\listener).
При каждом запросе (кроме cron, install, ACP) выполняется:
1. Автоочистка логов (если включена в настройках).
2. Если пользователь НЕ гость — выход.
3. Если пользователь — официальный бот phpBB — выход.
4. Проверка и блокировка (bot_blocker::check_and_block).
5. Если блокировка сработала — скрипт завершается с HTTP 403.
6. Если логирование включено — запись в guests.log.
3. ЛОГИРОВАНИЕ IP ГОСТЕЙ
--------------------------------------------------------------------------------
3.1. Условия записи
- Пользователь — гость (user_id = ANONYMOUS).
- Не является ботом phpBB.
- В настройках включено логирование (vse_guestiplog_enabled).
3.2. Режимы записи
- «Один раз за сессию» (по умолчанию): запись только при создании сессии
(session_created).
- «Каждый запрос»: запись при каждом просмотре страницы гостем
(лог быстро растёт).
3.3. Формат строки guests.log
[YYYY-MM-DD HH:MM:SS] IP: <ip> | Session: <session_id> | URI: <uri> | UA: <user_agent>
Время — UTC (gmdate).
3.4. Путь к логу
- Настраивается в ACP (относительно корня phpBB).
- По умолчанию: store/ext/vse/guestiplog/guests.log
- Папка создаётся автоматически при первой записи.
3.5. Автоочистка логов
- Опционально обнуляет guests.log и/или blocked.log через заданный интервал.
- Интервал: от 1 до 168 часов (по умолчанию 24).
- Проверка выполняется при обычных заходах на форум (любой посетитель).
- Используется файловая блокировка (log_clear.lock) для исключения гонок.
4. БЛОКИРОВКА БОТОВ — АЛГОРИТМ check_and_block()
--------------------------------------------------------------------------------
Метод: service\bot_blocker::check_and_block($ip)
При блокировке: запись в blocked.log, ответ HTTP 403 Forbidden (текст «Forbidden»).
Порядок проверок (строго последовательный):
ШАГ 1. БЕЛЫЙ СПИСОК И ЛОКАЛЬНЫЕ IP
- Локальные и частные адреса (127.0.0.1, ::1, 10.x, 192.168.x и т.д.)
никогда не блокируются.
- IP из белого списка ACP (vse_guestiplog_block_ip_whitelist).
→ Пропуск, дальнейшие проверки не выполняются.
ШАГ 2. ПЛАТЁЖНЫЕ CALLBACK
- URI содержит пути ЮMoney/донатов: /ym_payin, /wm_payin, /sp_payin,
/py_payin (с app.php/ или без).
- POST с notification_type и (sha1_hash или operation_id).
→ Пропуск (уведомления приходят гостем с коротким UA).
ШАГ 3. SEO-РЕСУРСЫ И ПОИСКОВЫЕ РОБОТЫ
- SEO: /robots.txt, /sitemap.xml, /sitemap-N.xml,
/updates/*.json (version-check phpBB).
- User-Agent поисковиков: YandexBot, Googlebot, Applebot, bingbot,
DuckDuckBot, Mail.RU_Bot и др.
→ Пропуск.
ШАГ 4. РУЧНОЙ БАН (manual_blocks.json)
- IP в списке ручных блокировок из ACP.
- Работает ВСЕГДА, даже если автоблокировка выключена.
→ Блокировка, причина: manual_block.
ШАГ 5. АВТОБЛОКИРОВКА ВЫКЛЮЧЕНА?
- Если vse_guestiplog_block_enabled = 0 → стоп, пропуск.
ШАГ 6. ОПРЕДЕЛЕНИЕ ПРИЧИНЫ БЛОКИРОВКИ (get_block_reason)
- Если причина найдена → blocked.log + HTTP 403.
- Если причина пустая → пропуск.
Внутри get_block_reason() (после повторной проверки whitelist/SEO/ботов):
6.1. Ручной бан (manual_block)
6.2. Блокировка подсети /24 (subnet_block) — если включена
6.3. Запрещённые URI для гостей (restricted_uri)
6.4. Известные боты — мягкий список (known_bot)
6.5. Далее — в зависимости от режима (мягкий / жёсткий / комбо)
5. ЗАПРЕЩЁННЫЕ URI ДЛЯ ГОСТЕЙ (restricted_uri)
--------------------------------------------------------------------------------
Гость получает 403 при обращении к:
- posting.php (любой путь, содержащий posting.php)
- app.php/cron/ или app.php/cron
- ucp.php?mode=register с параметром iscanyesno (сканер регистрации)
- ucp.php?i=pm, folder=inbox/outbox/sentbox (личные сообщения гостю недоступны)
- Запросы со сломанным sid в URL:
amp;sid, amp%3Bsid, &sid=, ?amp;sid=
(типично при копировании HTML-ссылок скраперами)
6. РЕЖИМЫ БЛОКИРОВКИ
--------------------------------------------------------------------------------
В ACP можно включить ровно ОДИН режим при активной блокировке.
6.1. МЯГКИЙ РЕЖИМ (MODE_SOFT = 1)
Блокирует:
- Известных ботов (мягкий список UA): GPTBot, ChatGPT-User, SemrushBot
- Запрещённые URI (см. раздел 5)
НЕ блокирует: подозрительные UA, fake Chrome, rate limit, жёсткий список ботов.
6.2. ЖЁСТКИЙ РЕЖИМ (MODE_HARD = 2)
Всё из мягкого режима, плюс:
- Жёсткий список ботов: GPTBot, ChatGPT-User, SemrushBot, GoogleOther,
Bytespider, CCBot, AhrefsBot, MJ12bot, PetalBot, DotBot
- Поддельный Chrome 60–79 (fake_chrome): UA вида Chrome/63.0.x.x,
major 60–79, minor = 0
- Подозрительные User-Agent (suspicious_ua):
* пустой или короче 20 символов
* Chrome/NNN.0.0.0 с major < 130 (кроме реальных браузеров:
YaBrowser, Edg, OPR, Brave, Vivaldi, SamsungBrowser, Firefox)
* Macintosh; Intel Mac OS X + Chrome/NNN.0.0.0
* Linux aarch64 + Chrome/NNN.0.0.0
- Rate limit: 30 запросов за 60 секунд с одного IP (по умолчанию)
6.3. КОМБО РЕЖИМ (MODE_COMBO = 3)
Мягкий режим + жёсткий список ботов + опционально (включаются отдельно в ACP):
- Подозрительные User-Agent (vse_guestiplog_combo_suspicious_ua)
- Поддельный Chrome 60–79 (vse_guestiplog_combo_fake_chrome)
- Лимит запросов (vse_guestiplog_combo_rate_limit):
настраиваемые count и window (по умолчанию 30 / 60 сек)
7. БЛОКИРОВКА ПОДСЕТИ /24 (subnet_block)
--------------------------------------------------------------------------------
Включается опцией «Блокировка всей подсети IP адреса».
Алгоритм (только IPv4):
1. IP приводится к подсети x.x.x.0/24.
2. В окне времени (5 / 15 / 30 минут — настраивается) считаются уникальные
IP гостей из этой подсети.
3. Если уникальных IP > 5 — блокируется вся подсеть /24.
4. Срок блокировки: 7 / 30 / 90 / 180 дней или навсегда.
5. Данные хранятся в subnet_block.json с файловой блокировкой.
6. IP из белого списка и локальные не учитываются и не блокируются.
7. IPv6 не поддерживается для подсетевой блокировки.
При срабатывании в blocked.log: Reason: subnet_block
8. РУЧНАЯ БЛОКИРОВКА IP (ACP)
--------------------------------------------------------------------------------
Страница ACP: «Заблокированные IP адреса».
Возможности:
- Добавить IP (IPv4/IPv6) со сроком: 7 / 30 / 90 / 180 дней / навсегда
- Просмотр таблицы: IP/подсеть, тип, дата начала, дата окончания, срок
- Разблокировка (ручные IP и автоматические подсети)
- Пагинация: 20 записей на страницу
- «Показать всю таблицу» / «Скрыть всю таблицу»
- Поиск по всем записям (не только текущая страница):
* точный IP
* подсеть (95.108.213.0 или 95.108.213.0/24)
* IP внутри заблокированной подсети /24
При нахождении — переход на страницу и подсветка строки.
При отсутствии — модальное окно «IP адрес не найден».
Ограничения:
- Нельзя заблокировать IP из белого списка или локальный адрес.
- Ручной бан действует независимо от включения автоблокировки.
9. ФАЙЛЫ ДАННЫХ
--------------------------------------------------------------------------------
Папка по умолчанию: store/ext/vse/guestiplog/
guests.log — лог визитов гостей
blocked.log — лог блокировок
subnet_block.json — состояние подсетевых блокировок
manual_blocks.json — ручные блокировки из ACP
rate_limit.json — счётчики запросов для rate limit
log_clear.lock — блокировка при автоочистке
Формат строки blocked.log:
[YYYY-MM-DD HH:MM:SS] BLOCKED | Mode: <режим> | Reason: <причина> |
IP: <ip> | URI: <uri> | UA: <user_agent>
Коды причин (Reason):
manual_block — ручной бан из ACP
subnet_block — блокировка подсети /24
restricted_uri — запрещённый URI для гостя
known_bot — известный бот по User-Agent
fake_chrome — поддельный Chrome 60–79
suspicious_ua — подозрительный User-Agent
rate_limit — превышен лимит запросов
10. АДМИН-ПАНЕЛЬ (ACP)
--------------------------------------------------------------------------------
Модуль: Расширения → Guest IP Log
10.1. Страница «Настройки лога IP гостей» (mode: settings)
Основные настройки:
- Включить/выключить логирование
- Папка для лог-файла (относительный путь)
- Режим записи: один раз за сессию / каждый запрос
- Статус текущего лога (путь, размер)
Автоочистка:
- Включить автоочистку
- Интервал в часах (1–168)
- Очищать guests.log / blocked.log
- Дата последней автоочистки
Блокировка ботов:
- Включить блокировку
- Режим: мягкий / жёсткий / комбо
- Белый список IP
- Блокировка подсети /24 (окно и срок)
- Доп. настройки комбо-режима (подозрительный UA, fake Chrome, rate limit)
Просмотр логов:
- Модальное окно с пагинацией (150 строк на страницу)
- Кнопки «Скачать» и «Закрыть»
- Скачивание guests.log и blocked.log
10.2. Страница «Заблокированные IP адреса» (mode: blocked)
См. раздел 8.
11. НАСТРОЙКИ В БАЗЕ ДАННЫХ (config)
--------------------------------------------------------------------------------
vse_guestiplog_enabled — логирование вкл/выкл
vse_guestiplog_log_path — путь к папке логов
vse_guestiplog_log_every_request — каждый запрос / раз за сессию
vse_guestiplog_log_auto_clear — автоочистка
vse_guestiplog_log_auto_clear_hours — интервал автоочистки (часы)
vse_guestiplog_log_auto_clear_guests — очищать guests.log
vse_guestiplog_log_auto_clear_blocked — очищать blocked.log
vse_guestiplog_log_auto_clear_last — timestamp последней очистки
vse_guestiplog_block_enabled — автоблокировка вкл/выкл
vse_guestiplog_block_mode — 1=мягкий, 2=жёсткий, 3=комбо
vse_guestiplog_block_subnet — блокировка подсети
vse_guestiplog_block_subnet_window — окно подсчёта (5/15/30 мин)
vse_guestiplog_block_subnet_duration — срок блока подсети (дни)
vse_guestiplog_block_ip_whitelist — белый список IP
vse_guestiplog_combo_suspicious_ua — комбо: подозрительный UA
vse_guestiplog_combo_fake_chrome — комбо: fake Chrome
vse_guestiplog_combo_rate_limit — комбо: rate limit
vse_guestiplog_combo_rate_limit_count — макс. запросов
vse_guestiplog_combo_rate_limit_window — окно в секундах
12. СТРУКТУРА РАСШИРЕНИЯ
--------------------------------------------------------------------------------
ext/vse/guestiplog/
composer.json — метаданные, version-check
ext.php — проверка версии phpBB
config/services.yml — DI-контейнер
event/listener.php — обработчик core.user_setup_after
service/
guest_ip_logger.php — логирование и автоочистка
bot_blocker.php — блокировка ботов
acp/
guestiplog_info.php — регистрация модулей ACP
guestiplog_module.php — логика ACP
adm/style/
acp_guestiplog.html — шаблон настроек
acp_guestiplog.js/css — просмотр логов в модалке
acp_guestiplog_blocked.html/js/css — страница блокировок
language/ru/, language/en/ — языковые строки
migrations/ — миграции БД и модулей
13. СХЕМА АЛГОРИТМА (КРАТКО)
--------------------------------------------------------------------------------
Запрос на форум
|
v
[Cron / Install / ACP?] ---> да ---> выход
| нет
v
[Автоочистка логов]
|
v
[Авторизован?] -----------> да ---> выход (без блокировки и лога гостя)
| нет (гость)
v
[Бот phpBB?] --------------> да ---> выход
| нет
v
+---------------------------+
| check_and_block(IP) |
| 1. Whitelist / local IP |---> пропуск
| 2. Payment callback |---> пропуск
| 3. SEO / search bots |---> пропуск
| 4. Manual ban |---> 403
| 5. Auto-block off? |---> пропуск
| 6. Subnet /24 block |---> 403
| 7. Restricted URI |---> 403
| 8. Known bots (soft) |---> 403
| 9. Mode: hard/combo rules |---> 403 или пропуск
+---------------------------+
|
v (не заблокирован)
[Логирование включено?] ---> нет ---> конец
| да
v
[Режим: каждый запрос ИЛИ новая сессия?]
|
v
Запись в guests.log
14. УСТАНОВКА И ОБНОВЛЕНИЕ
--------------------------------------------------------------------------------
1. Скопировать папку ext/vse/guestiplog на сервер.
2. В ACP: Пользователи и группы → Управление расширениями → включить
«Guest IP Log».
3. После обновления — очистить кэш phpBB (шаблоны + язык).
4. При добавлении новых модулей ACP может потребоваться
отключить/включить расширение для применения миграций.
5. Убедиться, что папка логов доступна для записи веб-сервером.
15. БЕЗОПАСНОСТЬ
--------------------------------------------------------------------------------
- Скачивание и просмотр логов в ACP защищены link hash.
- Путь к логам валидируется (без .., без абсолютных путей).
- resolve_log_file() проверяет, что файл находится внутри папки логов.
- Файлы JSON (блокировки, rate limit) используют flock() при записи.
================================================================================
Конец документа. Версия описания соответствует расширению v1.2.5.
================================================================================
Guest IP Log — полное описание функционала и алгоритм работы
Расширение phpBB: vse/guestiplog
Версия: 1.2.5
Требования: phpBB >= 3.3.0, PHP >= 7.4
Лицензия: GPL-2.0-only
================================================================================
1. НАЗНАЧЕНИЕ
--------------------------------------------------------------------------------
Расширение Guest IP Log решает две задачи для форума phpBB:
1) Логирование IP-адресов анонимных посетителей (гостей) в текстовый файл.
2) Блокировка вредоносных ботов и скраперов с гибкими настройками в ACP.
Расширение срабатывает только для гостей (неавторизованных пользователей).
Зарегистрированные пользователи, официальные боты phpBB (is_bot), cron,
установка и админ-панель не обрабатываются.
2. ТОЧКА ВХОДА И ОБЩИЙ ПОРЯДОК РАБОТЫ
--------------------------------------------------------------------------------
Событие: core.user_setup_after (класс event\listener).
При каждом запросе (кроме cron, install, ACP) выполняется:
1. Автоочистка логов (если включена в настройках).
2. Если пользователь НЕ гость — выход.
3. Если пользователь — официальный бот phpBB — выход.
4. Проверка и блокировка (bot_blocker::check_and_block).
5. Если блокировка сработала — скрипт завершается с HTTP 403.
6. Если логирование включено — запись в guests.log.
3. ЛОГИРОВАНИЕ IP ГОСТЕЙ
--------------------------------------------------------------------------------
3.1. Условия записи
- Пользователь — гость (user_id = ANONYMOUS).
- Не является ботом phpBB.
- В настройках включено логирование (vse_guestiplog_enabled).
3.2. Режимы записи
- «Один раз за сессию» (по умолчанию): запись только при создании сессии
(session_created).
- «Каждый запрос»: запись при каждом просмотре страницы гостем
(лог быстро растёт).
3.3. Формат строки guests.log
[YYYY-MM-DD HH:MM:SS] IP: <ip> | Session: <session_id> | URI: <uri> | UA: <user_agent>
Время — UTC (gmdate).
3.4. Путь к логу
- Настраивается в ACP (относительно корня phpBB).
- По умолчанию: store/ext/vse/guestiplog/guests.log
- Папка создаётся автоматически при первой записи.
3.5. Автоочистка логов
- Опционально обнуляет guests.log и/или blocked.log через заданный интервал.
- Интервал: от 1 до 168 часов (по умолчанию 24).
- Проверка выполняется при обычных заходах на форум (любой посетитель).
- Используется файловая блокировка (log_clear.lock) для исключения гонок.
4. БЛОКИРОВКА БОТОВ — АЛГОРИТМ check_and_block()
--------------------------------------------------------------------------------
Метод: service\bot_blocker::check_and_block($ip)
При блокировке: запись в blocked.log, ответ HTTP 403 Forbidden (текст «Forbidden»).
Порядок проверок (строго последовательный):
ШАГ 1. БЕЛЫЙ СПИСОК И ЛОКАЛЬНЫЕ IP
- Локальные и частные адреса (127.0.0.1, ::1, 10.x, 192.168.x и т.д.)
никогда не блокируются.
- IP из белого списка ACP (vse_guestiplog_block_ip_whitelist).
→ Пропуск, дальнейшие проверки не выполняются.
ШАГ 2. ПЛАТЁЖНЫЕ CALLBACK
- URI содержит пути ЮMoney/донатов: /ym_payin, /wm_payin, /sp_payin,
/py_payin (с app.php/ или без).
- POST с notification_type и (sha1_hash или operation_id).
→ Пропуск (уведомления приходят гостем с коротким UA).
ШАГ 3. SEO-РЕСУРСЫ И ПОИСКОВЫЕ РОБОТЫ
- SEO: /robots.txt, /sitemap.xml, /sitemap-N.xml,
/updates/*.json (version-check phpBB).
- User-Agent поисковиков: YandexBot, Googlebot, Applebot, bingbot,
DuckDuckBot, Mail.RU_Bot и др.
→ Пропуск.
ШАГ 4. РУЧНОЙ БАН (manual_blocks.json)
- IP в списке ручных блокировок из ACP.
- Работает ВСЕГДА, даже если автоблокировка выключена.
→ Блокировка, причина: manual_block.
ШАГ 5. АВТОБЛОКИРОВКА ВЫКЛЮЧЕНА?
- Если vse_guestiplog_block_enabled = 0 → стоп, пропуск.
ШАГ 6. ОПРЕДЕЛЕНИЕ ПРИЧИНЫ БЛОКИРОВКИ (get_block_reason)
- Если причина найдена → blocked.log + HTTP 403.
- Если причина пустая → пропуск.
Внутри get_block_reason() (после повторной проверки whitelist/SEO/ботов):
6.1. Ручной бан (manual_block)
6.2. Блокировка подсети /24 (subnet_block) — если включена
6.3. Запрещённые URI для гостей (restricted_uri)
6.4. Известные боты — мягкий список (known_bot)
6.5. Далее — в зависимости от режима (мягкий / жёсткий / комбо)
5. ЗАПРЕЩЁННЫЕ URI ДЛЯ ГОСТЕЙ (restricted_uri)
--------------------------------------------------------------------------------
Гость получает 403 при обращении к:
- posting.php (любой путь, содержащий posting.php)
- app.php/cron/ или app.php/cron
- ucp.php?mode=register с параметром iscanyesno (сканер регистрации)
- ucp.php?i=pm, folder=inbox/outbox/sentbox (личные сообщения гостю недоступны)
- Запросы со сломанным sid в URL:
amp;sid, amp%3Bsid, &sid=, ?amp;sid=
(типично при копировании HTML-ссылок скраперами)
6. РЕЖИМЫ БЛОКИРОВКИ
--------------------------------------------------------------------------------
В ACP можно включить ровно ОДИН режим при активной блокировке.
6.1. МЯГКИЙ РЕЖИМ (MODE_SOFT = 1)
Блокирует:
- Известных ботов (мягкий список UA): GPTBot, ChatGPT-User, SemrushBot
- Запрещённые URI (см. раздел 5)
НЕ блокирует: подозрительные UA, fake Chrome, rate limit, жёсткий список ботов.
6.2. ЖЁСТКИЙ РЕЖИМ (MODE_HARD = 2)
Всё из мягкого режима, плюс:
- Жёсткий список ботов: GPTBot, ChatGPT-User, SemrushBot, GoogleOther,
Bytespider, CCBot, AhrefsBot, MJ12bot, PetalBot, DotBot
- Поддельный Chrome 60–79 (fake_chrome): UA вида Chrome/63.0.x.x,
major 60–79, minor = 0
- Подозрительные User-Agent (suspicious_ua):
* пустой или короче 20 символов
* Chrome/NNN.0.0.0 с major < 130 (кроме реальных браузеров:
YaBrowser, Edg, OPR, Brave, Vivaldi, SamsungBrowser, Firefox)
* Macintosh; Intel Mac OS X + Chrome/NNN.0.0.0
* Linux aarch64 + Chrome/NNN.0.0.0
- Rate limit: 30 запросов за 60 секунд с одного IP (по умолчанию)
6.3. КОМБО РЕЖИМ (MODE_COMBO = 3)
Мягкий режим + жёсткий список ботов + опционально (включаются отдельно в ACP):
- Подозрительные User-Agent (vse_guestiplog_combo_suspicious_ua)
- Поддельный Chrome 60–79 (vse_guestiplog_combo_fake_chrome)
- Лимит запросов (vse_guestiplog_combo_rate_limit):
настраиваемые count и window (по умолчанию 30 / 60 сек)
7. БЛОКИРОВКА ПОДСЕТИ /24 (subnet_block)
--------------------------------------------------------------------------------
Включается опцией «Блокировка всей подсети IP адреса».
Алгоритм (только IPv4):
1. IP приводится к подсети x.x.x.0/24.
2. В окне времени (5 / 15 / 30 минут — настраивается) считаются уникальные
IP гостей из этой подсети.
3. Если уникальных IP > 5 — блокируется вся подсеть /24.
4. Срок блокировки: 7 / 30 / 90 / 180 дней или навсегда.
5. Данные хранятся в subnet_block.json с файловой блокировкой.
6. IP из белого списка и локальные не учитываются и не блокируются.
7. IPv6 не поддерживается для подсетевой блокировки.
При срабатывании в blocked.log: Reason: subnet_block
8. РУЧНАЯ БЛОКИРОВКА IP (ACP)
--------------------------------------------------------------------------------
Страница ACP: «Заблокированные IP адреса».
Возможности:
- Добавить IP (IPv4/IPv6) со сроком: 7 / 30 / 90 / 180 дней / навсегда
- Просмотр таблицы: IP/подсеть, тип, дата начала, дата окончания, срок
- Разблокировка (ручные IP и автоматические подсети)
- Пагинация: 20 записей на страницу
- «Показать всю таблицу» / «Скрыть всю таблицу»
- Поиск по всем записям (не только текущая страница):
* точный IP
* подсеть (95.108.213.0 или 95.108.213.0/24)
* IP внутри заблокированной подсети /24
При нахождении — переход на страницу и подсветка строки.
При отсутствии — модальное окно «IP адрес не найден».
Ограничения:
- Нельзя заблокировать IP из белого списка или локальный адрес.
- Ручной бан действует независимо от включения автоблокировки.
9. ФАЙЛЫ ДАННЫХ
--------------------------------------------------------------------------------
Папка по умолчанию: store/ext/vse/guestiplog/
guests.log — лог визитов гостей
blocked.log — лог блокировок
subnet_block.json — состояние подсетевых блокировок
manual_blocks.json — ручные блокировки из ACP
rate_limit.json — счётчики запросов для rate limit
log_clear.lock — блокировка при автоочистке
Формат строки blocked.log:
[YYYY-MM-DD HH:MM:SS] BLOCKED | Mode: <режим> | Reason: <причина> |
IP: <ip> | URI: <uri> | UA: <user_agent>
Коды причин (Reason):
manual_block — ручной бан из ACP
subnet_block — блокировка подсети /24
restricted_uri — запрещённый URI для гостя
known_bot — известный бот по User-Agent
fake_chrome — поддельный Chrome 60–79
suspicious_ua — подозрительный User-Agent
rate_limit — превышен лимит запросов
10. АДМИН-ПАНЕЛЬ (ACP)
--------------------------------------------------------------------------------
Модуль: Расширения → Guest IP Log
10.1. Страница «Настройки лога IP гостей» (mode: settings)
Основные настройки:
- Включить/выключить логирование
- Папка для лог-файла (относительный путь)
- Режим записи: один раз за сессию / каждый запрос
- Статус текущего лога (путь, размер)
Автоочистка:
- Включить автоочистку
- Интервал в часах (1–168)
- Очищать guests.log / blocked.log
- Дата последней автоочистки
Блокировка ботов:
- Включить блокировку
- Режим: мягкий / жёсткий / комбо
- Белый список IP
- Блокировка подсети /24 (окно и срок)
- Доп. настройки комбо-режима (подозрительный UA, fake Chrome, rate limit)
Просмотр логов:
- Модальное окно с пагинацией (150 строк на страницу)
- Кнопки «Скачать» и «Закрыть»
- Скачивание guests.log и blocked.log
10.2. Страница «Заблокированные IP адреса» (mode: blocked)
См. раздел 8.
11. НАСТРОЙКИ В БАЗЕ ДАННЫХ (config)
--------------------------------------------------------------------------------
vse_guestiplog_enabled — логирование вкл/выкл
vse_guestiplog_log_path — путь к папке логов
vse_guestiplog_log_every_request — каждый запрос / раз за сессию
vse_guestiplog_log_auto_clear — автоочистка
vse_guestiplog_log_auto_clear_hours — интервал автоочистки (часы)
vse_guestiplog_log_auto_clear_guests — очищать guests.log
vse_guestiplog_log_auto_clear_blocked — очищать blocked.log
vse_guestiplog_log_auto_clear_last — timestamp последней очистки
vse_guestiplog_block_enabled — автоблокировка вкл/выкл
vse_guestiplog_block_mode — 1=мягкий, 2=жёсткий, 3=комбо
vse_guestiplog_block_subnet — блокировка подсети
vse_guestiplog_block_subnet_window — окно подсчёта (5/15/30 мин)
vse_guestiplog_block_subnet_duration — срок блока подсети (дни)
vse_guestiplog_block_ip_whitelist — белый список IP
vse_guestiplog_combo_suspicious_ua — комбо: подозрительный UA
vse_guestiplog_combo_fake_chrome — комбо: fake Chrome
vse_guestiplog_combo_rate_limit — комбо: rate limit
vse_guestiplog_combo_rate_limit_count — макс. запросов
vse_guestiplog_combo_rate_limit_window — окно в секундах
12. СТРУКТУРА РАСШИРЕНИЯ
--------------------------------------------------------------------------------
ext/vse/guestiplog/
composer.json — метаданные, version-check
ext.php — проверка версии phpBB
config/services.yml — DI-контейнер
event/listener.php — обработчик core.user_setup_after
service/
guest_ip_logger.php — логирование и автоочистка
bot_blocker.php — блокировка ботов
acp/
guestiplog_info.php — регистрация модулей ACP
guestiplog_module.php — логика ACP
adm/style/
acp_guestiplog.html — шаблон настроек
acp_guestiplog.js/css — просмотр логов в модалке
acp_guestiplog_blocked.html/js/css — страница блокировок
language/ru/, language/en/ — языковые строки
migrations/ — миграции БД и модулей
13. СХЕМА АЛГОРИТМА (КРАТКО)
--------------------------------------------------------------------------------
Запрос на форум
|
v
[Cron / Install / ACP?] ---> да ---> выход
| нет
v
[Автоочистка логов]
|
v
[Авторизован?] -----------> да ---> выход (без блокировки и лога гостя)
| нет (гость)
v
[Бот phpBB?] --------------> да ---> выход
| нет
v
+---------------------------+
| check_and_block(IP) |
| 1. Whitelist / local IP |---> пропуск
| 2. Payment callback |---> пропуск
| 3. SEO / search bots |---> пропуск
| 4. Manual ban |---> 403
| 5. Auto-block off? |---> пропуск
| 6. Subnet /24 block |---> 403
| 7. Restricted URI |---> 403
| 8. Known bots (soft) |---> 403
| 9. Mode: hard/combo rules |---> 403 или пропуск
+---------------------------+
|
v (не заблокирован)
[Логирование включено?] ---> нет ---> конец
| да
v
[Режим: каждый запрос ИЛИ новая сессия?]
|
v
Запись в guests.log
14. УСТАНОВКА И ОБНОВЛЕНИЕ
--------------------------------------------------------------------------------
1. Скопировать папку ext/vse/guestiplog на сервер.
2. В ACP: Пользователи и группы → Управление расширениями → включить
«Guest IP Log».
3. После обновления — очистить кэш phpBB (шаблоны + язык).
4. При добавлении новых модулей ACP может потребоваться
отключить/включить расширение для применения миграций.
5. Убедиться, что папка логов доступна для записи веб-сервером.
15. БЕЗОПАСНОСТЬ
--------------------------------------------------------------------------------
- Скачивание и просмотр логов в ACP защищены link hash.
- Путь к логам валидируется (без .., без абсолютных путей).
- resolve_log_file() проверяет, что файл находится внутри папки логов.
- Файлы JSON (блокировки, rate limit) используют flock() при записи.
================================================================================
Конец документа. Версия описания соответствует расширению v1.2.5.
================================================================================
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Мудрость заключается не в том, что бы не делать ошибки, а уметь их исправлять вовремя!

