Блокировки

Вкладка «Блокировки» позволяет ограничивать доступ к серверу по различным критериям. Заблокированные пользователи и устройства получают ответ 403 Forbidden при любом запросе.

Типы блокировок

ТипОписаниеПример значения
IPБлокировка по точному IP-адресу203.0.113.50
CIDRБлокировка по подсети (диапазон IP)203.0.113.0/24
Device UIDБлокировка по идентификатору устройства (8-символьный lampac_unic_id)a1b2c3d4
Telegram IDБлокировка по Telegram ID пользователя123456789
FingerprintБлокировка по отпечатку устройства (хэш параметров браузера)f7a3b2c1
СтранаБлокировка по стране (ISO 3166-1 alpha-2). Требуется GeoIP-база.US

Добавление блокировки

Через вкладку «Блокировки»

  1. Нажмите «Добавить блокировку»
  2. Выберите тип из выпадающего списка
  3. Введите значение и причину (опционально)
  4. Нажмите «Добавить»

Быстрая блокировка из карточки пользователя

На вкладке Пользователи в карточке каждого пользователя есть кнопки быстрой блокировки:

  • 🚫 TG — заблокировать по Telegram ID
  • 🚫 UID — заблокировать конкретное устройство
  • 🚫 IP — заблокировать по последнему известному IP устройства
  • 🚫 FP — заблокировать по отпечатку устройства
IP-адрес и отпечаток отображаются в карточке устройства только после хотя бы одного запроса от этого устройства.

Таблица блокировок

Таблица отображает все активные правила:

ПолеОписание
ТипIP / CIDR / UID / TG ID / Fingerprint / Страна
ЗначениеЗаблокированный идентификатор
ПричинаКомментарий администратора
ДатаКогда создана блокировка
ДействиеКнопка удаления правила

В верхней части отображается статистика — количество правил по каждому типу.

Удаление блокировки

Нажмите кнопку удаления (🗑️) рядом с правилом и подтвердите действие. Доступ восстанавливается мгновенно.

Как работает проверка

Проверка выполняется на уровне middleware авторизации — до обработки любого запроса:

Запрос → TG Auth Gate → Проверка бана → Обработка запроса
                              ↓
                         403 Forbidden
                         {"error":"blocked","reason":"..."}

Проверяются все идентификаторы одновременно:

  1. IP-адрес клиента → против IP и CIDR правил
  2. UID устройства → против UID правил
  3. Telegram ID (из токена) → против TG ID правил
  4. Fingerprint (из параметра fp) → против Fingerprint правил
  5. Страна (из GeoIP по IP) → против Country правил

Если хотя бы одно правило срабатывает — запрос блокируется.

GeoIP (блокировка по стране)

Для блокировки по стране необходима база GeoLite2-Country от MaxMind:

  1. Зарегистрируйтесь на maxmind.com
  2. Скачайте GeoLite2-Country.mmdb
  3. Поместите файл в database/GeoLite2-Country.mmdb (относительно корня установки)
  4. Перезапустите сервер
# Пример для стандартной установки
cp GeoLite2-Country.mmdb /opt/lampac/database/
systemctl restart alcopac
Без файла GeoLite2-Country.mmdb блокировка по стране не работает — правила типа «Страна» просто игнорируются. Остальные типы блокировок работают без GeoIP.

Хранение данных

Правила блокировок хранятся в JSON-файле database/tgauth/bans.json. Для быстрой проверки используются предрассчитанные индексы (пересоздаются при каждом добавлении/удалении правила).

API

Для автоматизации доступен REST API (требуется авторизация администратора):

МетодURLОписание
GET/cp_XXXXX/api/bansСписок всех правил и статистика
POST/cp_XXXXX/api/bansДобавить или удалить правило

Добавление правила

curl -X POST "http://IP:PORT/cp_XXXXX/api/bans" \
  -H "Content-Type: application/json" \
  -d '{"action":"add","type":"ip","value":"203.0.113.50","reason":"спам"}'

Удаление правила

curl -X POST "http://IP:PORT/cp_XXXXX/api/bans" \
  -H "Content-Type: application/json" \
  -d '{"action":"remove","id":"uuid-правила"}'