اگر آپ دو عنصر کی توثیق چاہتے ہیں اور ہچکچاتے ہیں تو کیا کریں، لیکن ہارڈویئر ٹوکن کے لیے پیسے نہیں ہیں اور عام طور پر وہ اچھے موڈ کو برقرار رکھنے کا مشورہ دیتے ہیں۔
یہ حل کوئی انتہائی اصلی چیز نہیں ہے، بلکہ انٹرنیٹ پر پائے جانے والے مختلف حلوں کا مرکب ہے۔
تو دیا ہے۔
ڈومین۔ ایکٹو ڈائریکٹری.
VPN کے ذریعے کام کرنے والے ڈومین صارفین، جیسے آج بہت سے لوگ۔
VPN گیٹ وے کے طور پر کام کرتا ہے۔ جعل سازی کرنا۔.
وی پی این کلائنٹ کے لیے پاس ورڈ محفوظ کرنا سیکیورٹی پالیسی کے ذریعے ممنوع ہے۔
سیاست Fortinet اس کے اپنے ٹوکنز کے سلسلے میں، آپ اسے redneck سے کم نہیں کہہ سکتے ہیں - مفت ٹوکن کے زیادہ سے زیادہ 10 یونٹس ہیں، باقی انتہائی غیر کوشر قیمت پر ہیں۔ میں نے RSASecureID، Duo اور اس طرح پر غور نہیں کیا، کیونکہ میں اوپن سورس چاہتا ہوں۔
شرائط: میزبان * nix نصب کے ساتھ freeradius, ایس ایس ڈی - ڈومین میں داخل ہونے پر، ڈومین استعمال کرنے والے آسانی سے اس کی تصدیق کر سکتے ہیں۔
اضافی پیکجز: shellinabox, انجیر, freeradius-ldapفونٹ rebel.tlf ذخیرہ سے
میری مثال میں، CentOS 7.8.
آپریٹنگ منطق مندرجہ ذیل ہے: VPN سے منسلک ہونے پر، صارف کو پاس ورڈ کے بجائے ڈومین لاگ ان اور OTP درج کرنا ہوگا۔
خدمات کی ترتیب
В /etc/raddb/radiusd.conf صرف صارف اور گروپ جس کے نام سے یہ تبدیل ہونا شروع ہوتا ہے۔ freeradiusسروس کے بعد سے رداس تمام ذیلی ڈائریکٹریوں میں فائلوں کو پڑھنے کے قابل ہونا ضروری ہے۔ /گھر/.
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۔ ایک اہم نکتہ - پالیسی کا نام ڈائریکٹری میں موجود فائل کے نام سے متعین نہیں ہوتا ہے۔ پالیسی ڈی، لیکن گھوبگھرالی منحنی خطوط وحدانی سے پہلے فائل کے اندر ایک ہدایت۔
سیکشن میں تصدیق انہی فائلوں میں آپ کو لائن کو غیر تبصرہ کرنے کی ضرورت ہے۔ پام.
فائل میں 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
بنڈل کو لاگو کرنے کے لیے پہلے سے طے شدہ اختیارات freeradius с گوگل کے مستند کنندہ صارف کو فارمیٹ میں اسناد داخل کرنے کی ضرورت ہے: استعمال کنندہ کا نام پاسوورڈ+OTP.
اگر آپ پہلے سے طے شدہ کپولا استعمال کرتے ہیں تو ان لعنتوں کی تعداد کا تصور کریں جو آپ کے سر پر پڑیں گی۔ freeradius с Google Authenticator، یہ ماڈیول کنفیگریشن کو استعمال کرنے کا فیصلہ کیا گیا۔ پام تاکہ صرف ٹوکن چیک کیا جائے۔ Google Authenticator.
جب کوئی صارف جڑتا ہے تو درج ذیل ہوتا ہے:
- Freeradius چیک کرتا ہے کہ آیا صارف ڈومین میں ہے اور کسی مخصوص گروپ میں اور، اگر کامیاب ہو تو OTP ٹوکن چیک کرتا ہے۔
ہر چیز کافی کامیاب نظر آتی تھی جب تک کہ میں نے سوچا، "میں 300+ صارفین کے لیے OTP کیسے رجسٹر کر سکتا ہوں؟"
صارف کو اس کے ساتھ سرور میں لاگ ان کرنا ہوگا۔ freeradius اور اپنے اکاؤنٹ سے اور ایپلیکیشن لانچ کریں۔ گوگل مستند، جو صارف کے لیے درخواست کے لیے ایک QR کوڈ تیار کرے گا۔ یہ وہ جگہ ہے جہاں یہ بچاؤ آتا ہے۔ shellinabox کے ساتھ مجموعہ میں .bash_profile.
[root@freeradius ~]# yum install -y shellinabox
ڈیمون کنفیگریشن فائل میں واقع ہے۔ /etc/sysconfig/shellinabox.
میں وہاں پورٹ 443 بتاتا ہوں اور آپ اپنا سرٹیفکیٹ بتا سکتے ہیں۔
[root@freeradius ~]#systemctl enable --now shellinaboxd
صارف صرف لنک پر عمل کر سکتا ہے، ڈومین کی اسناد درج کر سکتا ہے اور درخواست کے لیے QR کوڈ حاصل کر سکتا ہے۔
الگورتھم مندرجہ ذیل ہے:
- صارف براؤزر کے ذریعے مشین میں لاگ ان ہوتا ہے۔
- آیا صارف ڈومین صارف ہے چیک کیا جاتا ہے۔ اگر نہیں تو کوئی کارروائی نہیں کی جاتی۔
- اگر صارف ڈومین صارف ہے تو، منتظمین کے گروپ میں رکنیت کی جانچ پڑتال کی جاتی ہے۔
- اگر منتظم نہیں ہے، تو یہ چیک کرتا ہے کہ آیا Google Autheticator کو کنفیگر کیا گیا ہے۔ اگر نہیں، تو ایک QR کوڈ تیار ہوتا ہے اور صارف لاگ آؤٹ ہو جاتا ہے۔
- اگر آپ ایڈمن نہیں ہیں اور 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
فورٹیگیٹ سیٹ اپ:
- ہم تخلیق کرتے ہیں۔ رداس-سرور
- اگر گروپ کے لحاظ سے رسائی میں فرق کرنا ضروری ہو تو ہم ضروری گروپ بناتے ہیں۔ گروپ کا نام آن جعل سازی کرنا۔ اس گروپ سے مماثل ہونا چاہیے جس کو بھیجا گیا ہے۔ وینڈر کی مخصوص وصف Fortinet-گروپ-نام.
- ضروری ترمیم کرنا SSL-پورٹلز
- پالیسیوں میں گروپوں کو شامل کرنا۔
اس حل کے فوائد:
- OTP آن کے ذریعے تصدیق کرنا ممکن ہے۔ جعل سازی کرنا۔ اوپن سورس حل۔
- صارف کو VPN کے ذریعے جڑتے وقت ڈومین پاس ورڈ درج کرنے کی ضرورت نہیں ہے، جو کنکشن کے عمل کو کسی حد تک آسان بناتا ہے۔ 6 ہندسوں کا پاس ورڈ سیکیورٹی پالیسی کے ذریعہ فراہم کردہ پاس ورڈ کے مقابلے میں داخل کرنا آسان ہے۔ نتیجے کے طور پر، موضوع کے ساتھ ٹکٹوں کی تعداد: "میں VPN سے منسلک نہیں ہو سکتا" کم ہو رہا ہے۔
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