Сервер двухфактарнай аўтарызацыі LinOTP

Сервер двухфактарнай аўтарызацыі LinOTP

Сёння я жадаю падзяліцца, як наладзіць сервер двухфактарнай аўтарызацыі, для абароны карпаратыўнай сеткі, сайтаў, сэрвісаў, ssh. На серверы будзе працаваць звязак: LinOTP + FreeRadius.

Нашто ён нам?
Гэта цалкам бясплатнае, зручнае рашэнне, усярэдзіне сваёй сеткі, не якое залежыць ад іншых правайдэраў.

Дадзены сэрвіс вельмі зручны, досыць навочны, у адрозненні ад іншых опенсорс прадуктаў, а гэтак жа падтрымлівае велізарную колькасць функцый і палітык (Напрыклад login+password+(PIN+OTPToken)). Праз API інтэгруецца з сэрвісамі адпраўкі sms (LinOTP Config->Provider Config->SMS Provider), генеруе коды для мабільных прыкладанняў тыпу Google Autentificator і шматлікае іншае. Я лічу ён больш зручны чым сэрвіс разгляданы ў артыкуле.

Дадзены сервер выдатна працуе з Cisco ASA, OpenVPN серверам, Apache2, ды і наогул практычна са ўсім што падтрымлівае аўтэнтыфікацыю праз RADIUS сервер (Напрыклад для SSH у цод).

патрабуецца:

1 ) Debian 8 (jessie) Абавязкова! (пробная ўстаноўка на debian 9 апісана ў канцы артыкула)

Пачатак:

Усталёўваны Debian 8.

Дадаем рэпазітар LinOTP:

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

Дадаем ключы:

# gpg --search-keys 913DFF12F86258E5

Часам пры "чыстай" усталёўцы, пасля выканання гэтай каманды, Debian выдае:

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

Гэта першапачатковая настройка gnupg. Нічога страшнага. Проста выканайце каманду яшчэ раз.
На пытанне Debiana:

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) Выход>

Адказваем: 1

Далей:

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

# apt-get update

Усталёўваны mysql. У тэорыі, можна выкарыстоўваць іншы sql сервер, але я для прастаты буду выкарыстоўваць яго, як рэкамендаваны для LinOTP.

(дад. інфармацыя, у тым ліку аб пераканфігураванні базы LinOTP можна знайсці ў афіцыйнай дакументацыі па спасылцы. Там жа можна знайсці каманду: dpkg-reconfigure linotp для змены параметраў калі вы ўжо ўсталявалі mysql).

# apt-get install mysql-server

# apt-get update

(яшчэ раз праверыць абновы не перашкодзіць)
Усталёўваны LinOTP і доп.модулі:

# apt-get install linotp

Адказваем на пытанні ўсталёўшчыка:
Выкарыстоўваць Apache2: так
Прыдумайце пароль для admin Linotp: «ВашПароль»
Згенераваць самападпісаны сертэфікат?: так
Выкарыстоўваць MySQL?: так
Дзе знаходзіцца база даных: localhost
Ствараем базу LinOTP(імя базы) на серверы: LinOTP2
Ствараем асобнага юзэра для базы дадзеных: LinOTP2
Задаем пароль юзэру: «ВашПароль»
Ці стварыць базу зараз? (нешта накшталт "Вы ўпэўнены што хочаце ..."): так
Уводзім пароль root ад MySQL які стварылі пры ім усталёўцы: «ВашПароль»
Гатова.

(апцыянальна, можна і не ставіць)

# apt-get install linotp-adminclient-cli 

(апцыянальна, можна і не ставіць)

# apt-get install libpam-linotp  

І так наш вэб-інтэрфейс Linotp зараз даступны па адрасе:

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

Аб наладах у вэб-інтэрфейсе я раскажу крыху пазней.

Цяпер, самае важнае! Падыманы FreeRadius і ўвязваем яго з Linotp.

Усталёўваны FreeRadius і модуль працы з LinOTP

# apt-get install freeradius linotp-freeradius-perl

бэкапім канфігі client і Users радыусу.

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

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

Ствараем пусты файл кліента:

# touch /etc/freeradius/clients.conf

Рэдагуем наш новы файл канфіга (забэкаплены канфіг можна выкарыстоўваць як прыклад)

# nano /etc/freeradius/clients.conf

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

Далей ствараем файл users:

# touch /etc/freeradius/users

Рэдагуем файл, кажучы радыусу, што мы будзем выкарыстоўваць perl для аўтэнтыфікацыі.

# nano /etc/freeradius/users

DEFAULT Auth-type := perl

Далей рэдагуем файл /etc/freeradius/modules/perl

# nano /etc/freeradius/modules/perl

Нам трэба прапісаць шлях да perl скрыпту linotp у параметры module:

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

...
Далей ствараем файл, у якім які гаворыцца з якога (дамена, базы або файла) браць дадзеныя.

# 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

Тут я спынюся крыху падрабязней, паколькі гэта важна:

Поўнае апісанне файла з каментарамі:
#IP of the linotp server (IP адрас нашага LinOTP сервера)
URL=https://172.17.14.103/validate/simplecheck
#Наша вобласць якую мы створым у вэб інтэрфейсе LinOTP.)
REALM=rearm1
#Імя групы юзвераў якая ствараецца ў вэбмордзе LinOTP.
RESCONF=flat_file
#optional: адпачынак, калі ўсе сядзяць у працы.
Debug=True
#optional: use this, if you have selfsigned certificates, otherwise comment out (SSL калі мы ствараем свой сертыфікат і жадаем яго правяраць)
SSL_CHECK=False

Далей створым файл /etc/freeradius/sites-available/linotp

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

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

І скапіюем у яго канфіг (правіць нічога не трэба):

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
}

Далей зробім гэтым лінк:

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

Асабіста я забіваю дэфолтныя радыусаўскія сайты, але калі яны вам патрэбныя, то можаце альбо адрэдагаваць іх канфіг, альбо адключыць.

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

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

# service freeradius reload

Цяпер вернемся да вэб-морды і разгледзім яе крыху падрабязней:
У правым верхнім куце націскаем LinOTP Config -> UserIdResolvers ->New
Выбіраемы чаго жадаем: LDAP (AD win, LDAP samba), або SQL, або лакальныя карыстачы сістэмы Flatfile.

Запаўняем патрабаваныя палі.

Далей ствараем REALMS:
У правым верхнім куце націскаем LinOTP Config ->Realms ->New.
і даём імя нашаму REALMSу, а гэтак жа клікаем на створаны раней UserIdResolvers.

Усе гэтыя дадзеныя патрэбныя freeRadius у файліцы /etc/linotp2/rlm_perl.ini, пра што я пісаў вышэй, таму, калі вы яго не адрэдагавалі тады, зрабіце гэта зараз.

Усе сервер настроены.

Дапаўненне:

Настройка LinOTP на 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

(па змаўчанні, у Debian 9 mysql (mariaDB) не прапануе ўсталёўваць пароль рута, вядома вы можаце пакінуць яго і пустым, але калі вы праглядаеце навіны, то вельмі часта гэта прыводзіць да «эпік фэйлам», таму мы яго ўсёткі ўсталюем)

# 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

Устаўляемы код (дасланы JuriM, завошта яму дзякуй!):

server linotp {
listen {
ipaddr = *
порт = 1812
type = auth
}
listen {
ipaddr = *
порт = 1813
type = acct
}
authorize {
папярэдняя апрацоўка
update {
&control:Auth-Type := Perl
}
}
authenticate {
Auth-Type Perl {
Perl
}
}
accounting {
UNIX
}
}

Рэдагуем /etc/freeradius/3.0/mods-enabled/perl

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

Нажаль у debian 9 бібліятэка radius_linotp.pm не ставіцца з рэпазітароў таму мы возьмем яе з 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

зараз падправім /etc/freeradius/3.0/clients.conf

client servers {
ipaddr = 192.168.188.0/24
secret = вашпароль
}

зараз падправім nano /etc/linotp2/rlm_perl.ini

Устаўляемы туды той жа код, што і пры ўсталёўцы на debian 8 (апісана вышэй)

па ідэі ўсё. (пакуль не пратэставана)

Я пакіну ніжэй некалькі спасылак па наладзе сістэм, якія часцей за ўсё патрабуецца абараняць двухфактарнай аўтарызацыяй:
Настройка двухфактарнай аўтэнтыфікацыі ў Apache2

Настройка з Cisco ASA(Там выкарыстоўваецца іншы сервер генерацыі токенаў, але налады самой ASA таксама самыя).

VPN з двухфактарнай аўтэнтыфікацыі

Настройка двухфактарнай аўтэнтыфікацыі ў ssh (там гэтак жа выкарыстоўваецца LinOTP) - дзякуй аўтару. Там жа можна знайсці цікавыя рэчы па наладзе палітык LiOTP.

Гэтак жа cms шматлікіх сайтаў падтрымліваюць двухфактарную аўтэнтыфікацыю(Для WordPress у LinOTP нават ёсць свой адмысловы модуль на GitHub), напрыклад, калі вы хочаце на сваім карпаратыўным сайце зрабіць абаронены раздзел для супрацоўнікаў кампаніі.
ВАЖНЫ ФАКТ! НЕ стаўце галачку "Google autenteficator" для выкарыстання Google аўтэнтыфікатара! QR-код не чытаецца тады… (дзіўны факт)

Для напісання артыкула выкарыстоўвалася інфармацыя з наступных артыкулаў:
itnan.ru/post.php?c=1&p=270571
www.digitalbears.net/?p=469

Дзякуй аўтарам.

Крыніца: habr.com

Дадаць каментар