ماذا لو كانت المصادقة الثنائية مرغوبة وشائكة على حد سواء ، ولكن لا توجد أموال مقابل الرموز المميزة للأجهزة ، وبشكل عام فإنها تعرض البقاء في حالة مزاجية جيدة.
هذا الحل ليس شيئًا أصليًا للغاية ، ولكنه مزيج من الحلول المختلفة الموجودة على الإنترنت.
ذلك معطى
اسم النطاق نشط الدليل.
مستخدمو المجال الذين يعملون من خلال VPN ، مثل الكثيرين اليوم.
يعمل كبوابة VPN فورتي جيت.
يحظر حفظ كلمة المرور لعميل VPN بموجب سياسة الأمان.
سياسة فورتينت بالنسبة إلى الرموز المميزة الخاصة بك ، لا يمكنك تسميتها أقل من zhlob - هناك ما يصل إلى 10 رموز مجانية ، والباقي - بسعر غير متوافق مع الشريعة اليهودية. لم أفكر في RSASecureID و Duo وما شابه ذلك ، لأنني أريد مصدر مفتوح.
المتطلبات الأساسية: مضيف * لا شىء مع المنشأة freeradius, ssd - دخلت إلى المجال ، يمكن لمستخدمي المجال المصادقة عليه بسهولة.
الحزم الإضافية: شللينابوكس, الفجل الصغير, freeradius-ldap، الخط المتمردين.tlf من المستودع
في المثال الخاص بي - CentOS 7.8.
من المفترض أن يكون منطق العمل كما يلي: عند الاتصال بشبكة VPN ، يجب على المستخدم إدخال تسجيل دخول إلى المجال وكلمة مرور لمرة واحدة بدلاً من كلمة المرور.
إعداد الخدمات
В /etc/raddb/radiusd.conf فقط المستخدم والمجموعة نيابة عن الذي يبدأ freeradius، منذ الخدمة نصف القطر يجب أن يكون قادرًا على قراءة الملفات في جميع الأدلة الفرعية /الصفحة الرئيسية/.
user = root
group = root
لتتمكن من استخدام المجموعات في الإعدادات فورتي جيت، يجب أن ينتقل السمة الخاصة بالبائع. للقيام بذلك ، في الدليل رادب / سياسة د أقوم بإنشاء ملف بالمحتوى التالي:
group_authorization {
if (&LDAP-Group[*] == "CN=vpn_admins,OU=vpn-groups,DC=domain,DC=local") {
update reply {
&Fortinet-Group-Name = "vpn_admins" }
update control {
&Auth-Type := PAM
&Reply-Message := "Welcome Admin"
}
}
else {
update reply {
&Reply-Message := "Not authorized for vpn"
}
reject
}
}
بعد التثبيت freeradius-ldap في الدليل رادب / تعديل المتاحة تم إنشاء الملف LDAP.
تحتاج إلى إنشاء ارتباط رمزي للدليل رادب / تعديل تمكين.
ln -s /etc/raddb/mods-available/ldap /etc/raddb/mods-enabled/ldap
أحضر محتوياته إلى هذا النموذج:
ldap {
server = 'domain.local'
identity = 'CN=freerad_user,OU=users,DC=domain,DC=local'
password = "SupeSecretP@ssword"
base_dn = 'dc=domain,dc=local'
sasl {
}
user {
base_dn = "${..base_dn}"
filter = "(sAMAccountname=%{%{Stripped-User-Name}:-%{User-Name}})"
sasl {
}
scope = 'sub'
}
group {
base_dn = "${..base_dn}"
filter = '(objectClass=Group)'
scope = 'sub'
name_attribute = cn
membership_filter = "(|(member=%{control:Ldap-UserDn})(memberUid=%{%{Stripped-User-Name}:-%{User-Name}}))"
membership_attribute = 'memberOf'
}
}
في الملفات raddb / مواقع تمكين / افتراضي и raddb / تمكين المواقع / النفق الداخلي في قسم يأذن أقوم بإضافة اسم السياسة المراد استخدامها - group_authorization. نقطة مهمة - لا يتم تحديد اسم السياسة من خلال اسم الملف في الدليل السياسة د، ولكن عن طريق توجيه داخل الملف قبل الأقواس المتعرجة.
في القسم مصادقة في نفس الملفات تحتاج إلى uncomment الخط حزب الأصالة والمعاصرة.
في ملف العملاء صف المعلمات التي سيتم الاتصال بها فورتي جيت:
client fortigate {
ipaddr = 192.168.1.200
secret = testing123
require_message_authenticator = no
nas_type = other
}
تكوين الوحدة pam.d / radiusd:
#%PAM-1.0
auth sufficient pam_google_authenticator.so
auth include password-auth
account required pam_nologin.so
account include password-auth
password include password-auth
session include password-auth
خيارات تنفيذ الحزمة الافتراضية freeradius с مصدق جوجل مطالبة المستخدم بإدخال بيانات الاعتماد بالتنسيق: اسم المستخدم كلمة المرور+OTP code.
بتخيل عدد الشتائم التي ستقع على الرأس ، في حالة استخدام الحزمة الافتراضية freeradius с أداة مصادقة Google، تقرر استخدام تكوين الوحدة حزب الأصالة والمعاصرة بحيث يمكن التحقق من الرمز المميز فقط أداة مصادقة Google.
عندما يتصل المستخدم ، يحدث ما يلي:
- يتحقق Freeradius مما إذا كان المستخدم موجودًا في المجال وفي مجموعة معينة ، وفي حالة نجاحه ، يتحقق من رمز OTP المميز.
بدا كل شيء جيدًا بما يكفي حتى اللحظة التي فكرت فيها "كيف يمكنني تسجيل OTP لأكثر من 300 مستخدم؟"
يجب على المستخدم تسجيل الدخول إلى الخادم باستخدام freeradius ومن تحت حسابك وتشغيل التطبيق مصدق جوجل، والذي سينشئ رمز الاستجابة السريعة للتطبيق للمستخدم. هذا هو المكان الذي تأتي فيه المساعدة. شللينابوكس بالاشتراك مع .bash_profile.
[root@freeradius ~]# yum install -y shellinabox
يوجد ملف تكوين البرنامج الخفي في / etc / sysconfig / shellinabox.
أحدد المنفذ 443 هناك ويمكنك تحديد شهادتك.
[root@freeradius ~]#systemctl enable --now shellinaboxd
يحتاج المستخدم فقط إلى اتباع الرابط ، وإدخال اعتمادات المجال وتلقي رمز الاستجابة السريعة للتطبيق.
الخوارزمية هي على النحو التالي:
- يقوم المستخدم بتسجيل الدخول إلى الجهاز من خلال متصفح.
- ما إذا كان مستخدم المجال محددًا أم لا. إذا لم يكن الأمر كذلك ، فلن يتم اتخاذ أي إجراء.
- إذا كان المستخدم مستخدم مجال ، يتم التحقق من العضوية في مجموعة المسؤولين.
- إذا لم يكن مشرفًا ، فإنه يتحقق مما إذا كان قد تم تكوين Google Authenticator. إذا لم يكن كذلك ، فسيتم إنشاء رمز الاستجابة السريعة وتسجيل خروج المستخدم.
- إذا لم يكن هناك مسؤول وتم تكوين Google Authenticator ، فما عليك سوى تسجيل الخروج.
- إذا كان المسؤول ، فتحقق من Google Authenticator مرة أخرى. إذا لم يتم تكوينه ، يتم إنشاء رمز QR.
كل المنطق يتم باستخدام /etc/skel/.bash_profile.
cat /etc/skel/.bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
# Make several commands available from user shell
if [[ -z $(id $USER | grep "admins") || -z $(cat /etc/passwd | grep $USER) ]]
then
[[ ! -d $HOME/bin ]] && mkdir $HOME/bin
[[ ! -f $HOME/bin/id ]] && ln -s /usr/bin/id $HOME/bin/id
[[ ! -f $HOME/bin/google-auth ]] && ln -s /usr/bin/google-authenticator $HOME/bin/google-auth
[[ ! -f $HOME/bin/grep ]] && ln -s /usr/bin/grep $HOME/bin/grep
[[ ! -f $HOME/bin/figlet ]] && ln -s /usr/bin/figlet $HOME/bin/figlet
[[ ! -f $HOME/bin/rebel.tlf ]] && ln -s /usr/share/figlet/rebel.tlf $HOME/bin/rebel.tlf
[[ ! -f $HOME/bin/sleep ]] && ln -s /usr/bin/sleep $HOME/bin/sleep
# Set PATH env to <home user directory>/bin
PATH=$HOME/bin
export PATH
else
PATH=PATH=$PATH:$HOME/.local/bin:$HOME/bin
export PATH
fi
if [[ -n $(id $USER | grep "domain users") ]]
then
if [[ ! -e $HOME/.google_authenticator ]]
then
if [[ -n $(id $USER | grep "admins") ]]
then
figlet -t -f $HOME/bin/rebel.tlf "Welcome to Company GAuth setup portal"
sleep 1.5
echo "Please, run any of these software on your device, where you would like to setup OTP:
Google Autheticator:
AppStore - https://apps.apple.com/us/app/google-authenticator/id388497605
Play Market - https://play.google.com/stor/apps/details?id=com.google.android.apps.authenticator2&hl=en
FreeOTP:
AppStore - https://apps.apple.com/us/app/freeotp-authenticator/id872559395
Play Market - https://play.google.com/store/apps/details?id=org.fedorahosted.freeotp&hl=en
And prepare to scan QR code.
"
sleep 5
google-auth -f -t -w 3 -r 3 -R 30 -d -e 1
echo "Congratulations, now you can use an OTP token from application as a password connecting to VPN."
else
figlet -t -f $HOME/bin/rebel.tlf "Welcome to Company GAuth setup portal"
sleep 1.5
echo "Please, run any of these software on your device, where you would like to setup OTP:
Google Autheticator:
AppStore - https://apps.apple.com/us/app/google-authenticator/id388497605
Play Market - https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2&hl=en
FreeOTP:
AppStore - https://apps.apple.com/us/app/freeotp-authenticator/id872559395
Play Market - https://play.google.com/store/apps/details?id=org.fedorahosted.freeotp&hl=en
And prepare to scan QR code.
"
sleep 5
google-auth -f -t -w 3 -r 3 -R 30 -d -e 1
echo "Congratulations, now you can use an OTP token from application as a password to VPN."
logout
fi
else
echo "You have already setup a Google Authenticator"
if [[ -z $(id $USER | grep "admins") ]]
then
logout
fi
fi
else
echo "You don't need to set up a Google Authenticator"
fi
إعداد Fortigate:
- نخلق نصف القطر-الخادم
- نقوم بإنشاء المجموعات الضرورية ، إذا لزم الأمر ، للتحكم في الوصول بواسطة المجموعات. اسم المجموعة قيد التشغيل فورتي جيت يجب أن يتطابق مع المجموعة التي تم تمريرها السمة الخاصة بالبائع اسم مجموعة فورتينت.
- تحرير اللازم SSL-بوابات.
- إضافة مجموعات إلى السياسات.
مزايا هذا الحل:
- من الممكن المصادقة عن طريق OTP على فورتي جيت حل مفتوح المصدر.
- لا يقوم المستخدم بإدخال كلمة مرور المجال عند الاتصال عبر VPN ، مما يبسط عملية الاتصال إلى حد ما. يعد إدخال كلمة المرور المكونة من 6 أرقام أسهل من إدخال كلمة المرور التي توفرها سياسة الأمان. نتيجة لذلك ، انخفض عدد التذاكر التي تحمل الموضوع: "لا يمكنني الاتصال بشبكة VPN".
ملاحظة: نخطط لترقية هذا الحل إلى مصادقة ثنائية العوامل كاملة مع الاستجابة للتحدي.
تحديث:
كما وعدت ، قمت بتعديله إلى خيار التحدي والاستجابة.
لذلك:
في ملف / etc / raddb / sites-enabled / default قسم يأذن على النحو التالي:
authorize {
filter_username
preprocess
auth_log
chap
mschap
suffix
eap {
ok = return
}
files
-sql
#-ldap
expiration
logintime
if (!State) {
if (&User-Password) {
# If !State and User-Password (PAP), then force LDAP:
update control {
Ldap-UserDN := "%{User-Name}"
Auth-Type := LDAP
}
}
else {
reject
}
}
else {
# If State, then proxy request:
group_authorization
}
pap
}
قسم مصادقة الآن يبدو كالتالي:
authenticate {
Auth-Type PAP {
pap
}
Auth-Type CHAP {
chap
}
Auth-Type MS-CHAP {
mschap
}
mschap
digest
# Attempt authentication with a direct LDAP bind:
Auth-Type LDAP {
ldap
if (ok) {
update reply {
# Create a random State attribute:
State := "%{randstr:aaaaaaaaaaaaaaaa}"
Reply-Message := "Please enter OTP"
}
# Return Access-Challenge:
challenge
}
}
pam
eap
}
يتم الآن التحقق من المستخدم وفقًا للخوارزمية التالية:
- يقوم المستخدم بإدخال اعتمادات المجال في عميل VPN.
- يتحقق Freeradius من صحة الحساب وكلمة المرور
- إذا كانت كلمة المرور صحيحة ، فسيتم إرسال طلب للحصول على رمز مميز.
- يتم التحقق من الرمز المميز.
- ربح).
المصدر: www.habr.com