Поиск...

четверг, 21 ноября 2013 г.

Настройка 802.1x на оборудовании cisco (Часть №1)

Доброго времени суток!!!

Ну вот и написался очередной пост :). Он получился очень объемный, так что я решил его разбить на две части, дабы не загружать вас большим объемом информации за один раз. Да, времени на творчество очень мало, но оно есть, и поэтому его надо использовать по полной программе. В прошлом посте мы продолжили рассмотрение настроек cisco ASA. Думаю, будут еще посты из этой серии, но чуть позже.
Сегодня же, я вам предложу окунуться в мир аутентификации пользователей непосредственно на порту коммутатора, к которому они подключены. Поможет нам в этом деле такая технология как 802.1x. Как всегда, кто заинтересовался, добро пожаловать под кат...

Как обычно, теоретическую часть оставляю вам на самостоятельную проработку (за исключением небольших пояснений по ходу поста) и сразу приведу схему, по которой будем работать:

 
Не смотря на миниатюрность схемы, работы предстоит много :).
Итак, что мы имеем. Есть сеть, состоящая из двух устройств. L3_Switch (IP 192.168.1.1), на котором терминируются vlan-ы с соответствующими IP-адресами и осуществляется маршрутизация между ними. Так же там настроены списки доступа, согласно которым выделены права на прохождение трафика. L2_Switch (192.168.1.10), к которому подключаются конечные пользователи.
Требуется организовать аутентификацию пользователей на порту коммутатора с использованием Cisco Control Server (ACS) и Cisco Trust Agent (CTA), установленных на компьютерах пользователей. Исходя из результатов аутентификации, пользователь должен попасть в соответствующий vlan и получить IP-адрес автоматически (DHCP).
    Необходимые vlan-ы и сети:
  • vlan2 (Administrator, tag 2) - имеет адресацию из диапазона 192.168.1.0/24. В нем находятся сетевые устройства и сервер, на котором в дальнейшем, будут развернуты необходимые нам сервисы. Так же в данный vlan будет попадать учетная запись администратора. Из этого vlan-а доступ есть везде;
  • vlan3 (WORK, tag 3) - имеет адресацию из диапазона 192.168.2.0/24. В него будут попадать пользователи, которые относятся к одноименной группе. У этих пользователей имеется доступ ко всем машинам для проверки (PC_For_Test_1 и PC_For_Test_2) и нет доступа в vlan 2 (Administrator), кроме портов для DHCP;
  • vlan4 (GUEST, tag 4) - имеет адресацию из диапазона 192.168.3.0/24. В него будут попадать пользователи, которые относятся к одноименной группе. У этих пользователей имеется доступ только к одной машине для проверки PC_For_Test_1 и нет доступа в vlan 2 (Administrator), кроме портов для DHCP;
  • vlan5 (TRASH, tag 5) - имеет адресацию из диапазона 192.168.4.0/24. В него будут попадать компьютеры, которые не поддерживают 802.1x, на которых не установлен CTA, а так же компьютеры с несоответствующей версией CTA. Из этого vlan-а доступа никуда нет, кроме того, что можно "ping-овать" шлюз (192.168.4.1) и получать по DHCP адрес (конечно, в реальной жизни туда будут попадать и сетевые принтеры, доступ которым придется открыть, но у нас их нет);
  • Сеть (vlan6, tag 6) Lan_1 - имеет адресацию из диапазона 10.10.10.0/24. В ней находится первый компьютер для проверки PC_For_Test_1 (IP-адрес 10.10.10.10);
  • Сеть (vlan7, tag 7) Lan_2 - имеет адресацию из диапазона 20.20.20.0/24. В ней находится второй компьютер для проверки PC_For_Test_2 (IP-адрес 20.20.20.20).
Для реализации ACS, DHCP и Certificate Authority (CA) (CA - нам понадобится тоже, по ходу поста, узнаете зачем) используется сервер Server CA,ACS,DHCP (192.168.1.100) на базе Windows 2003. Для проверки работы 802.1x будем использовать Host_1 (с установленным CTA и подключенного к порту Fa 1/1 свитча L2_Switch) и Host_2 (без установленного CTA и подключенного к порту Fa 1/2 L2_Switch).
Логика работы 802.1x не такая уж и сложная, как может показаться, несмотря на огромное количество вариантов и способов реализации. В сегодняшнем посте я взял за основу метод NAC L2 802.1x. Данный метод как раз и использует в своей реализации CTA (помимо него есть еще стандартный IEEE 802.1x, который не требует наличия суппликанта).
Работает он так (конечно это то, как я понял :)). На конечный компьютер устанавливается специальный агент-суппликант (CTA), который может производить аутентификацию как и самой машины, так и пользователя (или вместе). При включении машины, этот суппликант передает запрос на аутентификацию. Свитч, к которому подключена машина, в свою очередь, передает данную информацию на сервер аутентификации (в нашем случае это будет ACS). В это время, порт, к которому подключена машина находится в состоянии hold и может принимать и передавать только сообщения, относящиеся к процессу аутентификации. После сверки переданных данных, сервер посылает информацию обратно на свитч, указывая, в какие параметры необходимо назначить порту. После этого у компьютера появляется полная сетевая доступность (если конечно это предусмотрено параметрами, присылаемыми с сервера аутентификации).
Всё уместилось в один абзац, но за ним стоит целая масса настроек. Так что без промедления предлагаю приступить к работе.
Начнем с L3_Switch:

R2(config)#hostname L3_Switch
R2(config)#exit
L3_Switch#vlan database - заходим в режим настройки vlan-ов и создаем необходимые;
L3_Switch(vlan)#vlan 2 name Administrator
L3_Switch(vlan)#vlan 3 name WORK
L3_Switch(vlan)#vlan 4 name GUEST
L3_Switch(vlan)#vlan 5 name TRASH
L3_Switch(vlan)#vlan 6 name Lan_1
L3_Switch(vlan)#vlan 7 name Lan_2
L3_Switch(vlan)#exit
L3_Switch#wr
L3_Switch#conf t
L3_Switch(config)#int vlan 2 - настраиваем IP-адрес для каждого vlan-а, который будет являться шлюзом по умолчанию;
L3_Switch(config-if)#ip address 192.168.1.1 255.255.255.0
L3_Switch(config)#int vlan 3
L3_Switch(config-if)#ip address 192.168.2.1 255.255.255.0
L3_Switch(config-if)#ip helper-address 192.168.1.100 - для vlan-ов, в которых предусмотрен DHCP, прописываем т.н. вспомогательный адрес DHCP-сервера. Делается это так как сервер находится в другой подсети, а маршрутизатор по умолчанию не пробрасывает широковещательные запросы из одной подсети в другую;
L3_Switch(config-if)#int vlan 4
L3_Switch(config-if)#ip address 192.168.3.1 255.255.255.0
L3_Switch(config-if)#ip helper-address 192.168.1.100
L3_Switch(config-if)#int vlan 5
L3_Switch(config-if)#ip address 192.168.4.1 255.255.255.0
L3_Switch(config-if)#ip helper-address 192.168.1.100
L3_Switch(config-if)#int vlan 6
L3_Switch(config-if)#ip address 10.10.10.1 255.255.255.0
L3_Switch(config-if)#int vlan 7
L3_Switch(config-if)#ip address 20.20.20.1 255.255.255.0
L3_Switch(config-if)#exit
L3_Switch(config)#int fa 0/0 - заходим в режим настройки интерфейса, который "смотрит" в сторону L2_Switch;
L3_Switch(config-if)#switchport trunk encapsulation dot1q - указываем инкапсуляцию;
L3_Switch(config-if)#switchport mode trunk - включаем режим "trunk" на интерфейсе;
L3_Switch(config-if)#switchport trunk allowed vlan 1,2,3,4,5,1002-1005 - прописываем каким vlan-ам разрешено передаваться;
L3_Switch(config-if)#exit
L3_Switch(config)#int fa 0/1 - прописываем порты в соответствующие vlan-ы;
L3_Switch(config-if)#switchport mode access
L3_Switch(config-if)#switchport access vlan 2
L3_Switch(config-if)#spanning-tree portfast - включаем режим "portfast", для более быстрого запуска интерфейса (опционально, и больше подойдет к реальному оборудованию);
L3_Switch(config-if)#exit
L3_Switch(config)#int fa 0/2
L3_Switch(config-if)#switchport mode access
L3_Switch(config-if)#switchport access vlan 6
L3_Switch(config-if)#spanning-tree portfast
L3_Switch(config-if)#exit
L3_Switch(config)#int fa 0/3
L3_Switch(config-if)#switchport mode access
L3_Switch(config-if)#switchport access vlan 7
L3_Switch(config-if)#spanning-tree portfast
L3_Switch(config-if)#exit
L3_Switch(config)#exit
L3_Switch#wr
L3_Switch(config)#ip access-list extended FOR_WORK - создаем списки доступа, согласно оговоренных ранее условий, для каждого vlan-а;
L3_Switch(config-ext-nacl)#permit ip 192.168.2.0 0.0.0.255 10.10.10.0 0.0.0.255
L3_Switch(config-ext-nacl)#permit ip 192.168.2.0 0.0.0.255 20.20.20.0 0.0.0.255
L3_Switch(config-ext-nacl)#permit udp any any eq 67 - правило для разрешения DHCP запросов;
L3_Switch(config-ext-nacl)#deny ip any any
L3_Switch(config-ext-nacl)#exit
L3_Switch(config)#ip access-list extended FOR_GUEST
L3_Switch(config-ext-nacl)#permit ip 192.168.3.0 0.0.0.255 10.10.10.0 0.0.0.255
L3_Switch(config-ext-nacl)#permit udp any any eq 67
L3_Switch(config-ext-nacl)#deny ip any any
L3_Switch(config-ext-nacl)#exit
L3_Switch(config)#ip access-list extended FOR_TRASH
L3_Switch(config-ext-nacl)#permit icmp 192.168.4.0 0.0.0.255 host 192.168.4.1
L3_Switch(config-ext-nacl)#permit udp any any eq 67
L3_Switch(config-ext-nacl)#deny ip any any
L3_Switch(config-ext-nacl)#exit
L3_Switch(config)#int vlan 3
L3_Switch(config-if)#ip access-group FOR_WORK in - привязываем списки доступа к соответствующим интерфейсам;
L3_Switch(config-if)#exit
L3_Switch(config)#int vlan 4
L3_Switch(config-if)#ip access-group FOR_GUEST in
L3_Switch(config-if)#exit
L3_Switch(config)#int vlan 5
L3_Switch(config-if)#ip access-group FOR_TRASH in
L3_Switch(config-if)#exit
L3_Switch(config)#exit
L3_Switch#wr


Вроде, на данный момент, все что требуется, настроили. Переходим на L2_Switch:

R1-SW#conf t
R1-SW(config)#hostname L2_Switch
L2_Switch(config)#vlan 2 - создаем необходимые нам vlan-ы;
L2_Switch(config-vlan)#name Administrator
L2_Switch(config-vlan)#vlan 3
L2_Switch(config-vlan)#name WORK
L2_Switch(config-vlan)#vlan 4
L2_Switch(config-vlan)#name GUEST
L2_Switch(config-vlan)#vlan 5
L2_Switch(config-vlan)#name TRASH
L2_Switch(config-vlan)#exit
L2_Switch(config)#int vlan 2
L2_Switch(config-if)#ip address 192.168.1.10 255.255.255.0 - назначаем единственный IP-адрес для управления;
L2_Switch(config-if)#exit
L2_Switch(config)#int fa 1/0 - настраиваем порт, "смотрящий" в направлении L3_Switch в режим trunk;
L2_Switch(config-if)#switchport trunk encapsulation dot1q
L2_Switch(config-if)#switchport mode trunk
L2_Switch(config-if)#switchport trunk allowed vlan 1-5,1002-1005
L2_Switch(config-if)#exit
L2_Switch(config)#int range fa 1/1 - 2 - пока отключим порты для конечных пользователей;
L2_Switch(config-if-range)#shutdown
L2_Switch(config-if-range)#exit
L2_Switch(config)#exit
L2_Switch#wr
L2_Switch#


Остановимся и перейдем к настройке нашего сервера (Server CA,ACS,DHCP). В этом посте я использовал ACS версии 4.2. Как его устанавливать, можно посмотреть в этом посте (правда там версия предыдущая, но принцип установки остался такой же). Пробежимся лишь по его настройке, так как она немного отличается, от рассмотренных ранее. Как устанавливать и настраивать центр сертификации я описывал вот в этом посте, только установка add-on нам не понадобится. Так же я расскажу про установку и настройку DHCP сервера. Итак, идем на сам сервер.
Начнем с настройки ACS. Заходим на главную консоль (http://localhost:2002). Для начала, определим наши сетевые устройства в отдельную группу. Для этого проверьте, чтобы у вас стояла галочка в разделе "Interface Configuration"--"Advanced Options" напротив пункта "Network Device Groups" и затем переходите в раздел "Network Configuration". Там нажимаем "Add Entry":

 
В открывшемся окне вводим название группы и ключ, затем нажимаем "Submit":

 
Вы вернетесь на предыдущую страницу. В списке выбираем ранее созданную группу. Попав в настройки группы добавляем в нее сначала устройства "Cisco Switches AAA Clients"--"Add Entry":

 
    где:
  • 1 - общее название клиентов;
  • 2 - диапазон IP-адресов клиентов (в нашем случае только сеть 192.168.1.0/24);
  • 3 - секретный ключ;
  • 4 - выбираем ранее созданную группу;
  • 5 - из выпадающего списка выбираем пункт "RADIUS (Cisco IOS/PIX 6.0)", так как использовать мы будем именно Radius.
Нажимаем на "Submit + Apply". Далее добавляем "Cisco Switches AAA Servers". Для этого воспользуемся кнопкой "Search". Из результатов поиска выбираем наш сервер. Должно открыться следующее окно:


    где:
  • 1 - IP-адрес нашего сервера;
  • 2 - секретный ключ;
  • 3 - выбираем из выпадающего списка нашу группу.
Нажимаем "Submit + Apply". В итоге, у вас в группе должно все выглядеть вот так:


Идем далее. Нам необходимо настроить интерфейс для дальнейшей работы. Т.е. необходимо включить соответствующие пункты, чтобы они отображались в нужных разделах. Для этого переходим в раздел "Interface Configuration"--"RADIUS (IETF)". По умолчанию, там включены все пункты, нам же необходимы только те, которые показаны на рисунке ниже:


Все эти атрибуты необходимы для определения порта в необходимый vlan. Нажимаем "Submit". После этого переходим в "Interface Configuration"--"Advanced options". Отметим следующие пункты:


Нажимаем "Submit". Всё, интерфейс для работы настроили, идем далее.
Теперь получим корневой сертификат и сертификат для сервера ACS. Они нам понадобятся для дальнейшей работы, а в частности, для "общения" CTA, установленного на конечном компьютере, и ACS. Для этого, скачаем сначала корневой сертификат из центра сертификации. Заходим на веб-интерфейс центра сертификации и выбираем пункт "Download a CA certificate, certificate chain, or CRL". Должно открыться следующее окно:


Нажимаем на ссылку "Download CA certificate" и сохраняем его на локальном компьютере (я сделал для этого специальную папку). Желательно, его проинсталлировать.
Теперь необходимо получить сертификат непосредственно для ACS. Для этого необходимо создать запрос. Возвращаемся на ACS и по пути, как показано на рисунке ниже, создаем запрос:



    где:
  • 1 - параметр Common Name;
  • 2 - путь к файлу ключа, который будет создан;
  • 3 - пароль.
Нажимаем "Submit". После этого, справа у вас появиться ваш запрос:


Копируем всё содержимое и возвращаемся в центр сертификации, где идем по пути, как показано на рисунке:


Вставляем скопированную информацию в соответствующее поле (4) и нажимаем "Submit". После этого появится окно, в котором вам предлагается зайти снова на центр сертификации после того, как администратор одобрит вашу заявку, так же сообщают номер вашей заявки ("Your Request Id"). Так администраторами являемся мы сами, то сделаем подтверждение. Открываем сервис сертификации ("Start"--"Administrative Tools"--"Certification Authority"). В открывшемся окне выбираем пункт "Pending Request":


Нажимаем по сертификату правой клавишей и выбираем пункт "All Tasks"--"Issue". Для проверки того, что запрос одобрен, можно зайти в пункт "Issued Certificates", он должен быть там. Далее снова заходим на web-интерфейс центра сертификации и скачиваем утвержденный сертификат:


Сохраняем его в ранее созданной папке. Желательно этот сертификат также проинсталлировать на компьютере. Сертификаты получены. Теперь их надо проинсталлировать на самом ACS. Для этого возвращаемся на него и идем "System Configuration"--"ACS Certificate Setup"--"ACS Certification Authority Setup". Откроется следующее окно:
 

Указываем полный путь к файлу ранее полученного корневого сертификата и нажимаем "Submit". После этого необходимо перезапустить ACS. Делается это тут ("System Configuration"--"Service Control"--"Restart"):


После этого, необходимо добавить установленный корневой сертификат в список доверенных. Для этого идем в "System Configuration"--"ACS Certificate Setup"--"Edit Certificate Trust List". Откроется следующее окно:
 

Ищем в списке наш сертификат, отмечаем его и нажимаем "Submit". Перезапускаем ACS.
После перезапуска ACS устанавливаем сертификат уже для самого сервера ACS. Переходим в "System Configuration"--"ACS Certificate Setup"--"Install ACS Certificate". Откроется вот такое окно:


Указываем полный путь к сертификату, путь к ключу и пароль, который задавали при его создании. Нажимаем "Submit". Появится окно, где будут продемонстрированы параметры сертификата (если конечно ключ и пароль правильные :)). На кнопку "Install New Certificate" нажимать не надо, просто снова необходимо перезапустить ACS.
С сертификатами разобрались. Идем дальше и включим поддержку необходимых нам протоколов (чтобы они отображались при настройке Network Access Profile). Конечно, рекомендуется включить их все и по мере настройки исключать не нужные, но так как мы будем использовать только протокол EAP-FAST, то и включим только его. Для этого переходим в "System Configuration"--"Global Authentication Setup". В списке находим ссылку на установку параметров EAP-FAST и переходим по ней. Должно открыться следующее окно:


продолжение:


Отмечаем пункты, указанные на рисунках и нажимаем "Submit + Restart". Теперь переходим уже ближе к нашей задаче и настроим так называемый "Shared Profile" и его компоненты. В этом профиле указываются какие параметры будут "спускаться" на порт коммутатора, к которому подключен конечный пользователь. Переходим в "Shared Profile Components"--"RADIUS Authorization Components". Нажимаем на "Add". Откроется следующее окно:


У нас будет 4 группы (компонента), так как имеется 4 разных vlan-а. Вверху задается имя. Ниже нас интересуют параметры в разделе "IETF". В выпадающем списке как раз те параметры, которые мы отмечали при настройке интерфейса ACS ("Interface Configuration"--"RADIUS (IETF)"). Добавляются они по одному. Выбираем параметр, нажимаем "Add", появится окно, где нужно ввести значение (какие значения необходимо вводить, смотрите на рисунке ниже).
Например, для первой группы (компонента) у вас в итоге должно получиться вот так:


Значение "Tunnel-Private-Group-ID (81)" должно ТОЧНО совпадать с именем vlan-а!!! По завершению добавления параметров необходимо нажать "Submit". Так необходимо сделать четыре разные группы для 4-х vlan-ов. После создания необходимо перезапустить сам ACS (насчет этого будет соответствующее сообщение). Для проверки, после перезапуска ACS зайдите в "Shared Profile Components" и вы должны увидеть список из четырех компонентов.
Далее нам необходимо создать соответствующие группы на ACS и добавить туда пользователей. В этом посте мы будем использовать локальную базу. Как добавлять группы и пользователей в них я немного описывал в этом посте про ACS. Так что останавливаться на этом не буду, если будут вопросы с этим, пишите. Параметры там оставляйте по умолчанию, все необходимое будет настроено в "Network Access Profile".
Теперь настроим очень важную вещь, такую как "Posture Validation". Дословно эта вещь переводится не совсем красиво и понятно :). Я понял это как проверка наличия установленных параметров (программ, версий ПО и так далее) на конечном компьютере еще до аутентификации самого пользователя. С помощью неё мы будем проверять наличие и версию CTA на конечном компьютере и если его не будет, или он не будет соответствовать указанной нами версии, то компьютер сразу будет отправлен в глухой vlan TRASH.
Данная проверка ("Posture Validation") состоит из правил, каждое правило состоит из набора критериев, по которым необходимо проверять соответствие. Помимо этого, есть возможность настройки логики работы критериев (имеется ввиду применение логического "И" или логического "ИЛИ"). Далее это мы посмотрим.
Использовать мы будем внутреннюю базу ACS для "Posture Validation". Итак, для создания политики переходим в раздел "Posture Validation"--"Internal Posture Validation Setup". Там выбираем пункт "Add Policy". Откроется следующее окно:
 

Указываем название политики и нажимаем "Submit". Вы перейдете в раздел настройки вашей политики, где необходимо будет добавлять правила, которые, в свою очередь, будут содержать критерии для проверки. Для добавления правила нажимаем "Add Rule". Откроется окно:


Как видно из рисунка, в свою очередь критерии тоже можно организовывать в так называемые "Conditions Sets" (подгруппы с критериями). Ниже, задается логика их работы. В данном посте мы будем использовать логическое "И" внутри подгруппы (т.е. чтобы проверка прошла, необходимо совпадение всех критериев внутри подгруппы) и логическое "ИЛИ" между подгруппами (т.е. для проверки необходимо совпадение хотя бы одной подгруппы, если их несколько). Нижние параметры, представленные на рисунке, трогать не будем. Нажимаем на "Add Condition Set". Откроется следующее окно:


Здесь необходимо задать критерии для проверки. В нашем случае, мы будем проверять установленную версию CTA и название суппликанта (Cisco:PA:). Остальные атрибуты оставляю вам на самостоятельное изучение, информация по ним есть в интернете. Для проверки версии CTA из выпадающего списка "Attribute" находим "Cisco:PA:OS-Version", параметр "Operator" устанавливаем в значение ">=" и в поле "Value" вписываем версию "2.0.0.0". Затем нажимаем "Enter". Один критерий добавится. Никуда не переходя добавляем следующий критерий проверки названия суппликанта. Параметры следующие: поле "Attribute" - "Cisco:PA:PA-Name", поле "Operator" - "contains", поле "Value" - "Cisco Trust Agent". Снова нажимаем "Enter". В верхней таблице у вас должно быть два критерия (конечно, если вы хотите, то можете добавлять любые, здесь я лишь выбрал наиболее простые для понимания). Нажимаем "Submit". Вы вернетесь на предыдущую страницу, на ней тоже нажимаем "Submit". В итоге у вас должно быть вот такое окно:


Здесь вы видите список правил, которые относятся к вашей политике. В данном случае у нас политика состоит из одного правила, которое, в свою очередь, состоит из двух подгрупп с критериями ("Condition Sets") (созданной нами выше и состоящей из двух критериев и "Default"). Каждой подгруппе с критериями соответствует свой параметр "Posture Token", согласно им, далее мы зададим, что будет высвечиваться на мониторе клиента, при завершении аутентификации. Нажимаем "Done". Вы попадете в окно локальных политик "Posture Validation", где будет показана ваша созданная политика и предупреждение, что для применения конфигурации необходимо нажать на "Apply and Restart". Так и делаем.
На этом месте и закончим первую часть поста. Сходите попейте чая или кофе, или еще чего покрепче :) и затем переходите ко второй части.

По всем возникающим вопросам обращайтесь ко мне через комментарии или лично. Координаты можно найти вот тут.


С уважением, Ant0ni0n

5 комментариев:

  1. Для разрешения DHCP, корректнее использовать не
    permit udp any any eq 67
    а
    permit udp host 0.0.0.0 eq bootpc host 255.255.255.255 eq bootps

    ОтветитьУдалить
    Ответы
    1. Доброго времени суток!
      Да, согласен, на практике необходимо применять более жесткие ограничительные меры, но так как это только пример, то можно использовать и более общее правило.

      Удалить
  2. Доброго времени суток!
    А успевают ли применяться групповые политики при такой реализации?
    Ведь клиент аутентифицируется засчет установленного клиента, а он это сможет сделать только после загрузки windows

    ОтветитьУдалить