LinOTP two-factor authentication server

LinOTP two-factor authentication server

Ngayon gusto kong ibahagi kung paano mag-set up ng isang two-factor authentication server upang maprotektahan ang isang corporate network, mga site, mga serbisyo, ssh. Ang server ay tatakbo sa sumusunod na kumbinasyon: LinOTP + FreeRadius.

Bakit kailangan natin ito?
Ito ay isang ganap na libre, maginhawang solusyon, sa loob ng sarili nitong network, independiyente sa mga third-party na provider.

Ang serbisyong ito ay napaka-maginhawa, medyo nakikita, hindi katulad ng iba pang mga open source na produkto, at sinusuportahan din ang isang malaking bilang ng mga function at patakaran (Halimbawa, login+password+(PIN+OTPToken)). Sa pamamagitan ng API, isinasama ito sa mga serbisyo sa pagpapadala ng sms (LinOTP Config->Provider Config->SMS Provider), bumubuo ng mga code para sa mga mobile application gaya ng Google Authentificator at marami pang iba. Sa tingin ko ito ay mas maginhawa kaysa sa serbisyong tinalakay sa Artikulo.

Ang server na ito ay gumagana nang perpekto sa Cisco ASA, OpenVPN server, Apache2, at sa pangkalahatan sa halos lahat ng bagay na sumusuporta sa pagpapatunay sa pamamagitan ng isang RADIUS server (Halimbawa, para sa SSH sa data center).

Ito ay kinakailangan:

1) Debian 8 (jessie) - Laging! (Ang pag-install ng pagsubok sa debian 9 ay inilarawan sa dulo ng artikulo)

Simula:

Pag-install ng Debian 8.

Idagdag ang imbakan ng LinOTP:

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

Pagdaragdag ng mga susi:

# gpg --search-keys 913DFF12F86258E5

Minsan sa panahon ng "malinis" na pag-install, pagkatapos patakbuhin ang command na ito, ipinapakita ng Debian ang:

gpg: создан каталог `/root/.gnupg'
gpg: создан новый файл настроек `/root/.gnupg/gpg.conf'
gpg: ВНИМАНИЕ: параметры в `/root/.gnupg/gpg.conf' еще не активны при этом запуске
gpg: создана таблица ключей `/root/.gnupg/secring.gpg'
gpg: создана таблица ключей `/root/.gnupg/pubring.gpg'
gpg: не заданы серверы ключей (используйте --keyserver)
gpg: сбой при поиске на сервере ключей: плохой URI

Ito ang paunang gnupg setup. ayos lang. Patakbuhin lang ulit ang command.
Sa tanong ni Debian:

gpg: поиск "913DFF12F86258E5" на hkp сервере keys.gnupg.net
(1)	LSE LinOTP2 Packaging <[email protected]>
	  2048 bit RSA key F86258E5, создан: 2010-05-10
Keys 1-1 of 1 for "913DFF12F86258E5".  Введите числа, N) Следующий или Q) Выход>

Sagot namin: 1

Susunod:

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

# apt-get update

I-install ang mysql. Sa teorya, maaari kang gumamit ng isa pang sql server, ngunit para sa pagiging simple ay gagamitin ko ito bilang inirerekomenda para sa LinOTP.

(Ang karagdagang impormasyon, kabilang ang muling pagsasaayos ng database ng LinOTP, ay matatagpuan sa opisyal na dokumentasyon para sa link. Doon mo rin mahahanap ang utos: dpkg-reconfigure linotp upang baguhin ang mga parameter kung na-install mo na ang mysql).

# apt-get install mysql-server

# apt-get update

(hindi masakit na suriin muli ang mga update)
I-install ang LinOTP at mga karagdagang module:

# apt-get install linotp

Sinasagot namin ang mga tanong ng installer:
Gamitin ang Apache2: oo
Lumikha ng isang password para sa admin Linotp: "Iyong Password"
Bumuo ng self-signed certificate?: oo
Gumamit ng MySQL?: oo
Saan matatagpuan ang database: localhost
Lumikha ng LinOTP database (base name) sa server: LinOTP2
Lumikha ng hiwalay na user para sa database: LinOTP2
Nagtakda kami ng password para sa user: "Iyong Password"
Dapat ba akong gumawa ng database ngayon? (something like “Sigurado ka bang gusto mo...”): oo
Ipasok ang MySQL root password na iyong nilikha kapag ini-install ito: "YourPassword"
Tapos na.

(opsyonal, hindi mo kailangang i-install ito)

# apt-get install linotp-adminclient-cli 

(opsyonal, hindi mo kailangang i-install ito)

# apt-get install libpam-linotp  

At kaya ang aming Linotp web interface ay magagamit na ngayon sa:

"<b>https</b>: //IP_сервера/manage"

Magsasalita ako tungkol sa mga setting sa web interface sa ibang pagkakataon.

Ngayon, ang pinakamahalagang bagay! Itinaas namin ang FreeRadius at i-link ito sa Linotp.

I-install ang FreeRadius at module para sa pagtatrabaho sa LinOTP

# apt-get install freeradius linotp-freeradius-perl

i-backup ang client at Users radius configs.

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

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

Lumikha ng isang walang laman na file ng kliyente:

# touch /etc/freeradius/clients.conf

Pag-edit ng aming bagong config file (ang naka-back up na config ay maaaring gamitin bilang isang halimbawa)

# nano /etc/freeradius/clients.conf

client 192.168.188.0/24 {
secret  = passwd # пароль для подключения клиентов
}

Susunod, lumikha ng file ng mga user:

# touch /etc/freeradius/users

Ine-edit namin ang file, na nagsasabi sa radius na gagamitin namin ang perl para sa pagpapatunay.

# nano /etc/freeradius/users

DEFAULT Auth-type := perl

Susunod, i-edit ang file /etc/freeradius/modules/perl

# nano /etc/freeradius/modules/perl

Kailangan nating tukuyin ang path sa perl linotp script sa module parameter:

Perl { .......
.........
<source lang="bash">module = /usr/lib/linotp/radius_linotp.pm

... ..
Susunod, gumawa kami ng file kung saan sinasabi namin kung saan (domain, database o file) kukunin ang data.

# touch /etc/linotp2/rlm_perl.ini

# nano /etc/linotp2/rlm_perl.ini

URL=https://IP_вашего_LinOTP_сервера(192.168.X.X)/validate/simplecheck
REALM=webusers1c
RESCONF=LocalUser
Debug=True
SSL_CHECK=False

Magdedetalye pa ako dito dahil mahalaga ito:

Buong paglalarawan ng file na may mga komento:
#IP ng linOTP server (IP address ng aming LinOTP server)
URL=https://172.17.14.103/validate/simplecheck
#Our area na gagawin namin sa LinOTP web interface.)
REALM=muling sandata1
#Pangalan ng pangkat ng gumagamit na nilikha sa LinOTP web muzzle.
RESCONF=flat_file
#opsyonal: magkomento kung mukhang maayos ang lahat
Debug=Totoo
#optional: gamitin ito, kung mayroon kang mga selfsigned na certificate, kung hindi man ay magkomento (SSL kung gagawa kami ng sarili naming certificate at gusto itong i-verify)
SSL_CHECK=Mali

Susunod, lumikha ng file /etc/freeradius/sites-available/linotp

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

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

At kopyahin ang config dito (hindi na kailangang mag-edit ng anuman):

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
}

Susunod na gagawa kami ng link ng SIM:

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

Sa personal, pinapatay ko ang mga default na site ng Radius, ngunit kung kailangan mo ang mga ito, maaari mong i-edit ang kanilang config o huwag paganahin ang mga ito.

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

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

# service freeradius reload

Ngayon, bumalik tayo sa web face at tingnan ito nang mas detalyado:
Sa kanang sulok sa itaas i-click ang LinOTP Config -> UserIdResolvers -> Bago
Pinipili namin ang gusto namin: LDAP (AD win, LDAP samba), o SQL, o mga lokal na user ng Flatfile system.

Punan ang mga kinakailangang field.

Susunod na lumikha kami ng REALMS:
Sa kanang sulok sa itaas, i-click ang LinOTP Config -> Realms -> New.
at bigyan ng pangalan ang aming REALMS, at mag-click din sa mga naunang ginawang UserIdResolvers.

Kailangan ng FreeRadius ang lahat ng data na ito sa /etc/linotp2/rlm_perl.ini file, tulad ng isinulat ko tungkol sa itaas, kaya kung hindi mo ito na-edit noon, gawin mo na.

Ang server ay na-configure lahat.

Pagdagdag:

Pag-set up ng LinOTP sa Debian 9:

Установка:

# 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

(bilang default, sa Debian 9 mysql (mariaDB) ay hindi nag-aalok upang magtakda ng root password, siyempre maaari mong iwanan itong walang laman, ngunit kung babasahin mo ang balita, ito ay madalas na humahantong sa "epic fail", kaya itatakda namin ito anyway)

# mysql -u root -p
use mysql;
UPDATE user SET Password = PASSWORD('тут_пароль') 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

I-paste ang code (ipinadala ni JuriM, salamat sa kanya para doon!):

server linotp {
makinig {
ipaddr = *
port=1812
type=auth
}
makinig {
ipaddr = *
port=1813
uri = acct
}
pahintulutan {
paunang proseso
i-update {
&control:Auth-Type := Perl
}
}
patotohanan {
Auth-Type Perl {
perlas
}
}
accounting {
Unix
}
}

I-edit ang /etc/freeradius/3.0/mods-enabled/perl

perl {
filename = /usr/share/linotp/radius_linotp.pm
func_authenticate = patunayan
func_authorize = pahintulutan
}

Sa kasamaang palad, sa Debian 9 ang radius_linotp.pm library ay hindi naka-install mula sa mga repositoryo, kaya kukunin namin ito mula sa 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

ngayon i-edit natin ang /etc/freeradius/3.0/clients.conf

mga client server {
ipaddr = 192.168.188.0/24
lihim = iyong password
}

Ngayon itama natin ang nano /etc/linotp2/rlm_perl.ini

I-paste namin ang parehong code doon tulad ng kapag nag-install sa debian 8 (inilarawan sa itaas)

lahat yan ayon sa ideya. (hindi pa nasusubok)

Mag-iiwan ako sa ibaba ng ilang link sa pagse-set up ng mga system na kadalasang kailangang protektahan ng two-factor authentication:
Pagse-set up ng two-factor authentication in Apache2

Pag-setup sa Cisco ASA(ibang token generation server ang ginagamit doon, pero pareho ang settings ng ASA mismo).

VPN na may dalawang-factor na pagpapatotoo

pag-aayos dalawang kadahilanan na pagpapatunay sa ssh (LinOTP ay ginagamit din doon) - salamat sa may-akda. Doon ka makakahanap ng mga kawili-wiling bagay tungkol sa pagse-set up ng mga patakaran ng LiOTP.

Gayundin, ang cms ng maraming mga site ay sumusuporta sa two-factor authentication (Para sa WordPress, ang LinOTP ay mayroon ding sariling espesyal na module para sa github), halimbawa, kung gusto mong gumawa ng protektadong seksyon sa iyong corporate website para sa mga empleyado ng kumpanya.
MAHALAGANG KATOTOHANAN! HUWAG lagyan ng check ang kahong “Google autenteficator” para gamitin ang Google Authenticator! Hindi nababasa ang QR code noon... (kakaibang katotohanan)

Upang isulat ang artikulong ito, ginamit ang impormasyon mula sa mga sumusunod na artikulo:
itnan.ru/post.php?c=1&p=270571
www.digitalbears.net/?p=469

Salamat sa mga may-akda.

Pinagmulan: www.habr.com

Magdagdag ng komento