Дистрибьюция Решений

Технические статьи

Строим защищённую беспроводную сеть: WPA-Enterprise, 802.1x EAP-TLS

Существует добрая сотня статей о небезопасности беспроводных. Причём многие совершенно идентичны и бесполезны: в них говорится о том, что 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-сервер).
  • В 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.

    рис.1 Процесс аутентификации 802.1x 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/ (все действия будут разворачиватся в основном в этом каталоге):

  • удаляем всё содержимое папки /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.ru

    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.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.ru

    Please 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.pem

    3| 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.ru

    Please 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.ru

    Please 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 - беспрепятственно входит в беспроводную сеть, что и требовалось доказать. Вот теперь защищённую беспроводную сеть можно считать построенной.

Регистрация

 
Имя:
Пароль:
 

Новости

16.07.2007
Тест на совместимость оборудования в диапозоне 5ГГц стандарта 802.16 и 802.11а (preWiMAX)
подробнее...


07.07.2007
Спектральная характеристика популярных радиокарт
подробнее...


07.07.2007
Тест на совместимость оборудования в диапозоне 5ГГц стандарта
подробнее...


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


07.06.2007
Стандарт широкополосной беспроводной связи IEEE 802.16
подробнее...


META-Ukraine

free counters