Настройка WiFi WPA + Radius + web

Модераторы: flash, mordor

Ответить
Аватара пользователя
flash
Сообщения: 16
Зарегистрирован: 08 ноя 2007, 16:13

Настройка WiFi WPA + Radius + web

Сообщение flash »

Постановка задачи
Есть 7 точек доступа Zyxel ap G-3000 и машина под freebsd 7.0 stable надо настроить безопасную WIFI сеть с WPA или WPA2 шифрованием, роумингом между точками и единым центром авторизации.
Для авторизации я буду использовать freeradius 1.1.7_3, для удобства администрирования я буду использовать апач 2.2.9 с поддержкой php и вэб-морду для радиуса ARA-0.6 http://download.asn.pl/ara/ara-0.6.tar.gz Для работы ара нам понадобиться еще HTML-Template-Sigma (/usr/ports/devel/pear-HTML_Template_Sigma/)
Сразу скажу, что у меня все заработало, за одним маленьким недочетом КПК не смогли подключиться к сети т.к. я протокол peap на КПК сильно урезан и не захотел авторизовать пользователя без сертификата, а настройка центра сертификации выходит за рамки этого мана. Поэтому будет рассматриваться только подключение ноутбуков к сети WIFI
Итак, приступим
Для начала давайте определимся где мы будем хранить учетки пользователей, я выбрал mysql т.к. у меня около 400 пользователей в сети + заезжие гастербайтеры из других компаний, но вы можете хранить пользователей в файле users, но об этом позднее.
Установку и настройку Freebsd я описывать не буду, скажу только что после установки рекомендуется обновить исходники ядра, порты и пересобрать мир, но это дело вкуса.
Начинаем ставить ПО
Сначала ставим Mysql 5 server & client
cd /usr/ports/databases/mysql50-server/
make; make install
После установки выполняем команду (ставим mysql в автозагрузку)
echo mysql_enable=YES >> /etc/rc.conf
Дальше ставим радиус
cd /usr/ports/net/freeradius-mysql/
make; make install
После установки выполняем команду (ставим радиус в автозагрузку)
echo radiusd_enable=YES >> /etc/rc.conf
Запускаем Mysql
/usr/local/etc/rc.d/mysql-server start
Создаем базу данных для нашего радиуса
mysqladmin create radius
mysql radius < /usr/local/share/doc/freeradius/examples/mysql.sql
теперь запаролим наш sql сервер
mysqladmin password radiuspass
Приступаем к настройке радиуса, начнем с radius.conf
vi /usr/local/etc/raddb/radius.conf
Правим конфиг
prefix = /usr/local //объявляем переменные
exec_prefix = ${prefix}
sysconfdir = ${prefix}/etc
localstatedir = /var
sbindir = ${exec_prefix}/sbin
logdir = /var/log
raddbdir = ${sysconfdir}/raddb
radacctdir = ${logdir}/radacct
confdir = ${raddbdir}
run_dir = ${localstatedir}/run/radiusd

log_file = ${logdir}/radius.log // файл в котором храним логи
libdir = ${exec_prefix}/lib
pidfile = ${run_dir}/radiusd.pid
max_request_time = 30 // время закоторое должен быть обработан запрос
delete_blocked_requests = no
cleanup_delay = 5
max_requests = 1024000 // максимольное количество запросов
bind_address = * // работаем на всех доступных адресах
port = 0 // используем стандартный порт
hostname_lookups = no // не распозновать имена хостов
allow_core_dumps = yes // разрешаем дамп ядра
regular_expressions = yes // разрешаем регулярные выражения
extended_expressions = yes
log_stripped_names = no
log_auth = yes // логировать аутентификации
log_auth_badpass = yes // записывать только плохие пароли
log_auth_goodpass = no
usercollide = no
lower_user = no
lower_pass = no
nospace_user = no
nospace_pass = no
checkrad = ${sbindir}/checkrad
security {
max_attributes = 200
reject_delay = 1
status_server = no
}
# PROXY CONFIGURATION // включаем список обсдуживаемых доменов
proxy_requests = yes
$INCLUDE ${confdir}/proxy.conf
# CLIENTS CONFIGURATION
$INCLUDE ${confdir}/clients.conf // включаем но не настраиваем список будем //брать из базы
Дальше у нас идет snmp, его полностью комментируем
# THREAD POOL CONFIGURATION
thread pool {
start_servers = 5
max_servers = 32
min_spare_servers = 3
max_spare_servers = 10
max_requests_per_server = 0
}
# MODULE CONFIGURATION
pap {
auto_header = yes
}
chap {
authtype = CHAP
}
pam {
pam_auth = radiusd
}
unix {
cache = no
cache_reload = 600
#
radwtmp = ${logdir}/radwtmp
}
$INCLUDE ${confdir}/eap.conf // включаем eap peap для виндовс
mschap {
use_mppe = yes
require_encryption = yes
require_strong = yes
with_ntdomain_hack = yes
}
Дальше у нас идет Ldap, его полностью комментируем
# Realm module, for proxying. // объявляем домены
realm IPASS {
format = prefix
delimiter = "/"
ignore_default = no
ignore_null = no
}

# 'username@realm'
#
realm suffix {
format = suffix
delimiter = "@"
ignore_default = no
ignore_null = no
}

# 'username%realm'
#
realm realmpercent {
format = suffix
delimiter = "%"
ignore_default = no
ignore_null = no
}
realm ntdomain {
format = prefix
delimiter = "\\"
ignore_default = no
ignore_null = no
}
# A simple value checking module
checkval {
item-name = Calling-Station-Id
check-name = Calling-Station-Id
data-type = string
notfound-reject = yes // включаем проверку дополнительных параметров
}
# Preprocess the incoming RADIUS request, before handing it off
# to other modules.
huntgroups = ${confdir}/huntgroups
hints = ${confdir}/hints
with_ascend_hack = no
ascend_channels_per_line = 23
with_ntdomain_hack = yes
with_specialix_jetstream_hack = no
with_cisco_vsa_hack = no
}
Опцию #files { банем полностью
# Write a detailed log of all accounting records received.
#
detail {
detailfile = ${radacctdir}/%{Client-IP-Address}/detail-%Y%m%d
detailperm = 0600
suppress {
User-Password
}
}
detail auth_log {
detailfile = ${radacctdir}/%{Client-IP-Address}/auth-detail-%Y%m%d
detailperm = 0600
}
detail reply_log {
detailfile = ${radacctdir}/%{Client-IP-Address}/reply-detail-%Y%m%d
detailperm = 0600
}
detail pre_proxy_log {
detailfile = ${radacctdir}/%{Client-IP-Address}/pre-proxy-detail-%Y%m%d

detailperm = 0600
}
acct_unique {
key = "User-Name, Acct-Session-Id, NAS-IP-Address, Client-IP-Address, NAS-
}
$INCLUDE ${confdir}/sql.conf // включаем использование базы данных mysql
radutmp {
filename = ${logdir}/radutmp
username = %{User-Name}
case_sensitive = yes
check_with_nas = yes
perm = 0600
callerid = "yes"
}
radutmp sradutmp {
filename = ${logdir}/sradutmp
perm = 0644
callerid = "yes"
}
attr_filter {
attrsfile = ${confdir}/attrs
}
counter daily {
filename = ${raddbdir}/db.daily
key = User-Name
count-attribute = Acct-Session-Time
reset = daily
counter-name = Daily-Session-Time
check-name = Max-Daily-Session
allowed-servicetype = Framed-User
cache-size = 5000
}
sqlcounter dailycounter {
counter-name = Daily-Session-Time
check-name = Max-Daily-Session
reply-name = Session-Timeout
sqlmod-inst = sql
key = User-Name
reset = daily
query = "SELECT SUM(AcctSessionTime - \
GREATEST((%b - UNIX_TIMESTAMP(AcctStartTime)), 0)) \
FROM radacct WHERE UserName='%{%k}' AND \
UNIX_TIMESTAMP(AcctStartTime) + AcctSessionTime > '%b'"
query = "SELECT SUM(AcctSessionTime) FROM radacct WHERE \
UserName='%{%k}' AND AcctStartTime > FROM_UNIXTIME('%b')"
query = "SELECT SUM(AcctSessionTime) FROM radacct \
WHERE UserName='%{%k}' AND AcctStartTime BETWEEN \
FROM_UNIXTIME('%b') AND FROM_UNIXTIME('%e')"
}
sqlcounter monthlycounter {
counter-name = Monthly-Session-Time
check-name = Max-Monthly-Session
reply-name = Session-Timeout
sqlmod-inst = sql
key = User-Name
reset = monthly

query = "SELECT SUM(AcctSessionTime - \
GREATEST((%b - UNIX_TIMESTAMP(AcctStartTime)), 0)) \
FROM radacct WHERE UserName='%{%k}' AND \
UNIX_TIMESTAMP(AcctStartTime) + AcctSessionTime > '%b'"

}
always fail {
rcode = fail
}
always reject {
rcode = reject
}
always ok {
rcode = ok
simulcount = 0
mpp = no
}
expr {
}
digest {
}
exec {
wait = yes
input_pairs = request
}
exec echo {
wait = yes
program = "/bin/echo %{User-Name}"
input_pairs = request
output_pairs = reply
}
#ippool main_pool { // комментируем ип пул нам не нужен ip будем раздавать через dhcp
instantiate {
exec
expr
}
authorize {
preprocess
auth_log
suffix
ntdomain
eap
sql
checkval
pap
}
authenticate {
Auth-Type PAP {
pap
}
Auth-Type CHAP {
chap
}
Auth-Type MS-CHAP {
mschap
}
eap
}
preacct {
preprocess
acct_unique
suffix
ntdomain
}
accounting {
detail
daily
unix
radutmp
sql
}
session {
radutmp
sql
}


post-auth {
sql
}
pre-proxy {
}
post-proxy {
eap
}
Вот собственно и весь основной конфиг радиуса если что непонятно читайте манн
Но этого файла мало как видно из конфига нам нужны еще 4 файла proxy.conf, clients.conf, eap.conf и конечно sql.conf. Начнем с SQL
sql {
driver = "rlm_sql_mysql"
server = "localhost"
login = "root"
password = "radiuspass"
radius_db = "radius"
далее файл не изменялся за исключением последней строки
readclients = yes // no заменяем на yes чтобы клиенты тоже брались из базы данных
}
Следующий файл, eap.conf, очень важен так как он скажет как радиусу работать с peap протоколом следует обратить внимание на то что, я публикую только раскомментированые строки то что не указано закоментированио
eap {
default_eap_type = peap
timer_expire = 60
ignore_unknown_eap_types = no
cisco_accounting_username_bug = no
md5 {
}
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
copy_request_to_tunnel = yes
use_tunneled_reply = yes
proxy_tunneled_request_as_eap = yes
}

mschapv2 {
}
}
Следующий файл proxy.conf файл вообщем-то остается без изменений единственное нам надо добавить дефолт проки следующим образом
realm DEFAULT {
type = radius
authhost = LOCAL
accthost = LOCAL
Ну и последний файл это clients.conf там нам надо исправить только secret в секции 127.0.0.1

Собственно с радиусом все проверяем
/usr/local/sbin/radiusd -fX
В ответ должны получить много всего но в конце должно быть вот это
Module: Instantiated radutmp (radutmp)
Listening on authentication *:1812
Listening on accounting *:1813
Ready to process requests.
Если этого нет то ищите ошибку в конфигах

Если все прошло удачно то теперь озаботимся вэб-интерфейсом для нашего радиуса
Ставим апач+пхп+экстеншенсы
cd /usr/ports/www/apache22
make; make install
После установки сказы ставим апач в автозагрузку
echo apache22_enable=YES >> /etc/rc.conf
Теперь ставим пхп
cd /usr/ports/lang/php5
make; make install
cd /usr/ports/lang/php5-extensions/
make; make install
При установке php5-extensions вам нужно проставить следующие экстеншенсы
bcmath, bz2, calendar, ctype, pcre, simplexml, spl, dom, fileinfo, filter, ftp, gd, gettext, hash, iconv, json, ldap, mcrypt, mhash, ming, mysql, mysqli, openssl, pdf, pdo, pdo_sqlite, posix, session, snmp, sockets, sqlite, tokenizer, xml, xmlreader, xmlrpc, xmlwriter, zip, zlib. После этого нам понадобиться Template_Sigma
cd /usr/ports/devel/pear-HTML_Template_Sigma/
make; make install
Теперь выкачиваем вэб интерфейс
fetch http://download.asn.pl/ara/ara-0.6.tar.gz
gunzip –d ara-0.6.tar.gz
tar –xvf ara-0.6.tar
cd ara-0.6
cp –r src /usr/local/www/radius
Теперь нам надо поправить конфиг вэб-морды для этого
cd /usr/local/www/radius/config
cp config.php.dist config.php
vi config.php
Переходим к правке конфига нас там интересует SQL server setting и access_level
/* SQL server setings */
$config["sql_driver"] = "mysql";
$config["sql_server_host"] = "localhost";
$config["sql_server_port"] = "3306";
$config["sql_username"] = "root";
$config["sql_passwd"] = "radiuspass";
$config["sql_db"] = "radius";
$config["sql_encoding"] = "utf8";

•••••••••••••••••••••••••••••••••••••••••••••••••

$config["access_level"] = ARA_ACCESS_ALL;
Теперь переходим в каталог /usr/local/www/radius/ и создаем access.file
cd /usr/local/www/radius/
htpasswd –c access.file admin
Дальше вводим пароль администратора радиуса который придумаем и подтверждаем его
Теперь настраиваем апач для работы с нашей вебмордой
vi /usr/local/etc/apache22/httpd.conf
После строки LoadModule php5_module libexec/apache22/libphp5.so добавляем
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
В строку DirectoryIndex index.html добавляем index.php, выглядеть это должно так
DirectoryIndex index.html index.php
И финальный штрих в конец файла httpd.conf перед строкой <IfModule ssl_module> вставляем
<Directory /usr/local/www/radius/htdocs/>
Options None
AllowOverride AuthConfig
AuthName "Radius Access"
AuthType Basic
AuthUserFile /usr/local/www/radius/access.file
require valid-user
Order allow,deny
Allow from all
</Directory>
Alias /radius /usr/local/www/radius/htdocs/
Перезапускаем апач, открываем браузер вбиваем линк http://yuors_radius_ip/radius
и видим следующие
Изображение
Переходим к разделу “nas” и добавляем туда наши точки доступа
Переходим по ссылке nas select, вбиваем название точки и нажимаем ок как показано на рисунке
Изображение
Откроется список параметров из которых надо заполнить три это ip, secret (пусть secret будет 123456 т.к. он нам понадобиться в дальнейшем), description и нажать ок (как показано на рисунке)
Изображение
Таким же образом заводим все остальные точки доступа
С Акцесс пойнтами разобрались, теперь заводим пользователей. Пока заводим двух, admin и testuser. Admin будет управлять точками доступа, а testuser будет тестовым пользователем которым мы будем коннектиться к wifi.
Итак приступим, переходим к вкладке users и нажимаем select в текстовом поле «choose (or create):» вбиваем имя пользователя “admin” и нажимаем ok
Изображение
На открывшейся вкладке «login: admin» нажимаем ссылку edit и попадаем на страничку редактирования аккаунта пользователя, нас интересует секция «table: check» начинаем вбивать атрибуты пользователя и их значения. Первый и основной атрибут мы ставим «User-Password» оператор ставим «==» в поле value вбиваем значение (сам пароль), для ограничения использования этой учетки добавляем атрибут “ Calling-Station-Id” ставим оператор ставим «==» и в поле value вбиваем мак точки доступа. Поскольку точек доступа у нас по условию семь мы добавляем все мак адреса точек с тем же атрибутом (этим мы ограничиваем количество станций которые могут авторизоваться на нашем радиусе под логином admin любому другому маку будет послано оповещение Login incorrect). Аналогично настраиваем учетку testuser.
Изображение

Переходим к настройке точек доступа. Как я сказал мы используем Zyxel ap G-3000 но вам подойдет любая точка с поддержкой радиуса и WPA. Поэтому без скринов расскажу что нам надо настроить
1. Имя и домен точки доступа
2. Прописать ip, dns, шлюз (причем ip должен быть тот который мы прописали в таблице nas на радиусе)
3. Сменить пароль пользователя admin на точке доступа (в идеале если поддерживается лучше зацепить эти точки к радиусу для проверке пароля администратора, но локальный пароль на точку доступа тоже лучше сменить)
4. Прописать настройки радиус сервера куда входит ip радиус сервера, порт (как правило 1812), и secret (тот что мы прописывали в таблице nas)
5. И наконец настраиваем WiFi. Прописываем SSID сети (идентификация при желании можно сделать скрытым, что бы никто не видел этой сети кроме тех у кого она настроена), выбираем тип сети WPA с шифрованием TKIP или AES, и включаем роуминг если он поддерживается вашими точками (мои поддерживают поэтому включил)
Вот собственно и все, оговорюсь, что при настройке wifi на компьютере во вкладке «Проверка подлинности»:
1. Выставить Тип EAP «Защищенные EAP (PEAP)»
2. Надо снять галку с чек бокса «Проверять подлинность как у компьютера при доступности сведений о компьютере».
3. Кликнуть «свойства» снять галку с «Проверять сертификат сервера»
4. В выборе метода проверки подлинности выбрать «Безопасный пароль (EAP-MSCHAP v2)»
5. Кликнуть кнопку «Настроить»
6. Снять галку «Автоматически использовать имя входа и пароль Windows (и имя домена если существует)»
Вот теперь точно все
У вас нет необходимых прав для просмотра вложений в этом сообщении.
лучший Linux это Freebsd
Ответить