# Настройка Captive Portal в pfSense - полное руководство

> Пошаговая настройка Captive Portal в pfSense - создание зон авторизации, RADIUS, ваучеры, MAC passthrough, HTTPS портал и устранение неполадок

Source: https://opennix.org/docs/pfsense/captive-portal/pfsense-captive-portal-setup/


Captive Portal обеспечивает принудительную авторизацию пользователей перед предоставлением доступа к сети. В данном руководстве рассматривается полный цикл настройки: от создания зоны и выбора метода аутентификации до кастомизации страницы портала, настройки ограничений полосы пропускания и устранения типичных проблем. Перед началом настройки убедитесь, что интерфейс, на котором будет работать портал, уже сконфигурирован и имеет назначенный IP-адрес. Для работы с [VLAN](/docs/pfsense/vlans/pfsense-vlan-setup/) интерфейс VLAN также должен быть предварительно создан и назначен.

## Зоны Captive Portal

Зона определяет набор интерфейсов, на которых действует портал авторизации, и объединяет все связанные настройки: метод аутентификации, страницу портала, таймауты, ограничения трафика и списки разрешённых адресов. Каждая зона функционирует независимо.

### Создание зоны

Для создания новой зоны перейдите в **Services > Captive Portal** и нажмите **Add**. Укажите имя зоны (допускаются латинские буквы, цифры и символ подчёркивания) и описание, затем нажмите **Save & Continue**. После сохранения откроется страница конфигурации зоны.

### Привязка интерфейсов

В поле **Interface** выберите один или несколько интерфейсов, на которых будет работать портал. Один интерфейс не может принадлежать нескольким зонам одновременно. При использовании [мостовых интерфейсов](/docs/pfsense/bridging/pfsense-bridge-setup/) в качестве интерфейса зоны необходимо указывать сам мост (bridge), а не его участников.

## Методы аутентификации

pfSense предоставляет несколько способов аутентификации пользователей на портале.

### Аутентификация через бэкенд

При выборе метода **Use authentication backend** система проверяет учётные данные через настроенный источник аутентификации: локальную базу пользователей pfSense, сервер LDAP или сервер RADIUS. Пользователь вводит логин и пароль на странице портала, и система выполняет проверку через выбранный бэкенд.

Для настройки RADIUS-сервера перейдите в **System > User Manager > Authentication Servers** и создайте запись типа RADIUS с указанием адреса сервера, порта, общего секрета и протокола (PAP, CHAP или MS-CHAPv2). После этого выберите созданный сервер в настройках зоны Captive Portal.

### Ваучеры

Система ваучеров позволяет генерировать одноразовые коды доступа с заданным временем действия. Это удобно для гостевых сетей отелей, конференций и публичных точек доступа, где необходимо предоставить временный доступ без создания учётных записей.

Для активации ваучеров перейдите на вкладку **Vouchers** в настройках зоны. Система генерирует RSA-ключи для подписи ваучеров, что предотвращает создание поддельных кодов. Настройте параметры:

- **Roll** - пакет ваучеров с уникальным номером
- **Count** - количество ваучеров в пакете
- **Minutes per ticket** - время действия каждого ваучера

Сгенерированные ваучеры можно экспортировать в CSV для печати или распространения.

### Без аутентификации (click-through)

При выборе метода **None** пользователю достаточно открыть страницу портала и нажать кнопку подтверждения. Этот режим подходит для сценариев, где требуется только принятие условий использования без ввода учётных данных.

### RADIUS MAC Authentication

Режим отправляет MAC-адрес клиента в качестве имени пользователя и настроенный секрет в качестве пароля на RADIUS-сервер. Это позволяет реализовать автоматическую авторизацию устройств на основе их MAC-адресов без участия пользователя.

## Управление сессиями

### Таймауты

- **Idle timeout** - время бездействия в минутах, после которого клиент будет отключён. Бездействием считается отсутствие сетевого трафика от клиента
- **Hard timeout** - максимальная продолжительность сессии в минутах, после которой клиент отключается независимо от активности

### Квоты трафика

Поле **Traffic Quota** позволяет задать максимальный объём переданных данных (загрузка и отдача суммарно), при превышении которого клиент отключается от сети. Квота учитывается в мегабайтах.

### Одновременные подключения

Параметр **Concurrent user logins** определяет поведение при повторной авторизации:

| Значение | Поведение |
|---|---|
| Multiple | Неограниченное количество одновременных сессий (по умолчанию) |
| Last Login | Разрешает только последнюю сессию, предыдущие отключаются |
| First Login | Запрещает повторную авторизацию до завершения текущей сессии |
| Disabled | Множественные подключения запрещены |

Максимальное количество одновременных подключений с одного IP-адреса по умолчанию ограничено четырьмя соединениями для предотвращения исчерпания ресурсов.

## Ограничение полосы пропускания

Поля **Default download speed** и **Default upload speed** задают ограничение скорости в килобитах в секунду для каждого авторизованного клиента. Значение 0 или пустое поле означает отсутствие ограничения.

При использовании RADIUS-сервера индивидуальные ограничения можно задавать через атрибуты ответа:

- `pfSense-Bandwidth-Max-Down` - максимальная скорость загрузки
- `pfSense-Bandwidth-Max-Up` - максимальная скорость отдачи
- `pfSense-Max-Total-Octets` - квота общего объёма трафика

Атрибуты RADIUS имеют приоритет над настройками зоны, что позволяет назначать различные тарифные планы на уровне сервера аутентификации.

## MAC Passthrough

MAC passthrough позволяет устройствам проходить через портал без повторной авторизации на основе ранее зарегистрированного MAC-адреса.

### Автоматическое добавление

При включении параметра **Pass-through MAC Auto Entry** MAC-адрес клиента автоматически добавляется в список разрешённых после успешной аутентификации. Опция **Automatic addition with username** сохраняет имя пользователя вместе с MAC-адресом для аудита.

### Ручное управление

Вкладка **MACs** позволяет вручную добавлять MAC-адреса с указанием действия: **Pass** (пропускать без авторизации) или **Block** (блокировать полностью). Ручные записи полезны для принтеров, IP-телефонов и других устройств, не способных пройти веб-авторизацию.

### Ограничения MAC-фильтрации

Если между клиентом и интерфейсом pfSense находится маршрутизатор (а не коммутатор), MAC-адрес клиента заменяется MAC-адресом промежуточного маршрутизатора. В этом случае MAC-фильтрацию следует отключить, так как все клиенты за маршрутизатором будут иметь одинаковый MAC-адрес.

## Pass-through Credits

Механизм кредитов позволяет пропускать определённое количество подключений без аутентификации:

- **Credits allowed per MAC** - количество бесплатных подключений
- **Waiting period** - период восстановления кредитов в часах
- **Reset on attempted access** - предотвращает восстановление кредитов при повторных попытках

## HTTPS-портал

По умолчанию портал работает по HTTP. Для включения HTTPS:

1. Перейдите в **System > Cert Manager** и создайте или импортируйте SSL-сертификат
2. В настройках зоны установите флаг **Login - HTTPS**
3. Укажите **HTTPS server name** - полное доменное имя (FQDN), соответствующее Common Name сертификата
4. Выберите SSL-сертификат в поле **SSL Certificate**

Параметр **Disable HTTPS Forwards** отключает перенаправление запросов с порта 443. Это рекомендуется включить, так как перенаправление HTTPS-запросов вызывает предупреждения о несоответствии сертификата в браузере клиента.

## Кастомизация страницы портала

### Стандартная кастомизация

Базовые параметры оформления доступны непосредственно в настройках зоны:

- **Custom Logo** - логотип организации, отображаемый на странице авторизации
- **Custom Background** - фоновое изображение страницы портала
- **Terms and Conditions** - текст условий использования, который пользователь должен принять

### HTML-шаблоны

Для полного контроля над внешним видом портала можно загрузить собственные HTML-страницы:

- **Portal page** - основная страница авторизации
- **Error page** - страница ошибки аутентификации
- **Logout page** - страница подтверждения выхода

HTML-шаблоны поддерживают PHP-код для динамического контента. Файлы изображений, CSS и JavaScript загружаются через **File Manager** в настройках зоны.

### Разрешённые IP-адреса и хосты

Вкладки **Allowed IP Addresses** и **Allowed Hostnames** позволяют указать адреса и доменные имена, доступные клиентам до прохождения авторизации. Это необходимо для доступа к внешним ресурсам аутентификации, DNS-серверам, серверам обновлений и другим критически важным сервисам.

## Интеграция с RADIUS Accounting

При использовании RADIUS-сервера pfSense поддерживает отправку accounting-сообщений:

- **Accounting Start** - при успешной авторизации клиента
- **Accounting Stop** - при завершении сессии (таймаут, отключение, превышение квоты)
- **Interim Updates** - периодические обновления статуса сессии

Для настройки укажите сервер учёта в параметрах RADIUS зоны. Параметр **NAS Identifier** позволяет задать идентификатор устройства, отправляемый в RADIUS-запросах, что упрощает идентификацию источника в журналах сервера аутентификации.

Опция **Reauthentication** отправляет запрос проверки доступа каждую минуту. Если RADIUS-сервер отклоняет запрос, клиент отключается. Это полезно для сценариев, когда администратор RADIUS-сервера должен иметь возможность немедленно прекратить доступ пользователя.

## Устранение неполадок

### Портал не появляется

- Убедитесь, что зона включена (флаг **Enable** установлен)
- Проверьте, что интерфейс зоны соответствует интерфейсу, к которому подключен клиент
- Убедитесь, что на интерфейсе настроены [правила файрвола](/docs/pfsense/firewall/pfsense-firewall-rules/), разрешающие DNS-трафик (порт 53)
- Проверьте, что клиент получает IP-адрес из правильной подсети
- При использовании bridge убедитесь, что зона привязана к интерфейсу моста, а не к участникам

### Проблемы с перенаправлением

- Если клиент не перенаправляется автоматически, попробуйте открыть любой HTTP-сайт (не HTTPS)
- HTTPS-сайты не могут быть перехвачены и перенаправлены из-за TLS - это ограничение протокола, а не pfSense
- Проверьте, что DNS-сервер, используемый клиентом, доступен до авторизации
- Убедитесь, что клиент использует DNS-сервер pfSense, а не сторонний

### Предупреждения HTTPS

Предупреждения о сертификате при перенаправлении HTTPS-запросов являются ожидаемым поведением. Сертификат портала не может соответствовать домену, к которому обращался клиент. Включите **Disable HTTPS Forwards** для предотвращения перенаправления HTTPS-трафика.

### RADIUS не отвечает

- Проверьте доступность RADIUS-сервера командой `ping` или `radtest`
- Убедитесь в совпадении общего секрета (shared secret) на pfSense и RADIUS-сервере
- Проверьте [правила файрвола](/docs/pfsense/firewall/pfsense-firewall-rules/) - порты 1812 (аутентификация) и 1813 (учёт) должны быть открыты
- Проверьте журналы RADIUS-сервера на предмет отклонённых запросов
- Убедитесь, что IP-адрес pfSense добавлен в список разрешённых клиентов на RADIUS-сервере

### Клиент авторизован, но нет доступа в интернет

- Проверьте правила файрвола на интерфейсе зоны - должно быть разрешающее правило для авторизованных клиентов
- Убедитесь, что [NAT](/docs/pfsense/nat/pfsense-port-forwarding/) настроен корректно для подсети портала
- Проверьте таблицу состояний в **Diagnostics > States** на наличие записей для клиента

