Новости

Wi-Fi з логіном і паролем для кожного користувача або робимо WPA2-EAP / TLS підручними засобами

  1. Термінологія
  2. Загальна схема мережі
  3. Встановлення точки доступу
  4. RADIUS-сервер
  5. Налаштування клієнтів

З практичної точки зору було б зручно керувати Wi-Fi мережами, видаючи пароль кожному користувачеві. Це полегшує завдання з доступом до вашої бездротової мережі. Використовуючи так звану WPA2 PSK авторизацію, щоб запобігти доступ випадковому користувачу, потрібно міняти ключ, а також заново проходити процес авторизації на кожному окремому Wi-Fi пристрої. Крім того, якщо ви маєте кілька точок доступу, ключ потрібно міняти на всіх з них. А якщо Вам треба приховати пароль від кого-небудь, доведеться роздати всім співробітникам новий.
Уявімо ситуацію - до вас в офіс зайшов хтось сторонній (клієнт, контрагент?), І потрібно дати йому доступ в інтернет. Замість того, щоб давати йому WPA2 - ключ, можна зробити для нього окремий акаунт, який потім, після його відходу, можна видалити заблокувати. Це дасть вам гнучкість в управлінні учетке, а користувачі будуть дуже задоволені.
Ми зробимо зручну схему, яка застосовується в корпоративних мережах, але повністю з підручних засобів з мінімальними фінансовими і апаратними вкладеннями. Її схвалить служба безпеки і керівництво.


Колись давно інженерами IEEE був придуманий стандарт 802.1x. Цей стандарт відповідає за можливість авторизації користувача відразу при підключенні до середовища передачі даних. Іншими словами, якщо для з'єднання, наприклад, PPPoE, ви підключаєтеся до середовища (комутатора), і вже можете здійснювати передачу даних, авторизація потрібна для виходу в інтернет. У разі ж 802.1x ви не зможете робити нічого, поки не авторізуетесь. Саме кінцеве пристрій вас не допустить. Аналогічна ситуація з Wi-Fi точками доступу. Рішення ж про допуск вас приймається на зовнішньому сервері авторизації. Це може бути RADIUS, TACACS, TACACS + і т.д.

Термінологія


Взагалі авторизація користувача на точці може бути наступних видів:

  • Open - доступна всім
  • WEP - старе шифрування. Вже у всіх лисину проїду про те, що його нетреба використовувати взагалі
  • WPA - Використовується TKIP як протокол шифрування
  • WPA2 - Використовується шифрування AES

А тепер розглянемо варіанти того, як точка доступу дізнається сама, чи можна надавати користувачеві доступ до мережі чи ні:

  • WPA-PSK, WPA2-PSK - ключ до доступу знаходиться в самій точці.
  • WPA-EAP, WPA2-EAP - ключ до доступу звіряється з деякою віддаленою базою даних на сторонньому сервері

Також існує досить велика кількість способів соедінінея кінцевого пристрою із сервером авторизації (PEAP, TLS, TTLS ...). Я не буду їх тут описувати.

Загальна схема мережі


Для наочного розуміння наведемо загальну схему роботи нашої майбутньої схеми:
Для наочного розуміння наведемо загальну схему роботи нашої майбутньої схеми:   Якщо словами, то клієнту, при підключенні до Wi-Fi - точці пропонується ввести логін і пароль
Якщо словами, то клієнту, при підключенні до Wi-Fi - точці пропонується ввести логін і пароль. Отримавши логін і пароль Wi-Fi точка передає ці дані RADIUS-сервера, на що сервер відповідає, що можна робити з цим клієнтом. Залежно від відповіді, точка вирішує, дати йому доступ, урізати швидкість або щось ще.
За авторизацію користувачів буде відповідати наш сервер з встановленим freeradius. Freeradius є реалізацією протоколу RADIUS , Який в свою чергу є реалізацією спільного протоколу AAA. AAA - це набір засобів для здійснення наступних дій:
Authentication - перевіряє допустимість логіна і пароля.
Authorization - перевіряє наявність прав на виконання деяких дій.
Accounting - враховує ваші дейсвія в системі.
Сам протокол передає ім'я користувача, список атрибутів і їх значень для нього. Тобто, наприклад, атрибут Auth-Type: = Reject - відхилити цього клієнта, а Client-Password == «password» - порівняти атрибут в запиті зі значенням password.
Взагалі кажучи, база акаунтів і прав для них не обов'язково повинна зберігатися на RADIUS-сервері, так і базою може бути що завгодно - ніксовие користувачі, користувачі домену Windows ... та хоч текстовий файлик. Але в нашому випадку все буде в одному місці.

У цій статті нас будуть цікавити в першу чергу WPA2-EAP / TLS спосіб авторизації.
Практично всі сучасні точки доступу Wi-Fi вартістю більше 3 тис. Рублів підтримують потрібну нам технологію. Клієнтські пристрої підтримують і поготів.
У статті я буду використовувати наступне обладнання і програмне забезпечення:

  • Точка доступу Ubiquiti NanoStation M2
  • Сервер Gentoo і Freeradius
  • Клієнтське обладнання з встановленим програмним забезпеченням Windows 7, Android, iOS

Встановлення точки доступу


Головне, щоб точка підтримувала потрібний спосіб аутентифікації. Воно може називатися по різному в різних пристроях: WPA-EAP, WPA2 Enterprise і т.д. У всякому разі вибираємо аутентифікацію, встановлюємо IP-адреса і порт RADIUS-сервера і ключ, який ми вводили в clients.conf при налаштуванні Freeradius.
Наведу картинку з налаштованої точки Ubiquiti. Позначено галкою то, що потрібно міняти.
Головне, щоб точка підтримувала потрібний спосіб аутентифікації

RADIUS-сервер


Зайдемо на наш комп'ютер з Linux і встановимо RADIUS-сервер. Я брав freeradius, і ставив я його на gentoo. На мій подив, в рунеті немає матеріалів, що відносяться до налаштування Freeradius 2 для наших цілей. Всі статті досить старі, відносяться до старих версій цього програмного забезпечення.
root @ localhost ~ # emerge -v freeradius
Все :) RADIUS-сервер уже може працювати :) Ви можете перевірити це так:
root @ localhost ~ # radiusd -fX
Це debug-mode. Вся інформація вивалюється на консоль. Приступити до його налаштуванні.
Як це водиться в Linux, настройка виконується через конфігураційні файли. Файли зберігаються в / etc / raddb. Зробимо підготовчі дії - скопіюємо вихідні конфіги, почистимо конфігурація від всякого сміття.
root @ localhost ~ # cp -r / etc / raddb /etc/raddb.olg root @ localhost ~ # find / etc / raddb -type f -exec file {} \; | grep 'text' | cut -d ':' -f1 | xargs sed -i '/ ^ * \ t * * # / d; / ^ $ / d'
Далі додамо клієнта - точку доступу. Додаємо в файлик / etc / raddb / clients наступні рядки:
root @ localhost ~ # cat /etc/raddb/clients.conf | sed '/ client test-wifi /, /} /! d' client test-wifi {ipaddr = 192.168.0.1 #IP адреса точки, яка буде звертатися до радіусу secret = secret_key # Секретний ключик. Такий же треба буде поставити на Wi-Fi точки. require_message_authenticator = no # Краще так, з якимось D-Linkом у мене не вийшло інакше}
Далі додаємо домен для користувачів. Зробимо дефолтовий.
root @ localhost ~ # cat /etc/raddb/proxy.conf | sed '/ realm DEFAULT /, / ^} /! d' realm DEFAULT {type = radius authhost = LOCAL acchost = LOCAL}
Домени в RADIUS

Тут треба зауважити, що можна ділити користувачів до домену. А саме, в форматі імені користувача може вказуватися домен (наприклад user @ radius). DEFAULT означає будь-який невизначений домен. NULL - без домену. Залежно від домену (можна сказати префікса в імені користувача) можна здійснювати різні дії, як то віддати право аутентифицировать іншому хосту, відокремлювати чи ім'я від домену під час перевірки логіна і т.д.


І, нарешті, додаємо користувачів в файл / etc / raddb / users:
root @ localhost ~ # cat / etc / raddb / users | sed '10, $! d 'user1 Cleartext-Password: = "password1" user2 Cleartext-Password: = "password2" user3 Cleartext-Password: = "password3"
Ух, можна стартувати!
root @ localhost ~ # radiusd -fX
Наш сервер запущений і чекає підключень!

Налаштування клієнтів


Пробіжить по налаштуванню основних для користувача пристроїв. У наших співробітників є клієнти, що працюють на Android, iOS і Windows 7. Обмовимося відразу: так як ми використовуємо самосозданние сертифікати, то нам потрібно кілька разів вносити всілякі винятки і підтверджувати дії. Якби ми пользовали куплені сертифікати, можливо, все було б простіше.
Всіх простіше справа на iOS-пристроях. Вводимо логін і пароль, натискаємо «Прийняти сертифікат», і вперед.

Трохи складніше виглядає, але на практиці все теж просто на Android. Там трохи більше полів для введення.
Скріншот з Android
Ну і на Windows 7 пріедтся трохи понабудовували. Здійснимо наступні кроки:
Йдемо в центр бездротових підключень.

  1. Встановлюємо необхідні параметри у властивостях Вашого бездротового підключення
  2. Встановлюємо необхідні параметри в розширених налаштуваннях EAP
  3. Встановлюємо необхідні параметри в розширених налаштуваннях Додаткових параметрах
  4. Підключаємося в панелі завдань до Wi-Fi мережі і вводимо логін-пароль, насолоджуємося доступом до Wi-Fi

Далі представлю скріншоти діалогових вікон спеціально для схожих на мене людей, у яких очі розбігаються від діалогових вікон Windows.
Скріншоти Windows

Тепер залишилася одна проблема - якщо ви захочете додати-видалити нового користувача, то вам доведеться змінити users і перезапустити radius. Щоб цього уникнути підключимо базу даних і зробити свій власний міні-білінг для користувачів. Використовуючи БД, ви завжди зможете накидати простенький скрипт для додавання, блокування, зміни пароля користувача. І все це відбудеться без зупинки всієї системи.
Для себе я використовував Postgres, ви ж можете вибрати на свій розсуд. Я привожу базову настройку Postgres, не заглиблюючись в різні права доступу, паролі та інші хитрощі і зручності.
Для початку створюємо саму базу даних:
root @ localhost ~ # psql -U postgres radius_wifi => create user radius_wifi with password 1111; radius_wifi => create database radius_wifi with owner = radius_wifi; radius_wifi => \ q
Далі треба створити потрібні таблиці. Взагалі з Freeradius йде документація по схемам таблиць для різних баз даних, правда в різних дистрибутивах знаходяться вони в різних місцях. У мене особисто це лежить в /etc/raddb/sql/postgresql/schema.sql. Просто вставте ці рядки в psql, або просто запустите
root @ localhost ~ # cat /etc/raddb/sql/postgresql/schema.sql | psql -U radius_wifi radius_wifi
Про всяк випадок додам сюди схему для Postgres:
Схема для Postgres root @ localhost ~ # cat /etc/raddb/sql/postgresql/schema.sql | sed '/ ^ - / d; / \ / \ * / d; / \ * / d; / ^ $ / d;' CREATE TABLE radacct (RadAcctId BIGSERIAL PRIMARY KEY, AcctSessionId VARCHAR (64) NOT NULL, AcctUniqueId VARCHAR (32) NOT NULL UNIQUE, UserName VARCHAR (253), GroupName VARCHAR (253), Realm VARCHAR (64), NASIPAddress INET NOT NULL, NASPortId VARCHAR (15), NASPortType VARCHAR (32), AcctStartTime TIMESTAMP with time zone, AcctStopTime TIMESTAMP with time zone, AcctSessionTime BIGINT, AcctAuthentic VARCHAR (32), ConnectInfo_start VARCHAR (50), ConnectInfo_stop VARCHAR (50), AcctInputOctets BIGINT, AcctOutputOctets BIGINT, CalledStationId VARCHAR (50), CallingStationId VARCHAR (50), AcctTerminateCause VARCHAR (32), ServiceType VARCHAR (32), XAscendSessionSvrKey VARCHAR (10), FramedProtocol VARCHAR (32), FramedIPAddress INET, AcctStartDelay INTEGER, AcctStopDelay INTEGER); CREATE INDEX radacct_active_user_idx ON radacct (UserName, NASIPAddress, AcctSessionId) WHERE AcctStopTime IS NULL; CREATE INDEX radacct_start_user_idx ON radacct (AcctStartTime, UserName); CREATE TABLE radcheck (id SERIAL PRIMARY KEY, UserName VARCHAR (64) NOT NULL DEFAULT '', Attribute VARCHAR (64) NOT NULL DEFAULT '', op CHAR (2) NOT NULL DEFAULT '==', Value VARCHAR (253) NOT NULL DEFAULT ''); create index radcheck_UserName on radcheck (UserName, Attribute); CREATE TABLE radgroupcheck (id SERIAL PRIMARY KEY, GroupName VARCHAR (64) NOT NULL DEFAULT '', Attribute VARCHAR (64) NOT NULL DEFAULT '', op CHAR (2) NOT NULL DEFAULT '==', Value VARCHAR (253) NOT NULL DEFAULT ''); create index radgroupcheck_GroupName on radgroupcheck (GroupName, Attribute); CREATE TABLE radgroupreply (id SERIAL PRIMARY KEY, GroupName VARCHAR (64) NOT NULL DEFAULT '', Attribute VARCHAR (64) NOT NULL DEFAULT '', op CHAR (2) NOT NULL DEFAULT '=', Value VARCHAR (253) NOT NULL DEFAULT ''); create index radgroupreply_GroupName on radgroupreply (GroupName, Attribute); CREATE TABLE radreply (id SERIAL PRIMARY KEY, UserName VARCHAR (64) NOT NULL DEFAULT '', Attribute VARCHAR (64) NOT NULL DEFAULT '', op CHAR (2) NOT NULL DEFAULT '=', Value VARCHAR (253) NOT NULL DEFAULT ''); create index radreply_UserName on radreply (UserName, Attribute); CREATE TABLE radusergroup (UserName VARCHAR (64) NOT NULL DEFAULT '', GroupName VARCHAR (64) NOT NULL DEFAULT '', priority INTEGER NOT NULL DEFAULT 0); create index radusergroup_UserName on radusergroup (UserName); CREATE TABLE radpostauth (id BIGSERIAL PRIMARY KEY, username VARCHAR (253) NOT NULL, pass VARCHAR (128), reply VARCHAR (32), CalledStationId VARCHAR (50), CallingStationId VARCHAR (50), authdate TIMESTAMP with time zone NOT NULL default ' now () ');

Відмінно, база підготовлена. Тепер законфігурім Freeradius.
Додайте, якщо її там немає, в /etc/raddb/radiusd.conf рядок
$ INCLUDE sql.conf
Тепер відредагуйте /etc/raddb/sql.conf під вашу реальність. У мене він виглядає так:
Мій sql.conf root @ localhost ~ # cat /etc/raddb/sql.conf sql {database = "postgresql" driver = "rlm_sql _ $ {database}" server = "localhost" login = "radius_wifi" password = "1111" radius_db = "radius_wifi" acct_table1 = "radacct" acct_table2 = "radacct" postauth_table = "radpostauth" authcheck_table = "radcheck" authreply_table = "radreply" groupcheck_table = "radgroupcheck" groupreply_table = "radgroupreply" usergroup_table = "radusergroup" deletestalesessions = yes sqltrace = no sqltracefile = $ {logdir} /sqltrace.sql num_sql_socks = 5 connect_failure_retry_delay = 60 lifetime = 0 max_queries = 0 nas_table = "nas" $ INCLUDE sql / $ {database} /dialup.conf}

Додамо кілька нових користувачів test1, test2, test3, і ... заблокуємо test3
root @ localhost ~ # psql -U postgres radius_wifi => insert into radcheck (username, attribute, op, value) values ​​( 'test1', 'Cleartext-Password', ': =', '1111'); radius_wifi => insert into radcheck (username, attribute, op, value) values ​​( 'test2', 'Cleartext-Password', ': =', '1111'); radius_wifi => insert into radcheck (username, attribute, op, value) values ​​( 'test3', 'Cleartext-Password', ': =', '1111'); radius_wifi => insert into radcheck (username, attribute, op, value) values ​​( 'test3', 'Auth-Type', ': =', 'Reject');
Ну, перезапускаємо freeradius і пробуємо підключитися. Повинно все працювати!
Звичайно білінг вийшов ущербний - у нас ніде не зберігається інформації по аккаунтинга (обліку дій користувача), але і нам тут цього не треба. Щоб вести аккаунтинга, необхідні ще й Wi-Fi точки подорооже, ніж 3 тис. Рублів. Але вже і так ми з легкістю управляти користувачами.

В останньому розділі ми зібрали власний невеликий білінг! Залишається для повноти картини прикрутити якийсь WEB-інтерфейс управління Базою Даних, додати обов'язкове зміна пароля раз на місяць по крону. А якщо ще розоритися сертифікат і контролер Wi-Fi точок доступу, то у вас в руках є повноцінна корпоративна бездротова мережа. Але навіть без цих витрат і при малих зусиллях з Вашої сторони зробивши своїм користувачам такий доступ, вони вам скажуть величезне спасибі.

Стара, але частково актуальна інструкція на ixbt
WIKI FreeRadius
Використовувана точка Wi-Fi Ubiquiti Nanostation M2

Клієнт, контрагент?

Уважаемые партнеры, если Вас заинтересовала наша продукция, мы готовы с Вами сотрудничать. Вам необходимо заполнить эту форму и отправить нам. Наши менеджеры в оперативном режиме обработают Вашу заявку, свяжутся с Вами и ответят на все интересующее Вас вопросы.

Или позвоните нам по телефонам: (048) 823-25-64

Организация (обязательно) *

Адрес доставки

Объем

Как с вами связаться:

Имя

Телефон (обязательно) *

Мобильный телефон

Ваш E-Mail

Дополнительная информация: