802.1X и RADIUS: контроль доступа к сети предприятия

Зачем нужен 802.1X в корпоративной сети

Стандарт IEEE 802.1X обеспечивает аутентификацию устройств на уровне порта коммутатора или точки доступа Wi-Fi. Без 802.1X любой, кто подключит кабель к розетке или узнает пароль Wi-Fi, получает доступ к внутренней сети. В организациях с десятками и сотнями сотрудников это создаёт серьёзную брешь в безопасности.

Архитектура 802.1X включает три компонента: суппликант (клиентское устройство), аутентификатор (коммутатор или точка доступа) и сервер аутентификации (RADIUS). Когда устройство подключается к порту, коммутатор блокирует весь трафик кроме EAP-пакетов и запрашивает у RADIUS-сервера разрешение на доступ.

Основные преимущества внедрения 802.1X:

  • Динамическое назначение VLAN в зависимости от учётной записи пользователя
  • Автоматическая изоляция гостевых устройств
  • Журналирование всех подключений к сети с привязкой к пользователю
  • Возможность применения политик доступа (ACL) на уровне порта
  • Интеграция с Active Directory или LDAP для единой точки управления

В данной статье мы развернём FreeRADIUS на Ubuntu 22.04, настроим аутентификацию через EAP-PEAP/MSCHAPv2 с привязкой к Active Directory и сконфигурируем коммутаторы Cisco и MikroTik для работы с 802.1X.

Установка и базовая настройка FreeRADIUS

FreeRADIUS — наиболее распространённый RADIUS-сервер с открытым кодом, поддерживающий все современные методы EAP-аутентификации. Установим его на Ubuntu 22.04:

sudo apt update
sudo apt install freeradius freeradius-utils freeradius-ldap -y
sudo systemctl enable freeradius

Основные конфигурационные файлы находятся в /etc/freeradius/3.0/. Структура каталога:

  • radiusd.conf — главный конфиг демона
  • clients.conf — список NAS-устройств (коммутаторы, AP)
  • mods-enabled/ — активные модули
  • sites-enabled/ — активные виртуальные серверы
  • users — локальная база пользователей

Первым делом добавим коммутаторы как RADIUS-клиенты в /etc/freeradius/3.0/clients.conf:

client switch-core {
    ipaddr = 10.0.1.1
    secret = MyR4d1usS3cret!
    shortname = core-switch
    nastype = cisco
}

client ap-office {
    ipaddr = 10.0.1.0/24
    secret = APr4d1usK3y!
    shortname = office-aps
    nastype = other
}

Для тестирования добавим локального пользователя в файл /etc/freeradius/3.0/users:

testuser  Cleartext-Password := "TestPass123"
    Tunnel-Type = VLAN,
    Tunnel-Medium-Type = IEEE-802,
    Tunnel-Private-Group-Id = "100"

Проверяем конфигурацию и запускаем в режиме отладки:

sudo freeradius -CX   # проверка конфига
sudo freeradius -X    # запуск в debug-режиме

Настройка EAP-модуля

Для корпоративной аутентификации необходимо настроить модуль EAP. Редактируем /etc/freeradius/3.0/mods-enabled/eap:

eap {
    default_eap_type = peap
    timer_expire = 60
    ignore_unknown_eap_types = no
    cisco_accounting_username_bug = no

    tls-config tls-common {
        private_key_password =
        private_key_file = /etc/freeradius/3.0/certs/server.key
        certificate_file = /etc/freeradius/3.0/certs/server.pem
        ca_file = /etc/freeradius/3.0/certs/ca.pem
        dh_file = /etc/freeradius/3.0/certs/dh
        ca_path = ${cadir}
        cipher_list = "DEFAULT"
        tls_min_version = "1.2"
    }

    peap {
        tls = tls-common
        default_eap_type = mschapv2
        copy_request_to_tunnel = yes
        use_tunneled_reply = yes
    }
}

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

cd /etc/freeradius/3.0/certs
make ca.pem
make server.pem
make client.pem
chown freerad:freerad *.pem *.key

Интеграция FreeRADIUS с Active Directory

В большинстве организаций учётные записи хранятся в Active Directory. Для интеграции используем модуль ntlm_auth через Samba/Winbind, что позволяет проверять пароли через MSCHAPv2 без передачи их в открытом виде.

Устанавливаем необходимые пакеты:

sudo apt install samba winbind libpam-winbind libnss-winbind krb5-user -y

Настраиваем Kerberos в /etc/krb5.conf:

[libdefaults]
    default_realm = COMPANY.LOCAL
    dns_lookup_realm = false
    dns_lookup_kdc = true

[realms]
    COMPANY.LOCAL = {
        kdc = dc01.company.local
        admin_server = dc01.company.local
    }

[domain_realm]
    .company.local = COMPANY.LOCAL
    company.local = COMPANY.LOCAL

Настраиваем Samba в /etc/samba/smb.conf:

[global]
    workgroup = COMPANY
    realm = COMPANY.LOCAL
    security = ads
    encrypt passwords = yes
    winbind use default domain = yes
    winbind uid = 10000-20000
    winbind gid = 10000-20000
    winbind enum users = yes
    winbind enum groups = yes
    idmap config * : range = 10000-20000

Вводим сервер в домен и проверяем:

sudo net ads join -U Administrator
sudo systemctl restart winbind
wbinfo -t   # проверка доверительного отношения
wbinfo -u   # список пользователей домена

Настройка ntlm_auth для FreeRADIUS

Разрешаем FreeRADIUS использовать ntlm_auth. Добавляем пользователя freerad в группу winbindd_priv:

sudo usermod -aG winbindd_priv freerad
sudo chgrp winbindd_priv /var/lib/samba/winbindd_privileged

Редактируем модуль /etc/freeradius/3.0/mods-enabled/mschap:

mschap {
    use_mppe = yes
    require_encryption = yes
    require_strong = yes
    ntlm_auth = "/usr/bin/ntlm_auth --request-nt-key --domain=COMPANY --username=%{%{Stripped-User-Name}:-%{User-Name}} --challenge=%{%{mschap:Challenge}:-00} --nt-response=%{%{mschap:NT-Response}:-00}"
}

Проверяем аутентификацию вручную:

ntlm_auth --request-nt-key --domain=COMPANY --username=ivanov
radtest -t mschap ivanov Password123 localhost 0 testing123

Динамическое назначение VLAN через RADIUS

Одно из главных преимуществ 802.1X — возможность помещать пользователя в определённый VLAN на основе его группы в AD. Бухгалтерия попадает в VLAN 100, IT-отдел — в VLAN 200, гости — в VLAN 300.

Для этого создаём файл политик /etc/freeradius/3.0/policy.d/vlan-assignment:

vlan_assignment {
    if ("%{sql:SELECT groupname FROM radgroupcheck WHERE username='%{User-Name}'}" == "accounting") {
        update reply {
            Tunnel-Type = VLAN
            Tunnel-Medium-Type = IEEE-802
            Tunnel-Private-Group-Id = "100"
        }
    }
    elsif ("%{sql:SELECT groupname FROM radgroupcheck WHERE username='%{User-Name}'}" == "it-dept") {
        update reply {
            Tunnel-Type = VLAN
            Tunnel-Medium-Type = IEEE-802
            Tunnel-Private-Group-Id = "200"
        }
    }
    else {
        update reply {
            Tunnel-Type = VLAN
            Tunnel-Medium-Type = IEEE-802
            Tunnel-Private-Group-Id = "300"
        }
    }
}

Альтернативный вариант — использовать LDAP-группы напрямую. В модуле mods-enabled/ldap настраиваем маппинг групп:

ldap {
    server = "dc01.company.local"
    port = 389
    identity = "CN=radius-svc,OU=Service Accounts,DC=company,DC=local"
    password = SvcP@ssw0rd
    base_dn = "DC=company,DC=local"
    user {
        base_dn = "${..base_dn}"
        filter = "(sAMAccountName=%{%{Stripped-User-Name}:-%{User-Name}})"
    }
    group {
        base_dn = "${..base_dn}"
        filter = "(objectClass=group)"
        membership_attribute = "memberOf"
    }
}

Затем в файле users прописываем правила на основе групп:

DEFAULT Ldap-Group == "CN=IT Department,OU=Groups,DC=company,DC=local"
    Tunnel-Type = VLAN,
    Tunnel-Medium-Type = IEEE-802,
    Tunnel-Private-Group-Id = "200"

Настройка 802.1X на коммутаторах Cisco

На коммутаторах Cisco Catalyst настройка 802.1X выполняется глобально и на уровне каждого порта. Пример конфигурации для Cisco IOS:

! Глобальные настройки
aaa new-model
aaa authentication dot1x default group radius
aaa authorization network default group radius
aaa accounting dot1x default start-stop group radius

radius server FREERADIUS
 address ipv4 10.0.1.50 auth-port 1812 acct-port 1813
 key MyR4d1usS3cret!

dot1x system-auth-control

! Настройка портов доступа
interface range GigabitEthernet0/1 - 24
 switchport mode access
 switchport access vlan 300
 authentication port-control auto
 authentication host-mode multi-auth
 dot1x pae authenticator
 dot1x timeout tx-period 10
 spanning-tree portfast

Для гостевого VLAN и VLAN при сбое аутентификации:

interface GigabitEthernet0/1
 authentication event fail action authorize vlan 300
 authentication event server dead action authorize vlan 300
 authentication event no-response action authorize vlan 300
 dot1x guest-vlan 300

Настройка 802.1X на MikroTik

На коммутаторах и точках доступа MikroTik 802.1X настраивается через модуль dot1x. Пример для RouterOS 7:

/radius
add address=10.0.1.50 secret="MyR4d1usS3cret!" service=dot1x

/interface dot1x server
add interface=ether2 auth-types=eap-peap comment="office-port"
add interface=ether3 auth-types=eap-peap comment="office-port"

/interface dot1x server
set [ find ] accounting=yes interim-update=5m

Для Wi-Fi точек доступа MikroTik (WPA2-Enterprise):

/interface wifi security
add name=wpa2-enterprise authentication-types=wpa2-eap \
    eap-methods=peap \
    eap-accounting=yes

/interface wifi
set [ find ] security=wpa2-enterprise

Важно убедиться, что между RADIUS-сервером и коммутаторами нет межсетевого экрана, блокирующего порты UDP 1812 (аутентификация) и 1813 (учёт).

Настройка суппликанта на клиентских устройствах

Для работы 802.1X на клиентских машинах необходимо настроить суппликант. В Windows он встроен — это служба Wired AutoConfig (для проводной) и WLAN AutoConfig (для беспроводной сети).

Включаем проводной суппликант через групповую политику (GPO):

  1. Откройте gpedit.msc → Computer Configuration → Windows Settings → Security Settings → System Services
  2. Найдите Wired AutoConfig и установите автоматический запуск
  3. Перейдите в Network Policies → Wired Network (IEEE 802.3) Policies
  4. Создайте новую политику с методом аутентификации PEAP

Через PowerShell можно массово включить суппликант:

Set-Service dot3svc -StartupType Automatic
Start-Service dot3svc

# Создание профиля 802.1X для проводной сети
$xml = @"
<?xml version="1.0"?>
<LANProfile xmlns="http://www.microsoft.com/networking/LAN/profile/v1">
  <MSM>
    <security>
      <OneXEnforced>false</OneXEnforced>
      <OneXEnabled>true</OneXEnabled>
      <OneX xmlns="http://www.microsoft.com/networking/OneX/v1">
        <EAPConfig>
          <EapHostConfig xmlns="http://www.microsoft.com/provisioning/EapHostConfig">
            <EapMethod>
              <Type>25</Type>
              <VendorId>0</VendorId>
              <VendorType>0</VendorType>
              <AuthorId>0</AuthorId>
            </EapMethod>
          </EapHostConfig>
        </EAPConfig>
      </OneX>
    </security>
  </MSM>
</LANProfile>
"@
$xml | Out-File "C:\dot1x-profile.xml"
netsh lan add profile filename="C:\dot1x-profile.xml"

В Linux суппликант реализован через wpa_supplicant. Конфигурация для проводной сети /etc/wpa_supplicant/wpa_supplicant-eth0.conf:

ctrl_interface=/var/run/wpa_supplicant
ap_scan=0

network={
    key_mgmt=IEEE8021X
    eap=PEAP
    phase2="auth=MSCHAPV2"
    identity="ivanov"
    password="Password123"
    ca_cert="/etc/ssl/certs/radius-ca.pem"
}

Мониторинг и отладка 802.1X

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

Основные инструменты диагностики:

# Запуск FreeRADIUS в debug-режиме (все пакеты видны)
sudo systemctl stop freeradius
sudo freeradius -X 2>&1 | tee /tmp/radius-debug.log

# Тестирование аутентификации
radtest user1 password 10.0.1.50 0 testing123
eapol_test -c /etc/eapol_test.conf -s testing123

# Просмотр RADIUS-accounting
cat /var/log/freeradius/radacct/*/detail-*

Конфигурация eapol_test для проверки EAP-PEAP:

network={
    ssid="test"
    key_mgmt=IEEE8021X
    eap=PEAP
    identity="testuser"
    password="TestPass123"
    phase2="auth=MSCHAPV2"
    ca_cert="/etc/freeradius/3.0/certs/ca.pem"
}

На коммутаторах Cisco полезные команды:

show dot1x all summary
show dot1x interface Gi0/1 details
show authentication sessions
show authentication sessions interface Gi0/1
debug dot1x all
debug radius authentication

На MikroTik:

/interface dot1x server print
/interface dot1x server active print
/log print where topics~"dot1x"

Рекомендации по внедрению в продакшене

Внедрение 802.1X в действующей сети требует поэтапного подхода. Одномоментное включение на всех портах гарантированно приведёт к массовым отключениям пользователей.

Рекомендуемый план:

  1. Подготовка (1-2 недели): развёртывание RADIUS-сервера, настройка интеграции с AD, тестирование на выделенных портах
  2. Пилот (2-4 недели): включение 802.1X в одном подразделении с мониторингом и быстрым откатом
  3. Раскатка (4-8 недель): поэтапное включение по подразделениям
  4. Ужесточение: отключение гостевого VLAN на критичных портах, переход на EAP-TLS с сертификатами

Обязательно настройте отказоустойчивость:

# Второй RADIUS-сервер (реплика)
radius server FREERADIUS-BACKUP
 address ipv4 10.0.1.51 auth-port 1812 acct-port 1813
 key MyR4d1usS3cret!

aaa group server radius RADIUS-SERVERS
 server name FREERADIUS
 server name FREERADIUS-BACKUP

Для серверов и принтеров, которые не поддерживают 802.1X, используйте MAB (MAC Authentication Bypass):

interface GigabitEthernet0/48
 description SERVER-PORT
 switchport mode access
 authentication port-control auto
 authentication host-mode single-host
 mab
 dot1x pae authenticator
 authentication order mab dot1x
 authentication priority dot1x mab

В файле users FreeRADIUS добавьте MAC-адреса устройств:

001122334455  Cleartext-Password := "001122334455"
    Tunnel-Type = VLAN,
    Tunnel-Medium-Type = IEEE-802,
    Tunnel-Private-Group-Id = "200"

Часто задаваемые вопросы

Да, FreeRADIUS поддерживает локальную базу пользователей (файл users), MySQL/PostgreSQL, LDAP-каталоги (OpenLDAP) и даже аутентификацию по файлам. Однако для организаций с более чем 20 сотрудниками настоятельно рекомендуется централизованный каталог — AD или OpenLDAP.

Поведение зависит от настройки коммутатора. На Cisco можно настроить authentication event server dead action authorize vlan 300, чтобы при недоступности RADIUS пользователи попадали в указанный VLAN. Обязательно настраивайте второй RADIUS-сервер для отказоустойчивости.

Используйте MAB (MAC Authentication Bypass). Коммутатор отправляет MAC-адрес устройства как имя пользователя и пароль на RADIUS-сервер. Занесите MAC-адреса таких устройств в базу RADIUS с привязкой к нужному VLAN. Этот метод менее безопасен, чем 802.1X, поэтому используйте его только для устройств, не поддерживающих суппликант.

EAP-PEAP использует логин/пароль и серверный сертификат — проще во внедрении. EAP-TLS требует клиентские сертификаты на каждом устройстве — значительно безопаснее, но сложнее в управлении. Начните с PEAP, затем по мере созревания инфраструктуры PKI переходите на EAP-TLS.

Нужна помощь с настройкой?

Специалисты АйТи Фреш помогут с внедрением и настройкой — 15+ лет опыта, обслуживание от 15 000 ₽/мес

📞 Связаться с нами
#802.1X#RADIUS#FreeRADIUS#контроль доступа к сети#NAC#EAP-TLS#PEAP#аутентификация в сети
Комментарии 0

Оставить комментарий

загрузка...