Pull to refresh

RADIUS — немного о Mikrotik, NPS и не только

Reading time11 min
Views121K
  • Цель статьи

  • Определение

  • Компоненты

  • Общие понятия

  • Сфера применения  

    • login  

    • VPN (ppp*)  

    • wifi

    • dot1x  

    • ipsec

  • диагностика

  • выводы

Цель

Цель данной статьи - объяснить логику работы радиуса в примерах, избавить от боязни и иллюзии сложности использования.

Changelog

24.01.2021 - Добавлено про Wifi +Vlan
21.10.2021 - Добавлено про ipsec eap

Определение, назначение, общие сведения

RADIUS - это протокол, для авторизации, аутентификации и учёта (AAA).

Позволяет повысить безопасность сети и централизованно управлять доступами.

Сервер RADIUS может иметь свою базу данных с учетными данными (например файлы или mysql) или работать в паре с другим сервером, например Active Directory.

Кроме AAA позволяет передать некоторые дополнительные данные (настройки) клиенту прошедшему аутентификацию, в том числе vendor-specific attributes (VSA). У Mikrotik такие тоже есть, позже пройдемся по самым интересным.

Существуют много популярных приложений радиус сервера, самый популярные: freeRADIUS и Служба NPS (Network Policy Server) Windows Server. Более подробно мы рассмотрим второй вариант.

Компоненты кейса

  • Суппликант - устройство которое намерено пройти процедуру авторизации и аутентификации.

  • Аутентификатор - устройство к которому подключается суппликант, которое получает у суппликанта данные авторизации и которое проверяет их на RADIUS сервере. NB! Является клиентом для радиус-сервера.

  • RADIUS сервер (он же радиус сервер, он же сервер аутентификации).

Настройка

Установку роли описывать не буду, существует 100500 статей в картинках, например: тыц

  1. Добавление радиус клиента на радиус-сервере. Нам нужно заполнить "понятное имя", IP адрес и придумать пароль (а.к.а. "секрет"), который понадиобится при настройке аутентификатора (mikrotik в нашем случае)

Политики  запросов на подключение и Стетевые политики очень похожи при настройке, и нужно понимать разницу между ними. Первые нужны для того что бы  при определенных условиях определить сервер на котором будет проходить проверка аутентификации клиента (к примеру локально или на другом удаленном радиус сервере) а так же для некоторых манипуляций с атрибутами.    Вторые же позволяют определить набор условий по которым возможно обозначить разрешить или отклонить запроос клиента на подключение.

    Политики имеют порядок и обрабатываются по нему одна за другой. Если подключение не соответствует условиям политики, то проверяется следущая и так далее. К примеру, это поможет разделить правила обработки для проводных\беспроводных и впн клиентов. {.is-warning}

  1. Добавление политики запросов на подключение

  2. Добавление сетевой политики

Некоторые типовые кейсы применения радиус сервера :

  1. централизованная аутентификация на устройствах поддерживающих aaa

  2. аутентификация для vpn (pptp\l2tp)

  3. аутентификация в wifi

  4. аутентификация устройств при подключении к порту rj45 - dot802.1x

 Итак подробнее, + некоторые плюшки.   Для всех наших пунктов нам нужно настроить радиус клиента в mikrotik

/radius add address=10.10.11.100 comment="PVE AD" secret=STRONG_SECRET_PASSWORD service=ppp,logi
n,hotspot,wireless,dhcp,ipsec,dot1x timeout=600ms

address -  Адрес радиус сервера secret - пароль, который мы совсем недавно настраивали для радиус клиента service - сервисы в mikrotik, которые могут использовать радиус для аутентификации.

Отдельно стоит отметить пункт timeout=600ms, если вы используете радиус через медленные каналы с большими задержками, стоит увеличить это значение.

Теперь можно начинать настраивать интересные вещи.

1. настроим вход на микротик

/user aaa
set accounting=yes default-group=read use-radius=yes

Стоит уделить внимание параметру default-group он означает группу по умолчанию, в которая применится к пользователю.

Теперь настроим NPS:

Но… это слишком просто и не интересно, давайте преставим немного мифическую, но более интересную ситуацию. Предположим мы хотим разным уровням техподдержки, выдать разный уровень доступа на устройство. Или , предположим, в рамках одной компании разделить cетевиков c полным доступом и джунов, котоые могут только смотреть параметры.

Обратимся к  Wiki mikrotik, мы можем заметить RADIUS атрибут, который позволяет определить доступы какой группы применятся к пользователю который аутентифицируется на устройстве через RADIUS. *Mikrotik-Group - Router local user group name (defines in /user group) for local users; HotSpot default profile for HotSpot users; PPP default profile name for PPP users. *  воспользовавшись промт'ом  мы понимаем что этот атрибут позволяет задать нам имя встроенной группы при авторизации , или задать имя профиля при аутентификации в сервисы vpn или hostspot. этот атрибут мы буем использовать и позже. что бы отделить мух от котлет при  авторизации для впн мы будем использовать дополнительные условия, но это позже.

итак, как мы этого добьемся … мы можем создать в System -> users -> group две группы со специфичными параметрами доступа, а можем и воспользоваться уже существующими, к примеру full и read.

Но все это ничего без второй части, нам необходимо настроить NPS. Давайте создадим в остнастке Пользователи и компьютеры Две группы пользователей admins-network и admins-junior. И два пользователя net-junior и net-admin,  добавим их в соответствующие группы.

Политику запроса на подключение мы уже создали, перейдем к сетевым политикам. в Оснастке NPS создадим две политики mikrotik-login-junior и mikrotik-admin-network , в условиях первой зададим :

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

 Сразу попробуем авторизоваться и видим что попали в нужную группу read  

В методах проверки подлинности указываем :

Политика mikrotik-admin-network будет отличаться тем что в условиях выберем группу admins-network а значение отрибута MIKROTIK_GROUP зададим как full Результат ожидаемый, мы залогинились в микротик под полными правами:

/user active print detail
Flags: R - RADIUS, M - by-romon
 0 R when=jan/05/2021 10:36:52 name="net-admin" address=10.10.15.7 via=winbox
     group=full

 1 R when=jan/05/2021 10:37:04 name="net-admin" address=10.10.15.7 via=telnet
     group=full

Перейдем к впн, и к стразу более интересному сценарию.

Предположим мы хотим отделить админов, от остальных работников. Выдадим админам профиль с подсетью которая будет иметь доступ к management vlan и не только, и выдадим отстальным сотрудникам профиль с подсетью которая будет иметь ограниченый доступ только к 1c, RDP, etc.. . Предположим, мы используюем для впн l2tp\ipsec Для этого создадим в микротик два профиля в PPP -> profile

/ip pool add name=pool_l2tp_admin ranges=10.10.21.10-10.10.21.250
/ip pool add name=pool_l2tp_users ranges=10.10.22.10-10.10.22.250

/ppp profile add dns-server=10.10.21.1 local-address=10.10.21.1 name=l2tp-vpn-admin remote-address=pool_l2tp_admin use-compression=no use-encryption=yes

/ppp profile add dns-server=10.10.22.1 local-address=10.10.22.1 name=l2tp-vpn-users remote-address=pool_l2tp_users use-compression=no use-encryption=yes

В настройки правил форейвола для ограничения доступа подсетей я пожалуй не буду углубляться, подразумевается что вы понимаете как из одной подсети запретить доступ к ресурсу и как разрешить. (с)  предпологается, что вы немного сетевик. Касательно примера подсети 10.10.21.0/24 необходимо разрешить форвард в подсети серверов и management а подсети  10.10.22.0/24 необходимо разрешить только доступк корпоративным сервисам, но не к сетям управления.

Настроим NPS. В остнастке Пользователи и компьютеры создадим 2 группы пользователей vpn-admins и vpn-users, знакомого нам net-admin включим в 1ю группу, а net-buh во вторую. Политика запросов на подключение у нас будет использоваться та же. А политики сети созадим. В Условиях важно не только задать группу пользователей, но и тип порта NAS

Знакомым нам образом добавим атрибут указывающий какой профиль микротика использовать.

Методы проверки подлинности используем как и в прошлый раз. В настройках Сервера VPN рекомендуется указать точно такой же тип.

На вскидку полезными так же могут отказаться атрибуты : Mikrotik-Rate-Limit - для ограничения скорости vpn клиентов

Настроим тестовое поключение и увидим что получили IP из пула для сетевых администраторов.

Теперь настроим политику для обычных пользователей:

Результат - пользователь получил ip из нужной подсети

Wifi и Dot1x

Прежде чем перети к самому вкусному, хочется сделать выбор как мы будем проходить авторизацию, можно выбрать по логину и паролю, компьютеру, использовать mac адрес как логин и пароль.. и наконец пойти самым сложным   интересным путем, использовать сертификаты. В качестве предварительной подготовки нам необходимо:

  • настроить службу центра сертификации Windows тыц, актуально и для следующего пункта

  • настроить GPO для распространения CA сертификата домена тыц

  • GPO  автоматического получения сертификата компьютера docs.microsoft

  • GPO включение службы dot1X (проводная автонастройка) и создать Политики проводных сетей (802.3) для выбора способа проверки подлинности тыц

  • GPO Автоматическое подключение к Wifi до логина пользователя тыц

Данные пункты не маленькие что бы включать их в эту статью, но достаточно освещены в статьях интернета.

wifi

Настройку WiFi каждый настраивает как ему удобно. Я к примеру, предпочитаю CapsMan, даже  если это будет единственная AP в сети. В любом случае нас интересует только Security Profile/Security Cfg.

Создадим политику сети: В условиях выберем Тип порта NAS = Беспроводная - IEEE 802.11

А в методах проверки подлинности следующее.

Если вы используете CapsMan + Bridge Vlan Filtering и хотите что бы при подключении пользователи попадали в указанный вами VLAN - нужно указать атрибут: Mikrotik-Wireless-VLANID.

Как понять что все получилось или что то идет не так )? - все просто в первую очередь идем в логи. Видим событие с подробной информацией кто куда и когда ходил и согласно какой политике получил  разрешение или отказ в доступе.

Какие радиус атрибуты могут быть нам полезны:

  • Framed-Pool - можем для отдельных групп пользователей использовать свой ip пул и выполнять какие то манипуляции на основе этого в форейволе

  • Filter-Id - применять какое то правило форейвола сразу к клиенту

  • Mikrotik-Wireless-VLANID - указать в какой vlan должен попасть клиент (Возможно, однажды,  по заявкам    пользователей я дополню статью примером с ипользованием vlan  в wifi) …

  • устанавливать лимиты по обьему или/и скорости трафика

  • и многие другие параметры из вики, либо их комбинации с условиями сетевой политики, смотря сколько у вас фантазии :)

dot1x

 Зачем нужен dot1X и как его настроить.. очень много интересных слов можно было бы тут написать, но все сказано до нас. Например на канале одного прекрасного тренера или wiki

Половина смысла с саркальной точки зрения в dot1x в том, что в случае успешной проверки подлинности наше устройство попадет в влан указанный нами в микротике или в влан который мы поличим в качестве атрибута у радиуса. Если проверка подлинности пройдет с отказом или ответ не будет получен от радиуса (например в случае его недоступности), то порт перейдет в изолироованный режим (будет заблокирован любой трафик на порту) или в случае если указан Reject VLAN ID то попадет в влан, для которого мы настроили(я надеюсь все таки настроили) максимально безопасные правила форейвола для чужеродных устройств .

Начнем с микротика:

Настроим политики сети: В условиях необходимо отобрать проводные клиенты

Параметры аутентификации:

В настройках атрибутами выдадим рабочий влан

К примеру вот так выглядит отказ в авторизации:

А вот так успешное подключение:

IPSEC

С недавнего времени стало популярно настраивать vpn через ipsec ikev2, но многих пугает морока с клиентскими сертификатами. В этом плане использовать учетные данные из AD гораздо удобнее.

Для начала включим в настроках добавленного радиус клиента что он будет использоваться для ipsec

Дефолтные конфиги в ipsec не принято трогать. поэтому будем создавать свои.

Создадим "группу конфигов"

/ip ipsec policy group add name=ipsec
/ip ipsec policy group add name=ipsec

Настроим Profile (фаза 1)

/ip ipsec profile add dh-group=modp1024 enc-algorithm=aes-192,3des name=ipsec
/ip ipsec profile add dh-group=modp1024 enc-algorithm=aes-192,3des name=ipsec

Создадим пир для входящих подключений

/ip ipsec peer add exchange-mode=ike2 name=ipsec passive=yes profile=ipsec send-initial-contact=no
/ip ipsec peer add exchange-mode=ike2 name=ipsec passive=yes profile=ipsec send-initial-contact=no

Создадим настройки proposals (фаза 2)

/ip ipsec proposal add name=ipsec
/ip ipsec proposal add name=ipsec

Добавим пулл ip адресов которые будут выдаваться клиентам

/ip pool add name=pool1 ranges=10.20.0.10-10.20.0.250
/ip pool add name=pool1 ranges=10.20.0.10-10.20.0.250

Добавим Mod config, из которого клиенты получают префиксы подсетей за впн и dns

/ip ipsec mode-config add address-pool=pool1 name=ipsec split-include=0.0.0.0/0,10.20.0.0/16
/ip ipsec mode-config add address-pool=pool1 name=ipsec split-include=0.0.0.0/0,10.20.0.0/16

Создадим шаблонную политику шифрования трафика

/ip ipsec policy add group=ipsec proposal=ipsec template=yes
/ip ipsec policy add group=ipsec proposal=ipsec template=yes

Настроим аутентификацию vpn клиентов
Важный момент. нам все таки прийдется использовать сертификат.
Данный сертификат используется только для шифрования трафика между клиентом и впн сервером, и его нужно указать обязательно иначе будет появляться ошибка EAP neeeds certificate if EAP-only is not used.

Если планируете подключаться из windows машин в домене, то можете импортировать сертификат из своего CA и разлить его политикой на ноутбуки\компьютеры.
Если нет своего CA то можно сгенерировать сертификат на микротике. но тогда прийдется опять таки его импортировать на клиентах вручную или через GPO.
И на мой взгляд самый удобный способ, воспользоваться сертификатом letsecrypt, кстати в ros7 есть команда для автоматического получения сертификата.
Или приобрести коммерческий сертификат. У меня в примере Letsencrypt, обратите внимание что необходимо добавить так же все промежуточные сертификаты.

/ip ipsec identity add auth-method=eap-radius certificate=lefull,lefull_1,lefull_2 generate-policy=port-strict mode-config=ipsec peer=ipsec policy-template-group=ipsec
/ip ipsec identity add auth-method=eap-radius certificate=lefull,lefull_1,lefull_2 generate-policy=port-strict mode-config=ipsec peer=ipsec policy-template-group=ipsec

Добавляем политику на NPS сервере

В методах проверки подлинности разрешаем аутентификацию по паролю используюя ms-chap v2

После этого можно подключаться клиентом, все должно работать )
Если желательно расписать как настраивать клиента на mikrotik дайте знать )

Диагностика

Не всегда наши настройки сразу работают так как надо, иногда что то идет не так, и очень хочется понять что именно. Для того что бы понять в чем причина у нас есть :

  • логи mikrotik

    Идем в system logging add topics=radius,debug action=memory disabled=no и пробуем что то делать, в log print появятся записи связанные с радиусом. - логи Службы

  • политики сети и доступа  

    я уже приводил пример, еще раз - искать здесь, и читать внимательно сообщения  

  • возможны проблемы из за windows брандмауера починить можно

Get-NetFirewallRule -DisplayGroup "Сервер политики сети" | where DisplayName -like "*RADIUS*" | Set-NetFirewallRule -Service Any

или для англоязычной версии:

Get-NetFirewallRule -DisplayGroup "Network Policy Server" | where DisplayName -like "*RADIUS*" | Set-NetFirewallRule -Service Any 
  • radclient из пакета freeradius-utils. Позволяет из командной строки проверить некоторые типы авторизации, к примеру подключение к vpn

Тест:

echo "User-Name = USER,User-Password=PASSWORD,NAS-Port-Type=Virtual" | radclient -s 10.10.11.100:1812 auth SHARE_NPS_SECRET -x

Вывод программы:

Sent Access-Request Id 177 from 0.0.0.0:42354 to 10.10.11.100:1812 length 56
       User-Name = "USER"
       User-Password = "PASSWORD"
       NAS-Port-Type = Virtual
       Framed-Protocol = PPP
       Cleartext-Password = "PASSWORD"
Received Access-Accept Id 177 from 10.10.11.100:1812 to 10.10.15.7:42354 length 94
       Mikrotik-Group = "pptp-nps"
       Framed-Protocol = PPP
       Service-Type = Framed-User
       Class = 0xa1cd098c00000137000102000a0a0b6400000000ec967e14be8346ce01d6d63b3e2ca9d70000000000000092
Packet summary:
       Accepted     : 1
       Rejected     : 0
       Lost         : 0
       Passed filter : 1
       Failed filter : 0

Выводы

RADIUS в сетевой среде очень полезен в плане безопасности и удобен в плане централизованного управления. Настраивать не так уж и сложно, главное читать, понимать документацию и логи.

Если какой то из пунктов непонятен, пишите. попробую показать или помочь разобраться.

Если в статье нашли ошибки, неточности или знаете как сделать лучше тоже пишите.

Благодарности:

Спасибо @aslancherkesov за злого редактора и свежий взгляд на буквы.

Tags:
Hubs:
+14
Comments10

Articles