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