Отидете в 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, конфигурирани за работа в съчетание и уеб интерфейс за администриране на 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="otp@domain.local"

Указваме потребителя, който има права за търсене в 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 код за токена
Тук всичко е изключително просто. Отваряме уеб интерфейса на OTP-сервера в браузъра, влизаме (не забравяйте да смените паролата за администратора, зададена по подразбиране!), и натискаме бутона "Print":

Отидете в 2FA (Двухфакторна аутентификация за ASA SSL VPN)
Резултатът от това действие ще е страница, на която се съдържат два QR кода. Ние смело игнорираме първия от тях (въпреки привлекателните надписи Google Authenticator \/ Authenticator \/ 2 Steps Authenticator), и отново смело сканираме втория код в софтуерния токен на телефона:

Отидете в 2FA (Двухфакторна аутентификация за ASA SSL VPN)
(да, умишлено развалих QR кода, за да го направя нечетим).

След извършването на тези действия, в приложението ви на всеки тридесет секунди ще започне да се генерира шестцифрен код.

За сигурност можете да направите проверка в същия интерфейс:

Отидете в 2FA (Двухфакторна аутентификация за ASA SSL VPN)
Въведете потребителското име и еднократния код от приложението на телефона. Получихме положителен отговор? Значи продължаваме напред.

Стъпка 4. Донастройка и тестване на работата на FreeRADIUS
Както споменах по-горе — multiOTP вече е настроен за работа с FreeRADIUS, остава само да проведем тестове и да добавим в конфигурационния файл на FreeRADIUS информацията за нашия VPN шлюз.

Връщаме се в конзолата на сървъра, в директорията /usr/local/bin/multiotp/, въвеждаме:

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

Като по този начин включваме по-подробно логване.

В конфигурационния файл на клиентите на FreeRADIUS (/etc/freeradius/clinets.conf) коментираме всички редове, свързани с localhost и добавяме два записа:

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

— за теста

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

— за нашия VPN шлюз.

Рестартираме FreeRADIUS и пробваме да се автентикираме:

radtest username 100110 localhost 1812 testing321

където username = потребителско име, 100110 = паролата, издадена ни от приложението на телефона, localhost = адреса на RADIUS сървъра, 1812 — порта на RADIUS сървъра, testing321 — паролата на клиента на RADIUS сървъра (която указахме в конфигурацията).

Резултатът от тази команда ще бъде изход, приблизително от следното съдържание:

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

Сега трябва да се уверим, че потребителят е преминал успешно валидация. За целта ще погледнем в лог файлa на multiotp:

tail /var/log/multiotp/multiotp.log

И ако последната запис е:

2016-09-01 08:58:17     notice  username  User    OK: Потребителят username успешно влезе от 127.0.0.1
2016-09-01 08:58:17     debug           Debug   Debug: 0 OK: Токенът е приет от 127.0.0.1

То всичко е минало успешно, и можем да извършим

Стъпка 5. Настройка на Cisco ASA
Предполагаем, че вече имаме настроена група и политики за достъп чрез SLL VPN, конфигурирани в комбинация с Active Directory, и трябва да добавим двуфакторна валидация за този профил.

1. Добавяме нова група сървъри AAA:

Отидете в 2FA (Двухфакторна аутентификация за ASA SSL VPN)
2. Добавяме нашия multiOTP сървър в групата:

Отидете в 2FA (Двухфакторна аутентификация за ASA SSL VPN)
3. Коригираме профила на връзката, задавайки групата на Active Directory като основен сървър за валидация:

Отидете в 2FA (Двухфакторна аутентификация за ASA SSL VPN)
4. На таба Advanced -> Authentification така също избираме групата на Active Directory:

Отидете в 2FA (Двухфакторна аутентификация за ASA SSL VPN)
5. На таба Advanced -> Secondary при валидация избираме създадената група сървъри, в която е въведен multiOTP-сървър. Отбелязваме, че Session username наследява от основната група на AAA сървърите:

Отидете в 2FA (Двухфакторна аутентификация за ASA SSL VPN)
Прилагаме настройките и

Стъпка 6, и последна
Проверяваме дали двуфакторната валидация за SLL VPN работи:

Отидете в 2FA (Двухфакторна аутентификация за ASA SSL VPN)
Воаля! При свързване чрез Cisco AnyConnect VPN Client ще бъде поискана и втора, еднократна, парола.

Надявам се тази статия да помага на някого и да вдъхновява за размисли как да се използва тази безплатен ОТП-сървър за други цели. Споделете в коментарите, ако имате желание.

Източник: habr.com

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster