
Astăzi vreau să împărtășesc cum să configurezi un server de autentificare cu două factori pentru a proteja rețeaua corporativă, site-urile, serviciile, ssh. Pe server va funcționa combinația: LinOTP + FreeRadius.
De ce avem nevoie de el?
Este o soluție complet gratuită, convenabilă, în cadrul rețelei tale, independentă de furnizorii externi.
Acest serviciu este foarte convenabil, destul de ușor de utilizat, spre deosebire de alte produse open-source și de asemenea suportă o gamă largă de funcții și politici (de exemplu, login+parolă+(PIN+OTPToken)). Se integrează prin API cu servicii de trimitere SMS (LinOTP Config->Provider Config->SMS Provider), generează coduri pentru aplicații mobile precum Google Authenticator și multe altele. Consider că este mai convenabil decât serviciul discutat în .
Acest server funcționează excelent cu Cisco ASA, server OpenVPN, Apache2, și practic cu tot ce suportă autentificarea prin server RADIUS (de exemplu, pentru SSH în datacenter).
Este necesar:
1 ) Debian 8 (jessie) — Obligatoriu! (instalarea de probă pe debian 9 este descrisă la sfârșitul articolului)
Începere:
Instalăm Debian 8.
Adăugăm repository-ul LinOTP:
# echo 'deb http://www.linotp.org/apt/debian jessie linotp' > /etc/apt/sources.list.d/linotp.listAdăugăm cheile:
# gpg --search-keys 913DFF12F86258E5Uneori, la o instalare „curată”, după executarea acestei comenzi, Debian returnează:
gpg: director creat `/root/.gnupg' gpg: fișier de configurare nou creat `/root/.gnupg/gpg.conf' gpg: ATENȚIE: parametrii din `/root/.gnupg/gpg.conf' nu sunt încă activi la acest început gpg: tabel de chei creat `/root/.gnupg/secring.gpg' gpg: tabel de chei creat `/root/.gnupg/pubring.gpg' gpg: servere de chei nelocuite (folosiți --keyserver) gpg: eroare la căutarea pe serverul de chei: URI prost
Aceasta este configurația inițială a gnupg. Nu este nimic înfricoșător. Pur și simplu executați comanda din nou.
La întrebarea Debiana:
gpg: căutare "913DFF12F86258E5" pe serverul hkp keys.gnupg.net (1) LSE LinOTP2 Packaging 2048 bit RSA key F86258E5, creat: 2010-05-10 Chei 1-1 din 1 pentru "913DFF12F86258E5". Introduceți numerele, N) Următorul sau Q) Iesire>Răspundem: 1
Apoi:
# gpg --export 913DFF12F86258E5 | apt-key add -# apt-get updateInstalăm mysql. În teorie, se poate folosi un alt server sql, dar eu pentru simplificare voi utiliza acesta, deoarece este recomandat pentru LinOTP.
(informații suplimentare, inclusiv despre reconfigurarea bazei de date LinOTP, se pot găsi în documentația oficială de . Acolo se poate găsi și comanda: dpkg-reconfigure linotp pentru a schimba parametrii dacă deja ați instalat mysql).
# apt-get install mysql-server# apt-get update (verificarea actualizărilor din nou nu strică)
Instalăm LinOTP și modulele suplimentare:
# apt-get install linotp Răspundem la întrebările instalatorului:
Utilizăm Apache2: da
Găsiți o parolă pentru admin Linotp: „ParolaTa”
Generați un certificat auto-semnat?: da
Utilizați MySQL?: da
Unde se află baza de date: localhost
Creăm baza de date LinOTP(numele bazei) pe serverul: LinOTP2
Creăm un utilizator separat pentru baza de date: LinOTP2
Stabilim parola utilizatorului: „ParolaDumneavoastră”
Vreți să creați baza acum? (ceva de genul „Sunteți sigur că doriți …”): da
Introducem parola root de MySQL pe care am creat-o la instalare: „ParolaDumneavoastră”
Gata.
(opțional, se poate și fără)
# apt-get install linotp-adminclient-cli (opțional, se poate și fără)
# apt-get install libpam-linotp Și așadar, interfața noastră web LinOTP este acum disponibilă la adresa:
"<b>https<\/b>: \/\/IP_server\/manage"O să vă spun despre setările din interfața web puțin mai târziu.
Acum, cel mai important! Ridicăm FreeRadius și îl legăm de LinOTP.
Instalăm FreeRadius și modulul de lucru cu LinOTP
# apt-get install freeradius linotp-freeradius-perlfacem backup pentru configurațiile client și utilizatori ale radiusului.
# mv /etc/freeradius/clients.conf /etc/freeradius/clients.old# mv /etc/freeradius/users /etc/freeradius/users.oldCreăm un fișier gol pentru client:
# touch /etc/freeradius/clients.confEdităm noul nostru fișier de configurare (configurația de backup poate fi folosită ca exemplu)
# nano /etc/freeradius/clients.confclient 192.168.188.0/24 {
secret = passwd # parola pentru conectarea clienților
}Apoi, creăm fișierul utilizatori:
# touch /etc/freeradius/usersEdităm fișierul, spunând radiusului că vom folosi perl pentru autentificare.
# nano /etc/freeradius/usersDEFAULT Auth-type := perlApoi edităm fișierul /etc/freeradius/modules/perl
# nano /etc/freeradius/modules/perlTrebuie să specificăm calea către scriptul perl linotp în parametru module:
Perl { .......
.........
module = /usr/lib/linotp/radius_linotp.pm …..
Apoi, creăm un fișier în care spunem din ce (domeniu, bază sau fișier) să luăm datele.
# touch /etc/linotp2/rlm_perl.ini# nano /etc/linotp2/rlm_perl.iniURL=https://IP_serverului_Dumneavoastră_LinOTP(192.168.X.X)/validate/simplecheck
REALM=webusers1c
RESCONF=LocalUser
Debug=True
SSL_CHECK=FalseAici mă voi opri puțin mai în detaliu, deoarece este important:
Descriere completă a fișierului cu comentarii:
#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
Apoi, vom crea fișierul /etc/freeradius/sites-available/linotp
# touch /etc/freeradius/sites-available/linotp# nano /etc/freeradius/sites-available/linotpȘi vom copia configurația în el (nu trebuie să modificăm nimic):
authorize {
#normalizează cererile clientului malformate înainte de a le transmite altor module (vezi '/etc/freeradius/modules/preprocess')
preprocess
# Dacă utilizați mai multe tipuri de realm-uri, probabil
# doriți să setați "ignore_null = yes" pentru toate.
# Altfel, când primul stil de realm nu se potrivește,
# celelalte stiluri nu vor fi verificate.
# permite o listă de realm-uri (vezi '/etc/freeradius/modules/realm')
IPASS
#înțelege ceva de genul USER@REALM și poate distinge componentele (vezi '/etc/freeradius/modules/realm')
suffix
#înțelege USERREALM și poate distinge componentele (vezi '/etc/freeradius/modules/realm')
ntdomain
# Citește fișierul 'users' pentru a învăța despre configurările speciale care ar trebui aplicate pentru
# anumiți utilizatori (vezi '/etc/freeradius/modules/files')
files
# permite să expire autentificarea (vezi '/etc/freeradius/modules/expiration')
expiration
# permite definirea timpilor de serviciu validați (vezi '/etc/freeradius/modules/logintime')
logintime
# Nu avem radius_shortname_map!
pap
}
#aici modulul perl linotp este apelat pentru procesare ulterioară
authenticate {
perl
}Apoi vom face un link simbolic:
# ln -s ../sites-available/linotp /etc/freeradius/sites-enabledPersonal, eu distrug site-urile default Radius, dar dacă aveți nevoie de ele, puteți fie să editați configurația lor, fie să le dezactivați.
# rm /etc/freeradius/sites-enabled/default# rm /etc/freeradius/sites-enabled/inner-tunnel# service freeradius reload Acum să ne întoarcem la interfața web și să o analizăm un pic mai în detaliu:
În colțul din dreapta sus, facem clic pe LinOTP Config -> UserIdResolvers -> New
Alegem ce dorim: LDAP (AD win, LDAP samba), sau SQL, sau utilizatori locali cu sistemul Flatfile.
Completați câmpurile necesare.
Apoi creăm REALMS:
În colțul din dreapta sus, facem clic pe LinOTP Config -> Realms -> New.
și dăm un nume REALMS-ului nostru, precum și facem clic pe UserIdResolvers creat anterior.
Toate aceste date sunt necesare pentru freeRadius în fișierul /etc/linotp2/rlm_perl.ini, despre care am menționat mai sus, așa că, dacă nu l-ați editat atunci, faceți-o acum.
Toate serverul este configurat.
Adăugare:
Configurarea LinOTP pe Debian 9:
Instalare:
# 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(implicit, în Debian 9 mysql (mariaDB) nu oferă opțiunea de a seta o parolă pentru utilizatorul root, bineînțeles că puteți să o lăsați goală, dar dacă citiți știrile, observați că acest lucru duce adesea la "epic fail-uri", așa că o vom seta totuși)
# mysql -u root -puse mysql;UPDATE user SET Password = PASSWORD('aici_parola') 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/linotpIntroducem codul (trimis de JuriM, pentru care îi mulțumesc!):
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
}
}
Edităm /etc/freeradius/3.0/mods-enabled/perl
perl {
filename = /usr/share/linotp/radius_linotp.pm
func_authenticate = authenticate
func_authorize = authorize
}
Din păcate, în debian 9 biblioteca radius_linotp.pm nu se instalează din depozite, așa că o vom lua de pe github.
# 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.pmAcum să ajustăm /etc/freeradius/3.0/clients.conf
client servers {
ipaddr = 192.168.188.0/24
secret = parolaTa
}
Acum să ajustăm nano /etc/linotp2/rlm_perl.ini
Introducem acolo același cod ca și la instalarea pe debian 8 (descris mai sus)
teoretic, asta e tot. (încă ne-testat)
Voi lăsa mai jos câteva linkuri despre configurarea sistemelor care, de obicei, necesită protecție prin autentificare în două etape:
Configurarea autentificării în două etape în
(acolo este folosit un alt server pentru generarea token-urilor, dar setările ASA-sunt aceleași).
Configurare (de asemenea, se folosește LinOTP) — mulțumiri autorului. Acolo puteți găsi lucruri interesante despre configurarea politicilor LiOTP.
De asemenea, CMS-ul multor site-uri suportă autentificarea în două etape (pentru WordPress, LinOTP are chiar un modul special pe ), de exemplu, dacă doriți să creați o secțiune protejată pentru angajații companiei pe site-ul dumneavoastră corporativ.
FACT IMPORTANT! DO NOT check the 'Google authenticator' box for using Google Authenticator! The QR code will not be readable then... (strange fact)
Information from the following articles was used for writing the article:
Thank you to the authors.
Sursa: habr.com
