...

Что за программа captive portal

Captive portal собственными руками

Каждый из нас подключался к беспроводной сети (аэропорты, кафе и тд) где необходимо согласится с некоторыми условиями или пройти авторизации прежде чем начинать пользоваться интернетом. Такая технология называется captive portal.

В мою задачу входило создать captive portal где каждому пользователю раз в 30 минут будет показываться определенный сайт (реклама), и пока он не нажмет «кнопочку» «далее» интернета не будет.

  1. Wifi-точка доступа любая (на практике можно использовать и проводной интернет)
  2. Маршрутизатор на любой *nix системе (в моем случае это debian wheezy)
  1. Любой пакет пришедший на маршрутизатор маркируем
  2. Любой запрос на 80 порт (пакеты уж маркированны) перенаправляем на нужную нам страницу
  3. При «авторизации»(нажатии кнопки далее) пользователя добавляем его мак в исключения и разрешаем доступ в интернет
  4. Скрипт вычисляет у кого прошел лимит времени и удаляет данного клиента.

У нас имеется маршрутизатор на базе debian, где eth0 — локальная сеть в моем случае (192.168.11.0/24), eth0:1 — интерфейс который смотрит в интернет.

Настройку интерфейсов мы пропустим, это каждый выполнит сам. Сразу перейдем к настройке iptables, я обычно прописываю iptables в rc.local:
/etc/rc.local

IPTABLES="/sbin/iptables" EBTABLES="/sbin/ebtables" DHCP="67:68" SSH="22" WWW="80" $IPTABLES -t mangle -F $IPTABLES -F $IPTABLES -A INPUT -i lo -j ACCEPT #ssh $IPTABLES -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT # разрешаем серверу и клиентам dns гугла $IPTABLES -A INPUT -s 8.8.8.8 -j ACCEPT $IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # создаем правило интернет $IPTABLES -N internet -t mangle $IPTABLES -t mangle -A PREROUTING -j internet #добавляем разрешенные маки в исключения путем добавления их в Return awk 'BEGIN < FS="\t"; >< system("$IPTABLES -t mangle -A internet -m mac --mac-source "$4" -j RETURN"); >' /var/lib/users #маркируем все пакеты $IPTABLES -t mangle -A internet -j MARK --set-mark 99 # все маркированные пакеты которые идут на 80 порт отправляем на наш сервер $IPTABLES -t nat -A PREROUTING -m mark --mark 99 -p tcp --dport 80 -j DNAT --to-destination 192.168.11.38 #дроппаем все маркированное #$IPTABLES -t filter -A FORWARD -m mark --mark 99 -j DROP #dns $IPTABLES -t filter -A INPUT -s 8.8.8.8 -j ACCEPT #http $IPTABLES -t filter -A INPUT -p tcp --dport 80 -j ACCEPT #port dns $IPTABLES -t filter -A INPUT -p udp --dport 53 -j ACCEPT #drop $IPTABLES -t filter -A INPUT -m mark --mark 99 -j DROP echo "1" > /proc/sys/net/ipv4/ip_forward #настройка нат $IPTABLES -A FORWARD -i eth0 -o eth0:1 -m state --state ESTABLISHED,RELATED -j ACCEPT $IPTABLES -A FORWARD -i eth0:1 -o eth0 -j ACCEPT $IPTABLES -t nat -A POSTROUTING -o eth0 -j MASQUERADE 

На этом конфигурация iptables заканчивается и переходим к странице которую получает пользователь: /var/lib/index.php

 // получаем и добавляем мак пользователя $mac = shell_exec("$arp -a ".$_SERVER['REMOTE_ADDR']); preg_match('/. /',$mac , $matches); @$mac = $matches[0]; if (!isset($mac)) < exit; >if (!isset($_POST['email']) || !isset($_POST['name'])) < // Name or email address not entered therefore display form ?>Welcome to To access the Internet you must first enter your details:

Your full name: Your email address:
else < enable_address(); >function enable_address() < global $name; global $email; global $mac; global $users; // время добавления пользователя храним в unixtime file_put_contents($users,$_POST['name'].";".$_POST['email'].";" .$_SERVER['REMOTE_ADDR'].";$mac;".date("U")."\n",FILE_APPEND + LOCK_EX); // добавляем правило в iptables exec("sudo iptables -I internet 1 -t mangle -m mac --mac-source $mac -j RETURN"); // The following line removes connection tracking for the PC // This clears any previous (incorrect) route info for the redirection exec("sudo rmtrack ".$_SERVER['REMOTE_ADDR']); sleep(1); header("location:http://".$_GET['add']); exit; >// Function to print page header function print_header() < ?> Welcome to // Function to print page footer function print_footer() < echo ""; echo ""; > ?>

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

  1. Iptables автоматически редиректит любой запрос на 80 порт на нашу страницу
  2. пользователь вводит свое имя и почту, скрипт php получает мак пользователя и добавляет в iptables правило исключения для этого мака
  3. Php скрипт складывает все данные пользователей (имя, почта, время добавления) в файл /var/lib/users
  1. удалять правило из iptables для мака у которого вышло время
  2. удалять из файла данные по этому пользователю

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

#!/usr/bin/perl $file = "/var/lib/users"; $curtime = time(); # время "бана" 30 минут время в секундах так как считаем потом в unixtime $bantime = 1800; $tmpfile = "out.tmp"; open(my $data, ') < chomp $line; (@field) = split(";", $line); #прибавляем время "бана" ко времени когда зашел пользователь (4 поле в нашем случае) получаем время когда нужно удалить пользователя if (defined($exptime)) < undef $exptime; >$result = $field[4]; $exptime = $bantime + $result; # такая коснтрукция потому что перл не хотел прибавлять $field[4] + $bantime # если текущее время больше времени для удаления, удаляем мак и перезаписываем файл if ($curtime > $exptime) < #printf "BINGO\n"; system "iptables -D internet -t mangle -m mac --mac-source $field[3] -j RETURN"; # system "rm /var/lib/users"; >else < printf "$field[3]; $exptime\n"; open SF, ">>$tmpfile"; printf SF "$field[0];$field[1];$field[2];$field[3];$field[4]\n"; close SF; system "mv /root/out.tmp /var/lib/users"; system "chown www-data. $file"; > > 

Все, задача выполенна, модифицируя файлик index.php можем показывать пользователю релкаму, смешные видео, заставлять его оставлять свою почту и т.д.

Руководство пользователя

Приложение Captive Portal предназначено для организации хотспота — публичной (открытой, гостевой) зоны Wi-Fi с обязательной авторизацией пользователей. Предоставление публичного доступа к Интернету в хотспотах регулируется законодательно. Согласно постановлениям правительства РФ: № 758 от 31 июля 2014 г. и № 801 от 12 августа 2014 г. все юридические лица и индивидуальные предприниматели (к примеру владельцы кафе или гостиниц) обязаны предоставить отчеты об использовании оборудования для публичного доступа в сеть Интернет. Это значит, что клиентам, подключенным по Wi-Fi и сетевому кабелю к хотспоту, нужно пройти обязательную аутентификацию.

Captive Portal — это веб-сайт авторизации, на который принудительно перенаправляются пользователи, подключившиеся к публичной сети, перед тем как они получат доступ в Интернет.

Принцип работы Captive Portal

Принцип работы всех подобных систем — перехват HTTP/HTTPS -сессии подключившегося к публичной сети пользователя, и перенаправление их на внешний веб-сервер авторизации. Далее пользователь может пройти авторизацию через СМС или обратный звонок на сотовый номер телефона. Пройдя авторизацию, пользователь получает доступ в Интернет. По завершении сессии пользователь, если ещё не отключился и активен, снова будет перенаправлен на страницу авторизации.

Captive Portal выполняет обращение к RADIUS-серверу (располагается на стороне поставщика услуг Captive Portal), который используется для выделения ресурсов (Provisioning), — лимит времени подключения (тайм-аут сессии), скорость, объем трафика, — и контроля за расходом ресурсов (Accounting).

В Captive-порталах используется Universal Access Method ( UAM ) — универсальный метод контроля доступа с использованием AAA ( Authentication , Authorization , Accounting ) и RADIUS .

Данная услуга предоставляется сторонними компаниями, а интернет-центр Keenetic является клиентом Captive Portal для работы с их услугой.

Реализация Captive Portal в интернет-центрах Keenetic базируется на Open-Source службе Coova-Chilli . С большой долей вероятности хотспот заработает на платформе поставщиков данного сервиса по умолчанию, которые в свою очередь поддерживают Coova-Chilli .

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

На текущий момент, компонент Captive Portal, реализованный в Keenetic, поддерживает следующих поставщиков: 1 Wi-Fi, CiA Wi-Fi, GetWiFi, Global Hotspot, FlyGo, HotspotSystem, Hot-WiFi, Iron Wi-Fi, MegaFon, MKS-NET, MyWiFi, NetByNet, NSG, OTS-NET, RadrigoWiFi, Rostelecom, SAI-WiFi, Svarog, Wifiworld, WiFly, WorldSpot.net.

Все выше обозначенные поставщики относятся к облачным сервисам. Авторизация происходит удаленно на серверах этих компаний. Есть так называемые поставщики коробочных решений, которые предлагают ПО для установки на сервера заказчиков, которые в данном случае имеют полный контроль над всей системой авторизации. К таким компаниям относится NETAMS. Описание процесса настройки Keenetic для их программного обеспечения WNAM приводится на странице: http://docs.netams.com/pages/viewpage.action?pageId=12058634

В тоже время есть возможность настроить профиль вручную, если поставщик предоставляет данные для подключения. Профиль для настройки вручную представлен ниже в разделе Примечание данной статьи.

Чтобы воспользоваться Captive Portal , нужно установить соответствующий компонент системы.

captive1_en.png

Затем настройка Captive Portal станет доступна в веб-конфигураторе на странице » Гостевая сеть » в разделе » Captive portal «.

captive2_en.png

Важно

Приложение Captive Portal может быть запущено только в интернет-центре, который работает в основном режиме «Роутер».

Пример настройки Captive Portal

В качестве примера настройки возьмем облачного оператора Wi-Fi System.

На странице » Гостевая сеть » в разделе » Captive portal » включите приложение, в поле » Профиль » выберите предустановленный профиль поставщика услуг Captive Portal или » Мой профиль » для конфигурации профиля вручную, если поставщик предоставляет данные для подключения.

captive3_en.png

Поля » UAM Secret » и » Radius NAS ID » пользователь должен заполнить самостоятельно после авторизации в личном кабинете на сайте компании.

Для просмотра полных настроек профиля нажмите » Показать профиль «.

captive4_en.png

При необходимости внести изменения в настройки нажмите » Редактировать профиль «.

Важно

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

Авторизуйтесь на сайте компании поставщика услуг Captive Portal.

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

Далее добавьте новый хостпот.

captive5_en.png

На странице настройки хотспота вы увидите параметры «Идентификатор хотспота (NAS ID)» и «Пароль (UAM Secret)», необходимые для окончательной настройки Captive Portal.

captive6_en.png

После окончательного ввода настроек сервис будет запущен для гостевой сети Wi-Fi (по умолчанию это гостевая сеть с именем Guest).

captive7_en.png

Гостевая сеть в данном случае может быть как с паролем (WPA-PSK), так и без пароля.

Keenetic позволяет разделить гостевую (Captive portal) и основную сеть. Те пользователи, которые подключаются к гостевой сети будут иметь доступ только после авторизации. А те пользователи или сетевые устройства, которые подключаются к основной сети будут иметь доступ в сеть без авторизации, к примеру, системные администраторы или видеокамеры. Каждый из проводных портов LAN может быть отдельно настроен на подключение к любой сети (дополнительная информация представлена в статье «Использование Сегментов для настройки дополнительных подсетей в интернет-центрах» в разделе Примечание).

Для расширения беспроводной сети, включая Captive Portal, можно подключить второй роутер Keenetic в режиме «Точка доступа» к основному Keenetic.

Пример подключения к Captive Portal

После подключения мобильного устройства к публичной (гостевой) сети, при первом обращении к какому-либо веб-сайту в Интернете, произойдет переадресация на специальную страницу авторизации. В нашем примере используется авторизация по SMS. Клиенту нужно указать номер своего телефона для получения SMS-сообщения с паролем доступа.

captive8_en.png

Получив SMS-сообщение с паролем доступа, укажите его и нажмите «Войти». При успешном подключении, вы увидите сообщение вида «Вы уже подключены к хотспоту». Далее пользователь получит доступ в Интернет.

Подсказка

Настройка профиля Captive Portal вручную.

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

captive9_en.png

Профиль для настройки вручную представлен ниже.

captive10_en.png

Важно

По умолчанию в Keenetic установлено время аренды подключенного клиентского ip-адреса 3600 секунд . Поэтому после отключения на более чем 1 час потребуется нажимать кнопку ПЕРЕЙТИ В ИНТЕРНЕТ. Если это неудобно, время можно увеличить при помощи команды:

  • interface Chilli0 chilli lease [время в секундах]

При подготовке материала использовались источники:
https://habr.com/ru/sandbox/79059/
https://docs.keenetic.com/eu/speedster/kn-3010/ru/15226-12—captive-portal.html

Оцените статью