Bugun men korporativ tarmoqni, saytlarni, xizmatlarni, ssh-ni himoya qilish uchun ikki faktorli autentifikatsiya serverini qanday sozlashni baham ko'rmoqchiman. Server quyidagi kombinatsiyani ishga tushiradi: LinOTP + FreeRadius.
Nega bizga kerak?
Bu uchinchi tomon provayderlaridan mustaqil ravishda o'z tarmog'ida mutlaqo bepul, qulay echimdir.
Ushbu xizmat boshqa ochiq kodli mahsulotlardan farqli o'laroq juda qulay, juda ingl va juda ko'p funksiya va siyosatlarni qo'llab-quvvatlaydi (masalan, login+parol+(PIN+OTPToken)). API orqali u sms yuborish xizmatlari (LinOTP Config->Provider Config->SMS Provider) bilan birlashadi, Google Authentificator kabi mobil ilovalar uchun kodlar ishlab chiqaradi va boshqa ko'p narsalar. Menimcha, bu muhokama qilingan xizmatdan ko'ra qulayroq
Ushbu server Cisco ASA, OpenVPN serveri, Apache2 va umuman RADIUS serveri orqali autentifikatsiyani qo'llab-quvvatlaydigan deyarli hamma narsa bilan mukammal ishlaydi (masalan, ma'lumotlar markazida SSH uchun).
Majburiy:
1) Debian 8 (Jessi) - Kerakli! (Debian 9-da sinov o'rnatilishi maqolaning oxirida tasvirlangan)
Boshlash:
Debian 8 o'rnatilmoqda.
LinOTP omborini qo'shing:
# echo 'deb http://www.linotp.org/apt/debian jessie linotp' > /etc/apt/sources.list.d/linotp.list
Kalitlarni qo'shish:
# gpg --search-keys 913DFF12F86258E5
Ba'zan "toza" o'rnatish paytida, ushbu buyruqni ishga tushirgandan so'ng, Debian quyidagilarni ko'rsatadi:
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
Bu dastlabki gnupg sozlamalari. Hammasi joyida; shu bo'ladi. Faqat buyruqni qayta ishga tushiring.
Debianning savoliga:
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) Выход>
Javob beramiz: 1
Keyingi:
# gpg --export 913DFF12F86258E5 | apt-key add -
# apt-get update
mysql-ni o'rnating. Nazariy jihatdan, siz boshqa sql serveridan foydalanishingiz mumkin, ammo soddaligi uchun men uni LinOTP uchun tavsiya qilinganidek ishlataman.
(qo'shimcha ma'lumotlarni, shu jumladan LinOTP ma'lumotlar bazasini qayta sozlashni rasmiy hujjatlarda topish mumkin
# apt-get install mysql-server
# apt-get update
(yangilanishlarni qayta tekshirish zarar qilmaydi)
LinOTP va qo'shimcha modullarni o'rnating:
# apt-get install linotp
Biz o'rnatuvchining savollariga javob beramiz:
Apache2 dan foydalaning: ha
Linotp administratori uchun parol yarating: "Parolingiz"
O'z-o'zidan imzolangan sertifikat yaratilsinmi?: ha
MySQL-dan foydalaning?: ha
Ma'lumotlar bazasi qayerda joylashgan: localhost
Serverda LinOTP ma'lumotlar bazasini (asosiy nom) yarating: LinOTP2
Ma'lumotlar bazasi uchun alohida foydalanuvchi yarating: LinOTP2
Biz foydalanuvchi uchun parol o'rnatdik: "Sizning parolingiz"
Endi ma'lumotlar bazasini yaratishim kerakmi? ("Siz xohlayotganingizga ishonchingiz komilmi ..." kabi bir narsa): ha
Uni o'rnatishda yaratgan MySQL ildiz parolini kiriting: "YourPassword"
Bajarildi.
(ixtiyoriy, uni o'rnatishingiz shart emas)
# apt-get install linotp-adminclient-cli
(ixtiyoriy, uni o'rnatishingiz shart emas)
# apt-get install libpam-linotp
Shunday qilib, bizning Linotp veb-interfeysimiz endi quyidagi manzilda mavjud:
"<b>https</b>: //IP_сервера/manage"
Men veb-interfeysdagi sozlamalar haqida biroz keyinroq gaplashaman.
Endi, eng muhimi! Biz FreeRadiusni ko'taramiz va uni Linotp bilan bog'laymiz.
LinOTP bilan ishlash uchun FreeRadius va modulni o'rnating
# apt-get install freeradius linotp-freeradius-perl
mijoz va foydalanuvchilar radiusi konfiguratsiyasini zaxiralang.
# mv /etc/freeradius/clients.conf /etc/freeradius/clients.old
# mv /etc/freeradius/users /etc/freeradius/users.old
Bo'sh mijoz faylini yarating:
# touch /etc/freeradius/clients.conf
Yangi konfiguratsiya faylimizni tahrirlash (zaxiralangan konfiguratsiyadan misol sifatida foydalanish mumkin)
# nano /etc/freeradius/clients.conf
client 192.168.188.0/24 {
secret = passwd # пароль для подключения клиентов
}
Keyin foydalanuvchilar faylini yarating:
# touch /etc/freeradius/users
Biz radiusga autentifikatsiya qilish uchun Perl dan foydalanishimizni aytib, faylni tahrirlaymiz.
# nano /etc/freeradius/users
DEFAULT Auth-type := perl
Keyin /etc/freeradius/modules/perl faylini tahrirlang
# nano /etc/freeradius/modules/perl
Biz modul parametrida perl linotp skriptiga yo'lni ko'rsatishimiz kerak:
Perl { .......
.........
<source lang="bash">module = /usr/lib/linotp/radius_linotp.pm
... ..
Keyin biz faylni yaratamiz, unda biz ma'lumotlarni qaysi (domen, ma'lumotlar bazasi yoki fayl) dan olishni aytamiz.
# 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
Men bu erda bir oz ko'proq ma'lumot beraman, chunki bu muhim:
Izohlar bilan faylning to'liq tavsifi:
linOTP serverining #IP (bizning LinOTP serverimizning IP manzili)
URL=https://172.17.14.103/validate/simplecheck
#Bizning hududimiz LinOTP veb-interfeysida yaratiladi.)
REALM=rearm1
#LinOTP veb tumshug'ida yaratilgan foydalanuvchilar guruhining nomi.
RESCONF=flat_fayl
#ixtiyoriy: agar hamma narsa yaxshi ishlayotgan bo'lsa, sharh qoldiring
Debug=To'g'ri
#ixtiyoriy: agar sizda oʻzingiz imzolagan sertifikatlaringiz boʻlsa, bundan foydalaning, aks holda sharh qoldiring (agar biz oʻz sertifikatimizni yaratsak va uni tasdiqlamoqchi boʻlsak SSL)
SSL_CHECK=Noto'g'ri
Keyin /etc/freeradius/sites-available/linotp faylini yarating
# touch /etc/freeradius/sites-available/linotp
# nano /etc/freeradius/sites-available/linotp
Va unga konfiguratsiyani nusxa ko'chiring (hech narsani tahrirlash shart emas):
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
}
Keyin biz SIM-karta havolasini yaratamiz:
# ln -s ../sites-available/linotp /etc/freeradius/sites-enabled
Shaxsan men standart Radius saytlarini o'ldiraman, lekin agar sizga kerak bo'lsa, siz ularning konfiguratsiyasini tahrirlashingiz yoki ularni o'chirib qo'yishingiz mumkin.
# rm /etc/freeradius/sites-enabled/default
# rm /etc/freeradius/sites-enabled/inner-tunnel
# service freeradius reload
Endi veb-sahifaga qaytaylik va uni biroz batafsilroq ko'rib chiqamiz:
Yuqori o'ng burchakda LinOTP Config -> UserIdResolvers -> Yangi ni bosing
Biz xohlagan narsani tanlaymiz: LDAP (AD win, LDAP samba) yoki SQL yoki Flatfile tizimining mahalliy foydalanuvchilari.
Kerakli maydonlarni to'ldiring.
Keyin biz REALMS ni yaratamiz:
Yuqori o'ng burchakda LinOTP Config -> Realms -> New-ni bosing.
va REALMSimizga nom bering, shuningdek, avval yaratilgan UserIdResolvers-ni bosing.
FreeRadius ushbu ma'lumotlarning barchasi /etc/linotp2/rlm_perl.ini faylida kerak, men yuqorida yozganimdek, agar siz uni o'shanda tahrir qilmagan bo'lsangiz, hozir qiling.
Server hammasi sozlangan.
Qo'shimcha:
Debian 9 da LinOTP o'rnatilmoqda:
O'rnatish:
# 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
(sukut bo'yicha, Debian 9 mysql (mariaDB) da root parolni o'rnatishni taklif qilmaydi, albatta siz uni bo'sh qoldirishingiz mumkin, lekin agar siz yangiliklarni o'qisangiz, bu ko'pincha "epik muvaffaqiyatsizlikka" olib keladi, shuning uchun biz uni o'rnatamiz. nima bo'lganda ham)
# 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
Kodni joylashtiring (JuriM tomonidan yuborilgan, buning uchun unga rahmat!):
server linotp {
tinglash {
ipaddr = *
port = 1812
type=auth
}
tinglash {
ipaddr = *
port = 1813
turi = hisob
}
ruxsat berish {
oldindan ishlov berish
yangilash {
&nazorat:Auth-Type:= Perl
}
}
autentifikatsiya qilish {
Auth-Type Perl {
Perl
}
}
buxgalteriya {
Unix
}
}
/etc/freeradius/3.0/mods-enabled/perl-ni tahrirlang
perl {
fayl nomi = /usr/share/linotp/radius_linotp.pm
func_authenticate = autentifikatsiya
func_authorize = avtorizatsiya qilish
}
Afsuski, Debian 9 da radius_linotp.pm kutubxonasi omborlardan o'rnatilmagan, shuning uchun biz uni github'dan olamiz.
# 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
endi /etc/freeradius/3.0/clients.conf ni tahrirlaymiz
mijoz serverlari {
ipaddr = 192.168.188.0/24
maxfiy = parolingiz
}
Endi nano /etc/linotp2/rlm_perl.ini tuzatamiz
Debian 8 ga o'rnatishda bo'lgani kabi bir xil kodni joylashtiramiz (yuqorida tasvirlangan)
hammasi fikrga ko'ra. (hali sinovdan o'tmagan)
Quyida men ikki faktorli autentifikatsiya bilan himoyalanishi kerak bo'lgan tizimlarni sozlash bo'yicha bir nechta havolalarni qoldiraman:
Ikki faktorli autentifikatsiyani sozlash
moslashish
Bundan tashqari, ko'pgina saytlarning sms ikki faktorli autentifikatsiyani qo'llab-quvvatlaydi (WordPress uchun LinOTP hatto o'zining maxsus moduliga ega.
MUHIM FAKT! Google Authenticator-dan foydalanish uchun “Google autenteficator” katagiga belgi qo'ymang! QR kodni o'qib bo'lmaydi... (g'alati fakt)
Ushbu maqolani yozish uchun quyidagi maqolalardagi ma'lumotlardan foydalanilgan:
Mualliflarga rahmat.
Manba: www.habr.com