Подключение колонок к Wi-Fi c авторизацией
. а также повредить оборудование и/или нарушить работу систем.
Любые действия и программы вы применяете на свой собственный страх и риск.
Проблема
Как известно, подключить колонку к общественным WiFi-сетям с авторизацией (через sms или браузер) не получится (из-за невозможности просмотреть страницу авторизации на колонке и, конечно, ввести код авторизации). Да и вообще, с точки зрения безопасности личных данных — это не лучшие места, чтобы подключать такие устройства. Но если очень хочется. 😉
Решение
Идентификация устройств в сети основана на их адресах, одни могут изменяться, другие (MAC) обычно жёстко прошиты в устройства (не всегда, об этом ниже). Поэтому для публичных сетей обычно используется MAC-адрес и, например, номер телефона, как такой же уникальный код.
Предлагаемый хак прост: мы выдаём другое устройство за колонку, и проходим авторизацию на нём.
Заранее, дома!
Необходимо узнать MAC-адрес вашей колонки. Для этого можно зайти в настройки роутера (у каждого бренда и модели процесс может отличаться) и найти среди устройств нужное устройство. Адрес должен выглядеть примерно так: CC:4B:73:F3:E4:23 (цифры случайны, у вас будут свои).
В месте подключения к сети (отель итд)
Перед этими процедурами колонку необходимо выключить! А лучше вообще не включать.
А теперь берём заготовленный дома адрес и:
- Прописываем его на своем устройстве (ноутбук/телефон) — по инструкции журнала «CHIP», например.
- Проходим авторизацию (через браузер или по sms) с этого устройства.
- Отключаем ноутбук/телефон от сети.
- Возвращаем настройки на нашем устройстве, снова его подключаем (возможно, для него тоже потребуется авторизация).
- Подключаем колонку, как к обычному Wi-Fi, всё работает!
Маршрутизатор будет думать, что ваша колонка - и есть то самое устройство, которое прошло авторизацию.
Удачи с Алисой в путешествиях!
простой способ веб-аутентификации пользователей сетей Wi-Fi
Это краткое руководство будет полезно начинающим сисадминам, перед которыми стоит задача быстро и с минимальными затратами развернуть систему Wi- Fi доступа с аутентификацией и авторизацией. Это может быть, например, небольшая беспроводная сеть, предоставляющая платную услугу использования интернета для мобильных абонентов. В интернет-кафе ставка обычно делается не на организацию безопасных каналов связи, а на простоту пользования услугой. Ничего удивительного нет – практика показывает, что значительная часть современных пользователей интернета вообще не предполагают, что в основе лежит некая среда передачи, протоколы и т.п. Они просто «заходят в интернет», то бишь открывают веб-браузер. Были случай, когда человек для доступа в интернет купил модем и уже, было, собрался окунуться в пучину всемирной паутины, как вдруг совершенно неожиданно для себя выяснил, что для этого еще и телефонная линия нужна! «Странно», — подумал мужик, — «а говорили, что нужен только модем».
Поэтому широкую популярность приобрела так называемая веб-аутентификация, которая является альтернативой более сложным VPN-туннелям и полностью отвечает юзерским представлениям – «браузер=интернет». Суть технологии в следующем: пользователь, подключившись к Wi-Fi сети, первоначально не имеет выхода в интернет. Открыв браузер и набрав произвольный URL в адресной строке, он попадает на страницу аутентификации, где ему предлагается ввести логин и пароль (или номер карты и пин-код). Доступ к интернет-ресурсам будет открыт только после успешной авторизации. В данном механизме на стороне клиента не требуется специального программного обеспечения или какой-либо предварительной настройки.
На сегодняшний день веб-аутентификацию поддерживают большинство точек доступа, однако использовать ее совместно с автоматизированной системой расчетов часто не представляется возможным из-за отсутствия полноценной поддержки RADIUS. Точки доступа, лишенные этого недостатка, как правило, стоят довольно дорого. Ниже описано решение, позволяющее реализовать веб-аутентификацию на UNIX-маршрутизаторе (том же сервере, где, например, установлена биллинговая система), что позволит сэкономить на выборе точек доступа.
Кроме стоимости, к недостаткам существующих решений, в полной мере поддерживающих RADIUS-аутентификацию (802.1х или встроенную поддержку RADIUS Web based auth) и позволяющих тарифицировать Wi-Fi соединения, стоит отнести функционирование этих решений на втором (канальном) уровне модели OSI. Из этого имеются исключения, например, решение Cisco Systems (LWAPP), которому, однако, в полной мере присущ первый недостаток — цена. Однако у большинства из изученных устройств имеется ограничение на расположение контроллера и выноса (у разных производителей под выносом понимаются одни и те же устройства, но по-разному именуемые: радио-порты (HP ProCurve Secure Access 700wl Series совместно с ProCurve Switch xl Access Controller Module), облегченные точки (SonicWall) и т.д. Такие решения чрезвычайно сложно развертывать в IP-сетях, где нет возможности поместить точку и контроллер в один Ethernet-сегмент.
Между сетью общего пользования и точкой доступа, работающей в режиме моста или маршрутизатора без NAT, вклинивается обычный PC-маршрутизатор. В нашем примере он будет работать под управлением Linux.
Все функции аутентификации Wi-Fi клиентов переносятся на сервер, что позволяет до минимума снизить требования к используемым точкам доступа. Если нужен сервис DHCP, то он может быть запущен как на AP (Access Point, точка доступа), так и на сервере. Второй вариант оправдан только в случае, когда необходимо централизованно раздавать IP-адреса в Wi-Fi сети, построенной на нескольких AP.
Функции пограничного UNIX-маршрутизатора:
— биллинговая система (например, LANBilling в комплектации LBcore, LBcd (Ethernet-агент);
— перенаправление HTTP/HTTPS-запросов на собственный веб-сервер и блокировка прочего трафика для неавторизованных пользователей;
— исполнение дополнительного скрипта аутентификации, работающего с базой данных биллинга;
— открытие доступа пользователям, прошедшим аутентификацию;
— блокировка пользователя при исчерпании баланса, по запросу или завершению сессии.
Перенаправлять HTTP-трафик можно при помощи механизма iptables REDIRECT. При старте системы должны быть выполнены следующие условия: разрешены только DNS-запросы, весь веб-трафик перенаправляется на сервер, остальное, фигурально выражаясь, идет в /dev/null, то бишь заблокировано. Конфигурационный файл iptables для стартового состояния будет выглядеть примерно следующим образом (это файл, сохраненный iptables-save, так что пусть вас не смущают описания цепочек со счетчиками пакетов/байтов в квадратных скобках):
*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
Как видим, все правила было решено задать в таблице nat, цепочке PREROUTING. Хоть это не единственный вариант записи (часть этих правил можно содержать и в FORWARD), так определенно удобнее с точки зрения администрирования.
Если кто не в курсе, используются такие «конфиги» совместно с программой iptables-restore. Впрочем, никто не мешает вам задавать правила файрволла способом, к которому вы привыкли.
Список заданных правил будет иметь следующий вид:
# 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
После успешной аутентификации пользователя, например, с IP-адресом 192.168.10.10, к правилам фильтра, относящимся к той же таблице nat и цепочке PREROUTING, в начало дописываем разрешающее правило (естественно, не руками дописываем, а поручаем это управляющему скрипту, пример которого см. ниже). В результате должно получиться приблизительно следующее:
# 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) фактически останавливает просмотр остальных правил для адреса 192.168.10.10, и в результате перенаправление и блокировка трафика для него не работают.
Для динамического управления правилами iptables необходимы 2 скрипта: script_start, добавляющий разрешающее правило для данного IP-адреса в начало цепочки, и script_stop, удаляющий правило.
#!/bin/bash
# param $1 — ip
# param $2 — netmask
/sbin/iptables -t nat -I PREROUTING 1 -s $1/$2 -j ACCEPT
#!/bin/bash
# param $1 — ip
# param $2 — netmask
/sbin/iptables -t nat -D PREROUTING -s $1/$2 -j ACCEPT
Как видите, значения IP-адреса и маски подсети поступают в скрипт как параметры коммандной строки — $1 и $2 соответственно.
Вобщем-то это может быть и один скрипт, принимающий аргументы start и stop на манер System V init.
Помимо динамического управления правилами файрволла для корректного начала и завершения пользовательской сессии в базе данных необходимо поддерживать актуальное соответствие между пользователем и его текущим IP-адресом. Поэтому вышеописанные скрипты нужно немного усложнить, либо создать промежуточные, выполняющие запросы к биллингу. Или переложить большую часть работы на биллинг, одна из подсистем которого будет вызывать описанные выше скрипты как внешние модули. Вариантов, в общем, бездна.
Собственно веб-аутентификацию будет выполнять некий CGI- или PHP-скрипт на стороне сервера. Его задача проста — проверить логин и пароль. Если такой логин не найден, он попытается активировать карту, рассматривая введенный логин как номер карты. Для удобства все служебные запросы, необходимые для проверки подлинности, можно вынести в хранимую SQL-процедуру.
Если авторизация успешно пройдена, скрипт должен инициировать запуск скрипта script_start. Как он это будет делать – вам решать. Не забудьте только, что изменение правил файрволла (чем, собственно, и занимается script_start) требует root-привилегий. Веб-скрипт может также открывать в браузере пользователя дополнительное окно с формой, позволяющей отправить запрос на завершение сессии.
Потребуется небольшое дополнение к основной конфигурации. В httpd.conf нужно добавить строку:
ErrorDocument 404 /authorize.php
«Почему ErrorDocument?» – спросите вы. А потому, что если юзер вводит любой URL – например http://www.vasya-
pupkin.info/bestbb/index.php?xxx=yyy, вряд ли на вашем сервере, куда был перенаправлен этот запрос, найдется данная страница (вот будет прикол,если найдется! 😉
Кроме того, не мешает поправить DirectoryIndex в директории, описанной как DocumentRoot (если вы решили положить свой скрипт именно в корневую директорию):
Options Indexes FollowSymLinks
DirectoryIndex authorize.php
AllowOverride None
Order allow,deny
Allow from all
Все это необходимо для того, чтобы любой HTTP-запрос, перенаправленный на этот сервер, приводил к запуску скрипта аутентификации.
Можно, конечно, было привлечь к решению проблемы «тяжелую артиллерию» вроде mod_rewrite, но это имеет смысл только тогда, когда на данном веб- сервере есть какой-то другой, не относящийся к авторизации контент.
Необходимость прерывания пользовательской сессии возникает в следующих случаях:
— пользователь исчерпал свой баланс;
— административный запрос на блокировку.
— пользователь хочет закрыть сессию по окончании работы, дабы пресечь возможный несанкционированный доступ с использованием его IP-адреса; — разрыв сессии по таймауту при отсутствии активности с данного IP-адреса в течение заданного времени.
Во всех случаях для разрыва сессии необходимо запустить script_stop с нужными параметрами. Запуск скрипта в первых двух случаях должен инициироваться вашим биллингом. Пользовательский запрос (3-й случай) обычно выполняется через браузер (в предыдущем разделе упоминалось, что скрипт аутентификации должен открывать в браузере соотвествующее окно). Содержимое формы отправляется в тот же скрипт, он же может запускать и script_stop. Полагаю, что получение в PHP- или CGI-скрипте IP-адреса запрашивающего не является для вас проблемой.
Для обработки 4-го случая необходима переодическая проверка активных сессий. Для этих целей можно написать шелл-скрипт, который будет запускаться с заданным интервалом (через cron).
Alice D. Saemon, по материалам компании «Сетевые решения», производителя биллинговой системы LANBilling
Сетевые решения. Статья была опубликована в номере 09 за 2006 год в рубрике sysadmin