11.07.2015 Views

ПРИНТЕРЫ СЕГОДНЯ - Xakep Online

ПРИНТЕРЫ СЕГОДНЯ - Xakep Online

ПРИНТЕРЫ СЕГОДНЯ - Xakep Online

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

ХАКЕР 04 /171/ 2013 Испытание гостями 129Для организации простого портала без поддержки внешних средств аутентификациихватит и решения вроде jkaptive, а вот чтобы разобратьсясо всеми возможностями, заложенными в PacketFence, потребуется определенноевремя. Некоторые из представленных проектов уже прекратилисвое развитие, но все наработки по-прежнему актуальны. Также можно найтимодули для различных языков, позволяющие самостоятельно создать CaptivePortal из подручных средств. Например, для Perl он так и называется —Captive::Portal (https://metacpan.org/module/Captive::Portal), есть модульдля Python/Django (tollgate.org.au).Кроме этого, ряд дистрибутивов-роутеров предлагает возможность быстрогосоздания Captive Portal буквально парой щелчков мышки: Untangle(untangle.com), pfSense (pfsense.org), Zeroshell (zeroshell.net), m0n0wall(m0n0.ch), ClearOS (clearfoundation.com) и Zentyal (zentyal.org). Но при желанииили если невозможно изменить текущую конфигурацию сети нужныескрипты легко создать самостоятельно. Этим мы и займемся.НАСТРАИВАЕМ CAPTIVE PORTAL В LINUXРазобравшись, как работает Captive Portal, легко реализовать его штатнымисредствами Linux. Причем доступно несколько способов — маркировкаи блокировка пакетов, пришедших от неавторизованных пользователей, использованиецепочки правил или шаманство с NAT. Дополнительно на летуможно перенастраивать правила прокcи-сервера Squid или контент-фильтраDansGuardian, что позволит управлять выходом в интернет на уровне групппользователей, да и просто кешировать и фильтровать информацию, блокируядоступ к нежелательным ресурсам. И кстати, именно такой подход применяетсяв специализированных дистрибутивах.Для примера разберем вариант использования отдельной цепочкии DansGuardian. Первым делом создаем правила пакетного фильтра:# Очищаем правилаebtables -t broute -Febtables -FДополнительные функцииНАСТРАИВАЕМ CAPTIVE PORTAL В ZENTYALЕсли под Captive Portal выделяется новый сервер и все настройки нужно произвестив короткое время, то лучше обратиться к специализированным решениям,где все необходимое делается буквально парой нажатий клавиш.Яркий пример — серверный дистрибутив Zentyal (zentyal.org), ориентированныйна малые и средние корпоративные сети. Он может выступать в любойиз четырех ролей сетевого шлюза, Office Server, сервера коммуникаций и инфраструктуры.Для поддержки Captive Portal следует во время установки активироватьодноименный модуль (активируется роль Gateway и все сопутствующиепакеты). Затем в мастере первичной настройки правильно указываемна LAN-интерфейс. Создаем учетные записи пользователей и группы. Далеев интерфейсе настройки Zentyal переходим в меню Captive Portal и отмечаемв поле «Captive-интерфейсы» нужный, выбираем группу, участники которойбудут иметь доступ, и указываем порт, на который будут перенаправлятьсяпользователи. Вот и все. Теперь любой, кто желает подключиться к сети, вводитсвои учетные данные, если аутентификация проходит успешно, появляетсявсплывающее окно, которое нужно держать открытым. Чтобы отключиться,достаточно нажать кнопку «Выйти» или просто закрыть окно браузера.Если имеем шлюз, построенный на Ubuntu, то для установки связанныхс Zentyal приложений проще использовать специальный репозиторий:$ sudo add-apt-repository ppa:zentyal/3.0$ sudo apt-get updateПосле чего команда sudo apt-cache search zentyal покажет более 20 модулейZentyal.# Переправляем пакеты, идущие к 80-му порту на стек iptablesebtables -t broute -A BROUTING -p IPV4 --ip-protocol 6--ip-destination-port 80 -j redirect --redirect-target ACCEPTНе забываем разрешить специфические низкоуровневые протоколы:ebtables -A INPUT -p ARP -j ACCEPTebtables -A FORWARD -p ARP -j ACCEPTebtables -A OUTPUT -p ARP -j ACCEPTТо же пишем и для LENGTH, и IPv4. Теперь создаем правила для iptables:iptables -N captiveiptables -F captiveiptables -P FORWARD DROP# Переправляем пакеты, идущие к порту 80, на 8080, где# работает DansGuardianiptables -t nat -I PREROUTING -i br0 -p tcp --dport 80 -jREDIRECT --to-ports 8080iptables -t nat -I PREROUTING -i eth0 -p tcp --dport 80 -jREDIRECT --to-ports 8080iptables -t nat -I PREROUTING -i eth1 -p tcp --dport 80 -jREDIRECT --to-ports 8080# Создаем цепочку для LANiptables -A FORWARD -s 192.168.1.0/24 -j captiveiptables -A FORWARD -d 192.168.1.0/24 -j captive# Разрешаем локальный трафик (добавляем все необходимые сети)iptables -I FORWARD -p tcp -s 192.168.1.0/24 -d192.168.1.0/24 -j ACCEPTiptables -I FORWARD -p udp -s 192.168.1.0/24 -d192.168.1.0/24 -j ACCEPTiptables -A captive -j RETURNНе забываем разрешить ICMP, DNS, DHCP и прочие необходимые протоколы.Здесь, кстати, есть один важный момент: многие админы не заморачиваютсяи разрешают весь DNS-трафик. Этим пользуются некоторые юзверидля получения доступа в Сеть при помощи технологии DNS tunneling. Конечно,итоговая скорость небольшая, но вполне достаточная, чтобы сидетьв аське, писать в твиттер или отдавать команды по SSH. И главное — при этомВыбираем пакеты для установки Captive Portal в Zentyalвезде засветится IP твоей сети, а в логах какие-либо записи о несанкционированнойдеятельности будут отсутствовать, ведь не каждый админ пишетвсе запросы в журнал DNS-сервера. Поэтому лучше строго указать разрешенныесерверы.iptables -I FORWARD -p tcp -s 192.168.1.0/24 -d8.8.8.8/32 -j ACCEPTiptables -I FORWARD -p udp -s 192.168.1.0/24 -d8.8.8.8/32 -j ACCEPTВ принципе, на этот момент ничего особенного нет. Суть Captive Portalзаключается в добавлении нужных правил на лету. Для этого понадобитсяскрипт, который будет получать IP/MAC и передавать их пакетному фильтру.Полностью HTML-страницу приводить здесь нет смысла, поэтому ограничимсяключевыми моментами с нужным функционалом. На странице, кудаперенаправляется пользователь, должен быть следующий код, получающийIP- и MAC-адреса:

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!