Для зарегистрированных пользователей |
|
Настройка Web аутентификации для Wi-Fi соединений
Данное решение также может быть адресовано владельцам небольших беспроводных сетей, предоставляющим платную услугу использования Internet для мобильных абонентов. В интернет-кафе ставка обычно делается не на организацию безопасных каналов связи, а на простоту пользования услугой, поэтому широкую популярность приобрела так называемая Web аутентификация, которая является альтернативой более сложным VPN-туннелям. Суть ее в следующем: пользователь, подключившись к WiFi сети, первоначально не имеет выхода в интернет. Открыв браузер и набрав произвольный URL в адресной строке, он попадает на страницу аутентификации, где ему предлагается ввести логин и пароль (или номер карты и пин-код). Доступ к ресурсам Internet будет открыт только после успешной авторизации. В данном механизме не происходит создания VPN-туннеля, поэтому на стороне клиента не требуется специального программного обеспечения или какой-либо предварительной настройки. На сегодняшний день web аутентификацию поддерживают большинство точек доступа, однако использовать ее совместно с автоматизированной системой расчетов часто не представляется возможным из-за отсутствия полноценной поддержки RADIUS протокола. Точки доступа, лишенные этого недостатка, как правило, стоят довольно дорого. Ниже описано решение, позволяющее реализовать web аутентификацию на UNIX-маршрутизаторе (том же сервере, где, например, установлена АСР LANBilling), что позволит сэкономить на выборе точек доступа. Помимо стоимости, к недостаткам существующих решений в полной мере поддерживающих RADIUS аутентификацию (802.1х или встроенную поддержку RADIUS Web based auth), позволяющих реализовать online тарификацию Wi-Fi соединений, стоит отнести условие функционирования этих решений на втором уровне (канальном уровне) модели OSI (из этого имеются исключения в виде решения Cisco Systems (LWAPP), обладающего первым недостатком - ценой, к месту будет сказано, что это решение было целиком куплено у компании Airespace, предлагавшей некоторое время назад одноименные контроллеры). В частности, у большинства из изученных устройств имеется ограничение на расположение контроллера и выноса (у разных производителей под выносом понимаются одни и теже устройства, но по разному именуемые: радио порты (HP ProCurve Secure Access 700wl Series совместно с ProCurve Switch xl Access Controller Module), облегченные точки (SonicWall) и т.д). Подобные решения чрезвычайно сложно развертывать в IP сетях где нет возможности поместить точку и контроллер в один Ethernet сегмент.
Обобщенная схема решения приведена на рисунке ниже.
Рис. 1Общая схема решения
Беспроводная сеть может быть построена с использованием одной или нескольких точек доступа. Все они должны быть объединены вместе с пограничным роутером, через который осуществляется выход в Internet, в общую сеть посредством коммутатора или маршрутизатора. Необходимым условием является отсутствие NAT (подмены ip адресов) между любым конечным пользователем и сервером с АСР (он же пограничный Linux-маршрутизатор). Все функции по аутентификации WiFi клиентов переносятся на сервер, что позволяет до минимума снизить требования к используемым точкам доступа. Если требуется сервис DHCP, то он может быть запущен как на AP (от англ. Access Point), так и на сервере. Использовать вторую возможность целесообразно только в случае необходимости централизованно раздавать ip адреса в WiFi сети, построенной на нескольких AP. Функции пограничного UNIX-маршрутизатора:
-
АСР LANBilling в комплектации LBcore, LBcd (ethernet агент) - подсчет трафика на интерфейсе маршрутизатора, тарификация услуги объемного типа.
-
Перенаправление http (https) запросов на собственный web сервер и блокировка прочего трафика для неавторизованных пользователей.
-
Дополнительный скрипт аутентификации, работающий с базой данных АСР
-
Открытие доступа пользователям, прошедшим аутентификацию
-
Блокировка пользователя при исчерпании баланса, по запросу или завершению сессии |
| |
|
Примеры управляющих скриптов.
-
Перенаправление http трафика осуществляется при помощи механизма iptables REDIRECT. При старте системы должны быть разрешены только DNS запросы, и весь www трафик перенаправляться на сервер. Первоначальное состояние: # iptables -t nat -nL PREROUTING
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
ACCEPT udp - 0.0.0.0/0 0.0.0.0/0 udp dpt:53
REDIRECT tcp - 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 redir ports 80
REDIRECT tcp - 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 redir ports 443
DROP all - 0.0.0.0/0 0.0.0.0/0
Конфигурационный файл iptables для такого стартового состояния будет выглядеть следующим образом: *nat
:PREROUTING ACCEPT [97569:16395666]
:POSTROUTING ACCEPT [26991:1834572]
:OUTPUT ACCEPT [27006:1835736]
-A PREROUTING -p udp -m udp -dport 53 -j ACCEPT
-A PREROUTING -p tcp -m tcp -dport 80 -j REDIRECT -to-ports 80
-A PREROUTING -p tcp -m tcp -dport 443 -j REDIRECT -to-ports 443
-A PREROUTING -j DROP
COMMIT
После успешной аутентификации пользователя, например, с ip 192.168.10.10 правила фильтра должны измениться следующим образом: # iptables -t nat -nL PREROUTING
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
ACCEPT all - 192.168.10.10/32 0.0.0.0/0
ACCEPT udp - 0.0.0.0/0 0.0.0.0/0 udp dpt:53
REDIRECT tcp - 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 redir ports 80
REDIRECT tcp - 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 redir ports 443
DROP all - 0.0.0.0/0 0.0.0.0/0
Добавление в начало цепочки разрешающего правила (ACCEPT) фактически останавливает просмотр остальных правил для ip 192.168.10.10, и в результате перенаправление и блокировка трафика для него не работают. Для динамического управления правилами iptables необходимы 2 скрипта: script_start, добавляющий разрешающее правило для данного ip в начало цепочки, и script_stop, удаляющий правило. script_start:
#!/bin/bash
# param $1 - ip
# param $2 - netmask
/sbin/iptables -t nat -I PREROUTING 1 -s $1/$2 -j ACCEPT
script_stop:
#!/bin/bash
# param $1 - ip
# param $2 - netmask
/sbin/iptables -t nat -D PREROUTING -s $1/$2 -j ACCEPT
-
Помимо динамического управления правилами iptables для корректного начала и завершения пользовательской сессии в БД необходимо поддерживать актуальное соответствие между пользователем и ip адресом, который он использует. Поэтому вышеописанные скрипты нужно немного усложнить. Примеры используемых в решении скриптов: script_start и script_stop. Здесь предполагается, что все скрипты размещены в директории /usr/local/billing. Для вызова script_start и script_stop применяется механизм запуска внешних процедру, предусмотренный в АСР. При этом script_start должен совпадать с vg_on (запускатеся при снятии блокировки учетной записи), а script_stop - с vg_off (запускается во время блокировки).
-
WEB-аутентификацию осуществляет PHP скрипт на стороне сервера (authorize.php) Все необходимы файлы для функционирования скрипта можно найти здесь. Скрипт осуществляет проверку логина и пароля. Если такой логин не найден, то пытается активировать карту, рассматривая введенный логин как номер карты. Для удобства все служебные запросы, необходимые для проверки подлинности, вынесены в хранимую SQL процедуру. Если авторизация успешно пройдена, скрипт должен инициировать запуск скрипта script_start. Это можно сделать либо средствами агента, сымитировав разблокирование учетной записи (в этом случае агент запустит vg_on=script_start). Либо запускать script_start непосредственно из скрипта аутентификации(при этом нужно будет пользоваться sudo, т.к. script_start требует root-привилегий). В authorize.php реализован первый способ. Кроме этого у авторизовавшегося пользователя открывается дополнительное окно браузера с формой, позволяющей отправить запрос на завершение сессии (см. п. 5)
-
Настройка apache. Наличие apache требуется для функционирования LANBilling, однако помимо общих инструкций по настройке, описанных в документации АСР, здесь потребуется небольшое дополнение к конфигурации. В httpd.conf нужно добавить строку ErrorDocument 404 /authorize.php
Кроме того поправить DirectoryIndex в директории, описанной как DocumentRoot (в примере /home/www-data):
Options Indexes FollowSymLinks
DirectoryIndex authorize.php
AllowOverride None
Order allow,deny
Allow from all
Все это необходимо для того, чтобы любой http запрос, перенаправленный на этот сервер, приводил к запуску скрипта аутентификации. Сам скрипт authorize.php должен располагаться в папке DocumentRoot (/home/www-data).
-
Необходимость прерывания пользовательской сессии возникает в следующих случаях:
-
Пользователь исчерпал свой баланс
-
Административный запрос на блокировку
-
Пользовательский запрос на остановку сессии по окончании работы с целью пресечь возможный несанкционированный доступ с использованием его ip адреса
-
Разрыв сессии по таймауту при отсутствии активности с данного ip адреса в течение заданного времени
Во всех случаях для разрыва сессии необходимо запустить script_stop с нужными параметрами. Первые два случая - это штатная возможность АСР: при блокировке(административной, пользовательской либо по балансу) агент запускает vg_off=script_stop. Пользовательский запрос (3ий случай) инициируется через браузер. Механизм запуска скриптов здесь аналогичен п. 3: можно спровоцировать запуск vg_off=script_stop, либо вызвать скрипт напрямую (в authorize.php реализован первый способ). Для обработки 4го случая необходима переодическая проверка активных "сессий". Для этих целей можно воспользоваться следующим скриптом, который должен запускаться с заранее определенным интервалом (через cron).
| |
|