Эгерде сиз эки фактордук аутентификацияны кааласаңыз жана олку-солку болсоңуз, эмне кылуу керек, бирок аппараттык токендер үчүн акча жок жана жалпысынан алар жакшы маанайда кармап турууну сунуштайт.
Бул чечим супер оригиналдуу нерсе эмес, тескерисинче, Интернетте табылган ар кандай чечимдердин аралашмасы.
Ошентип, берилген
домен Active Directory.
Бүгүнкү күндө көптөгөн домен колдонуучулары сыяктуу VPN аркылуу иштешет.
VPN шлюз катары иштейт Fortigate.
VPN кардары үчүн сырсөздү сактоо коопсуздук саясаты тарабынан тыюу салынган.
Саясат Fortinet өзүнүн энбелгилерине карата, сиз аны реднектен кем деп атай албайсыз - 10 бирдик акысыз токендер бар, калгандары өтө кошер эмес баада. Мен RSASecureID, Duo жана ушул сыяктууларды эске алган жокмун, анткени мен ачык булакты каалайм.
Алдын ала шарттар: кожоюн * Орозгул топтому эркин радиус, ssd — доменге киргенде, домендин колдонуучулары аны оңой эле текшере алышат.
Кошумча пакеттер: shellinabox, фиглет, эркин радиус-лдап, шрифт rebel.tlf репозиторийден
Менин мисалымда, CentOS 7.8.
Иштөө логикасы төмөнкүдөй: VPNге туташуу учурунда колдонуучу сырсөздүн ордуна домендик логин жана OTP киргизиши керек.
Кызматтарды орнотуу
В /etc/raddb/radiusd.conf аты менен баштаган колдонуучу жана топ гана өзгөрөт эркин радиус, кызматтан бери радиусд бардык подкаталогдордогу файлдарды окуй билиши керек / Башкы бет /.
user = root
group = root
Жөндөөлөрдөгү топторду колдоно билүү Fortigate, которуу керек Сатуучунун өзгөчө атрибуту. Бул үчүн каталогдо 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. Маанилүү жагдай - саясаттын аталышы каталогдогу файлдын аты менен аныкталбайт саясат.д, бирок тармал кашаалардан мурун файлдын ичиндеги директива.
Бөлүмдө аныктыгын текшерүү ошол эле файлдарда сиз сапты түшүндүрүшүңүз керек Pam.
Файлда clients.conf туташтыра турган параметрлерди белгилеңиз Fortigate:
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 аныктыгын колдонуучудан эсептик дайындарды форматта киргизүүнү талап кылуу: Колдонуучунун аты Сыр сөз+OTP.
Демейки копуланы колдонсоңуз, башыңызга канча каргыш келерин элестетиңиз эркин радиус с Google Аныктыгын, модулдун конфигурациясын колдонуу чечими кабыл алынды Pam токен гана текшерилет Google Аныктыгын.
Колдонуучу туташканда, төмөнкүлөр болот:
- Freeradius колдонуучунун доменде жана белгилүү бир группада экенин текшерет жана ийгиликтүү болсо, OTP белгисин текшерет.
Мен "300+ колдонуучу үчүн OTPди кантип каттасам болот?" деп ойлогонго чейин баары ийгиликтүү көрүндү.
Колдонуучу серверге кирүү керек эркин радиус жана каттоо эсебиңизден жана колдонмону ишке киргизиңиз Google Authenticator, ал колдонуучу үчүн колдонмо үчүн QR кодун жаратат. Бул жерде ал жардамга келет shellinabox менен айкалышта .bash_profile.
[root@freeradius ~]# yum install -y shellinabox
Демон конфигурация файлы жайгашкан /etc/sysconfig/shellinabox.
Мен ал жерде 443-портту көрсөтөм жана сиз өз сертификатыңызды көрсөтө аласыз.
[root@freeradius ~]#systemctl enable --now shellinaboxd
Колдонуучу шилтеме боюнча гана өтүп, домендин эсептик дайындарын киргизип, колдонмо үчүн QR кодун ала алат.
Алгоритм төмөнкүчө:
- Колдонуучу машинага браузер аркылуу кирет.
- Колдонуучунун домен колдонуучусубу же жокпу текшерилет. Болбосо, анда эч кандай чара көрүлбөйт.
- Эгер колдонуучу домен колдонуучусу болсо, администраторлор тобуна мүчөлүк текшерилет.
- Эгер администратор болбосо, ал Google Auttheticator конфигурацияланганын текшерет. Болбосо, 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
Fortigate орнотуу:
- Биз түзөбүз радиус-сервер
- Топ боюнча кирүүнү дифференциялоо керек болсо, керектүү топторду түзөбүз. Топтун аталышы күйүк Fortigate жөнөтүлгөн топко дал келиши керек Сатуучунун өзгөчө атрибуту Fortinet-Группа-Аты.
- Керектүү түзөтүү SSL-порталдар.
- Саясаттарга топторду кошуу.
Бул чечимдин артыкчылыктары:
- Бул күйүк OTP аркылуу аутентификациялоо мүмкүн Fortigate ачык булак чечим.
- 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 эсептин жарактуулугун жана сырсөзүн текшерет
- Эгер сырсөз туура болсо, анда токенге суроо-талап жөнөтүлөт.
- Токен текшерилүүдө.
- Пайда).
Source: www.habr.com