Немного теории
Нет ничего практичней хорошей теории. Рассмотрим аутентификацию EAP с ипользованием
RADIUS-сервера. Кусок теории взят отсюда http://www.ixbt.com/comm/prac-wpa-eap.shtml
Процесс аутентификации. Он состоит из следующих стадий:
1. Клиент может послать запрос на аутентификацию (EAP-start message) в сторону точки
доступа
2. Точка доступа (Аутентификатор) в ответ посылает клиенту запрос на идентификацию клиента
(EAP-request/identity message). Аутентификатор может послать EAP-request
самостоятельно, если увидит, что какой-либо из его портов перешел в активное состояние.
3. Клиент в ответ высылает EAP-response packet с нужными данными, который точка доступа
(аутентификатор) перенаправляет в сторону Radius-сервера (сервера аутентификации).
4. Сервер аутентификации посылает аутентификатору (точке доступа) challenge-пакет (запрос
информации о подлинности клиента). Аутентификатор пересылает его клиенту.
5. Далее происходит процесс взаимной идентификации сервера и клиента. Количество стадий
пересылки пакетов туда-сюда варьируется в зависимости от метода EAP, но для
беспроводных сетей приемлема лишь <<strong>> аутентификация с взаимной аутентификацией
клиента и сервера (EAP-TLS, EAP-TTLS, EAP-PEAP) и предварительным шифрованием канала
связи.
6. На следующий стадии, сервер аутентификации, получив от клиента необходимую информацию,
разрешает (accept) или запрещает (reject) тому доступ, с пересылкой данного сообщения
аутентификатору. Аутентификатор (точка доступа) открывает порт для Supplicant-а, если
со стороны RADIUS-сервера пришел положительный ответ (Accept).
7. Порт открывается, аутентификатор пересылает клиенту сообщение об успешном завершении
процесса, и клиент получает доступ в сеть.
8. После отключения клиента, порт на точке доступа опять переходит в состояние <<закрыт>>
Описанный процесс проиллюстрирован на рис. (там показан один из простейших методов EAP):
Как видно из рисунка, для коммуникации между клиентом (supplicant) и точкой доступа
(authenticator) используются пакеты EAPOL. Протокол RADIUS используется для обмена
информацией между аутентификатором (точкой доступа) и RADIUS-сервером (сервером
аутентификации). При транзитной пересылке информации между клиентом и сервером
аутентификации пакеты EAP переупаковываются из одного формата в другой на аутентификаторе.
Детальное рассмотрение алгоритмов шифрования, а также методы генерации сессионных ключей
шифрования, пожалуй, выходят за рамки данного материала>>
Установка freeradius сервера
Рассмотрим установку и настройка ty-rad-02 нашего Radius-сервера. Вот здесь начинается путь
полный опасностей и приключений. :-)
В качестве операционной систему будем использовать Ubuntu 8.04.3. Почему же не 9.04, а 9.10
Во-первых, поддержка 8.04 LTS будет проходить до 2011 года, во-вторых, там freeradius
версии 1.1.7, а не 2.1.7. Новое иногда не значит лучшее - разобраться с генерацией ключей в
новой версии - лично я не смог. Каждый автор рекомендует что-то свое для генерации ключей,
но почему-то на практике все дороги ведут в тупик. Поэтому работаю с предыдущей версией
freeradius.
Установили Ubuntu 8.04.3 написали команду
# apt-get update && apt-get upgrade -y && apt-get dist-upgrade -y
обновили систему
Отредактировали /etc/network/interfaces, чтобы задать ip-адрес
auto eth0
iface eth0 inet static
address 192.168.131.232
netmask 255.255.252.0
gateway 192.168.131.254
Поправили DNS /etc/resolv.conf
nameserver 192.168.131.209
перестартуем сеть
# /etc/init.d/networking restart
Эти пакеты устанавливаем по вкусу
поддержка русского языка в консоле
# apt-get install console-cyrillic
устанавливаем более красивый аналог top и файловый менеджер mc
# apt-get install htop mc
Устанавливаем сам freeradius-сервер.
На первый взгляд кажется все банальным установка должна проводится apt-get install
freeradius, а нет - тупик. Программа ставится, настраивается, но работать так как надо не
хочет. Ну не поддерживает устанавливаемый пакет сильную криптографию и всё! А оставлять
свою сеть на растерзание юным недохакерам сильно не хочется.
Пойдем другим путем выкачаем с сайта http://freeradius.org исходники, отредактируем
файлы, чтобы поддерживала сильную криптографию и вновь тупик - не хватает определенных
библиотек - вообщем через полдня борьбы я понял - это не мой путь. :-)
Пойдем третьим путем. У ubuntu есть репозитарий исходных текстов из которых получаются
deb-пакеты. Вот эти тексты и будем использовать.
установим компиляторы и библиотеки необходимые для компиляции пакета.
# apt-get install build-essential
установим программу для управления репозитарием исходнков
# apt-get install apt-src
обновим репозитарий
# apt-src update
перейдем в домашний каталог root
# cd /root
создадим папку куда будем закачивать исходники
# mkdir ~/build_freeradius
# cd ~/build_freeradius
скачаем все необходимые исходники и библиотеки, необходимые для компиляции.
# apt-src install freeradius
Правим файл ~/build_freeradius/freeradius-1.1.7/debian/rules
В нем приводим строку configure к следующему виду (включаем сильную криптографию)
./configure \
$(confflags) \
--prefix=/usr \
--exec-prefix=/usr \
--mandir=$(mandir) \
--sysconfdir=/etc \
--libdir=$(libdir) \
--datadir=/usr/share \
--localstatedir=/var \
--with-raddbdir=$(raddbdir) \
--with-logdir=/var/log/$(package) \
--enable-ltdl-install=no --enable-strict-dependencies \
--with-large-files --with-udpfromto --with-edir \
--enable-developer \
--config-cache \
--with-rlm_eap_tls \
--with-rlm_eap_ttls \
--with-rlm_eap_peap \
--without-rlm_otp \
--with-rlm_sql_postgresql_lib_dir=`pg_config --libdir` \
--with-rlm_sql_postgresql_include_dir=`pg_config --includedir` \
--with-openssl \
--with-system-libtool
Комментируем блок
# for pkg in $(shell grep ^Package debian/control | awk '{print $$2}') ; do \
# if dh_shlibdeps -p $$pkg -- -O | grep -q libssl; then \
# echo "$$pkg links to openssl" ;\
# exit 1 ;\
# fi ;\
# done
А в файле ~/build_freeradius/freeradius-1.1.7/debian/contol
добавим в раздел Build-Depends строку ", libssl-dev" он примет вид.
Build-Depends: debhelper (>= 5), libltdl3-dev, libpam0g-dev, libmysqlclient15-dev | libmysqlclient-dev,
libgdbm-dev, libldap2-dev, libsasl2-dev, libiodbc2-dev, libkrb5-dev, snmp, autotools-dev, dpatch
(>= 2), libperl-dev, libtool, dpkg-dev (>= 1.13.19), libpq-dev, libsnmp-dev, libssl-dev
доустановим необходимые библиотеки
# apt-get install libssl-dev libpq-dev
# cd ~/build_freeradius
произведем компиляцию
# apt-src build freeradius
Получили уйму deb-пакетов.
root@ty-rad-02:~/build_freeradius# ls -al
total 4504
drwxr-xr-x 3 root root 4096 2009-12-10 14:31 .
drwxr-xr-x 8 root root 4096 2009-12-10 14:46 ..
drwxr-xr-x 15 root root 4096 2009-12-10 14:31 freeradius-1.1.7
-rw-r--r-- 1 root root 29420 2009-09-17 01:04 freeradius_1.1.7-1ubuntu0.2.diff.gz
-rw-r--r-- 1 root root 1089 2009-09-17 01:04 freeradius_1.1.7-1ubuntu0.2.dsc
-rw-r--r-- 1 root root 2092 2009-12-10 14:31 freeradius_1.1.7-1ubuntu0.2_i386.changes
-rw-r--r-- 1 root root 801840 2009-12-10 14:31 freeradius_1.1.7-1ubuntu0.2_i386.deb
-rw-r--r-- 1 root root 2673548 2007-10-24 02:06 freeradius_1.1.7.orig.tar.gz
-rw-r--r-- 1 root root 741064 2009-12-10 14:31 freeradius-dbg_1.1.7-1ubuntu0.2_i386.deb
-rw-r--r-- 1 root root 118186 2009-12-10 14:31 freeradius-dialupadmin_1.1.7-1ubuntu0.2_all.deb
-rw-r--r-- 1 root root 34580 2009-12-10 14:31 freeradius-iodbc_1.1.7-1ubuntu0.2_i386.deb
-rw-r--r-- 1 root root 35256 2009-12-10 14:31 freeradius-krb5_1.1.7-1ubuntu0.2_i386.deb
-rw-r--r-- 1 root root 52176 2009-12-10 14:31 freeradius-ldap_1.1.7-1ubuntu0.2_i386.deb
-rw-r--r-- 1 root root 34824 2009-12-10 14:31 freeradius-mysql_1.1.7-1ubuntu0.2_i386.deb
-rw-r--r-- 1 root root 34958 2009-12-10 14:31 freeradius-postgresql_1.1.7-1ubuntu0.2_i386.deb
установим freeradius
# dkpg -i freeradius_1.1.7-1ubuntu0.2_i386.deb
установим openssl
# apt-get install openssl
# echo 'freeradius hold' | dpkg --set-selections
# echo 'libfreeradius2 hold' | dpkg --set-selections
# echo 'freeradius-common hold' | dpkg --set-selections
заморозим пакеты от возможных будущим обновлений.
Поздравляю freeradius-сервер установлен.
Настройка freeradius сервера
# cd /etc/freeradius
Пропишем нашу точку доступа в файле clients.conf
# sed '/ *#/d; /^ *$/d' clients.conf
client 127.0.0.1 { #локальная авторизация
secret = testing123
shortname = localhost
}
client 192.168.131.191/22 { # это ее ip-адрес
secret = testing123 # секретный пароль
shortname = ap1242 # ее короткое имя
nastype = cisco # тип точки доступа Ciscorad_recv: Access-Reject
}
Пропишем имя клиента (его логин/пароль)
# sed '/ *#/d; /^ *$/d' users
testuser Cleartext-Password := "secret149"
grol Cleartext-Password := "testing123"
Настроим параметры аутентификации
# sed '/ *#/d; /^ *$/d' eap.conf
eap {
default_eap_type = leap #настроим аутентификацю по умолчанию leap
timer_expire = 60
ignore_unknown_eap_types = no
cisco_accounting_username_bug = no
md5 {
}
leap {
}
gtc {
auth_type = PAP
}
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
}
peap {
default_eap_type = mschapv2
}
mschapv2 {
}
}
Настроим основной файл радиус-сервера radiusd.conf
Исправим раздел modules
mschap {
use_mppe = yes
require_encryption = yes
require_strong = yes
}
А так же секции autorize и authenticate
authorize {
preprocess rad_recv: Access-Reject
chap
mschap
suffix
eap
files
pap
}
authenticate {
Auth-Type PAP {
pap
}
Auth-Type CHAP {
chap
}
Auth-Type MS-CHAP {
mschap
}
unix
eap
}
Сгенерируем ключ Дифти-Хелмана
# cd /etc/freeradius/certs
# openssl dhparam -out dh 1024
Перезапустим freeradius сервер
# /etc/init.d/freeradius restart
Проверим все ли корректно мы настроили авторизуемся локально
# radtest grol testing123 localhost 1812 testing123
Sending Access-Request of id 0 to 127.0.0.1 port 1812
User-Name = "grol"
User-Password = "testing123"
NAS-IP-Address = 255.255.255.255
NAS-Port = 1812
rad_recv: Access-Accept packet from host 127.0.0.1:1812, id=0, length=20
Если появилось "rad_recv: Access-Reject" значит что-то настроили не-то.
После этой проверки настройку freeradius-сервера можно считать завершенной.
Настройка точки доступа
Подключимся синим консольным кабелем к нашей точке доступа Cisco Aironet 1242AG. Для
подключения в Ubuntu я предпочитаю программу GtkTerm, а в Windows - putty. Параметры
подключения (9600 бод, четность - нет, стоп-бит - 1, бит данных - 8, контроль потока -
нет).
Для чистоты эксперимента -- настройки точки доступа можно сбросить. Для этого надо
выключить питание, нажать и держать кнопку MODE, включить питание, подождать 1-2 секунды,
отпустить кнопку MODE. Пароль на режим enable по-умолчанию будет Cisco.
Перейдем в режим enable и conf t
Зададим имя
# hostname zkp-ap-01
# ip domain name zkprosned.ru
Настроим ssh, telnet - доступ
# crypto key generate rsa generals-keys modulus 1024
# ip ssh time-out 60
# ip ssh authentication-retries 3
# line vty 0 4
# transport input ssh telnet
Настроим пароль на enable
# enable secret testing123
Заведем пару пользователей -- админа и обычного.
# username Admin privilege 15 secret testing123
# username grol secret testing123
Настроим ip-адрес точки доступа.
#interface BVI1
#ip address 192.168.131.191 255.255.252.0
Заходим последовательно в свойства радиоинтерфейса Dot11Radio0 и Dot11Radio1 -- и пишем
команду no shutdown. По умолчанию оба радиоинтерфейса отключены.
#ip default-gateway 192.168.131.254 - Настраиваем шлюз по умолчанию.
Сохраним конфигурацию #wr
Заходим через веб-интерфейс (логин/пароль Admin/testing123)
Переходим на вкладку Security - SSID Manager
Заполняем поле SSID и ставим галочку "Network EAP"
и устанавливаем Set Single Guest Mode SSID на FGUZKP72,
т. е. разрешаем гостевой режим. "Все флаги - гости будут к нам" (с) Шекспир ;-)
Вкладка "Encryption Manager" Шифрование ставим Cipher --
AES-CCMP
Во вкладке Server Manager -- Server 192.168.131.232 Shared Secret testing123 Указываем
ip-адрес нашего freeradius-сервера и с каким паролем наша точка доступа будет
авторизоваться.
В EAP Authentication выбираем наш radius-сервер.
В принципе настройки все.
Сохраняемся и перезагружаем точку, я заметил, что изменение настроек шифрования вступает в
силу только после перезагрузки точки доступа.
Полный конфиг точки доступа приводится ниже.
!
version 12.3
no service pad
service timestamps debug datetime msec
service timestamps log datetime msec
service password-encryption
!
hostname zkp-ap-01
!
enable secret 5 $1$XXXXXXXXXXXXXXXXXXXXXX.
!
ip subnet-zero
ip domain name zkprosned.ru
ip name-server 192.168.131.209
!
!
ip ssh time-out 60
aaa new-model
!
!
aaa group server radius rad_eap
server 192.168.131.232 auth-port 1812 acct-port 1813
!
aaa group server radius rad_mac
!
aaa group server radius rad_acct
!
aaa group server radius rad_admin
!
aaa group server tacacs+ tac_admin
!
aaa group server radius rad_pmip
!
aaa group server radius dummy Снимок-Cisco IOS Series AP - Security - SSID Manager - Mozilla Firefox
!
aaa authentication login eap_methods group rad_eap
aaa authentication login mac_methods local
aaa authorization exec default local
aaa accounting network acct_methods start-stop group rad_acct
aaa session-id common
!
dot11 ssid FGUZKP72
authentication network-eap eap_methods
authentication key-management wpa
guest-mode
!
power inline negotiation prestandard source
!
!
username Admin privilege 15 secret 5 $1XXXXXXXXXXXXXXXXXX.
username grol secret 5 $XXXXXXXXXXXXXXXXXXXXX
!
bridge irb
!
!
interface Dot11Radio0
no ip address
no ip route-cache
!
encryption mode ciphers aes-ccm
!
ssid FGUZKP72
!
speed basic-1.0 basic-2.0 basic-5.5 6.0 9.0 basic-11.0 12.0 18.0 24.0 36.0 48.0 54.0
station-role root
bridge-group 1
bridge-group 1 subscriber-loop-control
bridge-group 1 block-unknown-source
no bridge-group 1 source-learning
no bridge-group 1 unicast-flooding
bridge-group 1 spanning-disabled
!
interface Dot11Radio1
no ip address
no ip route-cache
!
encryption mode ciphers aes-ccm
!
ssid FGUZKP72
!
dfs band 3 block
speed basic-6.0 9.0 basic-12.0 18.0 basic-24.0 36.0 48.0 54.0
channel dfs
station-role root
bridge-group 1
bridge-group 1 subscriber-loop-control
bridge-group 1 block-unknown-source
no bridge-group 1 source-learning
no bridge-group 1 unicast-flooding
bridge-group 1 spanning-disabled
!
interface FastEthernet0
no ip address
no ip route-cache
duplex auto
speed auto
bridge-group 1
no bridge-group 1 source-learning
bridge-group 1 spanning-disabled
!
interface BVI1
ip address 192.168.131.191 255.255.252.0
no ip route-cache
!
ip default-gateway 192.168.131.254
ip http server
no ip http secure-server
ip http help-path http://www.cisco.com/warp/public/779/smbiz/prodconfig/help/eag
ip radius source-interface BVI1
radius-server local
no authentication eapfast
!
radius-server attribute 32 include-in-access-req format %h
radius-server host 192.168.131.232 auth-port 1812 acct-port 1813 key 7 XXXXXXXXXXX
radius-server vsa send accounting
!
control-plane
!
bridge 1 route ip
!
!
!
line con 0
line vty 0 4
transport input telnet ssh
!
end
|