
Danes želim deliti, kako nastaviti strežnik za večstopenjsko avtentifikacijo za zaščito poslovnega omrežja, spletnih strani, storitev, SSH. Na strežniku bo delovala kombinacija: LinOTP + FreeRadius.
Zakaj ga potrebujemo?
To je popolnoma brezplačna, priročna rešitev znotraj lastnega omrežja, neodvisna od zunanjih ponudnikov.
Ta storitev je zelo priročna, precej pregledna, v nasprotju z drugimi odprtokodnimi izdelki, in podpira ogromno funkcij in politik (na primer prijava+geslo+(PIN+OTPToken)). Preko API se integrira s storitvami za pošiljanje SMS (LinOTP Config->Provider Config->SMS Provider), generira kode za mobilne aplikacije, kot je Google Authenticator, in še mnoge druge stvari. Menim, da je bolj priročna kot storitev, o kateri razpravljamo v .
Ta strežnik odlično deluje s Cisco ASA, OpenVPN strežnikom, Apache2, pravzaprav skoraj z vsem, kar podpira avtentifikacijo preko RADIUS strežnika (na primer za SSH v podatkovnih centrih).
Zahteva se:
1) Debian 8 (jessie) — Obvezno! (preizkusna namestitev na debian 9 je opisana na koncu članka)
Začetek:
Namestimo Debian 8.
Dodamo repozitorij LinOTP:
# echo 'deb http://www.linotp.org/apt/debian jessie linotp' > /etc/apt/sources.list.d/linotp.listDodamo ključe:
# gpg --search-keys 913DFF12F86258E5Včasih, ko je ‘čista’ namestitev, po izvedbi te ukazne, Debian izda:
gpg: ustvarjen imenik `/root/.gnupg' gpg: ustvarjena nova nastavitev datoteke `/root/.gnupg/gpg.conf' gpg: POZOR: parametri v `/root/.gnupg/gpg.conf' še niso aktivni pri tem zagonu gpg: ustvarjena tabela ključev `/root/.gnupg/secring.gpg' gpg: ustvarjena tabela ključev `/root/.gnupg/pubring.gpg' gpg: niso nastavljeni strežniki ključev (uporabite --keyserver) gpg: napaka pri iskanju na strežniku ključev: slab URI
To je začetna nastavitev gnupg. Nič hudega. Preprosto znova izvedite ukaz.
Na vprašanje Debiana:
gpg: iskanje "913DFF12F86258E5" na hkp strežniku keys.gnupg.net (1) LSE LinOTP2 Packaging
2048 bit RSA ključ F86258E5, ustvarjen: 2010-05-10
Ključi 1-1 od 1 za "913DFF12F86258E5". Vnesite števila, N) Naslednji ali Q) Izhod>Odgovorimo: 1
Dále:
# gpg --export 913DFF12F86258E5 | apt-key add -# apt-get updateNamestimo mysql. Teoretično je mogoče uporabiti drugi sql strežnik, a za enostavnost bom uporabil tega, ker je priporočljiv za LinOTP.
(dodatne informacije, vključno s prekonfiguracijo baze LinOTP, lahko najdete v uradni dokumentaciji) . Tam lahko najdete ukaz: dpkg-reconfigure linotp za spremembo parametrov, če ste že namestili mysql).
# apt-get install mysql-server# apt-get update (še enkrat preverite posodobitve ne bo škodilo)
Namestimo LinOTP in dodatne module:
# apt-get install linotp Odgovorimo na vprašanja namestitvenega programa:
Uporabiti Apache2: da
Izberite geslo za admin Linotp: „VašeGeslo“
Generirati samo-potpisani certifikat?: da
Koristiti MySQL?: da
Gdje se nalazi baza podataka: localhost
Kreiramo bazu LinOTP (ime baze) na serveru: LinOTP2
Kreiramo posebnog korisnika za bazu podataka: LinOTP2
Postavljamo lozinku korisniku: „VašaLozinka“
Da li da odmah kreiramo bazu? (nešto poput „Da li ste sigurni da želite ...“): da
Unosimo root lozinku za MySQL koju smo kreirali prilikom instalacije: „VašaLozinka“
Pripravljeno.
(opcionalno, može i ne mora biti postavljeno)
# apt-get install linotp-adminclient-cli (opcionalno, može i ne mora biti postavljeno)
# apt-get install libpam-linotp Dakle, naš web-interfejs LinOTP sada je dostupan na adresi:
"<b>https<\/b>\/\/IP_stre\u017enika\/manage"O podešavanjima u web-interfejsu ću govoriti malo kasnije.
Sada, najvažnije! Pokrećemo FreeRadius i povezujemo ga sa LinOTP.
Instaliramo FreeRadius i modul za rad sa LinOTP
# apt-get install freeradius linotp-freeradius-perlpravimo rezervnu kopiju klijentskih i korisničkih konfiguracija radijusa.
# mv /etc/freeradius/clients.conf /etc/freeradius/clients.old# mv /etc/freeradius/users /etc/freeradius/users.oldKreiramo prazan fajl klijenta:
# touch /etc/freeradius/clients.confUređujemo našu novu konfiguracionu datoteku (rezervna konfiguracija može se koristiti kao primer)
# nano /etc/freeradius/clients.confclient 192.168.188.0/24 {
secret = passwd # lozinka za povezivanje klijenata
}Zatim kreiramo fajl korisnika:
# touch /etc/freeradius/usersUređujemo fajl, govoreći radijusu da ćemo koristiti perl za autentifikaciju.
# nano /etc/freeradius/usersDEFAULT Auth-type := perlZatim uređujemo fajl /etc/freeradius/modules/perl
# nano /etc/freeradius/modules/perlMoramo navesti put do perl skripta linotp u parametru module:
Perl { .......
.........
module = /usr/lib/linotp/radius_linotp.pm …..
Zatim kreiramo fajl, u kojem govorimo iz kog (domena, baze ili fajla) uzimamo podatke.
# touch /etc/linotp2/rlm_perl.ini# nano /etc/linotp2/rlm_perl.iniURL=https://IP_vašeg_LinOTP_servera(192.168.X.X)/validate/simplecheck
REALM=webusers1c
RESCONF=LocalUser
Debug=True
SSL_CHECK=FalseOvdje ću se malo detaljnije zadržati, jer je to važno:
Potpuno objašnjenje datoteke sa komentarima:
#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
Zatim ćemo kreirati fajl /etc/freeradius/sites-available/linotp
# touch /etc/freeradius/sites-available/linotp# nano /etc/freeradius/sites-available/linotpI kopirati u njega konfiguraciju (ne treba ništa menjati):
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
}Zatim ćemo napraviti simbolički link:
# ln -s ../sites-available/linotp /etc/freeradius/sites-enabledLahko pomagam pri odstranjevanju privzetih Radius spletnih mest, vendar če jih potrebujete, jih lahko bodisi uredite v njihovi konfiguraciji bodisi izklopite.
# rm /etc/freeradius/sites-enabled/default# rm /etc/freeradius/sites-enabled/inner-tunnel# service freeradius reload Zdaj se vrnimo k spletnemu vmesniku in ga podrobneje preučimo:
V zgornjem desnem kotu kliknemo LinOTP Config -> UserIdResolvers -> New
Izberite, kaj želite: LDAP (AD win, LDAP samba), ali SQL, ali lokalne uporabnike sistema Flatfile.
Izpolnite zahtevana polja.
Nato ustvarimo REALMS:
V zgornjem desnem kotu kliknemo LinOTP Config -> Realms -> New.
in dodelimo ime našemu REALMS-u ter kliknemo na prej ustvarjeni UserIdResolvers.
Vsi ti podatki so potrebni za freeRadius v datoteki /etc/linotp2/rlm_perl.ini, o čemer sem pisal zgoraj, zato, če je niste uredili takrat, to storite zdaj.
Vse je nastavljen.
Dopolnilo:
Nastavitev LinOTP na Debian 9:
Instalacija:
# 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(privzeto, na Debiana 9 mysql (mariaDB) ne ponudi nastavitev gesla za root, seveda ga lahko pustite praznega, vendar če berete novice, to pogosto privede do 'epičnih zrušitev', zato ga bomo vendarle nastavili)
# mysql -u root -puse mysql;UPDATE user SET Password = PASSWORD('tu_geslo') 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/linotpPrilepimo kodo (poslana JuriM, hvala mu!):
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
}
}
Uredite /etc/freeradius/3.0/mods-enabled/perl
perl {
filename = /usr/share/linotp/radius_linotp.pm
func_authenticate = authenticate
func_authorize = authorize
}
Žal v Debian 9 knjižnica radius_linotp.pm ni na voljo v repozitorijih, zato jo bomo vzeli s GitHub-a.
# 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.pmzdaj popravimo /etc/freeradius/3.0/clients.conf
client servers {
ipaddr = 192.168.188.0/24
secret = vašgeslo
}
zdaj popravimo nano /etc/linotp2/rlm_perl.ini
Tja prilepimo enako kodo kot pri namestitvi na debian 8 (opisano zgoraj)
v teoriji je vse. (še ni testirano)
Spodaj bom navedel nekaj povezav za nastavitev sistemov, ki jih običajno zaščitimo z dvofaktorsko avtentikacijo:
Nastavitev dvofaktorske avtentikacije v
(tam se uporablja drugačen strežnik za generiranje žetonov, a nastavitve ASA so enake).
Setup (tudi tam se uporablja LinOTP) — hvala avtorju. Tam lahko najdete zanimive stvari glede nastavitev politik LiOTP.
Prav tako cms mnogih spletnih mest podpira dvofaktorsko avtentikacijo (za WordPress ima LinOTP celo svoj poseben modul na ), na primer, če želite na svoji korporativni spletni strani ustvariti zaščiten odsek za zaposlene podjetja.
ZAPOMENI ZNANJE! NE označujte »Google autentifikator« za uporabo google autentifikatorja! QR-koda se takrat ne prebere… (nenavadna dejstvo)
Za pisanje članka so bile uporabljene informacije iz naslednjih člankov:
Hvala avtorjem.
Izvor: habr.com
