Хоёр хүчин зүйлийн баталгаажуулалт нь зүйтэй бөгөөд өргөстэй боловч техник хангамжийн жетонд мөнгө байхгүй бөгөөд ерөнхийдөө сайхан сэтгэлтэй байхыг санал болговол яах вэ.
Энэ шийдэл нь супер анхны зүйл биш, харин Интернетээс олдсон янз бүрийн шийдлүүдийн холимог юм.
Тиймээс өгсөн
Домэйн нэр Идэвхтэй лавлах.
Домэйн хэрэглэгчид өнөөдөр олон хүний адил VPN-ээр ажилладаг.
VPN гарцын үүрэг гүйцэтгэдэг Бэхжүүлэх.
VPN үйлчлүүлэгчийн нууц үгийг хадгалахыг аюулгүй байдлын бодлогоор хориглодог.
Улс төр Fortinet Өөрийнхөө жетонтой холбоотойгоор та үүнийг zhlob-ээс бага гэж нэрлэж болохгүй - 10 хүртэл үнэгүй жетон байдаг, үлдсэн нь маш хямд үнээр байдаг. Би нээлттэй эх сурвалжийг хүсч байгаа тул RSASecureID, Duo гэх мэтийг авч үзээгүй.
Урьдчилсан нөхцөл: хост * nix тогтсон чөлөөт радиус, SSSD - домэйнд нэвтэрсэн тохиолдолд домэйн хэрэглэгчид үүнийг хялбархан баталгаажуулах боломжтой.
Нэмэлт багцууд: shellina хайрцаг, фитлет, чөлөөт радиус-лдап, фонт 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
}
}
Суулгасны дараа чөлөөт радиус-лдап лавлах дотор raddb/mods-боломжтой файл үүсгэгдсэн лдап.
Лавлах руу симбол холбоос үүсгэх хэрэгтэй raddb/mods-ийг идэвхжүүлсэн.
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. Нэг чухал зүйл бол бодлогын нэр нь лавлах дахь файлын нэрээр тодорхойлогддоггүй бодлого.d, гэхдээ буржгар хаалтны өмнөх файл доторх удирдамжаар.
хэсэгт authenticate ижил файлд та мөрийн тайлбарыг арилгах хэрэгтэй Шах.
Файлд 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 Хэрэглэгчээс итгэмжлэлийг дараах форматаар оруулахыг шаардах: Хэрэглэгчийн нэр Нууц үг+OTP.
Анхдагч багцыг ашигласан тохиолдолд толгой дээр унах хараалын тоог төсөөлөх замаар чөлөөт радиус с Google Гэрчлэгч, модулийн тохиргоог ашиглахаар шийдсэн Шах Ингэснээр зөвхөн жетон шалгаж болно Google Гэрчлэгч.
Хэрэглэгч холбогдох үед дараахь зүйл тохиолддог.
- Freeradius нь хэрэглэгч домэйн болон тодорхой бүлэгт байгаа эсэхийг шалгаж, амжилттай бол OTP жетоныг шалгадаг.
“Би яаж 300+ хэрэглэгчдэд OTP бүртгүүлэх вэ?” гэж бодох хүртэл бүх зүйл хангалттай сайхан харагдаж байсан.
Хэрэглэгч сервер рүү нэвтрэх ёстой чөлөөт радиус болон өөрийн дансны доороос програмыг ажиллуулна уу Google гэрчлэгч, энэ нь хэрэглэгчдэд зориулсан програмын QR кодыг үүсгэх болно. Эндээс тусламж орж ирдэг. shellina хайрцаг -тэй хослуулан .bash_profile.
[root@freeradius ~]# yum install -y shellinabox
Демоны тохиргооны файл нь дараах хаягаар байрладаг /etc/sysconfig/shellinabox.
Би тэнд 443 портыг зааж өгсөн бөгөөд та гэрчилгээгээ зааж өгч болно.
[root@freeradius ~]#systemctl enable --now shellinaboxd
Хэрэглэгч зөвхөн холбоосыг дагаж, домэйн кредитээ оруулаад програмын QR кодыг авах шаардлагатай.
Алгоритм дараах байдалтай байна.
- Хэрэглэгч хөтчөөр дамжуулан машинд нэвтэрдэг.
- Домэйн хэрэглэгчийг шалгасан эсэх. Үгүй бол ямар ч арга хэмжээ авахгүй.
- Хэрэв хэрэглэгч нь домэйн хэрэглэгч бол Администраторуудын бүлгийн гишүүнчлэлийг шалгана.
- Хэрэв админ биш бол Google Authenticator тохируулагдсан эсэхийг шалгана. Үгүй бол QR код болон хэрэглэгчийг гаргана.
- Хэрэв админ биш бөгөөд Google Authenticator тохируулагдсан бол зүгээр л гарна уу.
- Хэрэв админ бол Google Authenticator-г дахин шалгана уу. Хэрэв тохируулаагүй бол QR код үүсгэгдэнэ.
Бүх логикийг ашиглан хийдэг /etc/skel/.bash_profile.
муур /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 тохиргоо:
- Бид бүтээдэг Радиус- сервер
- Бид шаардлагатай бүлгүүдийг бий болгож, шаардлагатай бол бүлгүүдийн хандалтын хяналтыг бий болгодог. Бүлгийн нэр асаалттай Бэхжүүлэх дамжуулж буй бүлэгтэй тохирч байх ёстой Борлуулагчийн тусгай шинж чанар Fortinet группын нэр.
- Шаардлагатай засварлах 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 одоо иймэрхүү харагдаж байна:
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