Как организовать публичный wifi с авторизацией

Обновлено: 02.07.2024

При организации гостевого подключения к интернету в конференц-залах, публичных библиотеках и кафе особое внимание следует уделить обеспечению безопасности и максимально простой аутентификации. Технология под названием Captive Portal призвана в этом помочь.

WARNING

Администраторы точек доступа обычно разрешают все DNS-запросы из внутренней сети во внешнюю. Это можно использовать для несанкционированного выхода в интернет при помощи технологии DNS tunneling, реализованной в таких решениях, как Dnscat, Ozyman, NameServer Transfer Protocol (NSTX), Dns2tcp, и других.

Как работает Captive Portal

Все пользователи, которые хотят подключиться к публичной Wi-Fi-сети и выйти в интернет, вначале проходят через шлюз, который представляет собой комп с несколькими сетевыми интерфейсами. Шлюз действует как маршрутизатор и брандмауэр, а для возможности авторизации пользователя при помощи браузера он содержит еще и веб-сервер. Для аутентификации клиентов может использоваться внутренняя база данных или внешний RADIUS-сервер. Все пакеты от «неавторизованных» пользователей помечаются на брандмауэре, и посетитель переправляется на специальную веб-страницу (Captive Portal), где он может ознакомиться с условиями подключения и ввести логин/пароль (либо код доступа). После аутентификации пользователя производится идентификация компьютера, за которым он работает, его МАС- и IP-адреса заносятся в белый список брандмауэра. В самом простом случае пользователь может вообще не проходить аутентификацию, Captive Portal автоматически получает IP- и MAC-адреса компьютера, которые сразу подставляются в правилах брандмауэра. В последующем все пакеты проходят через маршрутизатор без ограничений. Дополнительно, в зависимости от роли, могут устанавливаться ограничения по скорости, времени, трафику или посещаемым ресурсам.

В настоящее время существует несколько проектов, позволяющих быстро развернуть Captive Portal: Wifidog, PacketFence, ChilliSpot и веб-интерфейс EasyHotspot, KATTIVE, PepperSpot и jkaptive. Выбор конкретного решения зависит от необходимых функций и поддерживаемых ОС. Например, ChilliSpot официально поддерживает несколько дистрибутивов Linux, FreeBSD, OpenBSD и OpenWRT. К слову, это единственное приложение, пакет которого доступен в официальном репозитории Ubuntu, и установить его просто:

Кроме этого, ряд дистрибутивов-роутеров предлагает возможность быстрого создания Captive Portal буквально парой щелчков мышки: Untangle, pfSense, Zeroshell, m0n0wall, ClearOS и Zentyal. Но при желании или если невозможно изменить текущую конфигурацию сети нужные скрипты легко создать самостоятельно. Этим мы и займемся.

Настраиваем Captive Portal в Linux

Разобравшись, как работает Captive Portal, легко реализовать его штатными средствами Linux. Причем доступно несколько способов — маркировка и блокировка пакетов, пришедших от неавторизованных пользователей, использование цепочки правил или шаманство с NAT. Дополнительно на лету можно перенастраивать правила прокcи-сервера Squid или контент-фильтра DansGuardian, что позволит управлять выходом в интернет на уровне групп пользователей, да и просто кешировать и фильтровать информацию, блокируя доступ к нежелательным ресурсам. И кстати, именно такой подход применяется в специализированных дистрибутивах.

Для примера разберем вариант использования отдельной цепочки и DansGuardian. Первым делом создаем правила пакетного фильтра:

Не забываем разрешить специфические низкоуровневые протоколы:

То же пишем и для LENGTH, и IPv4. Теперь создаем правила для iptables:

Не забываем разрешить ICMP, DNS, DHCP и прочие необходимые протоколы. Здесь, кстати, есть один важный момент: многие админы не заморачиваются и разрешают весь DNS-трафик. Этим пользуются некоторые юзвери для получения доступа в Сеть при помощи технологии DNS tunneling. Конечно, итоговая скорость небольшая, но вполне достаточная, чтобы сидеть в аське, писать в твиттер или отдавать команды по SSH. И главное — при этом везде засветится IP твоей сети, а в логах какие-либо записи о несанкционированной деятельности будут отсутствовать, ведь не каждый админ пишет все запросы в журнал DNS-сервера. Поэтому лучше строго указать разрешенные серверы.

Настраиваем Captive Portal в Zentyal

Если под Captive Portal выделяется новый сервер и все настройки нужно произвести в короткое время, то лучше обратиться к специализированным решениям, где все необходимое делается буквально парой нажатий клавиш. Яркий пример — серверный дистрибутив Zentyal, ориентированный на малые и средние корпоративные сети. Он может выступать в любой из четырех ролей сетевого шлюза, Office Server, сервера коммуникаций и инфраструктуры. Для поддержки Captive Portal следует во время установки активировать одноименный модуль (активируется роль Gateway и все сопутствующие пакеты). Затем в мастере первичной настройки правильно указываем на LAN-интерфейс. Создаем учетные записи пользователей и группы. Далее в интерфейсе настройки Zentyal переходим в меню Captive Portal и отмечаем в поле «Captive-интерфейсы» нужный, выбираем группу, участники которой будут иметь доступ, и указываем порт, на который будут перенаправляться пользователи. Вот и все. Теперь любой, кто желает подключиться к сети, вводит свои учетные данные, если аутентификация проходит успешно, появляется всплывающее окно, которое нужно держать открытым. Чтобы отключиться, достаточно нажать кнопку «Выйти» или просто закрыть окно браузера.

Если имеем шлюз, построенный на Ubuntu, то для установки связанных с Zentyal приложений проще использовать специальный репозиторий:

После чего команда sudo apt-cache search zentyal покажет более 20 модулей Zentyal.

Выбираем пакеты для установки Captive Portal в Zentyal

Выбираем пакеты для установки Captive Portal в Zentyal

В принципе, на этот момент ничего особенного нет. Суть Captive Portal заключается в добавлении нужных правил на лету. Для этого понадобится скрипт, который будет получать IP/MAC и передавать их пакетному фильтру. Полностью HTML-страницу приводить здесь нет смысла, поэтому ограничимся ключевыми моментами с нужным функционалом. На странице, куда перенаправляется пользователь, должен быть следующий код, получающий IP- и MAC-адреса:

В Zentyal настройки Captive Portal производятся простой установкой значений

В Zentyal настройки Captive Portal производятся простой установкой значений

При необходимости добавляем поле для проверки логина и пароля, нужные примеры легко найти в интернете. Далее в этом же скрипте подставляем полученные данные в правила iptables и DansGuardian, после чего перезапускаем последний:

После подключения клиента запись в /etc/dansguardian/lists/authplugins/ipgroups будет выглядеть так:

Параметр filter1 указывает на группу фильтров, так мы можем устанавливать специфические настройки для всех пользователей, подключающихся посредством Captive Portal. При необходимости так же легко в DansGuardian подставляется и логин пользователя, для реализации индивидуальных правил. Не забываем разрешить фильтр IP в dansguardian.conf:

Так как используемые системные команды может выполнять только root, немного подправим sudoers, чтобы их мог запускать и веб-сервер:

Новые правила iptables, появляющиеся в Zentyal после активации Captive Portal

Новые правила iptables, появляющиеся в Zentyal после активации Captive Portal

Вот мы и реализовали простейший Captive Portal. Если хотспот будет работать сутками, следует побеспокоиться, чтобы через некоторое время таблица очищалась. Здесь можно придумать несколько вариантов. Например, параллельно создавать задание для cron, которое будет срабатывать через определенное время, убирая правило. Другой вариант — прописывать данные сессии в отдельный файл, а затем при помощи cron или при каждом вызове PHP-скрипта анализировать время создания файла и удалять устаревшие записи. В Zentyal, например, после регистрации пользователя открывается отдельное окно, а в каталоге /var/lib/zentyal-captiveportal/sessions создается файл, содержащий все данные сессии (IP- и MAC-адрес). Как только пользователь закрывает Popup, вся информация и правила очищаются.

Интерфейс настройки Captive Portal в pfSense

Интерфейс настройки Captive Portal в pfSense

Настройка Captive Portal в FreeBSD

Понимая, как работает пакетный фильтр, и владея навыками разработки на языке, используемом в веб, легко организовать Captive Portal в любой ОС. И *BSD здесь не исключение, причем реализация при помощи IPFW выглядит даже проще. Принцип остается тем же, что и ранее. Все пакеты от неавторизованных пользователей блокируем и перенаправляем на веб-страницу. После того как гость подтверждает информацию, разрешаем выход в Сеть. Для удобства всю информацию об авторизованных IP будем сохранять в базу данных (в примере текстовый файл). Заносим в системный файл вроде /etc/rc.local (а лучше в отдельный, чтобы было легче искать) необходимые переменные:

В веб-страницу добавляем следующий код. В примере пользователь в чекбоксе просто подтверждает некие условия, результат отправляется Perl-скрипту access.pl.

Мастер настройки Antamedia HotSpot

Мастер настройки Antamedia HotSpot

Здесь Perl выбран исключительно для разнообразия, при желании можно переработать PHP-код, показанный выше. Сам скрипт:

Создание тарифного плана в Antamedia HotSpot

Создание тарифного плана в Antamedia HotSpot

При желании дополняем скрипт проверкой МАС-адреса и перестройкой правил прокси-сервера. Вызвав функцию time(), мы также можем сохранить время соединения (в секундах), которое затем использовать для сброса старых соединений.

Captive Portal на Windows

Организовать Captive Portal на Windows штатными средствами проблематично из-за особенностей работы брандмауэра (который, кстати, начал контролировать исходящие соединения только с Vista), поэтому в любом случае придется обращаться к сторонним решениям. Выбор здесь не особенно велик — DNS Redirector, FirstSpot, PacketFence, myWIFIzone, работает под WinXP/2k), Wifidog и Antamedia HotSpot. Из них бесплатны PacketFence и Wifidog. Первый требует некоторой подготовки, а используемые во втором компоненты, такие как Apache, PHP, PostgreSQL, удобнее разворачивать на *nix-системе.

Из перечисленных наиболее функционален Antamedia HotSpot, который позволяет организовать свободный и предоплаченный доступ (по трафику, времени или скорости), управлять пропускной способностью, гарантируя нужную скорость разным клиентам, блокировать нежелательные сайты, получать статистику и многое другое. Развертывание Antamedia HotSpot не представляет особой сложности, в режиме простой установки все компоненты (хотспот, интерфейс оператора и база данных) устанавливаются на один компьютер. Разобраться с первоначальными установками помогает визард, интерфейсы настраиваются автоматически, пользователь может также выбрать внешний вид страницы регистрации. Дальнейшее управление производится при помощи понятного интерфейса.

Заключение

Организовать точку доступа с различными вариантами использования не так уж и сложно. Выбор конкретного решения зависит от наличия времени на подготовку и желания копаться в настройках. Все представленные схемы можно легко развить до требуемого уровня.


Оператор связи ОТК предлагает готовое решение для организации публичной Wi-Fi сети с авторизацией в соответствии с законодательством РФ.

Тарифы на Wi-Fi авторизацию

Проконсультируем по тарифам, подберем оборудование и бесплатно установим

Согласно закону №758, вступившего в силу летом 2014 года, организатор публичного доступа в интернет через сеть Wi-Fi должен вести обязательную идентификацию пользователей. Это означает, что привычное автономное пользование сетью запрещено законом. Данные постановления призваны оградить детей от информации, которая может причинить вред их здоровью и развитию. А также в целях безопасности антитеррористической угрозы.

Wi-Fi авторизация пользователей: как настроить

Важно знать: чтобы раздавать Wi-Fi с идентификацией пользователей, публичные заведения обязаны хранить все данные о подключившихся к сети пользователях не менее 6 месяцев с даты подключения.

Готовые решения: как раздать Wi-Fi для клиентов от оператора связи ОТК:

Hotspot на базе Mikrotik работают стабильно и надежно. К тому же имеют массу индивидуальных настроек, например, сделать Wi-Fi разделенным для публичного пользования и внутреннего для сотрудников. Использование программного обеспечения hotspot shield реализовывает безопасную передачу данных в виртуальной частной сети через специально шифрованное соединение, которое защищено от прослушивания.

Также программа имеет широкие возможности хранения данных и их сортировки. Что особенно актуально для раздачи Wi-Fi в местах, где ежедневно подключают большое количество пользователей.

Установка оборудования сотрудниками ОТК не занимает много времени и не требует проведения дополнительных монтажных работ. Начать раздавать интернет для клиентов без риска нарушить закон можно уже через 30 минут после установки.

Специалисты компании ответят на все Ваши вопросы, подберут необходимое оборудование и подготовят коммерческое предложение.

Наличие WiFi давно стало неотъемлемой частью повседневной работы различных заведений и предприятий, а предоставление бесплатного доступа в интернет – одним из способов дополнительного привлечения и повышения лояльностипосетителей. «МегаФон» предлагает своим корпоративным клиентам новую услугу – «WiFi с авторизацией», позволяющую идентифицировать пользователей публичной WiFi-сети. Это позволит предприятияморганизовать WiFi-доступ не только сотрудникам, но и клиентам, например, посетителям кафе или магазина.

Как организовать «WiFi c авторизацией» для клиентов и посетителей

Так, например, посетитель кафе при подключении к WiFiпопадает на стартовую страницу, где ему будет предложено ввести номер телефона и получить пароль доступа к сети. После этого будет получено SMS с паролем для входа винтернет. При этом стартовая страница может быть оформлена в соответствии спожеланиями предприятия. Это позволит донести до посетителей актуальную информацию об акциях, скидках и иных предложениях. К примеру, можно организовать автоматическое перенаправление пользователей WiFi-сети на сайт предприятия, или показать рекламный ролик перед предоставлением доступа к сети интернет.

В рамках услуги предприятие может ввести параметры доступа: скорость передачи данных, продолжительности сессии, объема входящего трафика. К примеру, можно установить ограничение, чтобы пользователискачивали не более 300Мб или могли провести в Сети не более нескольких часов, после чего доступ блокируется на какое-то установленноевремя. Либо, например, можно ограничить скорость передачи данных на уровне 1Мбит/с, при возможности доступа в сеть в течение нескольких часов. Предприятие также может закрыть доступ пользователей к определенным ресурсам и сайтам.

Ежемесячно клиенту направляется отчет об использовании точек доступа WiFi-сети, включающий информацию о количестве пользователей, объемах трафика и времени пользования услугой.

«Мы и ранее предоставляли организациямWi-Fiдоступ по беспроводной технологии. Сама услуга подразумевает установку и подключение оборудования сети Wi-Fi, техническое обслуживание и поддержку, а также непосредственный телекоммуникационный доступ на любой скорости с помощью выделенного канала или мобильного интернета. А теперь мы предоставляем сервис и платформу для идентификации пользователей, чтобы предприятия могли развернуть публичный WiFi с доступом к интернету своих клиентов, - комментирует руководитель по развитию корпоративного бизнеса компании «МегаФон» в Оренбургской областиМихаил Синюгин.- Мы делаем бизнес по-настоящему, поэтому предлагаем услуги, которые позволяют сосредоточиться на деле нашим абонентам, а обеспечение связи мы берем на себя».

Сразу поясню, что мы должны иметь в начале и что по итогу должно получиться в конце.

Итак, имеем:

Что будем иметь по итогу:

(Подобная схема к примеру на текущий момент реализована в сети ресторанов Макдональдс)

Все это дело организовываем с помощью:

Для управления поднимем простенький web-сервер, mysql, phpmyadmin.

1 этап настройка маршрутизатора с dd-wrt

Открываем через web-интерфейс наш маршрутизатор. Настраиваем от настроек по умолчанию, поэтому вводим в браузере 192.168.1.1 и попадаем в меню.

Далее будут приводиться мои настройки сети, делайте также, либо подставляйте по примеру свои значения.

1. Вкладка Administration, в поля Router username, router password и re-enter to confirm вводим свои значения.

Тем самым установив свои пароли вместо стандартных для доступа к роутеру.

3. Там же заполняем Поля Router IP и DHCP.

dd-wrt-1

4. Вкладка Wireless, в поле Wireless Network Name (SSID) введите имя будущей Wi-fi сети

5.Вкладка Services -> подвкладка Hotspot

Remote network внутренняя сеть для Wi-fi клиентов

dd-wrt-2

2 этап Настройка FreeRadius

Устанавливаем FreeRadius, не забываем поставить галочку напротив MYSQL

cd /usr/ports/net/freeradius2 make install clean

Редактируем конфигурационный файл /usr/local/etc/raddb/radiusd.conf

и проверяем что выставлено именно no

Следующий файл для редактирования /usr/local/etc/raddb/sites-available/default

И во всех раскомментируем строчку

Этим мы подготовили freeradius для связи с mysql

Далее редактируем файл /usr/local/etc/raddb/clients.conf

Ищем секцию client localhost

где, 192.168.0.20 ip адрес маршрутизатора с wi-fi

Выставляем свой ключ

Не забываем прописать в /etc/rc.conf строчку

3 этап Настройка MySQL

Начнем с установки

cd /usr/ports/databases/mysql55-server make install clean

Добавляем в /etc/rc.conf

Выставляем пароль для рута

mysqladmin -u root password ВАШ_ПАРОЛЬ

Теперь заходим в консоль MySQL и вводим только что установленный пароль

create database db_radius; grant all privileges on db_radius.* to 'user_radius'@'localhost' identified by 'user_radius_password'; flush privileges; quit;

Из папки с этими файлами импортируем таблицы в нашу базу данных

mysql -u user_radius -p db_radius < schema.sql mysql -u user_radius -p db_radius < nas.sql mysql -u user_radius -p db_radius < ippool.sql

Проверим все ли прошло успешно:

mysql -u user_radius -p show databases; use db_radius; show tables;

Мы должны увидеть список из следующих таблиц:

nas, radacct, radcheck, radgroupcheck, radgroupreply, radippool, radpostauth, radreply, usergroup.

4 этап Привязываем FreeRadius к MySQL

Редактируем файл /usr/local/etc/raddb/sql.conf

Теперь создадим тестового юзера для проверки в базе MySQL. Для этого выполним

mysql -u user_radius -p db_radius insert into radcheck (Username, Attribute, Value) VALUES ('testsql', 'Password', 'passwordsql');

Не забываем перезагрузить freeradius.

Проверяем соединение командой

radtest testsql passwordsql 127.0.0.1 0 testing123

Здесь всплывут 2 подводных камня:

2. У меня вышла вот такая ошибка:

radclient:: Failed to find IP address for office.local
radclient: Nothing to send.


5 этап настройка Веб-сервера с PHP, SSL и поддержкой CGI
Следующим этапом будет настройка веб-сервера с SSL (нужен для страницы авторизации) c поддержкой выполнения CGI скриптов(тоже для страницы авторизации), и с поддержкой php (это для phpmyadmin) как это все сделать можно прочитать здесь.

6 этап Настройка страницы авторизации
После того как у нас появился работающий Веб-сервер нам необходимо настроить страницу авторизации. Кстати это именно та страница, на которую ссылается роутер с dd-wrt в своих настройках.

если не получилось, выкладываю тут на всякий случай

Устанавливать ничего не нужно, просто ищем в архиве файл hotspotlogin.cgi и копируем его в папку для cgi скриптов веб-сервера. Не забываем выставить права на выполнение

chmod 755 hotspotlogin.cgi

Если все выше настроено успешно, то при подключении к сети и попытке открыть любой сайт должна открываться страница формируемая hotspotlogin.cgi.

Кстати дизайн страницы можно менять как душе угодно. Предполагаю, что если вы дошли до этой точки настройки, то должны сами разобраться в коде и как это сделать.

7 этап Настройка dialupadmin

Чтобы не увеличивать статью до километровых размеров опустим установку PhpMyAdmin для управления базой, благо инфы по этой теме в интернете навалом.

И находим там папку dialup_admin, либо ищем ее по пути где-то здесь /usr/share/freeradius-dialupadmin/htdocs /var/www/dialup. Но скорее всего ее там может не оказаться.

Создаем папку для dialupadmin в папке веб-сервера, и перепишем в нее файлы из одноименной папки в архиве.

Здесь я опускаю настройку веб-сервера для папки dialupadmin. Можете положить все в папку по умолчанию и не париться с настройками, либо настроить веб-сервер как вам удобно.

Примечание: в dialupadmin по умолчанию нет никакой встроенной аутентификации, поэтому не забудьте ее сделать средствами веб-сервера поставив пароль на папку.

Приступим к настройке dialupadmin

Сразу сделаю небольшое отступление, если в процессе настройки вы столкнетесь с подобной ошибкой (точно не помню на каком этапе она может возникнуть)

Fatal error: Call to undefined function import_request_variables() in /usr/local/www/dialupadmin/conf/config.php on line 9

Редактируем файл ..dialupadmin/conf/admin.conf

в строке ниже вместо XXXXXX выставляем свой ключ. Например у нас в примере это testing123

Далее настройки базы, в строках ниже указываем свои значения:

sql_username: user_radius sql_password: user_radius_password sql_database: db_radius

Обратите внимание на строку

Теперь необходимо добавить таблицы в нашу базу данных

Их можно найти по пути ..dialup_admin/sql/mysql

Итак файлы userinfo.sql и badusers.sql в 5 строке удаляем

Также стоит обратить внимание на соответствия названий таблиц в базе и файле ..dialupadmin/conf/admin.conf . С этим могут быть связаны выше описанные ошибки.

Не факт конечно, что вскоре это все не поправят, но на всякий случай привожу все возможные грабли.

Заходим в папку ..dialupadmin/sql/mysql/ и импортируем таблицы (можете это сделать через PhpMyAdmin)

mysql -u user_radius -p db_radius < badusers.sql mysql -u user_radius -p db_radius < mtotacct.sql mysql -u user_radius -p db_radius < totacct.sql mysql -u user_radius -p db_radius < userinfo.sql

8 этап Добавление данных
Заходим через браузер в веб-интерфейс dialupadmin и создаем 2 группы:

группа Default будет для гостей здесь мы поставим ограничение скорости, и меньшее время сессии

Full Bandwidth для Vipов.

Заходим через PhpMyAdmin в базу и добавляем записи в таблицу radgroupcheck

id: 1
GroupName: Default
Attribute: Auth-Type
op: ==
Value: Local

id: 2
GroupName: Full Bandwith
Attribute: Auth-Type
op: ==
Value: Local

Теперь добавляем записи в таблицу radgroupreply

id: 1
GroupName: Default
Attribute: Session-Timeout
op: =
Value: 3600

id: 2
GroupName: Default
Attribute: Idle-Timeout
op: =
Value: 600

id: 3
GroupName: Default
Attribute: Acct-Interim-Interval
op: =
Value: 60

id: 5
GroupName: Default
Attribute: WISPr-Bandwidth-Max-Up
op: =
Value: 128000

id: 6
GroupName: Default
Attribute: WISPr-Bandwidth-Max-Down
op: =
Value: 256000

Следующие атрибуты для группы “Full Bandwidth”:

id: 7
GroupName: Full Bandwidth
Attribute: Session-Timeout
op: =
Value: 3600

id: 8
GroupName: Full Bandwidth
Attribute: Idle-Timeout
op: =
Value: 600

id: 9
GroupName: Full Bandwidth
Attribute: Acct-Interim-Interval
op: =
Value: 60

Читайте также: