Библиотека сайта rus-linux.net
Проект выходного дня: настраиваем в Linux безопасное гостевое подключение по Wi-Fi
Оригинал: "Weekend Project: Set Up Safe Guest Wi-Fi with Linux"Автор: Nathan Willis
Дата публикации: December 10, 2010
Перевод: Н.Ромоданов
Дата перевода: январь 2011 г.
Приближаются праздники (обратите внимание на дату создания оригинала этой статьи) и вы знаете, что это значит: ваши родственники захотят использовать ваш WiFi. Если вы хотите найти решение, лежащее где-то посередине между "запустить открытую незащищенную точку доступа" и "раздать ваш пароль WPA2 тем, кто записывает подобные вещи на клочках бумаги", вариант с настройкой Captive Portal-а может оказаться удобным решением.
blockqoute>Прим. редактора: Captive Portal (кэптив портал, каптив портал) позволяет создать публичную сеть на одном из интерфейсов брандмауэра, что позволяет реализовать общественную точку беспроводного доступа - хотспот или зону общественного доступа, например, в библиотеках. При первой попытке выхода в Интернет из публичной зоны Captive Portal отображает специальную web-страницу, на которой обычно находятся правила пользования, с которыми нужно ознакомиться перед тем, как будет разрешён доступ в сеть. Captive Portal также позволяет использовать внешний сервер RADIUS для аутентификации клиентов перед тем, как предоставить доступ в Интернет. См. также здесь.
blockqoute>Есть несколько Captive Portal-ов с открытым исходным кодом, которые вы можете выбрать для своей машины с Linux. Среди них - NoCat, HotSpotPA, PacketFence и ChilliSpot. Однако, если у вас нет времени для изучения всех возможностей и вариантов, лучшим выбором будет, вероятно, WiFiDog поскольку это простое и активно разрабатываемое решение. WiFiDog будет работать на любом дистрибутиве Linux и он также присутствует в качестве дополнительного пакета в большинстве встроенных Linux-маршрутизаторов (например, в OpenWRT и DD-WRT).
Очевидно, что задачи, которые выполняются пакетом Captive Portal-а, зависят от того, есть ли на машине два (или больше) сетевых интерфейса. Портал перехватывает подключения, поступающие на интерфейс, для которого заданы ограничения, выполняет некоторую проверку подлинности, а затем осуществляется перенаправление трафика на интерфейс, на котором ограничения отсутствуют, причем независимо от того, используется доступ к локальной или глобальной сети. Каноническая схема настройки точно такая, как для обычного маршрутизатора. Ограничения устанавливаются для интерфейса с Wi-Fi, а маршрутизация и подключение к интернету без всяких ограничений осуществляется через интерфейс к WAN. Прочие проводные интерфейсы, имеющиеся на маршрутизаторе, как правило, в схеме не используются, поскольку программы портала не слушают их и не ограничивают к ним доступ.
Но необходимости в специализированном маршрутизаторе нет; с той же самой настройкой все будет работать так же хорошо, если вы установите карту Wi-Fi в обычный сервер с Linux. Вам также необязательно блокировать сеть Wi-Fi со всеми вашими посетителями: если ваш маршрутизатор допускает с помощью "виртуальных интерфейсов" одновременную работу с несколькими SSID, то вы просто указываете, какой интерфейс будет использоваться для Captive Portal-а, а какие интерфейсы для него использоваться не будут.
Базовый вариант WiFiDog содержит в себе два компонента: шлюз, который прослушивает запросы на подключение клиентов, и сервер аутентификации, который одобряет подключение клиентов и поддерживает активные соединения. На полноценной машине, на которой работает Linux, вы можете запустить обе программы, но у встроенного маршрутизатора, как правило, достаточно ресурсов для запуска на нем лишь шлюза; сервер аутентификации вам придется запускать на другой машине.
Когда WiFiDog будет действительно использоваться, пользователям нужно будет создавать "учетные записи" с использованием их уникальных адресов электронной почты. Когда пользователи посещают шлюз Wi-Fi, они могут на странице входа в шлюз либо войти с использованием уже существующей учетной записи, либо создать новую учетную запись и временно получить доступ к сети, чтобы они могли проверить свою электронную почту в ранее зарегистрированном почтовом ящике. Когда делается попытка войти в систему через шлюз, шлюз перенаправляет запрос к серверу аутентификации, если полномочия подтверждены, то шлюз и сервер обмениваются зашифрованными данными и новому клиенту предоставляется трафик. Может показаться странным, но поскольку обмен зашифрованными данными между клиентом и шлюзом никогда не происходит, WiFiDog может использоваться для доступа с самого широкого спектра устройств в отличие от случаев, когда используется система, в которой от клиента требуется загружать сертификат SSL или в течение всей сессии постоянно использовать JavaScript.
Инсталляция и настройка: Шлюз
Пакет со шлюзом доступен как часть проекта WiFiDog в виде архива с исходными кодами, хотя если вы устанавливаете шлюз на сервере или на настольном компьютере, вы можете поискать его с помощью системы управления пакетами, имеющейся в вашем дистрибутиве. Если вы намереваетесь запустить шлюз на маршрутизаторе с Linux, вам лучше всего ознакомиться с инструкциями, прилагаемыми к используемой прошивке, но вы, скорее всего, обнаружите предварительно скомпилированные двоичные модули или пакеты, входящие в состав стандартной поставки.
Впрочем, для всех остальных случаев легко откомпилировать исходный код, поскольку в нем используются стандартные в Linux функции netfilter и iptables. Просто распакуйте исходный код, с помощью команды cd перейдите в директорий, а затем выполните трехшаговую операцию ./autogen.sh; make; sudo make install
.
В результате будет создан двоичный пакет wifidog, а в директории /etc/wifidog.conf будет создан шаблон конфигурационного файла. Откройте конфигурационный файл и отредактируйте его так, как считаете нужным; в созданном файле в блоках комментариев приведена документация по каждому из параметров, так что этот файл сравнительно легко читать и можно правильно задать настройки. Наиболее важными параметрами являются GatewayID, ExternalInterface, GatewayInterface и AuthServer.
Параметр GatewayID является именем, которое вы назначаете этому конкретному узлу, например, MyHomeWifi. WiFiDog поддерживает централизованное администрирование нескольких шлюзов, которым нужно задавать различные имена, но если у вас только один шлюз, просто выберите имя и запомните его. Параметры ExternalInterface и GatewayInterface указывают на интерфейс, смотрящий в интернет, и интерфейс шлюза, соответственно. В обычных случаях вы должны в качестве ExternalInterface использовать eth0 (проводной Ethernet-интерфейс), и wlan0 (беспроводная сетевая карта) - в качестве GatewayInterface.
Параметр AuthServer представляет собой блок, описывающий сервер аутентификации, с которым должен связываться данный шлюз при авторизации новых клиентов. Можно использовать несколько блоков AuthServer; опять же это то, что позволяет пользоваться настройками, находящимися в сети в разных местах, — шлюз будет обращаться к ним последовательно до тех пор, пока не получит ответ. Пример блока выглядит следующим образом:
AuthServer { Hostname mylocalserver.lan SSLAvailable yes Path /wifidog/ }
Здесь указывается, что шлюз взаимодействует с сервером аутентификации по ссылке https://mylocalserver.lan/wifidog/. Вы можете различными способами указывать адреса URI, используемые для доступа к серверу аутентификации, в том числе указать путь к скрипту регистрации пользователя и станицу, сообщающую об успешном подключении. Настроек, заданных по умолчанию, как правило, достаточно, если, конечно, у вас на сервере уже не используется сложная система конфигурирования Apache.
В конфигурационном файле вы также можете задавать тайм-ауты и интервалы отсылки пингов вида "keepalive" ("я живой"), определять базовые правила брандмауэра и указывать списки клиентов, которые будут сразу без каких-либо проблем автоматически подключаться к интернету (параметр TrustedMACList), а также определить свою собственную главную страницу портала. Когда файл будет настроен, сохраните его, а затем с помощью команды sudo wifidog -f -d7
запустите сервис шлюза. Параметр -f
указывает, что сервис будет исполняться не в фоновом режиме, а параметр -d7
устанавливает режим с максимальной выдачей сообщений — таким образом вы сможете отловить все проблемы. В реальных условиях эксплуатации вам не следует указывать эти параметры и wifidog будет работать в режиме демона.
Инсталляция и настройка: Сервер аутентификации
На сервере аутентификации вам потребуется выполнить больше настроек и установить дополнительные пакеты: вам потребуется Apache, PHP, PostgreSQL и около десятка дополнительных пакетов для PHP. Большинство из них обычные, такие как xmlrpc и mhash, но некоторые из них специализированные, например, Auth_RADIUS. Текущий список требований можно получить из официальной документации. Согласно официальной документации рекомендуется также увеличить объем памяти, указываемый в файле php.ini, по крайней мере, до 32 Мб.
После того, как дополнительные пакеты будут установлены, вся остальная настройка выполняется сравнительно просто. Скачайте и распакуйте исходный код, разместите его в любом удобном месте, например, в вашем директории DocumentRoot. Это директорий должен быть доступен для других машин по URL, который вы укажите на шлюзе в конфигурационном файле /etc/wifidog.conf; в нашем примере - http://mylocalserver.lan/wifidog/. Когда вы перейдете страницу http://mylocalserver.lan/wifidog/install.php, вас поприветствует мастер установки сервера аутентификации.
Используемый в настоящее время инсталлятор может проверять зависимости пакетов с тем, чтобы вы были уверены, что пользуетесь правильными версиями PHP и PostgreSQL, но он не создает для вас базу данных PostgreSQL. Приводятся только объяснение того, как это сделать, в том числе и примеры пошаговых команд, создающих пользователя базы данных "wifidog", а затем — самой базы данных и таблиц. На этапе проверки правильности пакетов по отдельности проверяется правильность версии библиотек PHP и правильность прав доступа к файлам. Наконец, вам будет предложено загрузить схему базы данных и создать учетную запись администратора. После этого, удалите файл install.php.
Настройка сервера аутентификации выполняется с помощью редактирования файла config.php, расположенного в директории wifidog. Как и в случае со шлюзом, для каждого параметра есть примеры и документы с комментариями. В самом начале указываются обычные настройки базы данных (имя хоста, пользователь базы данных), которые вы, возможно, захотите изменить. Ниже, в разделе "WiFiDog Basic Configuration" ("Базовая конфигурация WiFiDog"), есть несколько параметров, связанных с Google Maps и другими украшательствами; в большинстве случаев вы можете оставить их без изменений.
Управление шлюзом
Когда сервер будет запущен и заработает, подключитесь к основному URL (но не через ваш шлюз Wi-Fi). Вы должны увидеть страницу входа в WiFiDog. Здесь вам следует ввести учетную запись администратора, которую создали ранее. Вы получите доступ к инструментальным средствам управления через веб интерфейс. Когда вы подключаетесь первый раз, никаких настроек не будет, поэтому вам нужно будет начать с создания "сети" в меню сетевого администрирования Network administration.
В простом случае (один сервер аутентификации и один шлюз), вы можете назначить сети любое легко запоминающееся имя, например, MyBasicNetwork (моя основная сеть). По умолчанию, WiFiDog для аутентификации пользователей использует учетную запись электронной почты. Если вы не хотите его использовать, вы можете выбрать в разделе "Network authentication" ("Сетевая аутентификация") другой метод аутентификации. Параметр "Validation grace period" ("Время отсрочки проверки") предоставляет вновь вошедшему в систему пользователю время, в течение которого он может проверить наличие новых сообщений в его электронной почте (по умолчанию это - 20 минут).
После того, как ваша новая сеть будет определена, добавьте к сети ваш шлюз, выбрав для этого в меню "Node administration" ("Администрирование узлов сети") вариант "Add Node" ("Добавить узел"). Идентификатор узла Node ID, который вы вводите, должен быть именем узла, который вы создали на шлюзе в файле wifidog.conf: в файле на шлюзе он называется GatewayID (проблема несоответствия является проблемой WiFiDog, а не вашей проблемой); в нашем примере используется идентификатор MyHomeWifi. Сохраните ваши настройки, и клиенты смогут подключаться через шлюз, используя для этого правила, которые вы указали для сети MyBasicNetwork. Здесь снова возможность WiFiDog, позволяющая удаленно управлять несколькими узлами в нескольких сетях, обеспечит большую гибкость при использовании распределенной системы, даже если это кажется излишним в случае наличия только одной точки доступа.
Теперь, находясь в административном интерфейсе, вы можете видеть, с какими учетными записями осуществляется вход в сеть, проверять возникающую при этом нагрузку на сеть, пользоваться сетевыми графиками и проверять регистрационные журналы. Вы также можете управлять учетными записями пользователей в случаях, если обнаружили какие-либо необычные действия, которые не ожидали видеть, либо подозрительную активность при создании учетных записей.
Дополнительные возможности: Дополнительная бдительность
Процедура, описанная выше, сама по себе не защитит вас от проникновения злоумышленников; мы просто создали обычный шлюз, на котором нет каких-либо ограничений по сервисам. Чтобы защитить вашу локальную сеть от проникновения в нее посетителей, зашедших через точку доступа, вам потребуется принять дополнительные меры, начиная с записи правил брандмауэра в файле wifidog.conf на шлюзе. Вы можете пользоваться обычными схемами фильтрации пакетов iptables, которые поддерживаются в Linux, так что вы можете настраивать правила, блокирующие трафик Bittorrent, ограничивать доступ к определенным адресам IP и делать многое другое. В файле wifidog.conf есть примеры с подробными комментариями, либо вы можете получить подсказку из любых инструкций HOWTO, относящихся к iptables.
И, все же, кроме всего этого, на вас все равно лежит ответственность следить за тем, кто подключается к сети. Выявление и блокирование недобросовестных посетителей отнюдь не простая задача и, в целом, одна из проблем Wi-Fi состоит в том, что злоумышленники могут перехватывать сигнал, считывать аутентификационный IP и адреса MAC и, подменив пакеты, имитировать вошедшего в систему клиента. Так что, как это обычно рекомендуется, когда речь идет о безопасности вашего Captive Portal-а WiFiDog, вы не можете сделать его более безопасным, чем это уже есть по умолчанию. Просто следите за тем, чтобы посетитель не заходил слишком далеко, и открывайте дополнительные порты только тогда, когда это потребуется вашим родственникам.