Поиск по этому блогу

24.03.2009

Примеры использования radius-сервера FreeRadius

В примерах будут рассматриваться только текстовые конфигурационные файлы. Очень часто необходимо создать небольшое количество учетных записей устанавливать/настраивать/сопровождать базу данных никакого смысла нет.

Текстовые конфигурационные файлы FreeRadius находятся в каталоге /usr/local/etc/raddb

clients.conf - здесь описываются сервера доступа, например:
client  10.1.0.1 {
secret = VerySecrectKey
shortname = nas_one
nastype = cisco
}
client 10.2.0.1 {
secret = VerySecrectKeyAgain<
shortname = nas_two
nastype = cisco
}
users - здесь описываются учетные записи пользователей. Я помещаю все учетные записи вверху файла users. Вот самая простейшая из них:
ivan      Cleartext-Password := "ivan123"
Service-Type = Framed-User,
Framed-Protocol = PPP



Указывается логин ivan и пароль ivan123. В конкретном примере адрес будет выдан марштузизатором (NAS) из собственного пула адресов. Когда на удаленном рабочем месте создается vpn-подключение, оно становится маршрутом по-умолчанию и весь трафик направляется через него, в частности интернет. Если циска осуществляет трансляцию пула адресов в интернет и вас не смущает подобное прохождение вашего интернет-трафика, то можно ничего не делать. В противном случае понадобится в настройках подключения убрать галочку: А так же понадобится на удаленном компьютере прописать статический маршрут в локальную сеть офиса. Вот тут окажется, что необходимо при подключении выдавать постоянный ip-адрес и что это невозможно реализовать средствами Cisco IOS. Адрес возможно передать в качестве атрибута подключения от radius-сервера nas'у cisco. Сеть, выдаваемая radius'ом не должна быть в локальных пулах nas'ов, чтобы исключить дублирование адресов.
st_ip             Cleartext-Password := "ipaddr"
Service-Type = Framed-User,
Framed-Protocol = PPP,
Framed-IP-Address = 10.10.10.2,
Framed-IP-Netmask = 255.255.255.255

Таким образом, пользователю st_ip всегда будет выдаваться адрес 10.10.10.2 на который он сможет прописать статический маршрут сети своего офиса 10.0.0.0 255.0.0.0 .

Если необходимо подключить дополнительно какие-нибудь устройства, например ip-телефон, то на удаленной стороне необходимо как минимум установить маршрутизатор, который сумеет установить pptp-сессию до вашего NAS через имеющееся WAN-подключение и у которого будет на LAN порту прописана небольшая сеть из вашего офиса. Трансляция с этой сети на сеть офиса 10.0.0.0 255.0.0.0 должна быть отключена. В users добавлена запись:
st_ip             Cleartext-Password := "ipaddr"
Service-Type = Framed-User,
Framed-Protocol = PPP,
Framed-IP-Address = 10.10.10.2,
Framed-IP-Netmask = 255.255.255.255,
Framed-Route = "10.11.0.0/28 10.10.10.2"
При успешном подключении пользователя st_ip, на NAS появится указанный статический маршрут в таблице маршрутизации. Далее все зависит от корректной настройки удаленного оборудрования. Помню в качестве такого оборудования использовался какой-то Linksys c openwrt.

Еще с radius'ом можно делать такие вещи:
  • ограничить доступ пользователя в зависимости от адреса nas;
  • ограничить доступ пользователя к части локальной сети с помощью индивидуальных списков доступа.
Первое мне понадобилось, когда пришлось делать удаленный доступ для двух разных групп людей, которые подключались на разные интерфейсы одного NAS'а. Использование второго NAS'а было невозможно.

huntgroups - тут из адреса NAS'а можно сделать правило. Например имеющиеся в clients.conf адреса NAS'ов поместить в разные группы:
manager            NAS-IP-Address == 10.1.0.1
support NAS-IP-Address == 10.2.0.1
В users появится дополнительное обязательное правило. Обязательно в той же строке, что и login, иначе проверка проводиться не будет:
bestmanager       Cleartext-Password := "11111", Huntgroup-Name == "manager"
Service-Type = Framed-User,
Framed-Protocol = PPP

wheel_sp Cleartext-Password := "1234", Huntgroup-Name == "support"
Service-Type = Framed-User,
Framed-Protocol = PPP
Таким образом, пользователи с указанной группой могут подключаться только на свой NAS. Пользователи без группы - на любой.

Ограничить доступ какой-то учетной записи можно с помощью списков доступа. Сами правила могут быть переданы в атрибутах, либо могут быть указаны на NAS'е в виде ACL и тогда в атрибутах будет передаваться номер ACL. Именно номер, так как с именами иногда возникают проблемы. В частности у меня с FreeRadius'ом не заработало, а с GNU Radius таких проблем не было. Пусть на NAS'е имеется некий ACL 100:
nas#show access-lists 100
Extended IP access list 100
10 permit ip 10.10.9.0 0.0.0.255 10.50.0.0 0.0.0.255
Где 10.10.9.0/24 - динамический локальный пул на NAS'е, а 10.50.0.0 0.0.0.255 - сеть, куда нужно обеспечить доступ, а все остальное запретить. В users создаются учетные записи с дополнительным атрибутом FilterID:
showme           Cleartext-Password := "1234"
Service-Type = Framed-User,
Filter-Id = "100",
Framed-Protocol = PPP
По-умолчанию NAS применит полученный ACL на out. Чтобы он блокировал исходящий от пользователя (входящий для NAS / in) на NAS'е выполняется команда:
radius-server attribute 11 default direction in

Настройку AAA-модели на NAS'е при использовании radius'а опишу в другой статье.