
Dnes sa chcem podeliť o to, ako nastaviť server pre dvojfaktorovú autentifikáciu na ochranu firemnej siete, webových stránok, služieb, ssh. Na serveri bude fungovať kombinácia: LinOTP + FreeRadius.
Prečo ho potrebujeme?
Je to úplne bezplatné, pohodlné riešenie vo vnútri vašej siete, nezávislé od externých poskytovateľov.
Tento servis je veľmi pohodlný, dosť prehľadný, na rozdiel od iných open source produktov, a podporuje obrovské množstvo funkcií a politík (napríklad login+password+(PIN+OTPToken)). Cez API sa integruje so službami na odosielanie SMS (LinOTP Config->Provider Config->SMS Provider), generuje kódy pre mobilné aplikácie ako Google Authenticator a mnoho ďalšieho. Považujem ho za pohodlnejší ako službu, o ktorej sa diskutuje. .
Tento server skvele funguje s Cisco ASA, OpenVPN serverom, Apache2 a takmer so všetkým, čo podporuje autentifikáciu cez RADIUS server (napríklad pre SSH v datacentrách).
Vyžaduje sa:
1 ) Debian 8 (jessie) — Určite! (skúšobná inštalácia na debian 9 je opísaná na konci článku)
Začiatok:
Inštalujeme Debian 8.
Pridávame repozitár LinOTP:
# echo 'deb http://www.linotp.org/apt/debian jessie linotp' > /etc/apt/sources.list.d/linotp.listPridávame kľúče:
# gpg --search-keys 913DFF12F86258E5Niekedy pri „čistej“ inštalácii, po vykonaní tejto príkazu, Debian vyhodí:
gpg: vytvorený adresár `/root/.gnupg`
gpg: vytvorený nový súbor nastavení `/root/.gnupg/gpg.conf`
gpg: POZOR: parametre v `/root/.gnupg/gpg.conf` ešte nie sú aktívne pri tomto spustení
gpg: vytvorená tabuľka kľúčov `/root/.gnupg/secring.gpg`
gpg: vytvorená tabuľka kľúčov `/root/.gnupg/pubring.gpg`
gpg: nie sú nastavené servery kľúčov (použite --keyserver)
gpg: zlyhanie pri vyhľadávaní na serveri kľúčov: zlý URI
Toto je počiatočné nastavenie gnupg. Nič strašné. Jednoducho príkaz vykonajte znova.
Na otázku Debiana:
gpg: vyhľadávanie "913DFF12F86258E5" na hkp serveri keys.gnupg.net
(1) LSE LinOTP2 Packaging
2048 bit RSA kľúč F86258E5, vytvorený: 2010-05-10
Kľúče 1-1 z 1 pre "913DFF12F86258E5". Zadajte čísla, N) Ďalší alebo Q) Ukončiť>Odpovedáme: 1
Ďalej:
# gpg --export 913DFF12F86258E5 | apt-key add -# apt-get updateInštalujeme mysql. Teoreticky je možné použiť iný sql server, ale na jednoduchosť budem používať ten, ktorý je odporúčaný pre LinOTP.
(ďalšie informácie, vrátane rekonfigurácie databázy LinOTP, nájdete v oficiálnej dokumentácii k . Tam nájdete aj príkaz: dpkg-reconfigure linotp na zmenu parametrov, ak ste už nainštalovali mysql).
# apt-get install mysql-server# apt-get update (ešte raz skontrolovať aktualizácie neuškodí)
Inštalujeme LinOTP a doplnkové moduly:
# apt-get install linotp Odpovedáme na otázky inštalátora:
Použiť Apache2: áno
Zvoľte heslo pre admin Linotp: „VašeHeslo“
Vygenerovať samopodpísaný certifikát?: áno
Použiť MySQL?: áno
Kde sa nachádza databáza: localhost
Vytvárame databázu LinOTP (názov databázy) na serveri: LinOTP2
Vytvárame samostatného používateľa pre databázu: LinOTP2
Nastavte heslo pre používateľa: «VašeHeslo»
Chcete vytvoriť databázu teraz? (niečo ako „Ste si istý, že chcete …“): áno
Zadajte heslo root pre MySQL, ktoré ste vytvorili pri jeho inštalácii: «VašeHeslo»
Hotovo.
(voliteľné, nie je potrebné nastaviť)
# apt-get install linotp-adminclient-cli (voliteľné, nie je potrebné nastaviť)
# apt-get install libpam-linotp A tak je náš webový rozhranie LinOTP teraz dostupné na adrese:
"<b>https<\/b>: \\\/\\\/IP_servera\\\/manage"O nastaveniach vo webovom rozhraní sa zmienim neskôr.
Teraz to najdôležitejšie! Spúšťame FreeRadius a prepojujeme ho s LinOTP.
Inštalujeme FreeRadius a modul pre prácu s LinOTP
# apt-get install freeradius linotp-freeradius-perlrobíme zálohu konfigurácií klienta a používateľov radiusu.
# mv /etc/freeradius/clients.conf /etc/freeradius/clients.old# mv /etc/freeradius/users /etc/freeradius/users.oldVytvárame prázdny súbor klienta:
# touch /etc/freeradius/clients.confUpravujeme náš nový konfiguračný súbor (zálohovaný konfigurácia môže byť použitá ako príklad)
# nano /etc/freeradius/clients.confclient 192.168.188.0/24 {
secret = passwd # heslo pre pripojenie klientov
}Potom vytvárame súbor users:
# touch /etc/freeradius/usersUpravujeme súbor a hovoríme radiusu, že budeme používať perl na autentifikáciu.
# nano /etc/freeradius/usersDEFAULT Auth-type := perlPotom upravujeme súbor /etc/freeradius/modules/perl
# nano /etc/freeradius/modules/perlMusíme zadať cestu k perl skriptu linotp v parametri module:
Perl { .......
.........
module = /usr/lib/linotp/radius_linotp.pm …..
Potom vytvárame súbor, v ktorom hovoríme, z ktorého (domény, databázy alebo súboru) brať dáta.
# touch /etc/linotp2/rlm_perl.ini# nano /etc/linotp2/rlm_perl.iniURL=https://IP_vášho_LinOTP_servera(192.168.X.X)/validate/simplecheck
REALM=webusers1c
RESCONF=LocalUser
Debug=True
SSL_CHECK=FalseTu sa zastavím podrobnejšie, pretože je to dôležité:
Úplný popis súboru s komentármi:
#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
Potom vytvoríme súbor /etc/freeradius/sites-available/linotp
# touch /etc/freeradius/sites-available/linotp# nano /etc/freeradius/sites-available/linotpA skopírujeme doň konfiguráciu (nič netreba upravovať):
authorize {
#normalizes maleformed client request before handed on to other modules (see '/etc/freeradius/modules/preprocess')
preprocess
# If you are using multiple kinds of realms, you probably
# want to set "ignore_null = yes" for all of them.
# Otherwise, when the first style of realm doesn't match,
# the other styles won't be checked.
#allows a list of realm (see '/etc/freeradius/modules/realm')
IPASS
#understands something like USER@REALM and can tell the components apart (see '/etc/freeradius/modules/realm')
suffix
#understands USERREALM and can tell the components apart (see '/etc/freeradius/modules/realm')
ntdomain
# Read the 'users' file to learn about special configuration which should be applied for
# certain users (see '/etc/freeradius/modules/files')
files
# allows to let authentification to expire (see '/etc/freeradius/modules/expiration')
expiration
# allows to define valid service-times (see '/etc/freeradius/modules/logintime')
logintime
# We got no radius_shortname_map!
pap
}
#here the linotp perl module is called for further processing
authenticate {
perl
}Potom vytvoríme symbolický odkaz:
# ln -s ../sites-available/linotp /etc/freeradius/sites-enabledOsobne zničím predvolené Radius weby, ale ak ich potrebujete, môžete buď upraviť ich konfiguráciu, alebo ich vypnúť.
# rm /etc/freeradius/sites-enabled/default# rm /etc/freeradius/sites-enabled/inner-tunnel# service freeradius reload Teraz sa vrátime k webovému rozhraniu a pozrieme sa naň podrobnejšie:
V pravom hornom rohu klikneme na LinOTP Config -> UserIdResolvers -> Nový
Vyberáme, čo chceme: LDAP (AD win, LDAP samba), alebo SQL, alebo miestni používatelia systému Flatfile.
Vyplňujeme požadované polia.
Ďalej vytvárame REALMS:
V pravom hornom rohu klikneme na LinOTP Config -> Realms -> Nový.
a dáme meno nášmu REALMS, a tiež klikneme na predtým vytvorený UserIdResolvers.
Všetky tieto údaje sú potrebné pre freeRadius v súbore /etc/linotp2/rlm_perl.ini, o čom som písal vyššie, takže ak ste ho ešte neupravili, urobte to teraz.
Server je nastavený.
Doplnenie:
Nastavenie LinOTP na Debian 9:
Inštalácia:
# 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(predvolene, v Debian 9 mysql (mariaDB) nenabízí nastaviť heslo pre užívateľa root, samozrejme, môžete ho nechať aj prázdne, ale ak sledujete správy, veľmi často to vedie k 'epic failom', takže ho aj tak nastavíme)
# mysql -u root -ppoužite mysql;UPDATE user SET Password = PASSWORD('tu_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/linotpVkladáme kód (poslaný JuriM, za čo mu ďakujeme!):
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žiaľ, v debian 9 knižnica radius_linotp.pm nie je dostupná z repozitárov, takže si ju 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.pmteraz upravíme /etc/freeradius/3.0/clients.conf
client servers {
ipaddr = 192.168.188.0/24
secret = vašeheslo
}
teraz upravíme nano /etc/linotp2/rlm_perl.ini
Vkladáme tam ten istý kód, ktorý sme použili pri inštalácii na debian 8 (opísané vyššie)
v ideálnom prípade je všetko. (zatiaľ netestované)
Nechám nižšie niekoľko odkazu na nastavenie systémov, ktoré často potrebujú chrániť dvojfaktorovou autorizáciou:
Nastavenie dvojfaktorovej autentifikácie v
(tam sa používa iný server na generovanie tokenov, ale nastavenia samotnej ASA sú rovnaké).
Nastavenie (tam sa tiež používa LinOTP) — ďakujeme autorovi. Tam sa tiež dajú nájsť zaujímavé veci k nastaveniu politík LiOTP.
Rovnako cms mnohých stránok podporujú dvojfaktorovú autentifikáciu (pre WordPress má LinOTP dokonca svoj vlastný špeciálny modul na ), napríklad, ak chcete na svojej podnikovej stránke vytvoriť chránenú sekciu pre zamestnancov spoločnosti.
DÔLEŽITÁ FAKT! Neposielajte začiarknutie „Google autentifikátor“ na použitie Google autentifikátora! QR kód sa potom nedá načítať... (podivný fakt)
Na napísanie článku bola použitá informácia z nasledujúcich článkov:
Ďakujem autorom.
Zdroj: habr.com
