Существует добрая сотня статей о небезопасности беспроводных. Причём многие совершенно идентичны и бесполезны: в них говорится о том, что WEP-это плохо, что MAC-адреса подменяются легко, и в заключение пишется: "Есть единственный выход и спасение. Нужно использовать WPA." И точка. Данный материал содержит именно то, что вы хотели бы услышать после "точки" - практическое руководство по организации хорошо защищённой беспроводной сети с использованием беспроводного оборудования D-Link. Сразу хотелось бы отметить, что предложенное решение является довольно сложным и применять его следует только в тех случаях, когда в сети содержится дейтвительно конфиденциальная информация, утечка которой может привести к серьёзным последствиям. Во всех других случаях будет достаточно включённого WEP-шифрования.
.:: intro
На сегодняшний день становится очевидным, что, не смотря на все проблемы, связанные c безопасностью, надёжностью и простотой эксплуатации, беспроводные сети 802.11a/b/g всё же стали неотъемлемой частью сетевой инфраструктуры многих корпоративных и домашних сетей. Отчасти это произошло, потому что большинство этих проблем на современном этапе развития Wi-Fi ушли в прошлое. Беспроводные сети во всех отношениях стали намного умнее и быстрее: появился QoS, интеллектуальные антенны (технология MIMO), реальные скорости достигли 40Мбит/c (например, технологии SuperG, SuperAG от Atheros). Кроме этого большие изменения произошли и в наборе технологий, обеспечивающих безопасность беспроводных сетей. Об этом поговорим более подробно.

DWL-3200AP
Во времена, когда Wi-Fi был только для избранных, для защиты
беспроводных сетей использовалось WEP шифрование и MAC-фильтры. Всего
этого быстро стало не хватать, WEP признали небезопасным из-за
статичности ключей шифрования и отсутствия механизмов аутентификации, а
mac-фильтры особой безопасности тоже не придавали. Стали разрабатывать
новый стандарт IEEE 802.11i, который был призван решить все проблемы
безопасности беспроводных сетей. На полпути к 802.11i появился набор
технологий под общим названием WPA - часть ещё не готового стандарта
802.11i. WPA включает в себя средства для аутентификации пользователей,
шифрование при помощи динамических WEP ключей (TKIP/MIC). Затем 802.11i
наконец то закончили и на свет появился WPA2. Ко всему
вышеперечисленному добавилась поддержка более стойкого шифрования AES
(Advanced Encryption Standard), которое работает совместно с протоколом
безопасности CCMP (Counter with Cipher Block Chaining Message
Authentication Code Protocol - это более совершенный аналог TKIP в WPA).
WPA2 постепенно стал появляться в новых моделях точек доступа
(например, D-Link DWL-3200AP), но пока это скорее экзотика. Все продукты
поддерживающие WPA2 обратно совместимы с оборудованием поддерживающим
WPA.
И WPA и WPA2 включают в себя развитые средства контроля доступа к
беспроводной сети на основе стандарта IEEE 802.1x. В архитектуре 802.1x
используется несколько обязательных логических элементов:
- Клиент.
(В роли клиента выступает Supplicant - программа на клиентском компьютере управляющая процессом аутентификации)
-
Аутентификатор.
( Это точка доступа, которая выполняет функции посредника между клиентом
и сервером аутентификации (аутентификатором может быть и проводной
коммутатор, т.к. 802.1x используется и в проводных сетях).
- Сервер аутентификации.(В роли сервера аутентификации выступает RADIUS-сервер).
-
удаляем всё содержимое папки
/certs
-
находясь в этой же папке, даём команду
openssl
gendh > dh
- создаётся файл
dh
-
там же даём команду
dd if=/dev/random of =random count=2
- создаётся файл
random
-
создаём папку
/raddb/sample
и переносим в неё из
raddb
все файлы с раширением
.sample
.
Из /sample обратно в /raddb копируем с изменением имени, убирая расширение .sample , файлы: acct_users, clients.conf, dictionary, eap.conf, hints, huntgroups, preproxy_users, proxy.conf, radiusd.conf, snmp.conf, sql.conf, users. *
*На самом деле многие из этих файлов не используется, но в radiusd.conf содержатся на них ссылки, поэтому чтобы не тратить время на удаление всех ненужных ссылок и ненужных файлов, копируем всё, что я перечислил).
-
правим следующие конфигурационные файлы:
clients.conf
client 192.168.0.220 { #ip адрес точки доступа
secret = 12345 #секретное слово, которое задаётся на точке доступа
shortname = D-Link_DWL-2100AP
nastype = other }
#Если точек несколько, все их вносим в эту секцию конфига
client 192.168.0.219 { #ip адрес точки
secret = 54321 #секретное слово
shortname = D-Link_DWL-2700AP
nastype = other }
# и т.д.eap.conf
# В самом начале, после " eap {"
default_eap_type = tls
tls {
private_key_password = whatever
private_key_file = ${raddbdir}/certs/cert-srv.pem
certificate_file = ${raddbdir}/certs/cert-srv.pem
CA_file = ${raddbdir}/certs/demoCA/cacert.pem
dh_file = ${raddbdir}/certs/dh
random_file = ${raddbdir}/certs/random
fragment_size = 1750
}radiusd.conf
bind_address = 192.168.0.222
port = 1812
log_auth = yes # это для отладки, для статистики
log_auth_badpass = yes
log_auth_goodpass = yes
На этом настройка RADIUS'a завершена.
.:: Настройка точек доступа
Для построения беспроводной сети мы будем использовать несколько точек доступа D-Link DWL-2100AP и одну более мощную точку D-Link DWL-2700AP. Это сертифицированные точки доступа стандарта 802.11b/g (до 54Mbps), в них реализована полная поддержка WPA (впрочем, как и во всех остальных точках доступа D-Link). Во всех точках используются последние прошивки, которые можно загрузить отсюда ftp://ftp.dlink.ru/pub/Wireless.
DWL-2700AP
DWL-2100AP
DES-1316
DES-1526Для начала, несколько слов о настройке беспроводной сети, а затем приведем пример конфигурирования D-Link DWL-2100AP для обеспечения взаимодействия с сервером RADIUS.
Внутриофисная беспроводная сеть обычно состоит из нескольких точек доступа (всё покрытие разбивается на небольшие ячейки), которые подключены к проводному коммутатору. Часто для построения WLAN используются коммутаторы со встроенной поддержкой Power over Ethernet (802.3af) на портах (например, D-Link DES-1316 или D-Link DES-1526). При помощи них удобно подавать питание на точки доступа, разбросанные по офису.* Находящиеся рядом точки настраиваются на не пересекающие каналы диапазона, для того чтобы они не создавали друг для друга помех. В диапазоне 2.4ГГц, в котором работает оборудование 802.11b/g, доступно 3 не пересекающихся канала для оборудования, в котором 11 каналов, и 4 не пересекающихся канала для оборудования, в котором можно выбрать 13 каналов (широкополосный сигнал точки доступа занимает 3 канала диапазона). Точки доступа D-Link DWL-2100AP и DWL-2700AP можно настроить на любой из 13 каналов, кроме того можно включить функцию автоматической настройки на свободный канал. Так мы и сделаем.
* Да и не только на точки доступа, а также на сетевые камеры, коммутаторы, IP-телефоны и т.д.
Если в сети есть мобильные абоненты, которые перемещаются по всей зоне покрытия, можно задать всем точкам одинаковое имя беспроводной сети - SSID, тогда абонент будет автоматически подключатся к новой точке, при потере соединения с предыдущей. При этом он будет проходить повторную аутентификацию, которая в зависимости от супликанта будет занимать от нескольких секунд и более. Так реализуется самый простой неинтеллектуальный роуминг внутри сети. Ещё один вариант: если у каждой точки свой SSID, то можно настроить несколько профилей беспроводной сети в свойствах беспроводного подключения и там же отметить опцию "подключатся к любой доступной сети". Таким образом при потере соединения, клиент будет подключатся к новой точке.
Настраиваем DWL-2100AP на взаимодействие с RADIUS'ом:
-
Заходим на WEB-интерфейс точки доступа (как это сделать написано в
инструкции к точке), сразу меняем пароль по умолчанию на вкладке
TOOLS/ADMIN/.
-
На вкладке HOME/LAN назначаем точке доступа IP-адрес, который задали в clients.conf: 192.168.0.220
рис.2 Присваиваем D-Link DWL-2100AP IP-адрес, отличный от адреса по умолчанию
-
На вкладке HOME/WIRELESS, делаем всё как показано на рисунке 2; в поле
RADIUS secret указываем пароль, который соответствует данной точке в
clients.conf (мы указали "12345")
рис. 3 Настраиваем D-Link DWL-2100AP на взаимодействие с RADIUSОстальные точки доступа настраиваются аналогичным образом, только у них будут другие IP адреса, каналы (если они задаются вручную), а также RADIUS secret.
.:: Создание сертификатов
Для начала скажем несколько общих слов о том, что такое PKI. Это некая инфраструктура, каждый субъект которой обладает уникальным цифровым сертификатом, удостоверяющим его личность. Помимо прочего, цифровой сертификат содержит секретный ключ. Закодированные с его помощью сообщения можно расшифровать, зная соответствующий открытый ключ. И наоборот - сообщения, зашифрованные открытым ключом, можно расшифровать только при помощи секретного ключа. Каждый субъект PKI обладает открытым и секретным ключом.
Субъектом PKI может быть как пользовательский компьютер или КПК, так и любой другой элемент сетевой инфраструктуры - маршрутизатор, web-сервер, и даже сервер RADIUS, что и имеет место в нашем случае. Во главе всей этой системы стоит главный орган CA (Certificate Autority), предполагается, что ему все доверяют и его все знают - он занимается подписью сертификатов (удостоверяет, что предъявитель сертификата действительно тот за кого себя выдаёт). Ему помогают специальные службы по приёму запросов на сертификаты и их выдаче; номера всех выданных и отозванных сертификатов хранятся в специальном реестре. В реальности всё это вроде бы большое хозяйство умещается на одном компьютере, и с ним легко управляется один человек.*
*Описанная структура является простейшим вариантом PKI; возможны также более сложные структуры, в которых участвует более одного CA, между которыми устанавливаются сложные иерархические доверительные отношения.Для создания сертификатов, мы будем использовать скрипты, которые идут в комплекте с FreeRADIUS:
-
для начала создадим свой CA - для этого надо будет сгенерировать
цифровую подпись, которой будут подписываться все выданные им
сертификаты, а так же открытый ключ.
-
затем создадим серверный сертификат, установим его на RADIUS
-
и в заключении сгенерируем сертификаты для установки на клиентские компьютеры
Создаём директорию /usr/local/etc/raddb/CA , копируем туда из папки /usr/ports/net/freeradius/work/freeradius-1.0.2/scripts/ файл CA.all и файл xpextensions . CA.all - интерактивный скрипт, создающий CA, клиентский и серверный сертификаты. Xpextensions - файл содержащий специальные ключи Microsoft "Extended Key Usage" - они необходимы для того чтобы EAP-TLS работал с Windows-системами.
Открываем файл CA.all
-
в строке 1 исправим путь - она должна выглядеть так:
SSL=/usr/local/openssl
-
в строке 32 исправим путь - она должна выглядеть вот так:
echo "newreq.pem" | /usr/local/openssl/ssl/misc/CA.pl -newcaКопируем CA.all в файл СA_users.all . Затем открываем последний и оставляем текст с 48 строки по 64-ю, остальные строки удаляем - оставшееся - это секция CA.all , в которой генерируются клиентские сертификаты. Она будет многократно использоваться, поэтому её удобно выделить в отдельный скрипт. Открываем CA.all , удаляем из него строки с 48- по 64-ю - всё то, что выделили в отдельный скрипт и сохраняем его.*
*Примечание: файлы CA.all и CA_users.all - содержат секретную фразу-пароль "whatever", которая используется как дополнительное средство обеспечения безопасности, при эмиссии сертификатов и их отзыве. Человек, не знающий эту фразу не сможет ни подписать, ни отозвать сертификат. В принципе, кроме оператора CA, она больше никому не понадобится. Для повышения безопасности, нужно заменить все встречающиеся в скрипте CA.all и CA_users.all слова "whatever" на придуманный вами пароль. Его также нужно будет вписать в eap.conf в строку private_key_password = whatever.
Далее я предполагаю, что мы оставили везде пароль " whatever " без изменений. Его то и будем вводить создавая клиентские, серверные сертификаты, а также отзывая их.
.:: Создаём CA и серверный сертификатЗапускаем CA.all - первое, что он генерирует в интерактивном режиме - коренной сертификат CA ( cacert.pem ), пару открытый закрытый ключ ( cakey.pem ), открытый ключ коренного сертификата в формате PKCS12 ( root.der ), затем серверный сертификат ( cert_srv.pem ), который мы установим на RADIUS. Все перечисленные файлы (и даже некоторые не перечисленные) появятся в папке CA.*
* При запуске CA.all в папке CA появится директория demoCA - в ней будет находиться наш Certificate Autority. Те кому не нравиться название "demoCA", могут изменить его в соответсвующих скриптах и конфигурационных файлах. В данном примере ничего не меняется.
------ запуск CA.all -----------------------------------------------------------------------
############Создаём CA:Country Name (2 letter code) [AU]:RU
State or Province Name (full name) [Some-State]:Moscow
Locality Name (eg, city) []:Moscow
Organization Name (eg, company) [Internet Widgits Pty Ltd]:MegaCompany Co. Ltd.
Organizational Unit Name (eg, section) []:megacompany.central.office
Common Name (eg, YOUR name) []:Administrator
Email Address []:admin@megacompany.ruCountry Name (2 letter code) [AU]:RU
State or Province Name (full name) [Some-State]:Moscow
Locality Name (eg, city) []:Moscow
Organization Name (eg, company) [Internet Widgits Pty Ltd]:MegaCompany Co. Ltd.
Organizational Unit Name (eg, section) []:megacompany.central.office
Common Name (eg, YOUR name) []:Administrator
Email Address []:admin@megacompany.ru###########Создаём сертификат для RADIUS:
Country Name (2 letter code) [AU]:RU
State or Province Name (full name) [Some-State]:Moskow
Locality Name (eg, city) []:Moskow
Organization Name (eg, company) [Internet Widgits Pty Ltd]:MegaCompany Co. Ltd.
Organizational Unit Name (eg, section) []:RADIUS
Common Name (eg, YOUR name) []:RADIUS
Email Address []:admin@megacompany.ruPlease enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:whatever
An optional company name []: (press enter
Копируем файлы /CA/cert_srv.pem и /CA/demoCA/cacert.pem в папку /raddb/certs - установили сертификаты на сервер RADIUS.
.:: Создаём клиентские сертификаты
Для генерации клиентских сертификатов используем наш сценарий CA_users.all .
Для примера создадим сертификат для пользователя user1 :
1). открываем CA_users.all , заменяем в нём все слова cert-clt.* на user1.* (это нужно для того чтобы по имени файла различать какой сертификат для какого пользователя предназначен, в противном случае будет создаваться сертификат с одним и тем же именем файла ( cert-clt.* ). Мы же создадим сразу несколько сертификатов для user1, user2,3,4,5 ). Как вариант, можно использовать говорящие названия файлов содержащих сертификат, например SergeyPetrov, IvanIvanov и т.д.
2). пароль - " whatever " в строках 3/4 заменяем на реальный, как это показано в листинге (строки пронумеровал для удобства - у себя их нумеровать не надо):---file CA_users.all----
1| openssl req -new -keyout newreq.pem -out newreq.pem -days 730 -passin pass:whatever -passout pass:whatever
2| openssl ca -policy policy_anything -out newcert.pem -passin pass:whatever -key whatever -extensions xpclient_ext -extfile xpextensions -infiles newreq.pem3| openssl pkcs12 -export -in newcert.pem -inkey newreq.pem -out user1.p12 -clcerts -passin pass:whatever -passout pass: user1_password
4| openssl pkcs12 -in user1.p12 -out user1.pem -passin pass: user1_password -passout pass: user1_password
5| openssl x509 -inform PEM -outform DER -in user1.pem -out user1.derДля примера вводим " user1_password " - этот пароль будет спрашиваться при установке сертификата на пользовательский компьютер, его необходимо запомнить. Это, как я уже сказал, дополнительное средство аутентификации при действиях связанных с эмиссией сертификата.
3). Сохраняем и запускаем скрипт -> получаем три файла user1.der , user1.pem , user1.p12 - последний есть сертификат в формате PKСS#12 для установки на Windows -клиента.
##########Запускаем изменённый CA_users.all ->Создаём сертификат для user1:
Country Name (2 letter code) [AU]:RU
State or Province Name (full name) [Some-State]:Moskow
Locality Name (eg, city) []:Moskow
Organization Name (eg, company) [Internet Widgits Pty Ltd]:MegaCompany Co. Ltd.
Organizational Unit Name (eg, section) []:IT Department
Common Name (eg, YOUR name) []:Andrey Ivanov
Email Address []:andrey@megacompany.ruPlease enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:whatever
An optional company name []: (press enter)Теперь генерируем сертификат для пользователя user2 :
1). открываем CA_users.all , заменяем в нём user1.* на user2.*
2). заменяем пароль " user1_password " на " user2_password " (не забываем его запомнить, чтобы потом установить сертификат).
3). сохраняем и запускаем скрипт ' получаем user2.p12##########Создаём сертификат для user2:
Country Name (2 letter code) [AU]:RU
State or Province Name (full name) [Some-State]:Moscow
Locality Name (eg, city) []:Moscow
Organization Name (eg, company) [Internet Widgits Pty Ltd]:MegaCompany Co. Ltd.
Organizational Unit Name (eg, section) []:IT Department
Common Name (eg, YOUR name) []:Mikhail Ivanov
Email Address []:mikhail@megacompany.ruPlease enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:whatever
An optional company name []:и так далее… (я сразу создал целых 5 сертификатов )*.
* Не исключаю, что кому-то может не понравиться предложенный способ создания сертификатов, потомучто каждый раз вручную изменять пароли и названия файлов содержащих сертификат в скрипте не очень удобно, особенно если сертификатов надо сгенерировать не один десяток - однако предложенный способ очень простой; уверен , что более продвинутые пользователи смогут самостоятельно атоматизировать процесс создания сертификатов.
Каждый сертификат сохраняем на отдельную дискету, пишем на ней пароль для установки (" userX_password "), на ту же дискету пишем открытый ключ root.der (он у всех одинаковый) и выдаём пользователю. Пользователь устанавливает сертификат на свой компьютер (об этом будет рассказано чуть ниже) и кладёт дискету в сейф.
.:: Установка сертификатов на клиентский компьютер
И так, пользователь (предположим тот, которого мы назвали user1) получил дискетку, содержимым которой является два файла root.der и user1.p12 . Также на дискете написан пароль " user1_password ".
Начнём с установки root.der:
- два раза кликаем по файлу root.der
-
нажимаем "Установить сертификат"
рис. 4
- жмём "Далее"рис. 5
- переставляем радиокнопку на пункт "Поместить все сертификаты в следующее хранилище", жмём "Обзор"рис. 6
- выбираем "Доверенные корневые центры сертификации", "ok" рис. 7
- жмём "Далее"рис. 8
- жмём "Готово"рис. 9
- жмём "Да"рис. 10
- жмём ок, окрис. 11
Устанавливаем пользовательский сертификат user1.p12: - два раза кликаем по файлу user1.p12, жмём "Далее"рис. 12
- жмём "Далее"рис. 13
- здесь надо ввести пароль, который мы установили для сертификата
user1
. Пароль был
" user1_password " (ну или то, что вы придумали), он условно написан на дискетке с сертификатом, вводим его и нажимаем "Далее".рис. 14 - жмём "Далее"рис. 15
- жмём "Готово"рис. 16
- жмём "Ok"рис. 17
.:: Настраиваем беспроводной адаптер D-Link DWL-G650 (DWL-G520, DWL-G120, DWL-G122) и супликант.
D-Link DWL-G650 - это CardBus адаптер, DWL-G520 - это PCI адаптер, DWL-G120 - это USB адаптер, а DWL-G122 - это миниатюрный USB-адаптер. Настраиваются они совершенно идентично. Рассмотрим процедуру на примере DWL-G650.
DWL-G122
DWL-G520
DWL-G650
DWL-G120
- Достаём адаптер из коробки, откладываем его в сторону; ставим драйверы с диска, который идёт в комплекте. После установки драйвера, убираем родную утилиту для настройки адаптера из автозагрузки, потому что мы будем использовать для этих целей службу настройки беспроводного оборудования встроенную в Windows XP. Вставляем адаптер в компьютер.
- Щелкаем один раз левой кнопкой мыши по перечёркнутому значку
беспроводного подключения (в системном лотке), далее выбираем пункт
"Изменить дополнительные параметры" (рис. 18)
рис. 18 - Выбираем вкладку "Беспроводные сети", выделяем там нашу беспроводную
сеть (megacompany_DWL-2100AP), заходим в "Свойства" (рис.19)
рис. 19 - На вкладке "Сязи", в выпадаюшем меню "Шифрование данных" выбираем
протокол TKIP. Перемещаемся на вкладку "Проверка подлинности".
рис. 20 - Здесь всё оставляем без изменений (рис.21), заходим в "Свойства" EAP.
рис. 21 - Ставим радиокнопки и галки как показано на рисунке 22., в окне
"Доверенные корневые центры сертификации" выбираем наш CA - он будет
называться Administrator (если всё сделано точно так как описывается в
разделе "Создание сертификатов").
рис. 22 - На всякий случай нажимаем "Просмотр сертификата" (рис.22), смотрим
кто поставщик сертификата. Удостоверяемся, что это наш корпоративный CA,
который мы создали (рис.23).
рис. 23Нажимаем "Ок", на этом настройка сетевой карты и супликанта завершена.
.:: Проверяем работу WPA-Enterprise в нашей сети.
Ну а теперь пришло долгожданное время проверить все настройки в работе. Запускаем FreeRADIUS в дебагмоде коммандой " radiusd -X", получаем вывод на экран:
radius# radiusd -X
Starting - reading configuration files ...
reread_config: reading radiusd.conf
Config: including file: /usr/local/etc/raddb/proxy.conf
Config: including file: /usr/local/etc/raddb/clients.conf
Config: including file: /usr/local/etc/raddb/snmp.conf
Config: including file: /usr/local/etc/raddb/eap.conf
Config: including file: /usr/local/etc/raddb/sql.conf
main: prefix = "/usr/local"
main: localstatedir = "/var"
main: logdir = "/var/log"
main: libdir = "/usr/local/lib"
main: radacctdir = "/var/log/radacct"
main: hostname_lookups = no
main: max_request_time = 30
main: cleanup_delay = 5
main: max_requests = 1024
main: delete_blocked_requests = 0
main: port = 1812
main: allow_core_dumps = no
main: log_stripped_names = no
main: log_file = "/var/log/radius.log"
main: log_auth = yes
main: log_auth_badpass = yes
main: log_auth_goodpass = yes
main: pidfile = "/var/run/radiusd/radiusd.pid"
main: bind_address = 192.168.0.222 IP address [192.168.0.222]
main: user = "(null)"
main: group = "(null)"
main: usercollide = no
main: lower_user = "no"
main: lower_pass = "no"
main: nospace_user = "no"
main: nospace_pass = "no"
main: checkrad = "/usr/local/sbin/checkrad"
main: proxy_requests = yes
proxy: retry_delay = 5
proxy: retry_count = 3
proxy: synchronous = no
proxy: default_fallback = yes
proxy: dead_time = 120
proxy: post_proxy_authorize = yes
proxy: wake_all_if_all_dead = no
security: max_attributes = 200
security: reject_delay = 1
security: status_server = no
main: debug_level = 0
read_config_files: reading dictionary
read_config_files: reading naslist
read_config_files: reading clients
read_config_files: reading realms
radiusd: entering modules setup
Module: Library search path is /usr/local/lib
Module: Loaded exec
exec: wait = yes
exec: program = "(null)"
exec: input_pairs = "request"
exec: output_pairs = "(null)"
exec: packet_type = "(null)"
rlm_exec: Wait=yes but no output defined. Did you mean output=none?
Module: Instantiated exec (exec)
Module: Loaded expr
Module: Instantiated expr (expr)
Module: Loaded PAP
pap: encryption_scheme = "crypt"
Module: Instantiated pap (pap)
Module: Loaded CHAP
Module: Instantiated chap (chap)
Module: Loaded MS-CHAP
mschap: use_mppe = yes
mschap: require_encryption = no
mschap: require_strong = no
mschap: with_ntdomain_hack = no
mschap: passwd = "(null)"
mschap: authtype = "MS-CHAP"
mschap: ntlm_auth = "(null)"
Module: Instantiated mschap (mschap)
Module: Loaded System
unix: cache = no
unix: passwd = "(null)"
unix: shadow = "(null)"
unix: group = "(null)"
unix: radwtmp = "/var/log/radwtmp"
unix: usegroup = no
unix: cache_reload = 600
Module: Instantiated unix (unix)
Module: Loaded eap
eap: default_eap_type = "tls"
eap: timer_expire = 60
eap: ignore_unknown_eap_types = no
eap: cisco_accounting_username_bug = no
tls: rsa_key_exchange = no
tls: dh_key_exchange = yes
tls: rsa_key_length = 512
tls: dh_key_length = 512
tls: verify_depth = 0
tls: CA_path = "(null)"
tls: pem_file_type = yes
tls: private_key_file = "/usr/local/etc/raddb/certs/cert-srv.pem"
tls: certificate_file = "/usr/local/etc/raddb/certs/cert-srv.pem"
tls: CA_file = "/usr/local/etc/raddb/certs/cacert.pem"
tls: private_key_password = "whatever"
tls: dh_file = "/usr/local/etc/raddb/certs/dh"
tls: random_file = "/usr/local/etc/raddb/certs/random"
tls: fragment_size = 1750
tls: include_length = yes
tls: check_crl = no
tls: check_cert_cn = "(null)"
rlm_eap: Loaded and initialized type tls
mschapv2: with_ntdomain_hack = no
rlm_eap: Loaded and initialized type mschapv2
Module: Instantiated eap (eap)
Module: Loaded preprocess
preprocess: huntgroups = "/usr/local/etc/raddb/huntgroups"
preprocess: hints = "/usr/local/etc/raddb/hints"
preprocess: with_ascend_hack = no
preprocess: ascend_channels_per_line = 23
preprocess: with_ntdomain_hack = no
preprocess: with_specialix_jetstream_hack = no
preprocess: with_cisco_vsa_hack = no
Module: Instantiated preprocess (preprocess)
Module: Loaded realm
realm: format = "suffix"
realm: delimiter = "@"
realm: ignore_default = no
realm: ignore_null = no
Module: Instantiated realm (suffix)
Module: Loaded files
files: usersfile = "/usr/local/etc/raddb/users"
files: acctusersfile = "/usr/local/etc/raddb/acct_users"
files: preproxy_usersfile = "/usr/local/etc/raddb/preproxy_users"
files: compat = "no"
Module: Instantiated files (files)
Module: Loaded Acct-Unique-Session-Id
acct_unique: key = "User-Name, Acct-Session-Id, NAS-IP-Address, Client-IP-Address, NAS-Port"
Module: Instantiated acct_unique (acct_unique)
Module: Loaded detail
detail: detailfile = "/var/log/radacct/%{Client-IP-Address}/detail-%Y%m%d"
detail: detailperm = 384
detail: dirperm = 493
detail: locking = no
Module: Instantiated detail (detail)
Module: Loaded radutmp
radutmp: filename = "/var/log/radutmp"
radutmp: username = "%{User-Name}"
radutmp: case_sensitive = yes
radutmp: check_with_nas = yes
radutmp: perm = 384
radutmp: callerid = yes
Module: Instantiated radutmp (radutmp)
Listening on authentication 192.168.0.222:1812
Listening on accounting 192.168.0.222:1813
Listening on proxy 192.168.0.222:1814
Ready to process requests.Ну, или в худшем случае будет написано, почему FreeRADIUS не запустился - не стоит отчаиваться, если это произойдёт. Нужно внимательно изучить сообщение об ошибке и проверить все настройки.
Кликаем по значку беспроводного сетевого подключения, затем по беспроводной сети с именем megacompany_DWL-2100AP (рис.24).
рис. 24Затем переводим свой взор на монитор, на котором запущен radiusd и отображается процесс успешной аутентификации (весь серверный вывод приводить не буду, потомучто он довольно большой, приведу лишь начальные и завершающие строки) .
--------- auth process-----------------------------
#начало вывода
rad_recv: Access-Request packet from host 192.168.0.220:1044, id=0, length=224
Message-Authenticator = 0x19ca5978137669db3043b8f9e8fc0803
Service-Type = Framed-User
User-Name = "Andrey Ivanov"
Framed-MTU = 1488
Called-Station-Id = "00-11-95-8E-BD-30:megacompany_DWL-2100AP"
Calling-Station-Id = "00-0D-88-88-D5-46"
NAS-Identifier = "D-Link Access Point"….ДАЛЕЕ ИДЁТ ВСЁ, ЧТО НАРИСОВАНО НА РИСУНКЕ 1 , В ТОМ ЧИСЛЕ ОБМЕН СЕРТИФИКАТАМИ
На клиентском компьютере, процесс аутентификации выглядит следующим образом (рис. 25-29):
рис. 25рис. 26рис. 27рис. 28рис. 29Аутентификация прошла успешно, компьютер получает IP адрес от DHCP сервера и теперь может работать в беспроводной сети. К слову сказать, если на компьютере установлено несколько клиентских сертификатов (такое тоже бывает), то супликант предложит выбрать какой из них использовать для конкретной аутентификации.
.:: Отзыв сетификатов (прикручиваем список отзыва к FreeRADIUS)
Казалось бы, уже всё ясно - защищённая беспроводная сеть уже построена, но на самом деле остался ещё один важный аспект, который мы сейчас рассмотрим. Предположим, что надо запретить доступ в беспроводную сеть одному из компьютеров (например, личному ноутбуку одного из сотрудников), на который ранее мы установили сертификат - банальная причина - увольнение сотрудника, сокращение и т.д. Для решения этой задачи необходимо пометить в реестре ( /usr/local/etc/raddb/CA/demoCA/index.txt ), в котором хранится список всех подписанных сертификатов, сертификат пользователя, которому мы хотим запретить доступ в сеть, как отозванный. Затем необходимо создать (или обновить если он уже есть) список отзыва сертификатов ( CRL - Certificate Revocation List ), в котором перечисляются отозванные клиентские сертификаты. А затем настроить RADIUS таким образом, чтобы при аутентификации пользователей он обращался к этому списку и проверял не состоит ли в нём предъявляемый клиентский сертификат.
В ходе наших предыдущих экспериментов мы создали два сертификата для user1(Andrey Ivanov) и user2(Mikhail Ivanov). Для примера запретим доступ в беспроводную сеть последнему. Проделаем следующие 3 шага.
1. Помечаем в реестре сертификат user2 как отозванный: находясь в /usr/local/etc/raddb/CA даём комманду:
radius# openssl ca -revoke user2.pem
Using configuration from /etc/ssl/openssl.cnf
943:error:0E06D06C:configuration file routines:NCONF_get_string:no value:/usr/src/secure/lib/libcrypto/../../../crypto/openssl/crypto/conf/conf_lib.c:329:group=CA_default name=unique_subject
Enter pass phrase for ./demoCA/private/cakey.pem:
DEBUG[load_index]: unique_subject = "yes"
Revoking Certificate D734AD0E8047BD8D.
OpenSSL немного ругается (ищет почему то конфиг не там где нужно), но делает то, что нам нужно. В ходе выполнения команды необходимо ввести секретную фразу-пароль (" whatever "). В /raddb/CA/demoCA/index.txt - сертификат пометился как отозванный, в чём мы и убеждаемся, просмотрев данный файл.
2. Создаём список отзыва (CRL). Если он уже есть, то он обновится.
Находясь в /usr/local/etc/raddb/CA даём команду:
radius# openssl ca -gencrl -out ca.crl
Using configuration from /etc/ssl/openssl.cnf
963:error:0E06D06C:configuration file routines:NCONF_get_string:no value:/usr/src/secure/lib/libcrypto/../../../crypto/openssl/crypto/conf/conf_lib.c:329:group=CA_default name=unique_subject
Enter pass phrase for ./demoCA/private/cakey.pem:
DEBUG[load_index]: unique_subject = "yes"
Снова по ходу выполнения команды требуется ввести секретный пароль " whatever ". В результате выполнения команды в директории /raddb/CA/ появляется файл ca.crl - это и есть список отзыва. Внутри он похож на шифровку, просмотреть его можно вот так:
radius# openssl crl -in ca.crl -text -noout
Certificate Revocation List (CRL):
Version 1 (0x0)
Signature Algorithm: md5WithRSAEncryption
Issuer: /C=RU/ST=Moskow/L=Moskow/O=MegaCompany Co. Ltd./OU=megacompany.central.office/CN=Administrator/emailAddress=admin@megacompany.ru
Last Update: May 27 23:33:19 2005 GMT
Next Update: Jun 26 23:33:19 2005 GMT
Revoked Certificates:
Serial Number: D734AD0E8047BD8D
Revocation Date: May 27 23:13:16 2005 GMT
Signature Algorithm: md5WithRSAEncryption
d4:22:d6:a3:b7:70:0e:77:cd:d0:e3:73:c6:56:a7:9d:b2:d5:
0a:e1:23:ac:29:5f:52:b0:69:c8:88:2f:98:1c:d6:be:23:b1:
b9:ea:5a:a7:9b:fe:d3:f7:2e:a9:a8:bc:32:d5:e9:64:06:c4:
91:53:37:97:fa:32:3e:df:1a:5b:e9:fd:95:e0:0d:35:a7:ac:
11:c2:fe:32:4e:1b:29:c2:1b:21:f8:99:cd:4b:9f:f5:8a:71:
b8:c9:02:df:50:e6:c1:ef:6b:e4:dc:f7:68:da:ce:8e:1d:60:
69:48:ad:b4:6d:2f:ee:58:09:fb:39:d2:91:2a:ae:6e:7f:af:
5d:b2Видим в нём один отозванный сертификат с серийным номером D734AD0E8047BD8D (он же user2, он же Mikhail Ivanov). Обратите внимание, важным свойством CRLявляется срок его действия. Он должен быть обновлён не позднее его истечения ( Update: Jun 26 23:33:19 2005 GMT). Срок действияCRL можно задать в файле openssl.cnf (у нас был default_crl_days = 30).
3. Прикручиваем список отзыва к FreeRADIUS'у:
- копируем файл /raddb/CA/ca.crl в /raddb/certs/ (поверх старого ca.crl, если он там есть)
- заходим в /raddb/certs/ и приклеиваем ca.crl к файлу cacert.pem:
cat cacert.pem ca.crl > ca.pem - вносим небольшие изменения в секцию TLS файла /raddb/eap.conf :
CA_file = ${raddbdir}/certs/ca.pem # здесь мы изменили cacert.pem на ca.pem
CA_path = ${raddbdir}/certs # добавляем эту строку
check_crl = yes # и эту строкуТеперь пробуем аутентифицировать в сети компьютер с сертификатом user2 - аутентификация не проходит; user1 - беспрепятственно входит в беспроводную сеть, что и требовалось доказать. Вот теперь защищённую беспроводную сеть можно считать построенной.
В IEEE 802.1x допускается использование различных методов и алгоритмов аутентификации. Это возможно благодаря протоколу EAP (Extensible Authentication Protocol), в который "вкладываются" атрибуты соответствующие тому или иному методу аутентификации. Поэтому существуют EAP-MD5, EAP-PEAP, EAP-LEAP, EAP-SIM и т.д В данной статье будет описана реализация аутентификации в беспроводной сети на основе цифровых сертификатов - EAP-TLS. Этот метод наиболее часто используется в корпоративных беспроводных сетях и отличается достаточно высокой степенью защищённости. Кроме того, EAP-TLS иногда является основным методом защиты трафика в сетях беспроводных провайдеров.
.:: EAP-TLS
В основе EAP-TLS лежит протокол SSL v3.0, однако в отличие от
традиционной аутентификации по протоколу SSL (например, при организации
защищенного http-соединения - HTTPS) в EAP-TLS происходит взаимная
аутентификация клиента и сервера (как создать для них сертификаты будет
описано ниже). Клиент (супликант) и сервер RADIUS должны поддерживать
метод аутентификации EAP-TLS; точка доступа должна поддерживать
аутентификацию 802.1x/EAP и не обязательно должна знать, какой метод
аутентификации используется в конкретном случае. На рисунке ниже
изображён процесс аутентификации в беспроводной сети с использованием
EAP-TLS.

Это было небольшое лирически-теоретическое отступление, которое необходимо, для того чтобы получить примерное представление о том, что кроется в недрах безопасной беспроводной сети, далее будет описываться практическая реализация всего вышеописанного. В качестве сервера RADIUS будет использоваться компьютер под управлением FreeBSD 5.3 c пакетом FreeRADIUS*. Для организации инфраструктуры PKI (Public Key Infrastructure) будет использоваться пакет OpenSSL. Вся беспроводная сеть будет строиться на базе недорогого и надёжного беспроводного оборудования D-Link. На клиентских машинах будет использоваться WinXP SP2, т.к. в этой операционной системе есть встроенный супликант, а с недавно выпущенным Microsoft патчем поддерживается даже WPA2.

DRS-200
* Для тех, кто хочет сразу получить готовое решение, компания D-Link предлагает аппаратный RADIUS - D-Link DRS-200. В нём также используется пакет FreeRADIUS, но все его настройки выведены на удобный веб-интерфейс. Тем не менее его использование не освобождает от понимания инфраструктуры PKI и процесса аутентификации 802.1x.
.:: Установка и настройка OpenSSL и FreeRADIUS
Предполагается, что на компьютере под FreeBSD 5.3* установлена одна
сетевая карта, обновлена коллекция портов, установлен Midnight
Commander, компьютер подключён к интеренет. Вся система ставится в
корпоративной сети 192.168.0.x/24 .
*На момент написания данного материала последним был релиз FreeBSD5.3, поэтому он и использовался, на данный момент посленим релизом является FreeBSD5.4 , поэтому рекомендую использовать именного его - процесс развёртывания защищённой беспроводной сети не притерпит при этом никаких изменений.
--> Скачиваем отсюда
ftp://ftp.openssl.org/snapshot/
последний стабильный снепшот OpenSSL (я, например, использовал
openssl-0.9.7-stable-SNAP-20050524.tar.gz
). Разупаковываем, конфигурируем, компилируем, инсталлируем его:
./config shared --prefix=/usr/local/openssl
make make install |
* Пакет OpenSSL будет установлен в директорию /usr/local/openssl . Необязательно устанавливать именно туда - можно указать другой путь или вообще ничего не указывать; я захотел проинсталлировать OpenSSL в эту директорию.
На этом работа с OpenSSL пока завершена, за исключением того, что он нам ещё потребуется для создания сертификатов.
--> FreeRADIUS - довольно объёмный пакет, поэтому его, в отличие от OpenSSL, мы будем устанавливать из портов, для того чтобы все дополнительные библиотеки и приложения, необходимые для его работы поставились автоматически.
Перемещаемся в директорию /usr/ports/net/freeradius/ , затем даём команду make - ничего не выбираем из предложенных установочным скриптом опций, жмём "ок". Начинается процесс автоматической установки (нужные приложения скачиваются и компилируются); по завершению, находясь в той же папке, даём комманду make install .
На этом с установкой FreeRADIUS'а закончили, переходим к его настройке.
Заходим в каталог FreeRADIUS'а -
/usr/local/etc/raddb/
(все действия будут разворачиватся в основном в этом каталоге):