Captive Portal и финблокировка
Куда попадает должник, правила блокировки, гостевые порталы Wi-Fi и белые списки.
Содержание раздела
- Captive Portal (финблокировка)
- Сводка, готовность и проверка
- Форма и сохранение
- Аварийный режим «интернет всем»
- Как устроено
- Организации и права доступа
- Гостевой Wi-Fi портал для турбаз
- Платный доступ к гостевой сети (продажа по QR)
- Платежи гостей
- Белые списки
- Гости в СОРМ и срок хранения данных
- С телефона
Captive Portal (финблокировка)
Captive Portal Engine — единый движок порталов для перехвата трафика через walled-garden. Должник с отрицательным балансом не отрезается полностью, а перенаправляется на страницу «пополните баланс», сохраняя доступ к ЛК, банкам и госуслугам — это ускоряет возврат дебиторки и снижает нагрузку на поддержку.
Как проверить готовность портала, чем опасен аварийный режим и почему нельзя привязывать магистральный NAS к гостевому профилю.
flowchart TB CP["Captive Portal"] --> FIN["Финблокировка"] CP --> GST["Гостевые порталы"] CP --> PAY["Платежи"] CP --> ACL["Белые списки"] FIN --> RAD["RADIUS
walled-garden"] GST --> RAD ACL --> POOL["Пулы IP
и справочники"] PAY --> YK["Услуги
и ЮKassa"]
Раздел в админке: Настройки → Captive Portal
(/admin/settings/captive_portal/). Страница собрана на общем каркасе списков:
шапка с действиями раздела, под ней четыре раздела-ссылки, у списков — срезы со
счётчиками и поиск.
- Финблокировка — куда попадает должник: блок-пул,
Filter-Id, белый список, страница оплаты и правила блокировки. Вверху — сводка блокировок и блок готовности. - Гостевые порталы — Wi-Fi площадок: сеть, гости, состояние, карта. Настройки сети и оплаты открываются в окне из меню строки.
- Платежи гостей — продажи гостевого Wi-Fi: итоги периода, срезы по статусам, поиск. Подробнее — ниже.
- Белые списки — группы сайтов, открытых клиенту без доступа, и где каждая группа используется. Подробнее.
Сводка, готовность и проверка
Вверху вкладки — сводка в границах организаций сотрудника: сколько должников сейчас на странице оплаты (живые сессии с адресом блок-пула), сколько заблокировано за долг, за сегодня, администратором, добровольно, с обещанным платежом и сколько клиентов выключено. Два последних числа открывают список в поиске клиентов.
Под сводкой — ответ на главный вопрос: попадают ли должники на страницу оплаты. Каждая проверка отмечена зелёным (в порядке), жёлтым (обратите внимание) или красным (нужно исправить); у жёлтых и красных есть кнопка «К полю».
- Профиль включён. Выключенный — должник получает отказ авторизации.
- Блок-пул или Filter-Id. Хватает одного из двух: RADIUS отличает
должника по адресу из блок-пула или по атрибуту
Filter-Id. Если не задано ни то, ни другое — отказ. - Белый список с включёнными сайтами — иначе должнику не открыть ни кабинет, ни оплату.
- Отказ при отрицательном балансе выключен — включённый отменяет страницу оплаты.
- Должники с другой блокировкой (жёлтая) — страница оплаты показывается только при блокировке за долг. Если у клиента есть ещё блокировка администратором, добровольная или системная, RADIUS отвечает отказом.
Кнопка «Проверить настройку» идёт дальше: сверяет занятость блок-пула по живым сессиям, резервные значения, открывает страницу оплаты. Итог сворачивается в строку «Последняя проверка»; если профиль меняли позже, рядом стоит метка «устарела».
flowchart LR
A["Долг"] --> O{"Есть другая
блокировка?"}
O -->|"да"| REJ["Отказ
авторизации"]
O -->|"нет"| F{"Блок-пул или
Filter-Id?"}
F -->|"нет"| REJ
F -->|"да"| WG["Адрес блок-пула
и белый список"]
WG --> PAY["Страница оплаты"]
PAY --> OK["Оплата — блок снят,
интернет вернулся"]
walled_garden в пустое поле, и любое сохранение начинало слать
атрибут на оборудование.
Форма и сохранение
Форма разделена на два блока: «Куда попадает должник» (профиль, блок-пул, Filter-Id, белый список со ссылкой на его сайты, страница оплаты) и «Правила блокировки» (разрыв сессии при долге, отказ должникам, аварийный режим в отдельной красной зоне).
- Подтверждение со списком изменений — «Блок-пул: … → …». Для аварийного режима, отказа должникам и выключения профиля окно красное и объясняет последствия.
- Журнал действий — запись словами, тем же списком. Сохранение без изменений ничего не пишет.
- Выключенный профиль обнуляет и резервные значения, которые RADIUS читает без профиля. Раньше там оставался тот же пул, и выключатель на деле ничего не выключал.
Аварийный режим «интернет всем»
Переключатель отключает все блокировки — на случай сбоя биллинга, когда клиентов нельзя оставить без связи. Пока он включён, должники пользуются интернетом бесплатно.
flowchart LR ON["Включение
с подтверждением"] --> LOG["Автор, время
и срок записаны"] LOG --> WORK["Блокировки
не действуют"] WORK --> OFF["Выключение: кнопкой
или по сроку"]
- Пока режим включён, вверху страницы висит красная плашка: кто и когда включил, когда выключится. Кнопка «Выключить» в плашке меняет только режим — несохранённые правки формы не трогает.
- Срок — настройка
BLOCK_ALLOW_ALL_AUTO_OFF_HOURS(по умолчанию 4 часа,0— не выключать). Срок проверяет фоновая задача раз в пять минут. - Каждое включение и выключение — в журнале действий.
Как устроено
Движок построен на единой модели PortalProfile, рассчитанной на три типа
портала: financial (финблокировка должников), guest
(гостевой Wi-Fi турбаз — бесплатный и платный) и
paid (платные точки):
- RADIUS-резолвер (
radius_python/internet.py): при блокировке только за долг (b_negbal) возвращает не отказ, аAccess-Acceptс адресом из блок-пула и — если задан —Filter-Id. Оборудование отправляет такого клиента на страницу оплаты. - Источник правды — профиль: при сохранении параметры дублируются в
резервные настройки (
BLOCK_POOL_ID/BLOCK_FILTER_ID/BLOCK_PORTAL_URL). «Не отправлять Filter-Id» хранится нулём: пустое значение RADIUS заменил бы наwalled_garden. У выключенного профиля резервные значения обнуляются. - Выход из блока: оплата → снятие блокировки + CoA Disconnect → при переавторизации клиент получает обычный интернет.
Организации и права доступа
Раздел относится к группе прав «Настройки · Инфраструктура» — по умолчанию его открывает только администратор. Изменение настроек закрыто той же проверкой, что и сама страница: сотрудник без права не сможет поменять параметры даже прямым запросом.
Данные скоупятся по организации клиента-турбазы: список порталов, статистика платежей и выгрузка CSV показывают только то, что относится к организациям сотрудника. Портал чужой организации не открывается и по прямой ссылке — отвечает так же, как несуществующий. В списке гостевых NAS доступно только оборудование этой организации.
Гостевой Wi-Fi портал для турбаз
На том же движке (PortalProfile тип guest) работает гостевой
Wi-Fi портал — инструмент для турбаз, кафе, отелей: гость подключается к Wi-Fi,
попадает на брендированную страницу, подтверждает телефон по SMS и заполняет анкету, после
чего получает интернет. Турбаза собирает легальную базу контактов с согласием
на рекламу и автоматически рассылает SMS-поздравления с днём рождения.
Срезы со счётчиками: Сеть не привязана (гость заполнит анкету, но интернет не получит), Платные, Не принимают гостей (портал включён, но площадка не утвердила текст согласия), Выключены. Поиск — по площадке, клиенту и NAS; набор колонок сохраняется в профиле. Под таблицей — площадки на карте: зелёная точка — сеть привязана, красная — нет.
Название площадки и пункт меню «Настроить сеть и оплату» открывают окно портала с четырьмя вкладками: Сеть (NAS площадки, пул адресов гостей, Filter-Id, белый список), Оборудование площадки (hotspot на её MikroTik), Оплата и Адрес и почта (свой домен страницы входа, ящик для писем гостям). В меню строки также наклейка с QR-кодом, страница входа и карточка площадки.
Сохранение показывает список изменений; если среди добавленных NAS есть учётные записи клиентов, окно подтверждения красное и называет их число. В журнал изменения пишутся словами. Свой домен и ящик меняются только при реальной смене — раньше каждое сохранение заново обращалось к DNS.
Подключение: услуга «Гостевой Wi-Fi портал» (system_type=12)
клиенту-турбазе (юр.лицо). При подключении автоматически создаётся портал с дефолтной анкетой
(телефон + дата рождения). На карточке клиента появляется вкладка «Гость wifi»
со статусом и ссылкой на портал.
- Captive-страница
/portal/<slug>/— брендированная (логотип, цвет, тексты турбазы), мобильная, самодостаточная. Flow: телефон → SMS-код → анкета → согласие на ПДн → доступ. - Конструктор анкеты — турбаза в своём ЛК (
/lk/guest-portal/) задаёт, какие поля собирать (имя, авто, тип отдыха и т.д.), брендинг, текст согласия и рассылки. - Два адаптера сети: A — наше оборудование (RADIUS guest-ветка + CoA-разблокировка по MAC); B — чужой MikroTik турбазы (hotspot login, разблокировку делает MikroTik сам — работает без нашего RADIUS). Адаптер выбирается в окне портала, вкладка «Оборудование площадки».
- ДР-рассылки — Celery beat раз в сутки шлёт SMS гостям, у кого день рождения через N дней. Только гостям с согласием на рекламу (152-ФЗ), с защитой от повторной отправки.
Платный доступ к гостевой сети (продажа по QR)
Гостевой портал можно сделать платным: гость сканирует QR-наклейку, подтверждает телефон по SMS, выбирает тариф (например «100 ₽ — 3 часа»), оплачивает через ЮKassa и получает интернет на оплаченный срок. По истечении доступ автоматически отключается. Чек 54-ФЗ пробивает ЮKassa, выручка идёт на организацию-провайдера. Применение — платные точки в парках, на турбазах, на мероприятиях.
Поток гостя: сканирует QR → телефон + SMS-код → выбор тарифа → e-mail для чека → оплата картой → чек на почту → интернет на срок тарифа → по истечении снова на портал.
- Тарифы = услуги. Тариф доступа — обычная услуга
Usluga(system_type=12) в разделе Тарификация → Услуги: цена = «Сумма», длительность = поле «Длительность доступа» (часы/минуты). Новой тарифной сущности не вводится. К порталу тарифы привязываются галочками в окне портала, вкладка «Оплата». - Чек 54-ФЗ — формируется ЮKassa по e-mail гостя (онлайн-касса ЮKassa); отдельная фискализация не нужна.
- Выручка — приходная финоперация на организацию-провайдера (по умолчанию основная организация), тип «Платный гостевой Wi-Fi». Лицевые счета клиентов не затрагиваются.
- Отсечка по времени — два механизма: NAS сам разрывает сессию по
Session-Timeout(остаток оплаченного времени) + страховочная задача раз в 5 минут. По истечении гость попадает обратно на портал оплаты. - Статистика — раздел «Платежи гостей»: итоги периода, срезы по статусам, экспорт CSV.
Платежи гостей
Раздел отвечает на вопрос «принимаются ли деньги прямо сейчас». Сверху — итоги выбранного периода: доступов действует сейчас, выручка, средний платёж, доля оплаченных попыток и доля попыток с ошибкой. Ниже срезы по статусам — Все · Действуют · Ошибки · Истекли · Ожидают · Возвраты, — период (30 дней, 90 дней, год, всё время), площадка и поиск по почте, телефону или MAC.
- Итоги считаются по всей выборке периода, а не по видимой странице.
- Доля оплаченных — оплаченные из всех попыток (оплаченные, ошибки, ожидающие).
- Если попыток с ошибкой 20 % и больше, над таблицей появляется предупреждение — обычно это повод проверить ключ платёжной системы и тарифы площадок.
- Если платный доступ выключен в настройках, раздел говорит об этом: новых оплат не будет, в таблице — прежние.
p****@example.ru, 79177***96) и раскрываются по клику. Колонка
MAC по умолчанию скрыта, её можно включить в наборе колонок. Экспорт CSV выгружает ровно
то, что отобрано, и только по доступным организациям.
Белые списки
Белый список — сайты, которые открываются клиенту без доступа: банки и платёжные страницы для должника, условия и оплата для гостя. Раздел показывает группы, сколько в них сайтов и сколько включено, и где группа используется: в финблокировке, в гостевом портале, в правилах тарифов.
- Срезы: Используются и Всё выключено — группа, где не включено ни одного сайта; если она ещё и используется, строка подсвечена.
- «Сайты» раскрывают список адресов прямо в строке, выключенные зачёркнуты. Поиск находит и группу, и адрес сайта — группа с найденным адресом раскрывается сама.
- Меню строки: сайты группы (справочник с фильтром по группе), список для NAS. В шапке — переход к группам и к разрешённым сайтам в справочнике.
Гости в СОРМ и срок хранения данных
Публичный Wi-Fi отличается от домашнего интернета не только техникой:
постановления Правительства РФ №758 и №801 от
31.07.2014 требуют идентифицировать пользователя точки коллективного доступа и
хранить сведения о нём и об оказанных услугах связи. Гость не клиент —
договора с ним нет, — поэтому в выгрузку он попадает отдельными файлами, а не
в таблицу ABONENT, согласованную с куратором.
flowchart LR G["Гость
подтвердил номер"] --> U["GUEST_USER
кто пользовался"] G --> I["GUEST_IDENT
журнал идентификаций"] S["Сессия RADIUS"] --> SS["GUEST_SESSION
оказанные услуги"] U --> EXP["Выгрузка СОРМ
по конфигу"] I --> EXP SS --> EXP
| Файл | Что внутри | Источник |
|---|---|---|
GUEST_USER |
телефон и время его подтверждения, MAC, площадка и её владелец, первый и последний визит, число визитов, согласие на обработку данных, ФИО и e-mail — если анкета площадки их собирает | гости порталов |
GUEST_IDENT |
журнал подтверждений номера: когда запрошен код, когда подтверждён, IP и
MAC клиента, IP точки доступа. Неудачные попытки тоже видны
(RESULT = 0) |
OTP-сессии портала |
GUEST_SESSION |
сведения об оказанных услугах: начало и конец сессии, длительность, объём трафика, IP и MAC | сессии RADIUS по MAC гостя |
Файлы добавляются кнопкой «Гостевой Wi-Fi» на странице отчётов конфига СОРМ (Оборудование → СОРМ → Отчёты). Отдельной кнопкой, а не в общем наборе: гостевые порталы есть не у каждого оператора, а состав файлов согласуется с куратором отдельно.
GUEST_SESSION заполняется,
когда площадка работает на нашем оборудовании (адаптер A). При адаптере B
сессию держит MikroTik площадки и в биллинг она не попадает — факт доступа
виден в GUEST_USER по времени окончания доступа.
Сколько хранить
Две нормы тянут в разные стороны, и обе обязательны: №801 требует хранить
сведения не менее шести месяцев, а 152-ФЗ — не
дольше, чем нужно для цели обработки. Поэтому срок задан настройкой
GUEST_DATA_RETENTION_DAYS (по умолчанию 180 дней). Раз в сутки
задача удаляет гостей старше срока вместе с анкетами, согласиями и журналом
идентификаций; гостей с ещё действующим оплаченным доступом не трогает.
Значение 0 отключает удаление — на случай, когда есть основание
хранить дольше (запрос уполномоченных органов, спор по оплате).
С телефона
Таблицы становятся карточками с подписями полей, окно портала открывается на весь экран, форма финблокировки идёт одной колонкой. Кнопка знакомства с разделом — в верхней полосе, слева от значка справки.
live_…)
в Настройки → Платёжные системы и добавить домены ЮKassa
(yoomoney.ru, api.yookassa.ru) в белый список гостевого NAS — иначе
неоплаченный гость не сможет открыть страницу оплаты из walled-garden.