Назад в библиотеку

Wi-Fi с логином и паролем для каждого пользователя или делаем WPA2-EAP/TLS подручными средствами

Автор: Валентин (vvpoloskin)
Источник: Wi-Fi с логином и паролем для каждого пользователя или делаем WPA2-EAP/TLS подручными средствами / Хабрхабр. [Электронный ресурс]. – Режим доступа: https://habrahabr.ru/post/170949/


С практической точки зрения было бы удобно управлять Wi-Fi сетями, выдавая пароль каждому пользователю. Это облегчает задачу с доступом к вашей беспроводной сети. Используя так называемую WPA2 PSK авторизацию, чтобы предотвратить доступ случайному пользователю, нужно менять ключ, а также заново проходить процесс авторизации на каждом отдельном Wi-Fi устройстве. Кроме того, если вы имеете несколько точек доступа, ключ нужно менять на всех из них. А если Вам надо скрыть пароль от кого-нибудь, придется раздать всем сотрудникам новый. Представим ситуацию — к вам в офис зашел кто-то посторонний (клиент, контрагент?), и нужно дать ему доступ в интернет. Вместо того, чтобы давать ему WPA2 — ключ, можно сделать для него отдельный аккаунт, который потом, после его ухода, можно удалить заблокировать. Это даст вам гибкость в управлении учетками, а пользователи будут очень довольны. Мы сделаем удобную схему, применяемую в корпоративных сетях, но полностью из подручных средств с минимальными финансовыми и аппаратными вложениями. Ее одобрит служба безопасности и руководство.

Немного теории

Когда-то давно инженерами IEEE был придуман стандарт 802.1x. Этот стандарт отвечает за возможность авторизации пользователя сразу при подключении к среде передачи данных. Иными словами, если для соединения, например, PPPoE, вы подключаетесь к среде(коммутатору), и уже можете осуществлять передачу данных, авторизация нужна для выхода в интернет. В случае же 802.1x вы не сможете делать ничего, пока не авторизуетесь. Само конечное устройство вас не допустит. Аналогичная ситуация с Wi-Fi точками доступа. Решение же о допуске вас принимается на внешнем сервере авторизации. Это может быть RADIUS, TACACS, TACACS+ и т.д.

    Терминология

Вообще авторизация пользователя на точке может быть следующих видов:

А теперь рассмотрим варианты того, как точка доступа узнает сама, можно ли предоставлять пользователю доступ к сети или нет:

Также существует довольно большое количество способов соедининея конечного устройства к серверу авторизации (PEAP, TLS, TTLS...). Я не буду их здесь описывать.

    Общая схема сети

Для наглядного понимания приведем общую схему работы нашей будущей схемы:

pic1

Если словами, то клиенту, при подключении к Wi-Fi — точке предлагается ввести логин и пароль. Получив логин и пароль Wi-Fi точка передает эти данные RADIUS-серверу, на что сервер отвечает, что можно делать с этим клиентом. В зависимости от ответа, точка решает, дать ему доступ, урезать скорость или что-то еще.

За авторизацию пользователей будет отвечать наш сервер с установленным freeradius. Freeradius является реализацией протокола RADIUS, который в свою очередь является реализацией общего протокола AAA. AAA — это набор средств для осуществления следующих действий:

Сам протокол передает имя пользователя, список атрибутов и их значений для него. То есть, например, атрибут Auth-Type := Reject — отклонить этого клиента, а Client-Password == «password» — сравнить атрибут в запросе со значением password. Вообще говоря, база аккаунтов и прав для них не обязательно должна храниться на RADIUS-сервере, да и базой может быть что угодно — никсовые пользователи, пользователи домена Windows… да хоть текстовый файлик. Но в нашем случае все будет в одном месте.

Базовая настройка

В этой статье нас будут интересовать в первую очередь WPA2-EAP/TLS способ авторизации. Практически все современные точки доступа Wi-Fi стоимостью больше 3 тыс. рублей поддерживают нужную нам технологию. Клиентские устройства поддерживают и подавно. В статье я буду использовать следующее оборудование и програмное обеспечение:

    Настройка точки доступа

Главное, чтоб точка поддерживала нужный способ аутентификации. Оно может называться по разному в разных устройствах: WPA-EAP, WPA2 Enterprise и т.д. Во всяком случае выбираем аутентификацию, устанавливаем IP-адрес и порт RADIUS-сервера и ключ, который мы вводили в clients.conf при настройке Freeradius. Приведу картинку с настроенной точки Ubiquiti. Помечено галкой то, что нужно менять.

pic2

    RADIUS-сервер

Зайдем на наш компьютер с Linux и установим RADIUS-сервер. Я брал freeradius, и ставил я его на gentoo. К моему удивлению, в рунете нет материалов, относящихся к настройке Freeradius 2 для наших целей. Все статьи довольно стары, относятся к старым версиям этого програмного обеспечения.


root@localhost ~ # emerge -v freeradius

Все. RADIUS-сервер уже может работать. Вы можете проверить это так:


root@localhost ~ # radiusd -fX

Это debug-mode. Вся информация вываливается на консоль. Приступем к его настройке. Как это водится в Linux, настройка выполняется через конфигурационные файлы. Конфигурационные файлы хранятся в /etc/raddb. Сделаем подготовительные действия — скопируем исходные конфиги, почистим конфигурация от всякого мусора.


root@localhost ~ # cp -r /etc/raddb /etc/raddb.olg
root@localhost ~ # find /etc/raddb -type f -exec file {} \;  | grep 'text' | cut -d':' -f1 | xargs sed -i '/^ *\t* *#/d;/^$/d'

Далее добавим клиента — точку доступа. Добавляем в файлик /etc/raddb/clients следующие строки:


root@localhost ~ # cat /etc/raddb/clients.conf | sed '/client test-wifi/,/}/!d'
client test-wifi {
        ipaddr = 192.168.0.1 #IP адрес точки, которая будет обращаться к радиусу
        secret = secret_key #Секретный ключик. Такой же надо будет поставить на Wi-Fi точке.
        require_message_authenticator = no  #Лучше так, с каким-то D-Linkом у меня не получилось иначе
}

Далее добавляем домен для пользователей. Сделаем дефолтовый.


root@localhost ~ # cat /etc/raddb/proxy.conf | sed '/realm DEFAULT/, /^}/!d'
realm DEFAULT {
        type = radius
        authhost = LOCAL
        acchost = LOCAL
}

И, наконец, добавляем пользователей в файл /etc/raddb/users:

root@localhost ~ # cat /etc/raddb/users | sed '10,$!d'
user1 Cleartext-Password := "password1"
user2 Cleartext-Password := "password2"
user3 Cleartext-Password := "password3"

Ух, можно стартовать!


root@localhost ~ # radiusd -fX

Наш сервер запущен и ждет подключений!

    Настройка клиентов

Пробежимся по настройке основных пользовательских устройств. У наших сотрудников есть клиенты, работающие на Android, iOS и Windows 7. Оговоримся сразу: так как мы используем самосозданные сертификаты, то нам нужно несколько раз вносить всевозможные исключения и подтверждать действия. Если бы мы пользовали купленные сертификаты, возможно, все было бы проще.

Всех проще дело обстоит на iOS-устройствах. Вводим логин и пароль, нажимаем «Принять сертификат», и вперед.

Чуть сложнее выглядит, но на практике все тоже просто на Android. Там немного больше полей для ввода.

Ну и на Windows 7 приедтся немного понастраивать. Осуществим следующие шаги:

  1. Идем в центр беспроводных подключений.
  2. Устанавливаем необходимые параметры в свойствах Вашего беспроводного подключения.
  3. Устанавливаем необходимые параметры в расширенных настройках EAP.
  4. Устанавливаем необходимые параметры в расширенных настройках Дополнительных параметрах.
  5. Подключаемся в панели задач к Wi-Fi сети и вводим логин-пароль, наслаждаемся доступом к Wi-Fi.