
Dnes bych se chtěl podělit o to, jak nastavíte server dvoufaktorové autentizace pro ochranu podnikové sítě, webových stránek, služeb a SSH. Na serveru bude fungovat kombinace: LinOTP + FreeRadius.
Proč ho potřebujeme?
Je to zcela zdarma, pohodlné řešení uvnitř vaší sítě, nezávislé na třetích stranách.
Tato služba je velmi pohodlná a poměrně přehledná ve srovnání s jinými open-source produkty, a také podporuje obrovské množství funkcí a politik (například login + heslo + (PIN + OTP token)). Přes API se integruje se službami pro odesílání SMS (LinOTP Config->Provider Config->SMS Provider), generuje kódy pro mobilní aplikace jako Google Authenticator a mnoho dalšího. Považuji ji za pohodlnější než službu zvažovanou v .
Tento server výborně spolupracuje s Cisco ASA, OpenVPN serverem, Apache2 a prakticky se vším, co podporuje autentizaci přes RADIUS server (například pro SSH v datovém centru).
Požadováno:
1) Debian 8 (jessie) — Povinně! (zkušební instalace na Debian 9 je popsána na konci článku)
Začátek:
Nainstalujeme Debian 8.
Přidáme repozitář LinOTP:
# echo 'deb http://www.linotp.org/apt/debian jessie linotp' > /etc/apt/sources.list.d/linotp.listPřidáme klíče:
# gpg --search-keys 913DFF12F86258E5Někdy při "čisté" instalaci, po provedení této příkazu, Debian hlásí:
gpg: vytvořen adresář `/root/.gnupg`
gpg: vytvořen nový konfigurační soubor `/root/.gnupg/gpg.conf`
gpg: POZOR: parametry v `/root/.gnupg/gpg.conf` nejsou při tomto spuštění aktivní
gpg: vytvořena tabulka klíčů `/root/.gnupg/secring.gpg`
gpg: vytvořena tabulka klíčů `/root/.gnupg/pubring.gpg`
gpg: nejsou určeny servery klíčů (použijte --keyserver)
gpg: selhání při vyhledávání na serveru klíčů: špatné URI
To je počáteční nastavení gnupg. Nic hrozného. Stačí příkaz provést znovu.
Na otázku Debiana:
gpg: hledání "913DFF12F86258E5" na hkp serveru keys.gnupg.net
(1) LSE LinOTP2 Packaging
2048 bit RSA klíč F86258E5, vytvořen: 2010-05-10
Klíče 1-1 z 1 pro "913DFF12F86258E5". Zadejte číslo, N) Další nebo Q) Konec>Odpovídáme: 1
Další:
# gpg --export 913DFF12F86258E5 | apt-key add -# apt-get updateNainstalujeme mysql. V teorii je možné použít jiný sql server, ale pro zjednodušení použiji ten, který je doporučen pro LinOTP.
(další informace, včetně rekonstrukce databáze LinOTP, lze nalézt v oficiální dokumentaci k . Tam také najdete příkaz: dpkg-reconfigure linotp pro změnu parametrů, pokud jste již nainstalovali mysql).
# apt-get install mysql-server# apt-get update (ještě jednou zkontrolovat aktualizace neuškodí)
Nainstalujeme LinOTP a další moduly:
# apt-get install linotp Odpovídáme na otázky instalátora:
Použít Apache2: ano
Vymyslete heslo pro admin LinOTP: „VašeHeslo“
Vygenerovat samostatně podepsaný certifikát?: ano
Použít MySQL?: ano
Kde se nachází databáze: localhost
Vytváříme databázi LinOTP(jméno databáze) na serveru: LinOTP2
Vytváříme samostatného uživatele pro databázi: LinOTP2
Nastavujeme heslo uživateli: „VašeHeslo“
Vytvořit databázi nyní? (něco jako „Jste si jisti, že chcete …“): ano
Zadáváme heslo root pro MySQL, které bylo vytvořeno při jeho instalaci: „VašeHeslo“
Hotovo.
(volitelně, není nutné)
# apt-get install linotp-adminclient-cli (volitelně, není nutné)
# apt-get install libpam-linotp A tak je naše webové rozhraní LinOTP nyní dostupné na adrese:
"<b>https<\/b>: \\\/\\\/IP_serveru\\\/manage"O nastavení v webovém rozhraní vám povím později.
A nyní, nejdůležitější! Spouštíme FreeRadius a spojujeme ho s LinOTP.
Instalujeme FreeRadius a modul pro práci s LinOTP
# apt-get install freeradius linotp-freeradius-perlzálohujeme konfigurace klienta a Users radiusu.
# mv /etc/freeradius/clients.conf /etc/freeradius/clients.old# mv /etc/freeradius/users /etc/freeradius/users.oldVytváříme prázdný soubor klienta:
# touch /etc/freeradius/clients.confUpravujeme náš nový konfigurační soubor (zálohovanou konfiguraci lze použít jako příklad)
# nano /etc/freeradius/clients.confclient 192.168.188.0/24 {
secret = passwd # heslo pro připojení klientů
}Dále vytváříme soubor uživatelů:
# touch /etc/freeradius/usersUpravujeme soubor, aby radius věděl, že budeme používat perl pro autentizaci.
# nano /etc/freeradius/usersDEFAULT Auth-type := perlDále upravujeme soubor /etc/freeradius/modules/perl
# nano /etc/freeradius/modules/perlMusíme uvést cestu k perl skriptu linotp v parametru module:
Perl { .......
.........
module = /usr/lib/linotp/radius_linotp.pm …..
Dále vytváříme soubor, ve kterém říkáme, z jakého (domény, databáze nebo souboru) získat data.
# touch /etc/linotp2/rlm_perl.ini# nano /etc/linotp2/rlm_perl.iniURL=https://IP_vašeho_LinOTP_serveru(192.168.X.X)/validate/simplecheck
REALM=webusers1c
RESCONF=LocalUser
Debug=True
SSL_CHECK=FalseTady se na chvíli zastavím, protože je to důležité:
Úplný popis souboru s komentáři:
#IP of the linotp server (IP адрес нашего LinOTP сервера)
URL=https://172.17.14.103/validate/simplecheck
#Наша область которую мы создадим в веб интерфейсе LinOTP.)
REALM=rearm1
#Имя группы юзверей которая создается в вебморде LinOTP.
RESCONF=flat_file
#optional: comment out if everything seems to work fine
Debug=True
#optional: use this, if you have selfsigned certificates, otherwise comment out (SSL если мы создаем свой сертификат и хотим его проверять)
SSL_CHECK=False
Dále vytvoříme soubor /etc/freeradius/sites-available/linotp
# touch /etc/freeradius/sites-available/linotp# nano /etc/freeradius/sites-available/linotpA zkopírujeme do něj konfiguraci (nic nemusíme upravovat):
authorize {
#normalizuje neplatné požadavky klienta před předáním dalším modulům (viz '/etc/freeradius/modules/preprocess')
preprocess
# Pokud používáte více typů domén, pravděpodobně
# budete chtít nastavit "ignore_null = yes" pro všechny z nich.
# Jinak, když první styl domény neodpovídá,
# další styly nebudou zkontrolovány.
# umožňuje seznam domén (viz '/etc/freeradius/modules/realm')
IPASS
#rozumí něčemu jako USER@REALM a může rozlišit komponenty (viz '/etc/freeradius/modules/realm')
suffix
#rozumí USERREALM a může rozlišit komponenty (viz '/etc/freeradius/modules/realm')
ntdomain
# Přečtěte si soubor 'users', abyste se dozvěděli o speciální konfiguraci, která by měla být použita pro
# určité uživatele (viz '/etc/freeradius/modules/files')
files
# umožňuje nechat autentifikaci vypršet (viz '/etc/freeradius/modules/expiration')
expiration
# umožňuje definovat platné časy služby (viz '/etc/freeradius/modules/logintime')
logintime
# Nemáme žádnou radius_shortname_map!
pap
}
# zde je volán linotp perl modul pro další zpracování
authenticate {
perl
}Dále vytvoříme symbolický odkaz:
# ln -s ../sites-available/linotp /etc/freeradius/sites-enabledOsobně zničím defaultní Radius weby, ale pokud je potřebujete, můžete je buď upravit v jejich konfiguraci, nebo je vypnout.
# rm /etc/freeradius/sites-enabled/default# rm /etc/freeradius/sites-enabled/inner-tunnel# service freeradius reload Nyní se vraťme k webovému rozhraní a podívejme se na něj podrobněji:
V pravém horním rohu klikneme na LinOTP Config -> UserIdResolvers -> New
Zvolíme, co chceme: LDAP (AD win, LDAP samba), nebo SQL, nebo místní uživatele systému Flatfile.
Vyplňujeme požadovaná pole.
Dále vytvoříme REALMS:
V pravém horním rohu klikneme na LinOTP Config -> Realms -> New.
a pojmenujeme náš REALMS, a také klikneme na dříve vytvořený UserIdResolvers.
Všechna tato data potřebuje freeRadius v souboru /etc/linotp2/rlm_perl.ini, o čemž jsem psal výše, proto, pokud jste ho dosud neupravili, udělejte to teď.
Server je nastaven.
Doplňující informace:
Nastavení LinOTP na Debian 9:
Instalace:
# echo 'deb http://linotp.org/apt/debian stretch linotp' > /etc/apt/sources.list.d/linotp.list # apt-get install dirmngr# apt-key adv --recv-keys 913DFF12F86258E5
# apt-get update# apt-get install mysql-server(ve výchozím nastavení, v Debian 9 mysql (mariaDB) nenabízí nastavit heslo pro roota, můžete ho samozřejmě ponechat prázdné, ale pokud čtete zprávy, často to vede k "epickým selháním", proto to nastavíme)
# mysql -u root -puse mysql;UPDATE user SET Password = PASSWORD('tady_heslo') WHERE User = 'root';
exit# apt-get install linotp# apt-get install linotp-adminclient-cli# apt-get install python-ldap# apt install freeradius# nano /etc/freeradius/3.0/sites-enabled/linotpVkládáme kód (poslal JuriM, za což mu děkujeme):
server linotp {
listen {
ipaddr = *
port = 1812
type = auth
}
listen {
ipaddr = *
port = 1813
type = acct
}
authorize {
preprocess
update {
&control:Auth-Type := Perl
}
}
authenticate {
Auth-Type Perl {
perl
}
}
accounting {
unix
}
}
Upravujeme /etc/freeradius/3.0/mods-enabled/perl
perl {
filename = /usr/share/linotp/radius_linotp.pm
func_authenticate = authenticate
func_authorize = authorize
}
Bohužel v debian 9 knihovna radius_linotp.pm není dostupná v repozitářích, takže ji vezmeme z githubu.
# apt install git# git clone https://github.com/LinOTP/linotp-auth-freeradius-perl# cd linotp-auth-freeradius-perl/# cp radius_linotp.pm /usr/share/linotp/radius_linotp.pmnyní upravíme /etc/freeradius/3.0/clients.conf
client servers {
ipaddr = 192.168.188.0/24
secret = vasiheslo
}
nyní upravíme nano /etc/linotp2/rlm_perl.ini
Vkládáme tam stejný kód, jaký jsme použili při instalaci na debian 8 (popisováno výše)
teoreticky by to mělo být vše. (zatím netestováno)
Níže uvedu několik odkazů na nastavení systémů, které často potřebují chránit dvoufaktorovou autorizací:
Nastavení dvoufaktorové autentizace v
(tam se používá jiný server generování tokenů, ale nastavení samotné ASA zůstává stejné).
Nastavení (tam se také používá LinOTP) — díky autorovi. Tam lze také nalézt zajímavé informace o nastavení politik LiOTP.
Také cms mnoha webů podporují dvoufaktorovou autentizaci (pro WordPress má LinOTP dokonce svůj speciální modul na ), například, pokud chcete na svém firemním webu vytvořit chráněnou sekci pro zaměstnance společnosti.
DŮLEŽITÝ FAKT! Nepokládejte zaškrtnutí "Google autenteficator" pro používání Google authentikátoru! QR kód se pak nedá přečíst... (zvláštní fakt)
K napsání článku byly použity informace z následujících článků:
Děkujeme autorům.
Zdroj: habr.com
