Two-factor authentication server LinOTP

Two-factor authentication server LinOTP

Šodien vēlos dalīties ar to, kā iestatīt divu faktoru autentifikācijas serveri, lai aizsargātu korporatīvo tīklu, vietnes, pakalpojumus, ssh. Serverī darbosies kombinācija: LinOTP + FreeRadius.

Kāpēc mums tas nepiecieÅ”ams?
Tas ir pilnÄ«gi bezmaksas, ērts risinājums iekŔējai tÄ«klam, neatkarÄ«gs no treÅ”o puÅ”u pakalpojumu sniedzējiem.

Å is pakalpojums ir ļoti ērts, pietiekami skaidrs, salÄ«dzinot ar citiem atvērtā koda produktiem, un atbalsta lielu skaitu funkciju un politiku (piemēram, login+password+(PIN+OTPToken)). Caur API integrējas ar SMS sÅ«tīŔanas pakalpojumiem (LinOTP Config->Provider Config->SMS Provider), Ä£enerē kodus mobilajām lietotnēm, piemēram, Google Authenticator, un vēl daudz ko citu. Uzskatu, ka tas ir ērtāks nekā pakalpojums, kas tiek izskatÄ«ts rakstā.

Šis serveris lieliski darbojas ar Cisco ASA, OpenVPN serveri, Apache2, un vispār ar gandrīz visu, kas atbalsta autentifikāciju caur RADIUS serveri (piemēram, SSH datu centra vidē).

NepiecieŔams:

1) Debian 8 (jessie) — Noteikti! (izmēģinājuma uzstādīŔana uz Debian 9 aprakstÄ«ta raksta beigās)

Sākums:

Instalējam Debian 8.

Pievienojam LinOTP repozitoriju:

# echo 'deb http://www.linotp.org/apt/debian jessie linotp' > /etc/apt/sources.list.d/linotp.list

Pievienojam atslēgas:

# gpg --search-keys 913DFF12F86258E5

Dažkārt, veicot "tÄ«ru" uzstādīŔanu, pēc Ŕīs komandas izpildes Debian izsniedz:

gpg: izveidota mape `\/root\/.gnupg'\ngpg: izveidots jauns iestatÄ«jumu fails `\/root\/.gnupg\/gpg.conf'\ngpg: UZMANÄŖBA: parametri `\/root\/.gnupg\/gpg.conf' Å”ajā palaidē vēl nav aktÄ«vi\ngpg: izveidota atslēgu tabula `\/root\/.gnupg\/secring.gpg'\ngpg: izveidota atslēgu tabula `\/root\/.gnupg\/pubring.gpg'\ngpg: nav definēti atslēgu serveri (izmantojiet --keyserver)\ngpg: neizdevās meklēt atslēgu serverÄ«: slikts URI

Tā ir sākotnējā gnupg iestatīŔana. Nekas traks. VienkārÅ”i izpildiet komandu vēlreiz.
Uz Debian jautājumu:

gpg: meklēŔana "913DFF12F86258E5" hkp serverÄ« keys.gnupg.net
(1)	LSE LinOTP2 Packaging 
	  2048 bit RSA atslēga F86258E5, izveidota: 2010-05-10
Atslēgas 1-1 no 1 par "913DFF12F86258E5".  Ievadiet skaitļus, N) Nākamais vai Q) Izeja>

Atbildam: 1

Tālāk:

# gpg --export 913DFF12F86258E5 | apt-key add -

# apt-get update

Instalējam mysql. Teorētiski var izmantot citu SQL serveri, bet es, lai vienkārÅ”otu, izmantosimu to, jo tas ir ieteikts LinOTP.

(papildu informācija, ieskaitot LinOTP datu bazes rekonfigurēŔanu, var atrast oficiālajā dokumentācijā par saiÅ”u. Turpat jÅ«s varat atrast komandu: dpkg-reconfigure linotp, lai mainÄ«tu parametrus, ja jau esat instalējis mysql).

# apt-get install mysql-server

# apt-get update

(vēlreiz pārbaudīt atjauninājumus nekaitēs)
Instalējam LinOTP un papildmoduļus:

# apt-get install linotp

Atbildam uz instalētāja jautājumiem:
Izmantot Apache2: jā
Izdomājiet paroli admin Linotp: «JūsuParole»
Izveidot paŔparakstītu sertifikātu?: jā
Vai izmantot MySQL?: jā
Kur atrodas datu bāze: localhost
Izveidojam datu bāzi LinOTP (datu bāzes nosaukums) uz servera: LinOTP2
Izveidojam atseviŔķu lietotāju datu bāzei: LinOTP2
Uzstādam paroli lietotājam: «JūsuParole»
Vai izveidot datu bāzi tagad? (kaut kas lÄ«dzÄ«gs ā€œVai esat pārliecināts, ka vēlaties ...ā€): jā
Ievadām root paroli no MySQL, kuru izveidojām tā uzstādīŔanas laikā: «JūsuParole»
Gatavs.

(pēc izvēles, var arī neizdarīt)

# apt-get install linotp-adminclient-cli 

(pēc izvēles, var arī neizdarīt)

# apt-get install libpam-linotp  

Tātad, mūsu tīmekļa interfeiss Linotp tagad ir pieejams adresē:

"<b>https<\/b>: \\\/\\\/IP_servera\\\/manage"

Par iestatÄ«jumiem tÄ«mekļa interfeisā es pastāstīŔu nedaudz vēlāk.

Tagad, vissvarīgākais! Uzsākam FreeRadius un saistām to ar Linotp.

Uzstādam FreeRadius un moduli darbam ar LinOTP

# apt-get install freeradius linotp-freeradius-perl

dublējam klientu un lietotāju configus radiusā.

# mv /etc/freeradius/clients.conf  /etc/freeradius/clients.old

# mv /etc/freeradius/users  /etc/freeradius/users.old

Izveidojam tukŔu klienta failu:

# touch /etc/freeradius/clients.conf

Rediģējam mūsu jauno config failu (dublētais config var tikt izmantots kā piemērs)

# nano /etc/freeradius/clients.conf

client 192.168.188.0/24 {
secret  = passwd # parole klientu savienojumam
}

Tālāk izveidojam failu users:

# touch /etc/freeradius/users

Rediģējam failu, sakot radiusam, ka mēs izmantosim perl autentifikācijai.

# nano /etc/freeradius/users

DEFAULT Auth-type := perl

Tālāk rediģējam failu /etc/freeradius/modules/perl

# nano /etc/freeradius/modules/perl

Mums ir jānosaka ceļŔ uz perl skriptu linotp parametrā module:

Perl { .......
.........
module = /usr/lib/linotp/radius_linotp.pm

…..
Tālāk izveidojam failu, kurā mēs sakām no kura (domēna, datu bāzes vai faila) ņemt datus.

# touch /etc/linotp2/rlm_perl.ini

# nano /etc/linotp2/rlm_perl.ini

URL=https://IP_jūsu_LinOTP_servera(192.168.X.X)/validate/simplecheck
REALM=webusers1c
RESCONF=LocalUser
Debug=True
SSL_CHECK=False

Šeit apstāŔos nedaudz sīkāk, jo tas ir svarīgi:

Pilns faila apraksts ar komentāriem:
#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

Tālāk izveidosim failu /etc/freeradius/sites-available/linotp

# touch /etc/freeradius/sites-available/linotp

# nano /etc/freeradius/sites-available/linotp

Un kopējam tajā config (nekas nav jāmaina):

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
}

Tālāk izveidosim simbolisko saiti:

# ln -s ../sites-available/linotp /etc/freeradius/sites-enabled

PersonÄ«gi es iznÄ«cinu noklusējuma radiusa tÄ«mekļa vietnes, taču, ja tās jums ir nepiecieÅ”amas, varat vai nu rediģēt to konfigurāciju, vai izslēgt.

# rm /etc/freeradius/sites-enabled/default

# rm /etc/freeradius/sites-enabled/inner-tunnel

# service freeradius reload

Tagad atgriezīsimies pie tīmekļa saskarnes un aplūkosim to nedaudz sīkāk:
AugŔējā labajā stÅ«rÄ« noklikŔķiniet uz LinOTP Config -> UserIdResolvers ->New.
Izvēlamies, ko vēlamies: LDAP (AD win, LDAP samba), vai SQL, vai lokālie sistēmas lietotāji Flatfile.

Aizpildām nepiecieŔamās laukus.

Tālāk izveidojam REALMS:
AugŔējā labajā stÅ«rÄ« noklikŔķiniet uz LinOTP Config ->Realms ->New.
Un dodam vārdu mūsu REALMS un noklikŔķinām uz iepriekŔ izveidotā UserIdResolvers.

Visi Å”ie dati ir nepiecieÅ”ami freeRadius failā /etc/linotp2/rlm_perl.ini, par ko es jau iepriekÅ” rakstÄ«ju, tādēļ, ja jÅ«s to neesat rediģējuÅ”i, tad izdariet to tagad.

Visi serveri ir iestatīti.

Papildinājums:

LinOTP iestatīŔana Debian 9:

Instalācija:

# 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

(noklusējuma iestatÄ«jumos, Debian 9 mysql (mariaDB) nepiedāvā iestatÄ«t root paroli, protams, jÅ«s varat atstāt to arÄ« tukÅ”u, taču, lasot ziņas, tas bieži noved pie "episkām neveiksmēm", tādēļ mēs to tomēr iestatÄ«sim).

# mysql -u root -p
use mysql;
UPDATE user SET Password = PASSWORD('Ŕeit_parole') 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

Ievietojam kodu (nosūtījis JuriM, par ko viņam paldies!):

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
}
}

Rediģējam /etc/freeradius/3.0/mods-enabled/perl

perl {
filename = /usr/share/linotp/radius_linotp.pm
func_authenticate = authenticate
func_authorize = authorize
}

Diemžēl Debian 9 bibliotēka radius_linotp.pm nav pieejama no krātuvēm, tāpēc mēs to ņemsim no 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.pm

Tagad labojam /etc/freeradius/3.0/clients.conf.

client servers {
ipaddr = 192.168.188.0/24
secret = jūsuparole
}

Tagad labojam nano /etc/linotp2/rlm_perl.ini.

Ievietojam tur to paÅ”u kodu, kas tika izmantots Debian 8 instalēŔanas laikā (aprakstÄ«ts iepriekÅ”).

Idejiski viss. (vēl nav pārbaudīts)

Es atstāju zemāk dažas saites par sistēmu iestatīŔanu, kuras visbiežāk ir nepiecieÅ”ams aizsargāt ar divu faktoru autentifikāciju:
Divu faktoru autentifikācijas iestatīŔana Apache2

IestatīŔana ar Cisco ASA(tur tiek izmantots cits tokenu Ä£enerēŔanas serveris, bet paŔām ASA iestatÄ«jumiem ir tie paÅ”i).

VPN ar divu faktoru autentifikāciju

IestatÄ«jumi divu faktoru autentifikācija ssh (tur arÄ« tiek izmantots LinOTP) — paldies autoram. Turpat var atrast interesantas lietas par LiOTP politikas iestatīŔanu.

Tāpat daudzas vietņu cms atbalsta divu faktoru autentifikāciju (WordPress LinOTP pat ir sava Ä«paŔā moduļa versija) github), piemēram, ja jÅ«s vēlaties izveidot aizsargātu sadaļu savā uzņēmuma tÄ«mekļa vietnē darbiniekiem.
SVARÄŖGA Informācija! NEuzstādiet atzÄ«mi "Google autentifikators" Google autentifikatora izmantoÅ”anai! QR kods tad netiks nolasÄ«ts… (dÄ«vaina faktu)

Raksta izstrādei tika izmantota informācija no sekojoŔām rakstiem:
itnan.ru/post.php?c=1&p=270571
www.digitalbears.net/?p=469

Paldies autoriem.

Avots: habr.com

Iegādājieties uzticamu tÄ«mekļa hostingu ar DDoS aizsardzÄ«bu, VPS VDS serveriem šŸ”„ Iegādājieties uzticamu tÄ«mekļa hostingu ar DDoS aizsardzÄ«bu, VPS VDS serveriem | ProHoster