Server dvojfaktorovej autorizácie LinOTP

Server dvojfaktorovej autorizácie LinOTP

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. článku.

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.list

Pridávame kľúče:

# gpg --search-keys 913DFF12F86258E5

Niekedy 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 update

Inš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 odkaze. 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-perl

robí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.old

Vytvárame prázdny súbor klienta:

# touch /etc/freeradius/clients.conf

Upravujeme náš nový konfiguračný súbor (zálohovaný konfigurácia môže byť použitá ako príklad)

# nano /etc/freeradius/clients.conf

client 192.168.188.0/24 {
secret  = passwd # heslo pre pripojenie klientov
}

Potom vytvárame súbor users:

# touch /etc/freeradius/users

Upravujeme súbor a hovoríme radiusu, že budeme používať perl na autentifikáciu.

# nano /etc/freeradius/users

DEFAULT Auth-type := perl

Potom upravujeme súbor /etc/freeradius/modules/perl

# nano /etc/freeradius/modules/perl

Musí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.ini

URL=https://IP_vášho_LinOTP_servera(192.168.X.X)/validate/simplecheck
REALM=webusers1c
RESCONF=LocalUser
Debug=True
SSL_CHECK=False

Tu 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/linotp

A 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-enabled

Osobne 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 -p
použ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/linotp

Vkladá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.pm

teraz 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 Apache2

Nastavenie s Cisco ASA(tam sa používa iný server na generovanie tokenov, ale nastavenia samotnej ASA sú rovnaké).

VPN s dvojfaktorovou autentifikáciou

Nastavenie dvojfaktorová autentifikácia v ssh (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 github), 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:
itnan.ru/post.php?c=1&p=270571
www.digitalbears.net/?p=469

Ďakujem autorom.

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster