none
Применение NPS Network Policy по условию RRS feed

  • Вопрос

  • Приветствую!

    Имеем:
    - WiFi-точку доступа производства Cisco.
    - Network Policy Server на базе Windows Server 2008 R2
    - Клиенты WiFi подключаются к WiFi сети с использованием аутентификации на RADIUS сервере

    Схема работает, вопросов нет.

    Требуется:
    - настроить условие применения NPS Network Policy на основе SSID WiFi-сети.
    Например:
    Если пользователь подключается к WiFi-сети с SSID=Test1, то применять одну Network Policy, если с SSID=Test2, то другую.

    Возможный вариант решения это использовать графический интерфейс и настроить в свойствах Network Policy на вкладке Conditions условие по атрибуту Called-Station-Id=".*:Test1$".
    Если я использую например WiFi-точку доступа D-Link, то она передаёт в этом атрибуте информацию о SSID и моя задача решена, условие срабатывает как нужно.
    Вот пример лога NPS (из C:\Windows\System32\LogFiles):
    172.16.32.31,host/IT05.ad.domain.ru,10/04/2013,13:07:21,IAS,WZ-TMG01,4,172.16.32.31,32,00:24:01:9d:05:69,5,0,30,00-24-01-9D-05-69:Test1,31,00-26-82-D7-A0-D5,12,1400,61,19,77,CONNECT 11Mbps 802.11b,4108,172.16.32.31,4116,0,4128,wz-ap1007,4154,Secure Wireless Connections (certificate or login + password),4155,1,4129,domain\IT05$,4130,domain\IT05$,4149,Secure Wireless Connections (certificate or login + password),25,311 1 172.16.11.1 09/13/2013 05:53:36 5499,8136,1,4132,Microsoft: Secured password (EAP-MSCHAP v2),4127,11,8153,0,8111,0,4136,1,4142,0
    , где значение атрибута Called-Station-Id="00-24-01-9D-05-69:Test1"

    Однако имеющаяся у меня WiFi-точка доступа Cisco не имеет технической возможности передать в атрибуте Called-Station-Id ещё что-то кроме своего MAC-адреса ( http://www.cisco.com/en/US/docs/wireless/access_point/12.4_10b_JA/configuration/guide/scg12410b-chap13-radius-tacacs.html#wp1039283 ) , но может SSID передать в атрибуте VSA (attribute 26) - Vendor-Specific-Attribute.
    Чтобы включить передачу VSA, в конфиг Cisco включаем строчку "radius-server vsa send".
    Вот пример лога NPS (из C:\Windows\System32\LogFiles, формат файла лога - IAS (Legacy)) при подключении через Cisco WiFi-точку:
    10.0.10.9,gis-android@domain.ru,10/03/2013,15:51:11,IAS,SERV00SRV1,12,1400,30,64d8.14ee.faf0,31,0015.004a.3dee,6,1,61,19,5,261,87,261,4,10.0.10.9,4108,10.0.10.9,4116,9,4128,RNU-AP1,5000,ssid=Test1,4154,Secure Wireless Connections,4155,1,4129,DOMAIN\gis-android,4130,DOMAIN\gis-android,4127,5,4149,Secure Wireless Connections (certificate or login + password),25,311 1 10.0.1.75 10/02/2013 19:50:16 69405,8136,1,4132,Microsoft: Smart Card or other certificate,4136,1,4142,0
    , где "ssid=Test1" - это значение VSA атрибута Cisco-AV-Pair.

    Проблема:
    Проблема заключается в том, что в графическом интерфейсе свойств Network Policy невозможно настроить Condition по этому атрибуту.

    Как видится решение этой задачи:
    Выполнить настройку политики сетевого подключения NPS с помощью командной строки вида
    netsh nps set np name = "Secure Wireless Connections" conditionid = "0x1a" conditiondata = "0100001388000Bssid=Test1"
    , однако данное значение Conditionid\Conditiondata к положительному результату не приводит.

    Здесь нашёл аналогичное решение задачи, но по оборудованию другого вендора - http://h30499.www3.hp.com/t5/MSM-Series/Filter-NPS-policy-on-advanced-RADIUS-attributes/td-p/5956773#.Uk6QEn-Gjct

    Прошу:
    - подсказать корректное значение Conditionid\Conditiondata для случая с WiFi-точкой доступа Cisco для команды netsh nps set..
    - или другой способ решения задачи

    Спасибо.


    MCITP





    4 октября 2013 г. 10:02

Ответы

  • Есть решение задачи:

    -          В конфигурацию Cisco включить строку
    radius-server vsa send
    , что позволит отправлять на
    Radius-сервер VSA-атрибут Cisco-AV-Pair, содержащий значение вида «ssid=<SSID>», например «ssid=TEST».

    -          Настроить NPS сервер, подготовить соответствующие Network Policies

    -          Выгрузить конфигурацию NPS в .xml файл.
    Пример
    команды:
    netsh nps export filename="C:\NPS_config.xml" exportPSK=YES

    -          Отредактировать .xml-файл, добавив Condition-ы в две политики (в рассматриваемом примере две WiFi-сети)

    Непосредственно после «NAS Port Type» Condition, строка которого в xml-файле выглядит как
    <
    msNPConstraintxmlns:dt="urn:schemas-microsoft-com:datatypes" dt:dt="string">MATCH("NAS-Port-Type=^18$|^19$")</msNPConstraint>
    , вставить
    Condition по атрибуту Cisco-AV-Pair, который должен выглядеть следующим образом:
    * для первой политики

    <msNPConstraint xmlns:dt="urn:schemas-microsoft-com:datatypes" dt:dt="string">MATCH("Cisco-AV-Pair=ssid=TEST$")</msNPConstraint>
    * для второй политики
    <msNPConstraint xmlns:dt="urn:schemas-microsoft-com:datatypes" dt:dt="string">MATCH("Cisco-AV-Pair=ssid=TEST-inet$")</msNPConstraint>
    ,где $-это символ окончания строки. В этом поле можно использовать регулярные выражения - http://technet.microsoft.com/en-us/library/cc755272(v=ws.10).aspx

    -          Импортировать конфигурацию NPS следующей командой:
    netsh nps import filename="C:\NPS_config.xml"

    -          Проверить конфигурацию, отобразив её на экране следующей командой:

    netsh nps show np

    З.Ы.:
    Хочу заметить, что команда
    netsh nps set np name = "Network Policy" conditionid = "0x3d" conditiondata = "^18$|^19$" conditionid = "0x1388" conditiondata = "ssid=TEST$"
    по сути призванная сделать то же самое, - не даёт выполнить задуманное.

    З.З.Ы:
    Благодарю Николая из техподдержки Microsoft за оказанную помощь в решении проблемы.


    MCITP




    14 октября 2013 г. 13:52

Все ответы

  • Если использовать метод той статьи, то в профиле вы увидите, что атрибут Cisco-AV-Pair соответствует код 0x1388. 

    Таким образом, можете попробовать conditionid = "0x1388" conditiondata = "ssid=Test1", но вот съест ли это NPS - не знаю.

    Другой вариант - попробовать честно записать VSA через conditionid = "0x1a"

    conditiondata для вашего случая будет "0100000009010Сssid=Test1". Для пояснения почему так, я рассмотрю эту строку по частям, с пробелами между частями, вставленными для наглядности - "01 00000009 01 0С ssid=Test1" :

    01 - не знаю, зачем оно нужно, взято из примера

    00000009 - код вендора для Cisco

    01 - тип атрибута вендора (Cisco-AV-Pair)

    0C - длина поля атрибута (длина строки + 2 байта на тип и длину, при изменении длины строки это поле тоже поменяется)

    ssid=Test1 - значение атрибута.

    Если какой-то вариант сработает - дайте знать.


    Слава России!

    4 октября 2013 г. 13:39
  • Если использовать метод той статьи, то в профиле вы увидите, что атрибут Cisco-AV-Pair соответствует код 0x1388. 

    Таким образом, можете попробовать conditionid = "0x1388" conditiondata = "ssid=Test1", но вот съест ли это NPS - не знаю.


    Нет, NPS conditionid = "0x1388" не принимает. Команда выполняется без ошибки, но Condition не создаётся.
    Предполагаю что conditionid должен быть только из этого списка:
    netsh nps show npconditionattributes

    Наш conditionid должен похоже быть равен 0x1a

    MCITP

    4 октября 2013 г. 15:11
  • Другой вариант - попробовать честно записать VSA через conditionid = "0x1a"

    conditiondata для вашего случая будет "0100000009010Сssid=Test1". Для пояснения почему так, я рассмотрю эту строку по частям, с пробелами между частями, вставленными для наглядности - "01 00000009 01 0С ssid=Test1" :

    ...

    Спасибо, опробую, отпишусь.

    MCITP

    4 октября 2013 г. 15:32
  • А как на счёт такого варианта:
    netsh nps set np name = "Secure Wireless Connections" conditionid = "0x1A" conditiondata = "1200000009010Cssid=Test1"

    Заодно встречный вопрос - откуда вы взяли код 0x1388?

    4 октября 2013 г. 17:59
  • А как на счёт такого варианта:
    netsh nps set np name = "Secure Wireless Connections" conditionid = "0x1A" conditiondata = "1200000009010Cssid=Test1"

    Заодно встречный вопрос - откуда вы взяли код 0x1388?

    Александр, здравствуй!
    Попробую. Только вот не ранее понедельника.
    Обоснуй 12 в начале строки.
    0x1388 - это код атрибута Cisco-AV-Pair в шестнадцатиричном представлении (в десятеричном - 5000. Кстати его также видно и в логе NPS-а - "...,5000,ssid=Test1,..").

    MCITP


    4 октября 2013 г. 18:27
  • Привет :) !

    12 - это шестнадцатеричная длина в байтах всего VSA, согласно документации, на которую ты сам приводил ссылку. Вот тут это описано более внятно.

    Видно-то видно, но в таком сплошном потоке значений, без названий полей, очень трудно разобраться. Ты можешь это в виде таблицы предоставить?

    Как вариант, попробуй "1200001388010Cssid=Test1"...

    4 октября 2013 г. 18:35
  • Посмотрел я документацию Cisco по AP (по вашей ссылке) и что-то покзалось мне, что проверить ssid в условиях политики невозможно: он, согласно документации, не передается в сообщении Access-Request, которое как раз и вызывает проверку условий политик.

    Если есть желание, проверьте это сниффером (Network Monitor от MS или еще каким-нибудь).


    Слава России!

    4 октября 2013 г. 19:39
  • Опробовал следующие значения в conditiondata:

    1100001388010Cssid=TEST
    1600001388010Cssid=TEST-inet

    0100000009010Сssid=TEST

    1100000009010Сssid=TEST
    1600000009010Сssid=TEST-inet

    --
    1100001388010Bssid=TEST
    16000013880110ssid=TEST-inet

    0100000009010Bssid=TEST

    1100000009010Bssid=TEST
    16000000090110ssid=TEST-inet

    Ни одно не сработало.


    MCITP


    7 октября 2013 г. 10:58
  • В таком случае, тут два варианта - либо оно не работает в принципе, либо нужно найти правильное значение. Например, я не уверен на счёт предпоследнего байта (01). Ты можешь этот VSA сетевым монитором в явном виде получить, чтоб сомнений не было? Заодно, проверишь предположение про Access-Request, высказанное выше...
    7 октября 2013 г. 18:56
  • Ок, глянул сетевым монитором:

    Честно говоря не ожидал увидеть так много интересного :) :
    - корректное значение Conditiondata для текущего теста по идее должно быть: "1100000009010Bssid=TEST"
    (Александр, ты с первого раза предложил верно рассчитанные циферки ;) )
    - VSA всё же входит в состав атрибутов Access Request.

    Conditiondata я настроил в точном соответствии с увиденным в NetworkMonitor, однако подключение всёравно было неудачным. :(


    MCITP





    7 октября 2013 г. 20:40
  • Перепробовал различные варианты conditiondata. Не помогло.

    Нашёл интересное - вот тут, ссылаясь на это говорят что использование Vendor-Specific-Attribute в качестве Condition в NPS не поддерживается.

    Похоже придётся поверить.


    MCITP

    7 октября 2013 г. 21:39
  • Я тоже видел это сообщение, но есть у меня ощущения, что не очень-то нужно ему доверять.
    Как ещё один вариант - попробуй вместо текстовой строки записать её так же в байтовом виде...

    7 октября 2013 г. 23:02
  •  в байтовом виде...


    Пробовал уже. Не срабатывает condition (именно не срабатывает и не применяет политику. Логи и поведение клиента при этом равносильны отсутствию применяемых политик Grant Access).
    Также пробовал включить трассировку командой netsh ras set tr * enable и посмотреть на логи - ничего интересного не увидел.

    MCITP

    8 октября 2013 г. 9:46
  • Ну что ж - печально, коли так.
    8 октября 2013 г. 14:30
  • Есть решение задачи:

    -          В конфигурацию Cisco включить строку
    radius-server vsa send
    , что позволит отправлять на
    Radius-сервер VSA-атрибут Cisco-AV-Pair, содержащий значение вида «ssid=<SSID>», например «ssid=TEST».

    -          Настроить NPS сервер, подготовить соответствующие Network Policies

    -          Выгрузить конфигурацию NPS в .xml файл.
    Пример
    команды:
    netsh nps export filename="C:\NPS_config.xml" exportPSK=YES

    -          Отредактировать .xml-файл, добавив Condition-ы в две политики (в рассматриваемом примере две WiFi-сети)

    Непосредственно после «NAS Port Type» Condition, строка которого в xml-файле выглядит как
    <
    msNPConstraintxmlns:dt="urn:schemas-microsoft-com:datatypes" dt:dt="string">MATCH("NAS-Port-Type=^18$|^19$")</msNPConstraint>
    , вставить
    Condition по атрибуту Cisco-AV-Pair, который должен выглядеть следующим образом:
    * для первой политики

    <msNPConstraint xmlns:dt="urn:schemas-microsoft-com:datatypes" dt:dt="string">MATCH("Cisco-AV-Pair=ssid=TEST$")</msNPConstraint>
    * для второй политики
    <msNPConstraint xmlns:dt="urn:schemas-microsoft-com:datatypes" dt:dt="string">MATCH("Cisco-AV-Pair=ssid=TEST-inet$")</msNPConstraint>
    ,где $-это символ окончания строки. В этом поле можно использовать регулярные выражения - http://technet.microsoft.com/en-us/library/cc755272(v=ws.10).aspx

    -          Импортировать конфигурацию NPS следующей командой:
    netsh nps import filename="C:\NPS_config.xml"

    -          Проверить конфигурацию, отобразив её на экране следующей командой:

    netsh nps show np

    З.Ы.:
    Хочу заметить, что команда
    netsh nps set np name = "Network Policy" conditionid = "0x3d" conditiondata = "^18$|^19$" conditionid = "0x1388" conditiondata = "ssid=TEST$"
    по сути призванная сделать то же самое, - не даёт выполнить задуманное.

    З.З.Ы:
    Благодарю Николая из техподдержки Microsoft за оказанную помощь в решении проблемы.


    MCITP




    14 октября 2013 г. 13:52
  • А в чём разница в XML-файлах, когда делаешь добавление условия вручную и через "netsh"?
    Ты, случаем, не пробовал первоначальный вариант с VSA через ручное добавление в XML?

    14 октября 2013 г. 20:53
  • А в чём разница в XML-файлах, когда делаешь добавление условия вручную и через "netsh"?
    Ты, случаем, не пробовал первоначальный вариант с VSA через ручное добавление в XML?

    Разницу я писал - через netsh - не срабатывает\не создаётся Condition 0x1388.

    Condition 0x1a через XML вставлять не пробовал.


    MCITP

    15 октября 2013 г. 7:17
  • Понятно.

    А нет желания выполнить этот последний эксперимент :) ?

    15 октября 2013 г. 13:06
  • Понятно.

    А нет желания выполнить этот последний эксперимент :) ?

    Добавление ConditionID 0x1A же срабатывало успешно через netsh, что ты ещё ожидаешь увидеть? Думаю также успешно добавится и через правку xml конфига.

    ..
    Проверил:
    * смотрим как правильно называется атрибут 0x1a командой
    netsh nps show npconditionattributes
    Называется - "Vendor-Specific"
    * экспортирую конфигурацию NPS в файл
    * правлю файл с конфигурацией NPS, вставляю Condition в виде:
    <msNPConstraint xmlns:dt="urn:schemas-microsoft-com:datatypes" dt:dt="string">MATCH("Vendor-Specific=1100000009010Bssid=TEST")</msNPConstraint>
    * импортирую конфигурацию
    * вывожу конфиг на экран, вижу:

    В принципе вижу то же самое, что и при создании Condition-а командой
    netsh nps set np name = "TestNP" state = "enable" conditionid = "0x3d" conditiondata = "^18$|^19$" conditionid = "0x1a" conditiondata = "1100000009010Bssid=TEST"
    С такими Condition-ами я уже игрался, безуспешно.
    (прямо сейчас проверить подключение клиента не смог, стенд уже разобран)


    MCITP

    15 октября 2013 г. 13:46
  • Да - меня сбила с толку твоя изначальная формулировка про netsh и у меня в голове осела мысль, что на уровне XML'я происходит всё то же самое, что и через netsh, но сама конфигурация не применяется. То, что конфигурация именно "не создаётся" - расставило всё по местам. В общем, последние сообщения можно смело удалять за бессмысленностью :).

    15 октября 2013 г. 13:55