Потребността да се предостави дистанционен достъп до корпоративната среда става все по-честа, независимо дали става въпрос за собствени потребители или партньори, нуждаещи се от достъп до определен сървър в организацията ви.
За тези цели повечето компании използват технологията 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»:

Резултатът от това действие ще бъде страница, на която са показани два QR кода. Смело пренебрегваме първия от тях (независимо от привлекателния надпис Google Authenticator / Authenticator / 2 Steps Authenticator) и отново смело сканираме втория код в софтуерния токен на телефона:

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

Въвеждайки име на потребителя и еднократен код от приложението на телефона. Получихте положителен отговор? Значи продължаваме напред.
Стъпка 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) коментираме всички редове, отнасящи се до localhost и добавяме два записа:
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където username = име на потребителя, 100110 = паролата, предоставена от приложението на телефона, localhost = адреса на 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: Потребител 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:

2. Добавяме нашия multiOTP сървър в групата:

3. Поправяме профила за свързване, като зададем групата на сървърите на Active Directory за основен сървър за аутентификация:

4. На таба Advanced -> Authentification също така избираме групата на сървърите на Active Directory:

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

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

Вуа-ля! При свързване чрез Cisco AnyConnect VPN Client също така ще бъде поискан втори, еднократен, парол.
Надявам се, че тази статия ще помогне на някого и че ще даде вдъхновение за размисъл как може да се използва този спонсори OTP-сървър за други задачи. Споделете в коментарите, ако имате желание.
Източник: habr.com
