خادم مصادقة ثنائي العوامل LinOTP

خادم مصادقة ثنائي العوامل LinOTP

أرغب اليوم في مشاركة كيفية إعداد خادم مصادقة ثنائي لحماية شبكة الشركة والمواقع والخدمات و ssh. سيعمل الرابط على الخادم: LinOTP + FreeRadius.

لماذا يحتاج إلينا؟
هذا حل مجاني ومناسب تمامًا ، داخل شبكتك ، ومستقل عن مزودي الطرف الثالث.

هذه الخدمة مريحة للغاية ومرئية تمامًا ، على عكس المنتجات مفتوحة المصدر الأخرى ، كما أنها تدعم عددًا كبيرًا من الوظائف والسياسات (على سبيل المثال ، تسجيل الدخول + كلمة المرور + (PIN + OTPToken)). من خلال API ، يتكامل مع خدمات إرسال الرسائل القصيرة (LinOTP Config-> Provider Config-> SMS Provider) ، ويولد رموزًا لتطبيقات الهاتف المحمول مثل Google Autentificator وأكثر من ذلك بكثير. أعتقد أنه أكثر ملاءمة من الخدمة التي تم النظر فيها مقالة.

يعمل هذا الخادم بشكل جيد مع Cisco ASA ، وخادم OpenVPN ، و Apache2 ، وبالفعل مع كل شيء تقريبًا يدعم المصادقة عبر خادم RADIUS (على سبيل المثال ، لـ SSH لمركز البيانات).

يتطلب:

1) ديبيان 8 (جيسي) - مطلوب! (تم وصف التثبيت التجريبي على دبيان 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

أحيانًا عند تثبيت نظيف ، بعد تنفيذ هذا الأمر ، يصدر دبيان ما يلي:

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-Recfigure linotp لتغيير الإعدادات إذا كنت قد قمت بالفعل بتثبيت mysql).

# apt-get install mysql-server

# apt-get update

(لا يضر التحقق مرة أخرى من وجود تحديثات)
قم بتثبيت LinOTP والوحدات النمطية الإضافية:

# apt-get install linotp

نجيب على أسئلة المثبت:
استخدم Apache2: نعم
قم بإنشاء كلمة مرور للمشرف Linotp: "YourPassword"
إنشاء شهادة موقعة ذاتيًا: نعم
استخدم MySQL؟: نعم
أين توجد قاعدة البيانات: localhost
قم بإنشاء قاعدة بيانات LinOTP (اسم أساسي) على الخادم: LinOTP2
قم بإنشاء مستخدم منفصل لقاعدة البيانات: LinOTP2
قم بتعيين كلمة المرور للمستخدم: "YourPassword"
هل يجب علي إنشاء قاعدة الآن؟ (شيء مثل "هل أنت متأكد أنك تريد ..."): نعم
أدخل كلمة مرور جذر 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

نحرر الملف ونخبر نصف القطر أننا سنستخدم بيرل للمصادقة.

# nano /etc/freeradius/users

DEFAULT Auth-type := perl

بعد ذلك ، قم بتحرير الملف / etc / freeradius / modules / perl

# nano /etc/freeradius/modules/perl

نحتاج إلى تعيين المسار إلى برنامج linotp perl script في معلمة الوحدة النمطية:

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 webmord.
RESCONF = ملف مسطح
# اختياري: قم بالتعليق إذا كان كل شيء يعمل بشكل جيد
تصحيح = صحيح
# اختياري: استخدم هذا ، إذا كان لديك شهادات موقعة ذاتيًا ، فقم بالتعليق (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
}

بعد ذلك ، سنقوم بإنشاء رابط sim:

# 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 على دبيان 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 ، شكرًا له على ذلك!):

linotp الخادم {
يستمع {
باددر = *
ميناء = 1812
اكتب = المصادقة
}
يستمع {
باددر = *
ميناء = 1813
اكتب = حساب
}
يأذن {
العملية
تحديث {
& التحكم: نوع المصادقة: = Perl
}
}
مصادقة {
نوع المصادقة 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

خوادم العميل {
باددر = 192.168.188.0/24
سر = كلمة مرورك
}

الآن دعنا نصلح nano /etc/linotp2/rlm_perl.ini

نلصق نفس الكود هناك كما هو الحال عند التثبيت على دبيان 8 (الموصوف أعلاه)

على فكرة كل شيء. (لم يتم اختباره بعد)

سأترك أدناه بعض الروابط لإعداد الأنظمة التي تحتاج في أغلب الأحيان إلى الحماية من خلال التفويض الثنائي:
إعداد المصادقة ذات العاملين بتنسيق Apache2

التكوين مع Cisco ASA(يستخدم خادم إنشاء رمز مختلف ، لكن إعدادات ASA نفسها هي نفسها).

VPN مع مصادقة ثنائية

تعديل المصادقة الثنائية في ssh (يتم استخدام LinOTP هناك أيضًا) - بفضل المؤلف. هناك يمكنك أيضًا العثور على أشياء مثيرة للاهتمام حول إعداد سياسات LiOTP.

أيضًا ، تدعم cms في العديد من المواقع المصادقة الثنائية (بالنسبة إلى WordPress ، فإن LinOTP لديها وحدة خاصة بها على جيثب) ، على سبيل المثال ، إذا كنت ترغب في إنشاء قسم آمن لموظفي الشركة على موقع الويب الخاص بشركتك.
حقيقة مهمة! لا تقم بتحديد مربع "Google Authenticator" لاستخدام Google Authenticator! رمز الاستجابة السريعة غير قابل للقراءة إذن ... (حقيقة غريبة)

تم استخدام المعلومات من المقالات التالية لكتابة المقال:
itnan.ru/post.php؟c=1&p=270571
www.digitalbears.net/؟p=469

شكرا للمؤلفين.

المصدر: www.habr.com

إضافة تعليق