Potřeba poskytnout vzdálený přístup k podnikové prostředí se objevuje čím dál častěji, a to jak pro vlastní uživatele, tak pro partnery, kteří potřebují přístup k různým serverům ve vaší organizaci.
Pro tyto účely většina firem používá technologii VPN, která se osvědčila jako spolehlivý způsob ochrany přístupu k místním zdrojům společnosti.
Moje společnost není výjimkou a i my, jako mnoho dalších, tuto technologii využíváme. A jako mnozí jiní používáme jako bránu pro vzdálený přístup Cisco ASA 55xx.
Se zvyšujícím se počtem vzdálených uživatelů se objevuje potřeba zjednodušit proces vydávání přihlašovacích údajů. Zároveň je však nutné to udělat bez obětí na bezpečnosti.
Našli jsme řešení v zavedení dvoufaktorové autentizace pro spojení přes Cisco SSL VPN, při použití jednorázových hesel. Tento příspěvek vám ukáže, jak zorganizovat podobné řešení s minimálními časovými nároky a nulovými náklady na potřebný software (za předpokladu, že Cisco ASA je již součástí vaší infrastruktury).
Trh přetéká hotovými řešeními pro generování jednorázových hesel, přičemž nabízí mnoho variant jejich získání, ať už to je zasílání hesla prostřednictvím SMS, nebo použití tokenů, ať už hardwarových, nebo softwarových (například na mobilním telefonu). Ale snaha o úsporu a chtít ušetřit peníze pro svého zaměstnavatele, v podmínkách současné krize, mě přiměla najít bezplatný způsob, jak realizovat službu pro generování jednorázových hesel. Ten, přestože je zdarma, má málo co do činění s komerčními řešeními (je třeba poznamenat, že tento produkt má i komerční verzi, ale domluvili jsme se, že náklady v penězích budou nulové).
Takže, co budeme potřebovat:
— Obraz Linuxu se zabudovaným nástrojem – multiOTP, FreeRADIUS a nginx pro přístup k serveru přes web (http://download.multiotp.net/ – použil jsem hotový obraz pro VMware)
— Server Active Directory
— Samotný Cisco ASA (pro pohodlí používám ASDM)
— Jakýkoli softwarový token, který podporuje mechanismus TOTP (například používám Google Authenticator, ale i FreeOTP bude vyhovovat)
Nejsem zde, abych se zabýval podrobnostmi o nasazení obrazu. Na výstupu získáte Debian Linux s již nainstalovanými multiOTP a FreeRADIUS, nakonfigurovanými pro spolupráci a webovým rozhraním pro správu OTP.
Krok 1. Spouštíme systém a nastavujeme ho na svou síť
Ve výchozím nastavení systém přichází s přihlašovacími údaji root/root. Myslím, že všichni tušíme, že by bylo dobré změnit heslo uživatele root po prvním přihlášení. Také je nutné změnit nastavení sítě (ve výchozím nastavení je to '192.168.1.44' se směrovačem '192.168.1.1'). Poté můžete systém restartovat.
V Active Directory vytvoříme uživatele otp, se heslem MySuperPassword.
Krok 2. Nastavujeme připojení a importujeme uživatele Active Directory
K tomu budeme potřebovat přístup do konzole a přímo soubor multiotp.php, pomocí kterého nastavíme parametry připojení k Active Directory.
Přecházíme do adresáře /usr/local/bin/multiotp/ a postupně provedeme následující příkazy:
.\/multiotp.php -config default-request-prefix-pin=0Určuje, zda je vyžadována další (trvalá) PIN při zadávání jednorázového PIN (0 nebo 1)
.\/multiotp.php -config default-request-ldap-pwd=0Určuje, zda je vyžadováno zadání doménového hesla při zadávání jednorázového PIN (0 nebo 1)
.\/multiotp.php -config ldap-server-type=1Určuje typ LDAP serveru (0 = běžný LDAP server, v našem případě 1 = Active Directory)
.\/multiotp.php -config ldap-cn-identifier="sAMAccountName"Určuje, v jakém formátu představit jméno uživatele (tato hodnota vrátí pouze jméno, bez domény)
.\/multiotp.php -config ldap-group-cn-identifier="sAMAccountName"Totéž, pouze pro skupinu
.\/multiotp.php -config ldap-group-attribute="memberOf"Určuje metodu určení příslušnosti uživatele ke skupině
.\/multiotp.php -config ldap-ssl=1Zda použít zabezpečené připojení k LDAP serveru (samozřejmě — ano!)
.\/multiotp.php -config ldap-port=636Port pro připojení k LDAP serveru
.\/multiotp.php -config ldap-domain-controllers=adSRV.domain.localAdresa vašeho serveru Active Directory
.\/multiotp.php -config ldap-base-dn="CN=Users,DC=domain,DC=local"Udáváme, odkud začít hledat uživatele v doméně
.\/multiotp.php -config ldap-bind-dn="otp@domain.local"Určujeme uživatele, který má práva vyhledávání v Active Directory
.\/multiotp.php -config ldap-server-password="MySuperPassword"Určujeme heslo uživatele pro připojení k Active Directory
.\/multiotp.php -config ldap-network-timeout=10Nastavujeme časový limit pro připojení k Active Directory
.\/multiotp.php -config ldap-time-limit=30Nastavujeme časové omezení pro operaci importu uživatelů
.\/multiotp.php -config ldap-activated=1Aktivujeme konfiguraci připojení k Active Directory
./multiotp.php -debug -display-log -ldap-users-syncProvádíme import uživatelů z Active Directory
Krok 3. Generujeme QR kód pro token
Je to velmi jednoduché. Otevřete webové rozhraní OTP serveru v prohlížeči, přihlaste se (nezapomeňte změnit výchozí heslo pro administrátora!) a klikněte na tlačítko „Print“:

Výsledkem této akce bude stránka, která obsahuje dva QR kódy. Na první z nich se klidně vykašlete (i když má lákavý nápis Google Authenticator / Authenticator / 2 Steps Authenticator) a znovu skenujte druhý kód do softwarového tokenu ve vašem telefonu:

(Ano, úmyslně jsem znehodnotil QR kód, aby byl nečitelný).
Po provedení těchto kroků se vám v aplikaci každých třicet sekund začne generovat šestimístné heslo.
Pro jistotu můžete provést kontrolu ve stejném rozhraní:

Zadejte uživatelské jméno a jednočasové heslo z aplikace ve vašem telefonu. Získali jste kladnou odpověď? Pokračujeme dál.
Krok 4. Dolaďte a otestujte funkčnost FreeRADIUS
Jak jsem zmínil výše — multiOTP je již nastaven pro práci s FreeRADIUS, zbývá provést testy a přidat do konfiguračního souboru FreeRADIUS informace o našem VPN bráně.
Vrátíme se do konzole serveru, do adresáře /usr/local/bin/multiotp/, zadáme:
./multiotp.php -config debug=1
./multiotp.php -config display-log=1Čímž zapneme podrobnější logování.
V konfiguračním souboru klientů FreeRADIUS (/etc/freeradius/clinets.conf) zakomentujeme všechny řádky, které se týkají localhost a přidáme dva záznamy:
client localhost {
ipaddr = 127.0.0.1
secret = testing321
require_message_authenticator = no
}— pro test
client 192.168.1.254/32 {
shortname = CiscoASA
secret = ConnectToRADIUSSecret
}— pro naši VPN bránu.
Restartujeme FreeRADIUS a pokusíme se autorizovat:
radtest username 100110 localhost 1812 testing321kde uživatelské jméno = uživatelské jméno, 100110 = heslo vydané naší aplikací v telefonu, localhost = adresa RADIUS serveru, 1812 — port RADIUS serveru, testing321 — heslo klienta RADIUS serveru (které jsme uvedli v konfiguraci).
Výsledkem tohoto příkazu bude výstup přibližně následujícího obsahu:
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=20Nyní se musíme ujistit, že uživatel úspěšně prošel autentizací. K tomu se podíváme do protokolu samotného multiotp:
tail /var/log/multiotp/multiotp.logA pokud tam bude poslední záznam:
2016-09-01 08:58:17 notice username Uživatel OK: Uživatel username se úspěšně přihlásil z 127.0.0.1
2016-09-01 08:58:17 debug Debug Debug: 0 OK: Token byl přijat z 127.0.0.1Pak vše proběhlo úspěšně a můžeme provést
Krok 5. Konfigurace Cisco ASA
Předpokládejme, že již máme nastavenou skupinu a politiky pro přístup přes SLL VPN, nastavené v kombinaci s Active Directory, a musíme přidat dvoufaktorovou autentizaci pro tento profil.
1. Přidáváme novou skupinu servery AAA:

2. Přidáváme do skupiny náš multiOTP server:

3. Opravit profil připojení, nastavujeme jako hlavní server autentizace skupinu serverů Active Directory:

4. Na kartě Advanced -> Authentification také vybíráme skupinu serverů Active Directory:

5. Na kartě Advanced -> Secondary vybíráme vytvořenou skupinu serverů, ve které je uveden multiOTP server. Zaznamenáváme, že Session username se dědí z primární skupiny serverů AAA:

Použijte nastavení a
Krok 6, poslední krok
Ověřujeme, zda nám funguje dvoufaktorová autentizace pro SLL VPN:

Vua-la! Při připojení pomocí Cisco AnyConnect VPN Client bude také vyžadováno druhé, jednorázové, heslo.
Doufám, že tento článek někomu pomůže a že někoho přiměje přemýšlet o tom, jak lze tento, bezplatný OTP server využít pro jiné úkoly. Podělte se v komentářích, pokud budete chtít.
Zdroj: habr.com
