Если информация была полезной для вас, вы можете поблагодарить за труды Яндекс деньгами: 41001164449086 или пластиковой картой:

WPA-Enterprise или WiFi по логину и паролю

Проблема безопасности для беспроводных сетей является первоочередной по той причине, что фактически любой желающий имеет доступ к среде распространения сигнала — радиоканалу. Сегодня встретить беспроводную сеть WiFi в которой не применяется шифрование или применяется но уже довольно давно взломанный WEP довольно сложно. Чаще всего используется WPA(2)-PSK или так называемый WPA(2)-Personal, который строиться на всё том-же одном ключе шифрования зная который пользователи и подключаются к сети. Это решение является оптимальным лишь только когда количество беспроводных клиентов достаточно мало. Ведь в случае необходимости смены ключа по какой-то причине (например его кража) его придётся менять и на всех клиентских устройствах, а для большой сети это просто не приемлемо. Ответ вполне очевиден – необходимо использовать аутентификацию оттренированную на каждого пользователя в отдельности, а если говорить по простому то у каждого пользователя должен быть свой логин и пароль. Ведь в случае необходимости его смены (или отключения), это достаточно будет сделать только на единожды (на сервере и клиенте). Вот тут и приходит на помощь WPA-Enterprise ориентированный на беспроводные сети с большим числом беспроводных устройств. Статья в большей степенью является практическим руководством, которое получилось в результате моего желания разобраться с этой темой.

Итак, что нам для этого понадобиться.
Беспроводной клиент (ака ноутбук с WiFi), точка доступа и сервер под управлением Linux c FreeRADIUS.

Протестировано на:
FreeRADIUS 2.1.9
Mandriva free 2010
Dlink DWL-2100AP, DWL-3200AP
WindowsXP professional.

Итак приступим.

1. Установка и первичная настройка FreeRADIUS

Для того чтобы работала WPA-Enterprise (не вдаваясь в подробности далее я буду называть её PEAP) авторизация в системе должны также присутствовать пакеты openssl и openssl-devel. Установим их (или убедимся что они присутствуют):

urpmi openssl
urpmi openssl-devel

Ставить FreeRADIUS будем из сырцов, чтоб разобраться в деталях с его установкой. Качаем от сюда: freeradius.org

После того как скачали и распаковали надо поправить один файл:
/src/main/modules.c
вытащив из ifdef endif

#define lt__PROGRAM__LTX_preloaded_symbols lt_libltdl_LTX_preloaded_symbols


чтобы было определенно наверняка, потому как условие ifdef походу не выполняется.

Если этого не сделать то в процессе компиляции вылезет ошибка. С чем она связана я толком так и не понял, но появляется она в основном в дистрибутивах Ubuntu, хотя на моём дистрибутиве она тоже присутствовала.

По умолчанию всё ставиться в /usr/local. Если необходимо то можно добавить опцию --prefix к ./configure.
Далее всё стандартно:

./configure
make
make install

После того как пакет установлен в систему первым делом необходимо прописать клиентов (здесь под клиентами я подразумеваю устройства на которых производиться авторизация, в нашем случае это тока доступа). Отредактируем файл:

/usr/local/etc/raddb/clients.conf:

client 192.168.22.50 {
secret = test1234
shortname = test_ap
}

Формат довольно простой. shortname – имя которое будет соответствовать клиенту при ведении логов, secret - пароль который указывается в настройках клиента (устройства), client — соответственно ip адрес клиента.
Теперь пропишем пользователей, именно эту связку логин — пароль и будут вводить пользователи для того чтобы присоединиться к беспроводной сети.
Для этого отредактируем файл:
/usr/local/etc/raddb/users

test Cleartext-Password := "test_pass"

Формат записи по сравнению с первой версией FreeRADIUS несколько изменён, но думаю тут всё вполне очевидно. Единственное о чём тут следует упомянуть, так это то что если в имени пользователя присутствуют символы пробела то его имя при записи в файл надо взять в двойные кавычки, например: "test 123".

Теперь необходимо задать тип eap'а по умолчанию, который будет использоваться для авторизации.
Отредактируем файл:
/usr/local/etc/raddb/eap

default_eap_type = peap

После того как предварительная настройка сделана можно запустить сам сервер, дав команду:

radiusd -X

Ключ -X говорит о том что сервер мы будем запускать в режиме отладки и вся информация будет поступать напрямую на экран. Позже я покажу как запустить сервер в фоновом режиме. Но на первом этапе лучше всего запускать в режиме отладки.
Если всё сделано верно то на экране пробегут настройки сервера и он будет ждать поступления на него запросов от точки доступа.
Теперь настроим клиентов (точку доступа) и компьютер конечного пользователя.

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

В моём распоряжении оказалось 2 точки доступа от Dlink это довольно популярная модель DWL-2100AP и её промышленный собрат DWL-3200AP. Забегая вперёд скажу, что обе они прекрасно заработали с FreeRADIUS. С точки зрения настройки RADIUS'а они практически идентичны, да и точки доступа от других производителей не сильно будут отличаться по настройкам. В качестве примера я всё же будут рассматривать DWL-3200AP, поскольку она изначально позиционируется как промышленное решение направленное в первую очередь на корпоративную среду.

В настройках точки доступа необходимо указать ряд параметров относящихся к безопасности:

  • -тип аутентификации: WPA(2*)-Enterprise, WPA(2*)-EAP, WPA(2*)-PEAP
  • - выбор WAP или WPA2 за вами. С одной стороны WPA2 более надёжен с точки зрения безопасности, с другой стороны не все устройства могут его поддерживать и тогда придётся ограничиться обычным WPA. На мой взгляд даже первая версия WPA достаточно безопасна. Но тут выбор за вами.
  • - RADIUS Server: IP адрес компьютера с запущенным RADIUS сервером.
  • - RADIUS Port: Порт по которому работает сервер
  • - RADIUS Secret: Пароль который мы указали в настройках RADIUS'а в /usr/local/etc/raddb/clients.conf


Вот скриншот с примером настройки DWL-3200AP




Этих параметров должно быть достаточно для работы аутентификации по PEAP. Конкретные названия пунктов настройки могут несколько отличаться в зависимости от производителя и конкретной модели устройства, но основная суть я думаю всем понята. Остальные настройки беспроводной точки доступа вы можете настроить по собственному усмотрению.

3. Настройка компьютера пользователя.

Под рукой у меня оказался только нетбук под управлением WindowsXP по этому далее опишу процесс настройки именно под этой ОС.
После того как система найдёт нашу беспроводную сеть, необходимо настроить дополнительные параметры, для чего щёлкним на соответствующий пункт.
Далее в списки сетей выберем необходимую сеть и нажмём на «Свойства»



Убедившись ещё раз что используется требуемая проверка подлинности и шифрования данных перейдём на вкладку «Проверка подлинности».
Тип EAP укажем PEAP, и нажмём на «Свойства». В открывшемся окне выберем в качестве метода проверки EAP-MSCHAP v2, нажмём «Настроить». После чего в вновь открывшемся окне уберём галочку «Автоматически использовать имя входа и пароль Windows...».



Дале Ok Ok Ok ну и т.д.
После того как настроены дополнительные параметры, при попытки подключиться к нашей беспроводной сети Windows предложит щёлкнуть по значку Беспроводного соединения для того чтобы указать учётные данные.



В соответствующих полях введём логин и пароль которые мы указали при настройке FreeRADIUS ранее.
Если всё сделано верно, то в консоле сервера пойдёт информация об авторизации пользователя, и мы подключимся к беспроводной сети.


4. Расширенная настройка FreeRADIUS

Если помните при настройках в свойствах соединения мы убирали галочку «Автоматически использовать имя входа и пароль Windows...», давая тем самым возможность пользователю в ручном режиме ввести имя пользователя и пароль. Но что если упростить задачу для пользователя, и использовать автоматический ввод его учётных данных (т..е. тех которые он использует в Windows локально). При этом в качестве логина и пароля будут использоваться его имя в системе и соответственно его пароль. Но тут возникает небольшая сложность.
Дело всё в том, что в случае использования автоматического имя входа и пароля Windows, серверу RADIUS будет послана связка ИМЯКОМПЬЮТЕРА\\ИМЯПОЛЬЗОВАТЕЛЯ или ИМЯДОМЕНА\\ИМЯПОЛЬЗОВАТЕЛЯ (если компьютер состоит в домене, но этот случай я рассматривать не буду) в качестве его логина ну и конечно его пароль. Можно конечно прописать логины пользователей в FreeRADIUS с учётом имени компьютеров, но это не всегда удобно и как-то не слишком красиво, или если ещё по какой-то причине вам необходимо отбрасывать имя компьютера (название домена) при авторизации то далее я покажу как это сделать.

Для начала поправим главный конфиг /usr/local/etc/raddb/radiusd.conf

proxy_requests = no
$INCLUDE proxy_realm.conf


Именно $INCLUDE proxy_realm.conf заменив этой строчкой $INCLUDE proxy.conf

Создадим файл:
/usr/local/etc/raddb/proxy_realm.conf

realm DEFAULT {
type = radius
authhost = LOCAL
accthost = LOCAL
}
realm LOCAL {
}


Теперь в двух словах о том зачем это сделано. реалм DEFAULT говорит о том что все логины, которые не попали ни в один другой реалм который обрабатывался ранее, будет проверен в RADIUS локально, но уже с отрезанной доменной частью. Для чего также необходимо раскаментировать в файле /usr/local/etc/raddb/sites-available/inner-tunnel в секции authorize {}

ntdomain


Реалм (realm) — это перенаправление, ну или если хотите ссылка. Наверное не совсем понятно, но для настройки вполне достаточно. Более подробно узнать об этом можно пожалуй пожалуй прочитав весь мануал по FreeRADIUS.

Теперь поправим файл
/usr/local/etc/raddb/modules/mschap

mschap {
use_mppe = yes
require_encryption = yes
require_strong = yes
with_ntdomain_hack = yes
}


Особое внимание следует уделить строчке with_ntdomain_hack = yes Дело в том что как уже было отмечено ранее MS Windows посылает связку ИМЯДОМЕНА\\ИМЯПОЛЬЗОВАТЕЛЯ а в ответ (challange responce) получает только ИМЯПОЛЬЗОВАТЕЛЯ. Но это уже тонкости. Кто хочет разобраться — гугл в помощь :)
Теперь опять запустим наш сервер в режиме отладки:

radiusd -X

Теперь, если всё было сделано верно, то какие бы данные мы не вводили в поле домен (для проверки) они автоматически должны отбрасываться и процесс авторизации должен проходить успешно, разумеется при правильном логине и пароле.

Теперь в /usr/local/etc/raddb/users можно прописать имена пользователей и их пароли которыми они пользуются в Windows. Также как я думаю уже всем понятно требуется вернуть назад галочку «Автоматически использовать имя входа и пароль Windows...» в настройках беспроводного соединения.
Честно говоря в моём случае было необходимо только отбрасывать имя домена при авторизации, и по этому как себя поведёт система в случае если скажем в качестве имени пользователя на компьютере используется кириллица я не знаю. Однако даже если нет необходимости отбрасывать доменную составляющую, то всё равно рекомендую настроить файлы конфигураций то как это показано выше.

5. Запуск FreeRADIUS в фоновом режиме и автозапуск

Mandriva как например Fedora (до недавнего времени) да и многие другие дистрибутивы используют System-V систему загрузки. После установки в системе уже присутствует вполне рабочий скрипт запуска по адресу: /usr/local/sbin/rc.radiusd. И в принципе чтоб запустить сервис в нормальном режиме достаточно дать команду:
/usr/local/sbin/rc.radiusd start

Однако по скольку в моём случае дистрибутив Mandriva, с его System-V системой загрузки, то скрипт необходимо несколько модифицировать чтоб он в полной мере соответствовал формату chkconfig. Для этого в самое начало скрипта добавляем строки:

#!/bin/sh
# My script to add FreeRadius to services
# chkconfig: - 98 02
# description: FreeRADIUS
# processname: radiusd

# Source function library.
if [ -f /etc/init.d/functions ] ; then
. /etc/init.d/functions
elif [ -f /etc/rc.d/init.d/functions ] ; then
. /etc/rc.d/init.d/functions
else
exit 0
fi


После того как наш скрипт стал полностью соответствовать необходимому формату скопируем его в папку с исполняемыми скриптами попутно переименовав его:

cat /usr/local/sbin/rc.radiusd >> /etc/rc.d/init.d/radius_server

Переименовать файл пришлось из-за того что по непонятным мне причинам chkconfig не воспринимает точек в именах файлов. Да и не забываем поставить права доступа в 755 для вновь скопированного скрипта.
Теперь дадим команды для того чтоб добавить его в список сервисов и добавим его в автозапуск на 3-тем и 5-том уровнях запуска:

chkconfig --add radius_server
chkconfig --level 35 radius_server on

Для того чтоб лишний раз убедиться что всё работает так как надо можно перезагрузить сервер и проверить в процессах radiusd, командой:

ps axuf

Для того кого интересуют более подробная информация могу посоветовать прочитать соответсвующие мануалы и статью:
www.ixbt.com/comm/prac-wpa-eap.shtml

В конце хочу ещё раз напомнить о том что не взламываемых систем не бывает, и даже WPA2 в этом смысле не исключение, однако его взлом на момент написания этих строк действительно сложная задача (смайл).

Добавить комментарий


Если информация была полезной для вас, вы можете поблагодарить за труды Яндекс деньгами: 41001164449086 или пластиковой картой: