سرور احراز هویت دو مرحله ای LinOTP

سرور احراز هویت دو مرحله ای LinOTP

امروز می‌خواهم نحوه راه‌اندازی یک سرور احراز هویت دو مرحله‌ای را برای محافظت از شبکه شرکتی، سایت‌ها، خدمات، ssh به اشتراک بگذارم. سرور ترکیب زیر را اجرا می کند: LinOTP + FreeRadius.

چرا او به ما نیاز دارد؟
این یک راه حل کاملا رایگان و راحت، در شبکه خود، مستقل از ارائه دهندگان شخص ثالث است.

این سرویس بر خلاف سایر محصولات منبع باز بسیار راحت، کاملا بصری است و همچنین از تعداد زیادی توابع و سیاست ها پشتیبانی می کند (به عنوان مثال، ورود + رمز عبور + (PIN + OTPToken)). از طریق API، با خدمات ارسال پیامک (LinOTP Config->Provider Config->SMS Provider) یکپارچه می شود، کدهایی را برای برنامه های کاربردی تلفن همراه مانند Google Authentificator و موارد دیگر تولید می کند. فکر می کنم راحت تر از سرویسی است که در آن بحث شد مقاله.

این سرور با Cisco ASA، سرور OpenVPN، Apache2 و به طور کلی تقریباً با هر چیزی که از احراز هویت از طریق یک سرور RADIUS پشتیبانی می کند (به عنوان مثال برای SSH در مرکز داده) کاملاً کار می کند.

مورد نیاز:

1) Debian 8 (jessie) - همیشه! (نصب آزمایشی در دبیان 9 در انتهای مقاله توضیح داده شده است)

شروع:

نصب دبیان 8.

مخزن LinOTP را اضافه کنید:

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

اضافه کردن کلیدها:

# gpg --search-keys 913DFF12F86258E5

گاهی اوقات در حین نصب "تمیز"، پس از اجرای این دستور، دبیان نمایش می دهد:

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 است. خوبه. کافیست دوباره دستور را اجرا کنید.
به سوال دبیان:

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 استفاده کنید: بله
ایجاد رمز عبور برای ادمین Linotp: "رمز عبور شما"
گواهی خودامضا تولید کنید؟: بله
از MySQL استفاده کنید؟: بله
پایگاه داده در کجا قرار دارد: localhost
یک پایگاه داده LinOTP (نام پایه) روی سرور ایجاد کنید: LinOTP2
یک کاربر جداگانه برای پایگاه داده ایجاد کنید: LinOTP2
ما یک رمز عبور برای کاربر تنظیم کردیم: "رمز عبور شما"
الان باید دیتابیس بسازم؟ (چیزی مانند "آیا مطمئن هستید که می خواهید ..."): بله
رمز عبور ریشه MySQL را که هنگام نصب آن ایجاد کردید وارد کنید: "YourPassword"
انجام شد

(اختیاری، لازم نیست آن را نصب کنید)

# 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

از تنظیمات شعاع مشتری و کاربران نسخه پشتیبان تهیه کنید.

# 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 # пароль для подключения клиентов
}

بعد، یک فایل کاربران ایجاد کنید:

# touch /etc/freeradius/users

ما فایل را ویرایش می کنیم و به radius می گوییم که از perl برای احراز هویت استفاده خواهیم کرد.

# nano /etc/freeradius/users

DEFAULT Auth-type := perl

سپس فایل /etc/freeradius/modules/perl را ویرایش کنید

# nano /etc/freeradius/modules/perl

ما باید مسیر اسکریپت perl linotp را در پارامتر ماژول مشخص کنیم:

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 سرور linOTP (آدرس IP سرور LinOTP ما)
URL=https://172.17.14.103/validate/simplecheck
#منطقه ما که در رابط وب LinOTP ایجاد خواهیم کرد.)
REALM=rearm1
#نام گروه کاربری که در پوزه وب LinOTP ایجاد شده است.
RESCONF=flat_file
#اختیاری: اگر به نظر می رسد همه چیز خوب کار می کند، نظر بدهید
اشکال زدایی = درست است
#اختیاری: اگر گواهی‌های خودامضا دارید از این استفاده کنید، در غیر این صورت نظر بدهید (اگر ما گواهینامه خود را ایجاد کنیم و بخواهیم آن را تأیید کنیم SSL)
SSL_CHECK=نادرست

سپس فایل /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

من شخصاً سایت‌های Radius پیش‌فرض را می‌کشم، اما اگر به آنها نیاز دارید، می‌توانید پیکربندی آنها را ویرایش کنید یا غیرفعال کنید.

# 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) تنظیم رمز عبور root را ارائه نمی دهد، البته می توانید آن را خالی بگذارید، اما اگر اخبار را بخوانید، اغلب منجر به "epic fails" می شود، بنابراین ما آن را تنظیم می کنیم به هر حال)

# 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، با تشکر از او!):

سرور linotp {
گوش بده {
ipaddr = *
پورت = 1812
type=auth
}
گوش بده {
ipaddr = *
پورت = 1813
نوع = acct
}
مجوز {
پیش پردازش
به روز رسانی {
&control:Auth-Type := Perl
}
}
تصدیق کردن {
Auth-Type Perl {
پرل
}
}
حسابداری {
یونیکس
}
}

/etc/freeradius/3.0/mods-enabled/perl را ویرایش کنید

پرل {
نام فایل = /usr/share/linotp/radius_linotp.pm
func_authenticate = احراز هویت
func_authorize = مجوز
}

متأسفانه در دبیان 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 را ویرایش کنیم

سرورهای مشتری {
ipaddr = 192.168.188.0/24
مخفی = رمز عبور شما
}

حالا اجازه دهید nano /etc/linotp2/rlm_perl.ini را تصحیح کنیم

ما همان کدی را که هنگام نصب روی دبیان 8 (در بالا توضیح داده شد) در آنجا قرار می دهیم.

این همه بر اساس ایده است. (هنوز تست نشده)

من در زیر چند پیوند در مورد راه اندازی سیستم هایی که اغلب باید با احراز هویت دو مرحله ای محافظت شوند، می گذارم:
راه اندازی احراز هویت دو مرحله ای در Apache2

راه اندازی با Cisco ASA(یک سرور تولید توکن متفاوت در آنجا استفاده می شود، اما تنظیمات خود ASA یکسان است).

VPN با احراز هویت دو مرحله ای

تنظیم احراز هویت دو عاملی در ssh (LinOTP نیز در آنجا استفاده می شود) - با تشکر از نویسنده. در آنجا همچنین می توانید چیزهای جالبی در مورد تنظیم خط مشی های LiOTP پیدا کنید.

همچنین، cms بسیاری از سایت‌ها از احراز هویت دو مرحله‌ای پشتیبانی می‌کنند (برای وردپرس، LinOTP حتی ماژول مخصوص خود را برای گیتهاببه عنوان مثال، اگر می خواهید یک بخش محافظت شده در وب سایت شرکت خود برای کارمندان شرکت ایجاد کنید.
واقعیت مهم! برای استفاده از Google Authenticator کادر "Google Autenteficator" را علامت نزنید! پس کد QR قابل خواندن نیست ... (واقعیت عجیب)

برای نگارش این مقاله از اطلاعات مقالات زیر استفاده شده است:
itnan.ru/post.php?c=1&p=270571
www.digitalbears.net/?p=469

با تشکر از نویسندگان.

منبع: www.habr.com

اضافه کردن نظر