ڇا جيڪڏهن ٻه عنصر جي تصديق ٻنهي گهربل ۽ ڇڪيل آهي، پر هارڊويئر ٽوڪن لاء پئسا نه آهن ۽ عام طور تي اهي سٺو موڊ ۾ رهڻ جي آڇ ڪندا آهن.
هي حل ڪجهه سپر اصل نه آهي، بلڪه انٽرنيٽ تي مليا مختلف حلن جو هڪ ميلاپ.
سو ڏنو
Домен فعال ڊاريڪٽري.
ڊومين استعمال ڪندڙ هڪ وي پي اين ذريعي ڪم ڪري رهيا آهن، جهڙوڪ ڪيترائي اڄ.
VPN گيٽ وي طور ڪم ڪري ٿو فارغ ڪيو.
VPN ڪلائنٽ لاءِ پاسورڊ محفوظ ڪرڻ سيڪيورٽي پاليسي طرفان منع ٿيل آهي.
سياست قلعي واري توهان جي پنهنجي ٽوڪن جي سلسلي ۾، توهان ان کي zhlob کان گهٽ نه ٿا سڏي سگهو - هتي 10 کان وڌيڪ مفت ٽوڪن آهن، باقي - تمام گهڻي غير ڪوشر قيمت تي. مون غور نه ڪيو RSASecureID، Duo ۽ پسند، ڇاڪاڻ ته مون کي کليل ذريعو چاهيو.
شرطون: ميزبان * اينڪس قائم ڪيل سان فري ريڊيس, ايس ايس ڊي آهي - ڊومين ۾ داخل ٿيو، ڊومين استعمال ڪندڙ آساني سان ان تي تصديق ڪري سگھن ٿا.
اضافي پيڪيجز: شيلينا باڪس, خطو, freeradius-ldap، فونٽ rebel.tlf مخزن کان
منهنجي مثال ۾ - CentOS 7.8.
ڪم جو منطق هن ريت هجڻ گهرجي: جڏهن هڪ VPN سان ڳنڍڻ، صارف کي پاسورڊ جي بدران ڊومين لاگ ان ۽ OTP داخل ڪرڻ گهرجي.
خدمتون سيٽ اپ
В /etc/raddb/radiusd.conf صرف صارف ۽ گروپ جنهن جي طرفان شروع ٿئي ٿو فري ريڊيس، خدمت کان وٺي ريڊيس ڊي سڀني ذيلي ڊائريڪٽرن ۾ فائلون پڙهڻ جي قابل هجڻ گهرجي / گهر /.
user = root
group = root
سيٽنگون ۾ گروپن کي استعمال ڪرڻ جي قابل ٿي فارغ ڪيو، منتقل ٿيڻ گهرجي وينڊر جي مخصوص خاصيت. هن کي ڪرڻ لاء، ڊاريڪٽري ۾ raddb/policy.d مان ھيٺ ڏنل مواد سان ھڪڙي فائل ٺاھيو:
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 ڊاريڪٽري ۾ raddb/mods-دستياب فائل ٺاهي وئي آهي ايل ڊي پي.
ڊاريڪٽري ڏانهن علامتي لنڪ ٺاهڻ جي ضرورت آهي raddb/mods-enabled.
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/sites-enabled/default и raddb/sites-enabled/inner-tunnel سيڪشن ۾ اختيار ڏيڻ مان استعمال ٿيڻ واري پاليسي جو نالو شامل ڪريان ٿو - group_authorization. هڪ اهم نقطو - پاليسي جو نالو ڊاريڪٽري ۾ فائل جي نالي سان طئي ٿيل نه آهي پاليسي ڊي, پر ھڪڙي ھدايت سان فائل اندر گھڙي گھڙي کان اڳ.
سيڪشن ۾ مستند ساڳئي فائلن ۾ توهان کي لڪير کي ختم ڪرڻ جي ضرورت آهي pam.
فائل ۾ clients.conf وضاحت ڪريو پيٽرولر جنهن سان اهو ڳنڍيندو فارغ ڪيو:
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
ڊفالٽ بنڈل لاڳو ڪرڻ جا اختيار فري ريڊيس с گوگل ريٽيڪلٽر صارف کي فارميٽ ۾ سندون داخل ڪرڻ جي ضرورت آھي: يوزرنيم/پاسورڊ+او ٽي پي.
ڪَمَرَ جو تعداد تصور ڪرڻ سان جيڪو سر تي پوندو، ڊفالٽ بنڊل استعمال ڪرڻ جي صورت ۾ فري ريڊيس с Google Authenticator, ان کي استعمال ڪرڻ جو فيصلو ڪيو ويو ماڊل ترتيب pam ته جيئن صرف ٽوڪن چيڪ ڪري سگهجي Google Authenticator.
جڏهن هڪ صارف ڳنڍيندو آهي، هيٺيان ٿئي ٿو:
- Freeradius چيڪ ڪري ٿو ته صارف ڊومين ۾ آهي ۽ هڪ خاص گروپ ۾ ۽، جيڪڏهن ڪامياب ٿي، OTP ٽوڪن کي چيڪ ڪري ٿو.
هر شيءِ ڪافي سٺي لڳي رهي هئي ان لمحي تائين جڏهن مون سوچيو ”مان 300+ استعمال ڪندڙن لاءِ OTP ڪيئن رجسٽر ڪري سگهان ٿو؟
استعمال ڪندڙ کي سرور سان لاگ ان ٿيڻ گهرجي فري ريڊيس ۽ توهان جي اڪائونٽ هيٺان ۽ ايپليڪيشن کي هلائي گوگل تصديق ڪندڙ، جيڪو صارف لاءِ ايپليڪيشن لاءِ QR ڪوڊ ٺاهيندو. هي آهي جتي مدد اچي ٿي. شيلينا باڪس سان ميلاپ ۾ .bash_profile.
[root@freeradius ~]# yum install -y shellinabox
ڊيمن جي ٺاھ جوڙ واري فائل تي واقع آھي /etc/sysconfig/shellinabox.
مان هتي پورٽ 443 جي وضاحت ڪريان ٿو ۽ توهان پنهنجي سرٽيفڪيٽ جي وضاحت ڪري سگهو ٿا.
[root@freeradius ~]#systemctl enable --now shellinaboxd
استعمال ڪندڙ کي صرف لنڪ جي پيروي ڪرڻ جي ضرورت آهي، ڊومين ڪريڊٽ داخل ڪريو ۽ ايپليڪيشن لاء QR ڪوڊ حاصل ڪريو.
الگورتھم ھي as ڏنل آھي:
- صارف برائوزر ذريعي مشين ۾ لاگ ان ٿئي ٿو.
- ڇا ڊومين استعمال ڪندڙ چيڪ ڪيو ويو آهي. جيڪڏهن نه، ته پوء ڪو به عمل نه ڪيو ويندو.
- جيڪڏهن صارف هڪ ڊومين استعمال ڪندڙ آهي، منتظمين جي گروپ ۾ رڪنيت چيڪ ڪئي وئي آهي.
- جيڪڏهن منتظم نه آهي، اهو چيڪ ڪري ٿو ته ڇا Google Authenticator ترتيب ڏنل آهي. جيڪڏهن نه، ته پوء هڪ QR ڪوڊ ۽ صارف لاگ آئوٽ ٺاهي وئي آهي.
- جيڪڏهن منتظم نه آهي ۽ گوگل تصديق ڪندڙ ترتيب ڏنل آهي، ته پوءِ صرف لاگ آئوٽ ڪريو.
- جيڪڏهن منتظم، ته پوءِ ٻيهر چيڪ ڪريو گوگل تصديق ڪندڙ. جيڪڏهن ترتيب نه ڏني وئي آهي، هڪ 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
مضبوط سيٽ اپ:
- اسان ٺاهيندا آهيون ريڊيس Radius-سرور
- اسان ضروري گروپ ٺاھيون ٿا، جيڪڏھن ضروري ھجي، گروپن جي ڪنٽرول تائين رسائي. گروپ جو نالو فارغ ڪيو انهي گروپ سان ملائڻ گهرجي جنهن ۾ پاس ڪيو ويو آهي وينڊر جي مخصوص خاصيت Fortinet-گروپ-نالو.
- ضروري ترميم ڪرڻ ايس ايس ايل- پورٽل.
- گروپن کي پاليسين ۾ شامل ڪرڻ.
هن حل جا فائدا:
- OTP ذريعي تصديق ڪرڻ ممڪن آهي فارغ ڪيو اوپن سورس حل.
- VPN ذريعي ڳنڍڻ دوران صارف ڊومين پاسورڊ داخل نٿو ڪري، جيڪو ڪنيڪشن جي عمل کي ڪجهه آسان بڻائي ٿو. 6 عددي پاسورڊ سيڪيورٽي پاليسي پاران مهيا ڪيل هڪ کان وڌيڪ داخل ڪرڻ آسان آهي. نتيجي طور، موضوع سان ٽڪيٽن جو تعداد: "مان وي پي اين سان ڳنڍي نٿو سگهان" گھٽجي ٿو.
PS اسان هن حل کي اپ گريڊ ڪرڻ جو منصوبو ڪريون ٿا هڪ مڪمل-ٻه عنصر جي تصديق لاءِ چئلينج-جواب سان.
تازه:
جيئن واعدو ڪيو ويو، مون ان کي ٽائيڪ ڪيو چيلنج-جواب اختيار.
پوء:
فائل ۾ /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