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-код, каб зрабіць яго нечытэльным).

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

Для пэўнасці можна зрабіць праверку, у тым жа інтэрфейсе:

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-сервера, testing321 - пароль кліента 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 authentification выбіраемы створаную групу сервераў, у якой прапісаны multiOTP-сервер. Адзначаем, што Session username успадкоўваецца з першаснай групы сервераў ААА:

Go to 2FA (Двухфактарная аўтэнтыфікацыя для ASA SSL VPN)
Ужывальны налады і

Крок 6, ён жа апошні
Правяраем, ці працуе ў нас двухфактарная аўтэнтыфікацыя для SLL VPN:

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

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

Крыніца: habr.com

Дадаць каментар