Введение в 802.1x
Одна из наименее известных опций безопасности стандарта 802.11 (как минимум среди SOHO пользователей) - это возможность иметь индивидуальные имена пользователей и пароли на централизованном сервере авторизации, который может быть использован для одной или более беспроводных точек доступа. Главное преимущество этого типа настройки – отдельные пользователи могут быть добавлены и отключены от беспроводного доступа без нарушения работы других пользователей или изменения ключей доступа к сети. Поэтому такой способ популярен в корпоративной среде. Если у вас имеются более сложные системы (такие как Active Directory) для входа пользователей – тогда имеется возможность подключить вашу беспроводную сеть к вашему серверу Active Directory для аутентификации этих пользователей.
Для этого вида настройки на точке доступа используются режимы беспроводного шифрования «WPA Enterprise» или «WPA2 Enterprise». Вы также можете посмотреть ссылки на 802.1x, являющийся стандартом аутентификации пользователей - как проводных, так и беспроводных - через RADIUS сервер. 802.1x является базовым протоколом, который используется беспроводным режимом шифрования WPA/2 Enterprise.
Обратите внимание, что пользовательские имена и пароли хранятся на RADIUS сервере, с которым точка доступа будет общаться для авторизации пользователей. В большинстве случаев, программное обеспечение RADIUS сервера расположено где-то еще в сети (очевидно, что это место должно быть достижимо для точки доступа). Но также возможно установить и запустить RADIUS сервер на OpenWRT. Установка и конфигурация RADIUS сервера лежит за рамками этого документа, однако на эту тему будет дано несколько советов. RADIUS – стандартизированный протокол, который поддерживается многими серверными приложениями, в том числе Microsoft Windows Network Policy Server (NPS), что позволяет авторизовывать пользователей Active Directory. FreeRADIUS – наиболее распространенный open source RADIUS сервер.
Необходимые требования
Перед началом удостоверьтесь, что были выполнены следующие шаги:
- Установлен RADIUS сервер такой как FreeRADIUS (на OpenWRT или на другом сервере). Обратите внимание, что в документации по 802.1x система, хранящая базу данных имен/паролей пользователей упоминается как «сервер авторизации» (“authentification server”) или иногда просто как «сервер».
- Ваш роутер сконфигурирован как клиент (“client”) RADIUS сервера. IP адресу вашего роутера/точки доступа должно быть разрешено соединяться с RADIUS сервером. Также роутер/точка доступа должны иметь ассоциированные ключ/пароль, которые будут использоваться для авторизации на RADIUS сервере. Обратите внимание, что в документации 802.11x роутер/точка доступа упоминаются как «клиент» (“client”) или иногда как «аутентикатор» (“authenticator”) чтобы отличать его от устройства конечного пользователя которое называют «запрашивающим устройством» (“supplicant”).
- Сконфигурированы одно или более пользовательских имен и паролей на RADIUS сервере. Обратите внимание, что формат хранения пароля пользователя должен соответствовать формату, в котором пользовательское устройство проверяет пароль. Для клиентов Windows это означает, что вы должны хранить пароль как значение NT/LM Hash. Для других клиентов, как правило, применяется Crypt/MD5/SHA. Для упрощения вы можете хранить пароль как открытый текст и RADIUS сервер сможет генерировать необходимые хеши «на лету». Но в данном случае имеются очевидные недостатки безопасности, подобное решение должно быть внимательно обдумано. Данный вариант может использоваться для отладки.
Основа по беспроводной авторизация пользователя 802.1x
Enterprise WPA не поддерживается пакетом wpad-mini для точек доступа на OpenWRT. Поэтому вы должны удалить его и установить полную версию пакета hostapd:
opkg update
opkg remove wpad-mini
opkg install hostapd
Далее, для поддержки авторизации WPA Enterprise вы можете изменить ваш файл /etc/config/wireless. В частности, вы должны создать wifi-iface
с выставленной опцией шифрования wpa2, адрес сервера и ключ. Например, следующим образом:
config wifi-iface
option device 'radio1'
option mode 'ap'
option ssid 'Test8021xNetwork'
option network 'lan'
option encryption 'wpa2'
option server '192.168.1.10'
option key 'MyClientPassword'
Где 192.168.1.10 – ранее сконфигурированный RADIUS сервер, ожидающий соединения от данного клиента (роутер/точки доступа) с паролем “MyClientPassword”.
802.1x динамические VLAN на роутере OpenWRT
Вступление
В следующем примере мы расширим нашу предыдущую 802.1x авторизацию в беспроводной сети. Пользователи, соединяющиеся с ОДНИМ SSID, будут в зависимости от их имени пользователя автоматически попадать либо в основную сеть “lan”, либо в новую сеть “guest”. Обратите внимание, что часть необходимого для выполнения этой работы функционала не включалась в OpenWRT до релиза “Chaos Calmer”. В предыдущих релизах технически возможно создавать динамические VLAN, но это требует модификации некоторых системных файлов. Рекомендовано использование “Chaos Calmer” r43473 или более новых релизов если вы хотите использовать динамические VLAN 802.1x на роутере. Если вы все-таки хотите узнать что необходимо менять – смотрите следующие ссылки r43473, r42787 и r41872.
ВНИМАНИЕ! Вы будете изменять способ, которым CPU вашего роутера соединяется с вашим коммутатором (switch) в процессе этого конфигурования. Если выполнить это с ошибками, то вы можете потерять доступ к вашему роутеру. Если вы оказались в такой ситуации – вам понадобится ознакомиться с механизмом восстановления вашего роутера. Тогда вы сможет выполнить сброс настроек и вернуть управление или исправить вашу конфигурацию. Также хорошо иметь резервную копию рабочей конфигурации до начала процесса и знать каким образом OpenWRT управляет конфигурацией VLAN (т. к. это может быть несколько по-разному реализовано в том или ином роутере). Если у вас есть физический доступ к вашему роутеру – вы навряд ли сможете “убить” свой роутер таким образом, что это будет невозможно восстановить. Но если вы работаете по wifi или удаленно, то это возможно. Лучше всего настраивать тестовую сеть на втором роутере и работать над ней пока вы не освоитесь с конфигурацией так как это поначалу может быть непросто сделать это правильно.
Конфигурация
Поскольку мы будем работать с множеством VLAN, нам необходимо создать дополнительные VLAN для гостевой сети и включить маркировку (tagging) VLAN на порту CPU для VLANов “lan” и “guest” чтобы роутер мог взаимодействовать с обоими VLANами. В этом случае мы оставим сеть “lan” на VLAN 1 и создадим новую сеть “guest” на VLAN 3. Мы пропустим VLAN 2 потому что имеющийся у нас в этой демонстрации роутер использует VLAN 2 чтобы соединять порт WAN с CPU портом. Это не обязательно для всех роутеров, некоторые привязывают порт WAN непосредственно к CPU. Больше информации по раскладке портов коммутатора можно найти на странице OpenWRT wiki, посвященной конкретной модели роутера.
Сначала, изменим существующий VLAN “lan” для маркировки трафика, идущего к порту CPU. В нашем примере порт CPU находится на порту 0, а порты 2, 3, 4 и 5 – существующие LAN порты коммутатора (которые мы хотим сохранить на VLAN “lan” как и раньше). Порт 1 на этом роутере – вторичный порт CPU, использующийся для WAN соединения. Порты на вашем роутере могут различаться, проверьте подробности по портам вашего коммутатора на странице OpenWRT wiki, посвященной конкретно вашему роутеру. На нашем роутере файл конфигурации коммутатора для VLAN 1 /etc/config/network
выглядит так:
config switch_vlan
option device 'switch0'
option vlan '1'
option ports '0 2 3 4 5'
Чтобы начать маркировать трафик VLAN 1 к CPU внесите изменения как описано ниже:
config switch_vlan
option device 'switch0'
option vlan '1'
option ports '0t 2 3 4 5'
Теперь создайте новый VLAN для гостевой сети (на нашем роутере мы использовали VLAN 3):
config switch_vlan
option device 'switch0'
option vlan '3'
option ports '0t'
Обратите внимание, что в данный момент единственный порт на этом VLAN – маркированное соединение с CPU портом. Но роутер будет автоматически бриджить пользователей гостевой беспроводной сети в этот VLAN в соответствии с инструкциями 802.1x сервера. Вы можете создать дополнительные VLANы в соответствии с потребностями вашей сетевой архитектуры. Но обратите внимание на ограничение микросхемы коммутатора в вашем роутере. Многие микросхемы коммутаторов в бытовых роутерах ограничены поддержкой до 15 VLAN.
Далее мы должны изменить конфигурацию интерфейсов в этом же файле. Поскольку мы теперь маркируем трафик VLAN, то нам необходимо немного изменить конфигурацию интерфейса “lan”. На нашем роутере порт CPU LAN – это eth1 (проверьте раскладку портов коммутатора для вашего роутера на странице OpenWRT wiki чтобы определить порт CPU для LAN на вашей модели роутере). Изначально эта секция выглядела так:
config interface 'lan'
option ifname 'eth1'
option type 'bridge'
option proto 'static'
option ipaddr '192.168.1.1'
Нам сейчас необходимо изменить это так:
config interface 'vlan1'
option ifname 'eth1.1'
option type 'bridge'
option proto 'static'
option ipaddr '192.168.1.1'
Мы сделали два важных изменения. Во-первых, интерфейс ДОЛЖЕН быть назван “vlan1” чтобы программа hostapd могла найти правильный интерфейс, к которому нужно присоединить пользователя. Во-вторых, опция ifname ДОЛЖНА быть изменена на “eth1.1.” т.к. трафик на VLAN 1 теперь будет маркироваться между коммутатором и CPU.
Мы также должны добавить новый интерфейс на VLAN 3 для нашей гостевой сети.
config interface 'vlan3'
option proto 'static'
option ipaddr '192.168.3.1'
option netmask '255.255.255.0'
option type 'bridge'
option ifname 'eth1.3'
Обратите внимание, что опция ifname – eth1.3 – указывает что этот интерфейс должен взаимодействовать с VLAN 3 на порте CPU коммутатора и опция ipaddr находится в сети, отличной от VLAN 1. В целях упрощения, я сделал третий октет IP адреса равным номеру VLAN, но это не обязательно. Соединение с VLAN сделано только по имени интерфейса, опции ifname и конфигурации коммутатора.
Важное замечание: до того, как вы измените имя вашего первичного интерфейса с “lan” на “vlan1”, вы должны обновить ваши файлы /etc/config/dhcp
(опцию interface) и /etc/config/firewall
(опцию network в зонах) чтобы отразить это изменение. Ошибка в этих действиях сделает ваш роутер недоступным для вас.
Сохраните изменения в вашем файле /etc/config/network
и используйте команду перезагрузки /etc/init.d/network
чтобы применить изменения. Если вы все сделали правильно – то через несколько секунд у вас должно получиться вернуться в командную строку и у вас по-прежнему будет доступ к роутеру. Если у вас появились проблемы с доступом к роутеру – наверняка вы каким-то образом отсоединили ваш порт CPU от коммутатора и вам необходимо использовать механизм восстановления чтобы снова попасть на роутер и исправить вашу конфигурацию.
Вероятно, что вы захотите настроить DHCP сервер для этого гостевого интерфейса, а также соответствующие правила фаервола чтобы разрешить доступ к Интернет, но запретить доступ к компьютерам вашей LAN. Но эти настройки находятся за пределами этого документа. Мы продолжим считая, что у вас есть настроенные и работающие адресация и правила фаервола. Вы также можете захотеть перед продолжением настроить отдельный беспроводной SSID на роутере, который НЕ БУДЕТ использовать 802.1x, который будет бриджиться с гостевой сетью и убедиться, что он работает. Если он не будет работать – вы должны будете разобраться с этим до того, как будете добавлять сложности динамических VLAN 802.1x.
Теперь на нашем роутере есть функционирующая гостевая сеть и мы можем модифицировать нашу беспроводную конфигурацию для поддержки динамических VLANов 802.1x. Чтобы это сделать необходимо изменить настройки SSID в вашем файле /etc/config/wireless
и удалить опцию network
, а также добавить опции dynamic_vlan
и vlan_tagged_interface
. Пример ниже основан на базовой настройке 802.1x и будет выглядеть так:
config wifi-iface
option device 'radio1'
option mode 'ap'
option ssid 'Test8021xNetwork'
option encryption 'wpa2'
option server '192.168.1.10'
option key 'MyClientPassword'
option dynamic_vlan '2'
option 'vlan_tagged_interface' 'eth1'
option 'vlan_bridge' 'br-vlan'
option 'vlan_naming' '0'
И наконец, вы должны убедиться, что RADIUS сервер отправляет информацию VLAN. На FreeRADIUS каждая секция username должна выглядеть так:
“username” Cleartext-Password := “password”
Tunnel-Type = “VLAN”,
Tunnel-Medium-Type = “IEEE-802”,
Tunnel-Private-Group-ID = “1”
Важной частью являются три настройки “Tunnel”, где Tunnel-Private-Group-ID
выставлена на тот VLAN, в который мы хотим поместить пользователя.
Если к этому моменту все выполнено правильно, то вы сможете перезагрузить ваш роутер и попробовать потестировать как ассоциируются разные пользовательские имена с различными VLANами.
Как это работает/устранение неисправностей
Если вы смогли завести обычный 802.1x на вашем роутере и также смогли заставить заработать VLANы, но у вас имеются проблемы с попытками заставить работать 802.1x с динамическими VLANами или если вы хотите измененную конфигурацию – полезно знать как OpenWRT управляет динамическими VLANами.
Когда мы установили имена интерфейсов в примере выше в “vlan1” и “vlan3”и установили их тип в “bridge”, OpenWRT автоматически создала два моста (программных коммутатора) на роутере, поименовав их “br-vlan1” и “br-vlan3”. Вы можете посмотреть информацию об этим мостах и том, какие порты эти мосты соединяют, запустив команду brctl_show
, которая даст вам вывод, подобный этому:
root@OpenWrt:~# brctl show
bridge name bridge id STP enabled interfaces
br-vlan1 7fff.e894f690dfb0 no eth1.1
br-vlan3 7fff.e894f690dfb0 no eth1.3
В этом примере вывода можно увидеть эти два моста. Также видно, что eth1.1 (CPU порт для VLAN 1) и eth1.3 (CPU порт для VLAN 3) являются единственными членами каждого соответствующего моста. Когда беспроводной клиент динамического VLAN 802.1x присоединяется к VLAN 1 - вывод изменяется следующим образом:
root@OpenWrt:~# brctl show
bridge name bridge id STP enabled interfaces
br-vlan1 7fff.e894f690dfb0 no eth1.1
wlan0.1
br-vlan3 7fff.e894f690dfb0 no eth1.3
Как вы можете видеть – интерфейс wlan0.1 (соединяющий трафик для VLAN 1 с беспроводными пользователями wlan0) сейчас является членом br-vlan1. Поскольку eth.1.1 является членом того же моста, беспроводные пользователи на VLAN 1 могут обмениваться трафиком с портом CPU VLAN 1.
Но как wlan0.1 знает, что присоединяться нужно к eth1.1 на br-vlan1? Ответ лежит в ПО hostapd и в дополнительной конфигурации, сделанной нами в /etc/config/wireless.
На обычной точке доступа, работающей на Linux, смысл заключается в том, что вам необходимо только задать опцию vlan_tagged_interface
в вашей конфигурации, что позволит hostapd знать, что маркированный интерфейс CPU содержит доступ ко всем VLANам. Hostapd должен затем автоматически создать субинтерфейсы типа ethX.Y, где ethX - это маркированный интерфейс, и Y номер VLAN. К сожалению, эта простая конфигурация не работает с OpenWRT потому, что большинство пользователей УЖЕ используют мостовое соединение на их интерфейсах CPU, устанавливая тип интерфейса в мост в /etc/config/network
, что является частью стандартной конфигурации OpenWRT. Так беспроводные пользователи не-802.1x соединяются с портом CPU. Когда вы задаете все таким образом - OpenWRT автоматически создает мост, поименованный “br-lan” или “br-” впереди имени любого интерфейса, и затем добавляет в мост конкретный физический интерфейс (такой, как eth1.1). Запустите команду brctl show
на роутере OpenWRT, не сконфигурированном для динамических VLANов 802.1x, чтобы увидеть эти настройки.
Физический интерфейс может быть членом только ОДНОГО моста. Соответственно, hostapd не может добавить eth1.1 к вновь созданному hoastapd мосту для wlan0.1 и вы прерываетесь с отсутствием соединения. Если вы запустите brctl show
на таком неверно сконфигурированном роутере, вы можете увидеть один или более мостовых интерфейсов созданных OpenWRT из файла /etc/config/network
. И один интерфейс моста, созданный hostapd для каждого VLAN, с которым пользователь пытался соединиться и где в качестве члена есть ЕДИНСТВЕННЫЙ интерфейс wlan0.Y. Очевидно, что если интерфейс wlan является единственным членом моста, то трафику некуда направляться и пользователь неспособен получить IP адрес или направиться куда-то.
Чтобы решить эту проблему мы внесли несколько изменений. Во-первых, мы должны именовать наши интерфейсы в /etc/config/network
основываясь на их вланах - так, как vlan1
и vlan3
. В результате, OpenWRT именует созданные ей мосты br-vlan1
и br-vlan3
. Во-вторых, мы устанавливаем опцию vlan_bridge
в /etc/config/wireless
в значение “br-vlan” и опцию vlan_naming
в “0”. Что даёт инструкцию hostapd создавать мосты, используя br-vlanY конвенцию именования (где Y - номер VLAN). Как вы можете увидеть, эти мосты уже будут существовать в соответствии с OpenWRT конфигурацией. Поскольку у вас может быть только один мост с каким-то именем, hostapd просто добавит интерфейс wlan0.Y к существующему мосту. И это даст возможность общаться с интефейсом eth1.Y, который там поместила OpenWRT.
Надеемся, что эта секция позволила вам понять каким образом hostapd взаимодействует с OpenWRT для возможности использования динамических VLANов на 802.1x. Вы могли убедиться, что это слегка “хитрая” конфигурация. Если вам кажется, что у вас не работают правильно динамические VLANы, но работают фиксированные - для начала будет правильным проверить вывод команды brctl show
и посмотреть какие интерфейсы соединены с каждым другим. После того, как вы проверите, что проблема кроется в этом - у вас появится отправная точка для понимания: что должно быть изменено в конфиггурации чтобы правильные интерфейсы были соединены в мостовые соединения.
Дополнительные источники
Опции WPA Enterprise можно найти в Wireless documentation.