Go to 2FA (Двофакторна автентифікація для ASA SSL VPN)

Потреба надати віддалений доступ до корпоративного середовища виникає все частіше і частіше, не важливо, будь то свої користувачі або партнери, яким необхідний доступ до того чи іншого сервера у вашій організації.

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

Моя компанія не стала винятком, і ми так само, як і багато інших, користуємося цією технологією. І, як багато інших, використовуємо як шлюз віддаленого доступу — Cisco ASA 55xx.

У разі зростання кількості віддалених користувачів з'являється потреба у полегшенні процедури видачі облікових даних. Але в той же час зробити це необхідно не на шкоду безпеці.

Для себе ми знайшли рішення у застосуванні двофакторної аутентифікації для підключення Cisco SSL VPN, із застосуванням одноразових паролів. І ця публікація розповість, як організувати подібне рішення з мінімальними витратами за часом і нульовими витратами на необхідний софт (з умовою, що Cisco ASA у вашій інфраструктурі вже є).

Ринок рясніє коробковими рішеннями для генерації одноразових паролів, при цьому пропонуючи масу варіантів щодо їх отримання, будь то відсилання пароля за допомогою SMS або використання токенів, як «залізних», так і програмних (наприклад на мобільному телефоні). Але потяг до економії та бажання зберегти гроші для свого роботодавця, в умовах нинішньої кризи змусили мене знайти безкоштовний спосіб реалізувати сервіс із генерації одноразових паролів. Який, при своїй безплатності, мало чим поступається комерційним рішенням (тут слід зазначити, що цей продукт має і комерційну версію, але ми ж домовилися, що витрати, в грошах, у нас будуть нульовими).

Отже, нам знадобляться:

- Образ Linux з вбудованим набором інструментів - multiOTP, FreeRADIUS і nginx, для доступу до сервера по веб (http://download.multiotp.net/ - я використовував готовий образ для VMware)
— Сервер Active Directory
- Власне Cisco ASA (я, для зручності, використовую ASDM)
— Будь-який софтверний токен, який підтримує механізм TOTP (Я, наприклад, використовую Google Authenticator, але підійде той же FreeOTP)

Не вдаватимуся в подробиці розгортання образу. На виході ви отримаєте Debian Linux з уже встановленими multiOTP та FreeRADIUS, налаштованими для роботи у зв'язці та web-інтерфейсом для адміністрування OTP.

Крок 1. Ініціюємо систему та налаштовуємо під свою мережу
За промовчанням система постачається з обліковими даними root root. Думаю, всі здогадалися, що непогано було б змінити пароль користувача root після першого логіну. Також необхідно змінити налаштування мережі (за умовчанням це '192.168.1.44' зі шлюзом '192.168.1.1'). Після цього можна перезавантажити систему.

В Active Directory створимо користувача OTP, з паролем MySuperPassword.

Крок 2. Налаштовуємо підключення та імпортуємо користувачів Active Directory
Для цього нам знадобиться доступ до консолі, і, безпосередньо файл multiotp.php, використовуючи який ми налаштуємо настройки підключення до Active Directory.

Переходимо до директорії /usr/local/bin/multiotp/ та по черзі виконуємо наступні команди:

./multiotp.php -config default-request-prefix-pin=0

Визначає, чи потрібна наявність додаткового (постійного) піна при введенні одноразового піна (0 або 1)

./multiotp.php -config default-request-ldap-pwd=0

Визначає, чи потрібно вводити доменний пароль при введенні одноразового піна (0 або 1)

./multiotp.php -config ldap-server-type=1

Вказується тип LDAP-сервер (0 = звичайний LDAP-сервер, у разі 1 = Active Directory)

./multiotp.php -config ldap-cn-identifier="sAMAccountName"

Вказує, у якому форматі представляти ім'я користувача (це значення виведе лише ім'я, без домену)

./multiotp.php -config ldap-group-cn-identifier="sAMAccountName"

Те саме, тільки для групи

./multiotp.php -config ldap-group-attribute="memberOf"

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

./multiotp.php -config ldap-ssl=1

Чи використовувати безпечне підключення до LDAP-сервера (звичайно так!)

./multiotp.php -config ldap-port=636

Порт для підключення до LDAP-сервера

./multiotp.php -config ldap-domain-controllers=adSRV.domain.local

Адреса вашого сервера Active Directory

./multiotp.php -config ldap-base-dn="CN=Users,DC=domain,DC=local"

Вказуємо, звідки розпочинати пошук користувачів у домені

./multiotp.php -config ldap-bind-dn="[email protected]"

Вказуємо користувача, який має право пошуку в Active Directory

./multiotp.php -config ldap-server-password="MySuperPassword"

Вказуємо пароль користувача для підключення до Active Directory

./multiotp.php -config ldap-network-timeout=10

Виставляємо таймаут для підключення до Active Directory

./multiotp.php -config ldap-time-limit=30

Виставляємо обмеження часу на операцію імпорту користувачів

./multiotp.php -config ldap-activated=1

Активуємо конфігурацію підключення до Active Directory

./multiotp.php -debug -display-log -ldap-users-sync

Виробляємо імпорт користувачів із Active Directory

Крок 3. Генеруємо QR-код для токена
Тут усе дуже просто. Відкриваємо веб-інтерфейс ОТП-сервера у браузері, логінімся (не забуваємо змінити пароль для адміну, встановлений за замовчуванням!), та натискаємо на кнопку «Print»:

Go to 2FA (Двофакторна автентифікація для ASA SSL VPN)
Результатом цієї дії буде сторінка, на якій міститься два QR-коди. Ми сміливо забиваємо на перший з них (не дивлячись на привабливий напис Google Authenticator / Authenticator / 2 Steps Authenticator), і знову ж таки сміливо скануємо другий код у софтверний токен на телефоні:

Go to 2FA (Двофакторна автентифікація для ASA SSL VPN)
(Так, я навмисно зіпсував QR-код, щоб зробити його нечитабельним).

Після здійснення цих дій у вас у додатку кожні тридцять секунд почне генеруватися шестициферний пароль.

Для вірності можна провести перевірку, в тому ж інтерфейсі:

Go to 2FA (Двофакторна автентифікація для ASA SSL VPN)
Вбивши ім'я користувача, і одноразовий пароль із програми на телефоні. Чи отримали позитивну відповідь? Значить, рухаємося далі.

Крок 4. Доналаштовуємо та тестуємо роботу FreeRADIUS
Як я згадував вище — multiOTP вже налаштований для роботи з FreeRADIUS, залишається провести тести і внести в конфігураційний файл FreeRADIUS інформацію про наш VPN-шлюз.

Повертаємось у консоль сервера, в директорію /usr/local/bin/multiotp/, вводимо:

./multiotp.php -config debug=1
./multiotp.php -config display-log=1

Включно з тим докладніше логування.

У конфігураційному файлі клієнтів FreeRADIUS (/etc/freeradius/clinets.conf) коментуємо всі рядки, що належать до локальний і додаємо два записи:

client localhost {
        ipaddr = 127.0.0.1
        secret          = testing321
        require_message_authenticator = no
}

- для тесту

client 192.168.1.254/32 {
        shortname =     CiscoASA
        secret =        ConnectToRADIUSSecret
}

- Для нашого VPN-шлюзу.

Перезапускаємо FreeRADIUS і пробуємо авторизуватися:

radtest username 100110 localhost 1812 testing321

де ім'я користувача = ім'я користувача, 100110 = пароль, виданий нам програмою на телефоні, локальний = адреса RADIUS-сервера, 1812 - порт RADIUS-сервера, тестування321 - пароль клієнта RADIUS-сервера (який ми вказали в конфізі).

Результатом цієї команди стане висновок приблизно наступного змісту:

Sending Access-Request of id 44 to 127.0.0.1 port 1812
        User-Name = "username"
        User-Password = "100110"
        NAS-IP-Address = 127.0.1.1
        NAS-Port = 1812
        Message-Authenticator = 0x00000000000000000000000000000000
rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=44, length=20

Тепер нам необхідно переконатися, що користувач успішно пройшов аутентифікацію. Для цього ми заглянемо в лог самого multiotp:

tail /var/log/multiotp/multiotp.log

І якщо останнім записом там буде:

2016-09-01 08:58:17     notice  username  User    OK: User username successfully logged in from 127.0.0.1
2016-09-01 08:58:17     debug           Debug   Debug: 0 OK: Token accepted from 127.0.0.1

То все пройшло успішно, і ми можемо виконати

Крок 5. Налаштування Cisco ASA
Умовимося, що ми вже маємо налаштовану групу та політики для доступу до SLL VPN, налаштовану у зв'язці з Active Directory, і нам необхідно додати двофакторну автентифікацію для цього профайлу.

1. Додаємо нову групу серверів AAA:

Go to 2FA (Двофакторна автентифікація для ASA SSL VPN)
2. Додаємо до групи наш multiOTP сервер:

Go to 2FA (Двофакторна автентифікація для ASA SSL VPN)
3. Правимо профайл підключення, виставивши як основний сервер аутентифікації групу серверів Active Directory:

Go to 2FA (Двофакторна автентифікація для ASA SSL VPN)
4. На вкладці Advanced -> Authentification так само вибираємо групу серверів Active Directory:

Go to 2FA (Двофакторна автентифікація для ASA SSL VPN)
5. На вкладці Advanced -> Secondary autentification вибираємо створену групу серверів, у якій прописано multiOTP-сервер. Зазначаємо, що Session username успадковується з первинної групи серверів ААА:

Go to 2FA (Двофакторна автентифікація для ASA SSL VPN)
Застосовуємо налаштування та

Крок 6, він же останній
Перевіряємо, чи працює у нас двофакторна автентифікація для SLL VPN:

Go to 2FA (Двофакторна автентифікація для ASA SSL VPN)
Вуа-ля! При підключенні за допомогою Cisco AnyConnect VPN Client також буде запитуватися другий, одноразовий пароль.

Сподіваюся, що ця стаття допоможе комусь, і що комусь вона дасть їжу для роздумів, як можна використати даний, безкоштовний ОТП-сервер для інших завдань. Ділиться у коментарях, якщо буде бажання.

Джерело: habr.com

Додати коментар або відгук