Егер екі факторлы аутентификация қажет болса да, тікенді болса да, аппараттық таңбалауыштарға ақша жоқ болса және олар жақсы көңіл-күйде болуды ұсынса ше.
Бұл шешім өте түпнұсқа емес, Интернетте табылған әртүрлі шешімдердің қоспасы.
Сонымен берілді
Домен атауы Active Directory.
Бүгінгі көптеген сияқты VPN арқылы жұмыс істейтін домен пайдаланушылары.
VPN шлюзі ретінде әрекет етеді Бекініс.
VPN клиенті үшін құпия сөзді сақтауға қауіпсіздік саясаты тыйым салады.
Саясат Фортинет өзіңіздің жеке таңбалауыштарыңызға қатысты сіз оны zhlob деп атай алмайсыз - 10 тегін таңбалауыш бар, қалғандары - өте кошер емес бағамен. Мен RSASecureID, Duo және т.б. қарастырмадым, өйткені мен ашық бастапқы кодты қалаймын.
Алғышарттар: хост * nix орнатылған еркін радиус, SSSD - доменге енгізілген, домен пайдаланушылары оны оңай аутентификациялай алады.
Қосымша пакеттер: шеллин қорабы, фиглет, еркін радиус-лдап, шрифт rebel.tlf репозиторийден
Менің мысалда - CentOS 7.8.
Жұмыс логикасы келесідей болуы керек: VPN желісіне қосылу кезінде пайдаланушы құпия сөздің орнына домен логинін және OTP енгізуі керек.
Қызметтерді орнату
В /etc/raddb/radiusd.conf тек атынан басталатын пайдаланушы мен топ еркін радиус, қызметтен бері радиус барлық ішкі каталогтардағы файлдарды оқи алуы керек / home /.
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-қосылған/әдепкі и raddb/sites-enabled/inner-tunnel бөлімінде рұқсат ету Мен қолданылатын саясаттың атын қосамын - group_authorization. Маңызды сәт - саясаттың атауы каталогтағы файлдың атымен анықталмайды саясат.d, бірақ бұйра жақшалардан бұрын файл ішіндегі директива арқылы.
Бөлімде аутентификациялау сол файлдарда жолды алып тастау керек Пам.
Файлда 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 аутентификаторы пайдаланушыдан тіркелгі деректерін келесі форматта енгізуді талап етеді: пайдаланушы аты/пароль+OTP.
Әдепкі байламды пайдаланған жағдайда, басына түсетін қарғыстардың санын елестету арқылы еркін радиус с Google Authenticator, модуль конфигурациясын пайдалану туралы шешім қабылданды Пам тек токенді тексеруге болады Google Authenticator.
Пайдаланушы қосылған кезде келесілер орын алады:
- Freeradius пайдаланушының доменде және белгілі бір топта екенін тексереді және сәтті болса, OTP таңбалауышын тексереді.
Мен «300+ пайдаланушы үшін OTP қалай тіркеуге болады?» Деген сәтке дейін бәрі жақсы көрінді.
Пайдаланушы серверге кіруі керек еркін радиус және тіркелгіңіздің астынан қолданбаны іске қосыңыз Google аутентификаторы, ол пайдаланушыға арналған қолданба үшін QR кодын жасайды. Бұл жерде көмек келеді. шеллин қорабы бірге .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.
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 орнату:
- Біз жасаймыз радиус-сервер
- Біз қажетті топтарды жасаймыз, қажет болған жағдайда топтар бойынша қол жеткізуді басқару. Топ атауы қосулы Бекініс берілген топқа сәйкес келуі керек Жеткізушіге тән төлсипат 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