linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
  • Введение
  • Уроки
  • How it works
  • Симулятор
  • База знаний
  • Собеседование
Index
Categories
All entries
Footer
linuxlab-УчебникиЦеныО платформеКонфиденциальность и куки
Copyright © 2026 LinuxLab. Все права защищены.
home/linux/kb/Протоколы/radius

kb/protocols ── Протоколы ── intermediate

RADIUS - аутентификация для сети, VPN, Wi-Fi

RADIUS - старый AAA-протокол UDP/1812+1813 (auth+accounting). Использование - аутентификация на сетевом железе: Wi-Fi WPA2-Ent через EAP, VPN-клиенты, доступ к роутерам и switch'ам. FreeRADIUS - реализация по умолчанию.

view as markdownaka: radius-protocol, freeradius, eap, dot1x

Зачем RADIUS

Когда у вас сотни сетевых устройств (switch'и, AP, VPN-концентраторы) и тысячи пользователей, нельзя дублировать пароли в каждом девайсе. Нужна централизованная AAA:

  • Authentication, кто этот пользователь
  • Authorization, что ему разрешено
  • Accounting, учёт сессий (start/stop, byte-counters)

RADIUS (RFC 2865, 1997), старый стандарт для этого. Несмотря на возраст и всех его наследников (Diameter, RadSec), в 2026 это всё ещё доминирующий протокол для:

  • WPA2/WPA3-Enterprise Wi-Fi (вместо PSK)
  • 802.1X wired-аутентификация на switch-портах
  • VPN-сервера (StrongSwan, OpenVPN, [[wireguard|WireGuard]] через wrapper)
  • TACACS+ alternative для CLI-доступа на сетевом железе
  • Captive portal в hotel/airport Wi-Fi

Транспорт

  • UDP/1812, Authentication
  • UDP/1813, Accounting
  • (Старые порты 1645/1646, legacy, иногда встречаются)

Есть RadSec (RADIUS over TCP/TLS, RFC 6614) для безопасного inter-org RADIUS, например, eduroam использует.

Действующие лица

┌─────────┐         ┌──────────────┐         ┌──────────────┐
│ Клиент  │  ◄───►  │  NAS (Network │  ◄───► │ RADIUS-сервер│
│ (laptop,│  EAP    │  Access Server│  RADIUS │ (FreeRADIUS, │
│  phone) │         │   = AP/switch)│         │  Cisco ISE)  │
└─────────┘         └──────────────┘         └──────────────┘
                                                    │
                                                    ▼
                                               backend store
                                               (LDAP/SQL/файл)
  • Supplicant (клиент): laptop/phone с 802.1X-supplicant'ом (wpa_supplicant в Linux, встроен в Windows/macOS/iOS).
  • NAS (Network Access Server): WiFi-AP или switch-порт. Сам он клиента не аутентифицирует, пробрасывает auth в RADIUS.
  • RADIUS-сервер: проверяет credentials, отдаёт Accept/Reject.

Базовый message-flow (PAP)

Client ────[username/password в EAPOL]───► NAS
NAS    ────[Access-Request UDP/1812]────► RADIUS
                                           │
                                           ├─ проверка в LDAP/SQL
                                           ▼
NAS    ◄───[Access-Accept или Reject]──── RADIUS
Client ◄────[granted/denied + VLAN/IP]──── NAS

В Access-Request, shared secret между NAS и RADIUS (общий password) шифрует password-attribute.

EAP, гибкий слой над RADIUS

Сам RADIUS поддерживает только базовые auth-методы (PAP/CHAP). Для современных протоколов (TLS, 802.1X), EAP (Extensible Authentication Protocol, RFC 3748).

EAP, message-format, может туннелировать любой auth-метод:

EAP-методЧто используетГде применяется
EAP-TLSmutual [[tls-certificatesTLS-cert]]'ы
PEAPserver-cert + inner-method (MSCHAPv2)typical Windows/AD-окружение
EAP-TTLSserver-cert + inner (PAP/CHAP/MSCHAPv2)universal, легко с LDAP backend'ом
EAP-MSCHAPv2password-only, vulnerablelegacy, не для нового deployment
EAP-PWDpassword (PAKE)устройства без cert-store (IoT)
EAP-AKASIM-cardмобильные операторы

EAP внутри RADIUS-attributes (EAP-Message). NAS просто туннелирует, не понимает содержимого. Всё дешифрование на RADIUS-сервере.

FreeRADIUS, стандарт open-source

Tier-0 в open-source, на нём строится большинство corporate-RADIUS. Конфиг, modular: каждая сущность (метод auth, backend, policy) отдельный модуль.

Файлы:

/etc/raddb/
  ├── radiusd.conf            # main config
  ├── clients.conf            # NAS-устройства с shared-secret
  ├── users                   # local user database (старый стиль)
  ├── mods-available/         # все доступные модули (LDAP, SQL, EAP, ...)
  ├── mods-enabled/           # символьные ссылки на enabled
  ├── sites-available/        # virtual servers
  └── sites-enabled/

Базовый workflow:

  1. В clients.conf зарегистрировать NAS:
    client wifi-ap-1 {
        ipaddr = 192.168.1.10
        secret = supersecret123
        shortname = ap-floor-1
    }
  2. В mods-enabled/ldap настроить bind к [[ldap-basics|LDAP/AD]]:
    ldap {
        server = ldaps://ad.example.com
        identity = cn=radius,ou=Service,dc=example,dc=com
        password = ...
        basedn = dc=example,dc=com
    }
  3. В sites-enabled/default policy:
    authorize { ldap; eap }
    authenticate { eap; ldap }

Запуск с debug, обязательно для первого раза:

bash
freeradius -X        # все логи в stdout, видно каждый attribute

Wi-Fi WPA2-Enterprise (full picture)

Реальный сценарий:

  1. Laptop подключается к SSID corp-wifi (security WPA2-Enterprise)
  2. Wi-Fi AP инициирует 802.1X auth, отсылает EAP-запрос
  3. Laptop предлагает PEAP с TLS внутри
  4. AP туннелирует EAP в RADIUS Access-Request на сервер
  5. RADIUS-сервер устанавливает TLS с laptop'ом (через AP), внутри inner-MSCHAPv2 проверяет username/password в LDAP
  6. RADIUS отвечает Access-Accept + атрибуты:
    Tunnel-Type = VLAN
    Tunnel-Medium-Type = IEEE-802
    Tunnel-Private-Group-Id = 100      ← VLAN ID
  7. AP помещает laptop в VLAN 100, начинает forward'ить трафик

WPA-PSK (общий пароль на всех), это домашняя версия. WPA-Enterprise каждый пользователь со своими credentials, индивидуальный VLAN/access.

Switch port-security 802.1X

Кабельная сеть может требовать аутентификацию на каждом порту (запретить «воткнул кабель, работает»):

Cisco IOS пример:
interface GigabitEthernet0/1
 switchport mode access
 authentication port-control auto
 dot1x pae authenticator
 dot1x timeout tx-period 5
!
aaa group server radius RADIUS
 server-private 10.0.0.5 key supersecret123
!
aaa authentication dot1x default group RADIUS

Linux supplicant:

bash
apt install wpasupplicant
wpa_supplicant -D wired -i eth0 -c /etc/wpa_supplicant/eth0.conf

Network device admin (вместо TACACS+)

Часто на switch/router используют RADIUS для CLI-логина админа:

aaa authentication login default group RADIUS local
aaa authorization exec default group RADIUS

Минус против TACACS+ (Cisco proprietary, открытый с 2020): TACACS+ умеет per-command authorization (можно запретить отдельные команды), RADIUS, нет (только enable / no enable).

Accounting

Параллельно auth идёт accounting на UDP/1813:

Acct-Status-Type = Start    (сессия началась)
Acct-Session-Id = ...
User-Name = alice
Framed-IP-Address = 10.0.0.42
...
Acct-Status-Type = Interim-Update    (every N min)
Acct-Input-Octets = 1234567
Acct-Output-Octets = 7654321
Acct-Status-Type = Stop
Acct-Session-Time = 3600

Используется для billing (ISP, hotel WiFi), forensics (кто был залогинен в момент инцидента), capacity-planning.

RADIUS vs LDAP vs Kerberos

Часто путают, разные слои:

| | RADIUS | [[ldap-basics|LDAP]] | kerberos | |---|--------|------|----------| | Назначение | network-AAA | directory + auth | SSO для services | | Где живёт | сетевое железо ↔ AAA | приложения ↔ directory | приложения ↔ KDC | | Транспорт | UDP/1812 | TCP/389,636 | TCP+UDP/88 | | Backend | да, обычно LDAP/SQL | сам себе backend | own KDC |

Часто стек: RADIUS проверяет на 802.1X, через LDAP в Active Directory, потом приложения отдельно через Kerberos.

Безопасность RADIUS (грабли)

  • Shared secret, общий пароль NAS↔RADIUS. Если short, brute'ится. Использовать 16+ random chars.
  • Replay-attacks: RADIUS-id 8-bit, легко угадать. RadSec (TLS) или IPsec между NAS↔RADIUS для prod.
  • MSCHAPv2 уязвим (DES → 56-bit effective). PEAP-MSCHAPv2 защищён внешним TLS, но если злоумышленник имитирует AP с fake-cert и клиент не проверяет, пароль украден. Поэтому обязательно verify server-cert на клиенте.
  • MAC-bypass auth, в небезопасных случаях RADIUS может разрешать на основе MAC. MAC легко spoof'ится, это не auth, это identifier.
  • CVE-2024-3596 BlastRADIUS, атака на MD5-based authentication в RADIUS. Mitigation: Message-Authenticator всегда + RadSec.

Когда что-то пошло не так

  • Reject from server без деталей, freeradius -X покажет каждый attribute и причину (часто ldap bind failed).
  • NAS не получает Access-Accept, UDP теряется, или wrong shared-secret. tcpdump -i any port 1812 -X посмотри пакеты.
  • EAP fails on Server certificate validation failed, клиент не доверяет cert RADIUS-сервера. Раздать root CA на устройства, или в EAP-supplicant настроить.
  • VLAN не назначается после Accept, RADIUS не отдаёт Tunnel-* атрибуты, или switch их не парсит. dot1x debug на свитче.
  • Accounting не пишется, accounting-port на NAS не указан, или firewall блокирует UDP/1813.
  • High latency на auth, backend (LDAP) тормозит. freeradius -X покажет где. Cache, replicas.
  • Login OK but no enable mode, RADIUS вернул Accept, но без Service-Type = Administrative-User атрибута → switch даёт только user-mode.

§ команды

bash
freeradius -X

Запустить FreeRADIUS в debug-режиме - все запросы и решения с детализацией

bash
radtest alice secret123 192.168.1.10 0 sharedsecret

Тест auth от имени NAS-имитатора - быстрая проверка, что сервер отвечает Accept/Reject

bash
radclient -x localhost auth sharedsecret <<< 'User-Name=alice,User-Password=s3cret'

Прямой запрос к RADIUS-серверу с произвольными атрибутами для отладки

bash
tcpdump -i any -nn 'udp port 1812 or udp port 1813' -X

Захватить RADIUS-трафик с hex-dump - viewing packets в живую

bash
wpa_supplicant -D wired -i eth0 -c /etc/wpa_supplicant/eth0.conf

Linux supplicant для 802.1X на проводном порту - аутентификация на switch'е

bash
ldapsearch -H ldaps://ad.example.com -D radius@example.com -w secret -b dc=example,dc=com 'sAMAccountName=alice'

Проверить, что RADIUS bind в AD работает, до настройки модуля LDAP

bash
echo 'User-Name=test,Cleartext-Password:=test' >> /etc/raddb/users

Простейший local-user для теста - без LDAP/SQL backend'а

§ см. также

  • pamPAM - Pluggable Authentication ModulesPAM - фреймворк аутентификации в Linux. Программы (sudo, login, sshd) не проверяют пароли сами, а вызывают PAM, который через стек модулей в `/etc/pam.d/<service>` решает: пускать или нет.
  • openvpnOpenVPN - TLS-based VPNOpenVPN - userspace TLS-VPN на сертификатах X.509. Режимы: tun (L3, default) или tap (L2). Поддерживает UDP/TCP, push routes, per-user-аутентификацию, TCP-443 как маскировку. Жирнее [[wireguard|WG]].
  • ldap-basicsLDAP - directory services основыLDAP - запрос к иерархическому справочнику. DN = координата объекта (cn=user,ou=People,dc=example,dc=com), bind = аутентификация, schema задаёт классы объектов и атрибуты. OpenLDAP/389-DS на Linux.
  • kerberosKerberos - сетевой single sign-onKerberos - SSO-система с тикетами на временной криптографии. Один раз вводишь пароль (`kinit`), получаешь TGT, дальше KDC выдаёт service tickets в обмен. Основа AD и FreeIPA.
  • tls-certificatesTLS-сертификаты - X.509, цепочка доверия, Let's EncryptTLS cert - X.509 объект с public key + identity (CN/SAN) + подписью CA. Цепочка: leaf → intermediate → root (доверенный OS). Let's Encrypt = бесплатный CA через ACME (HTTP-01/DNS-01 challenge). В k8s - cert-manager.
Footer
linuxlab-
Copyright © 2026 LinuxLab. Все права защищены.
Учебники
Цены
О платформе
Конфиденциальность и куки