Zer gertatzen da bi faktoreko autentifikazioa desiragarria eta zorrotza bada, baina hardware tokenetarako dirurik ez dago eta, oro har, umore onean egoteko aukera eskaintzen dute.
Irtenbide hau ez da zerbait super originala, baizik eta Interneten aurkitutako irtenbide ezberdinen nahasketa bat.
Beraz, ematen da
Домен Active Directory.
VPN baten bidez lan egiten duten domeinu-erabiltzaileak, gaur egun asko bezala.
VPN atebide gisa jarduten du Sendotu.
VPN bezeroaren pasahitza gordetzea debekatuta dago segurtasun-politikak.
Politika Fortinet bere tokenekin lotuta, ezin diozu redneck baino gutxiago deitu - doako token 10 unitate daude, gainerakoak oso prezio ez-kosher batean daude. Ez nituen kontuan hartu RSASecureID, Duo eta antzekoak, kode irekia nahi dudalako.
Aurrebaldintzak: ostalari * nix ezarritakoarekin aske-erradioa, ssd - domeinuan sartuta, domeinuko erabiltzaileek erraz autentifikatu dezakete bertan.
Pakete gehigarriak: shelinabox, pikotxoa, freeradius-ldap, letra-tipoa matxinatu.tlf biltegitik
Nire adibidean - CentOS 7.8.
Funtzionamendu-logika hau da: VPN batera konektatzean, erabiltzaileak domeinu-saioa eta OTP bat sartu behar ditu pasahitz baten ordez.
Zerbitzuen konfigurazioa
В /etc/raddb/radiusd.conf horren izenean erabiltzailea eta taldea bakarrik hasten da aske-erradioa, zerbitzutik erradiod Azpidirektorio guztietan fitxategiak irakurtzeko gai izan beharko luke / Home /.
user = root
group = root
Ezarpenetan taldeak erabili ahal izateko Sendotu, transmititu behar da Saltzaile espezifikoa. Horretarako, direktorioan raddb/politika.d Fitxategi bat sortzen dut eduki honekin:
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
}
}
Instalatu ondoren freeradius-ldap direktorioan raddb/mods-disponible fitxategia sortzen da ldap.
Direktoriorako esteka sinboliko bat sortu behar da raddb/mods gaituta.
ln -s /etc/raddb/mods-available/ldap /etc/raddb/mods-enabled/ldap
Bere edukia formulario honetara eramaten dut:
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'
}
}
Fitxategietan raddb/guneak gaituta/lehenetsia и raddb/sites-enabled/inner-tunnel atalean baimendu Erabiliko den politikaren izena gehitzen dut - group_authorization. Puntu garrantzitsu bat - politikaren izena ez da direktorioa fitxategiaren izenak zehazten politika.d, baina giltza kizkurren aurretik fitxategi barruan dagoen zuzentarau baten bidez.
atalean autentifikatzeko fitxategi berdinetan lerroari iruzkinak kendu behar dizkiozu pam.
Fitxategian bezeroak.konf konektatuko den parametroak agindu Sendotu:
client fortigate {
ipaddr = 192.168.1.200
secret = testing123
require_message_authenticator = no
nas_type = other
}
Moduluaren konfigurazioa 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
Sorta inplementatzeko aukera lehenetsiak aske-erradioa с google autentifikatzailea erabiltzaileari kredentzialak sartzeko eskatu behar dio formatuan: erabiltzaile-izena/pasahitza+OTP.
Imajinatu kopula lehenetsia erabiltzen baduzu buruan eroriko den birao kopurua aske-erradioa с Google autentifikatzailea, moduluaren konfigurazioa erabiltzea erabaki zen pam tokena bakarrik egiaztatu ahal izateko Google autentifikatzailea.
Erabiltzaile bat konektatzen denean, hau gertatzen da:
- Freeradius-ek erabiltzailea domeinuan eta talde jakin batean dagoen egiaztatzen du eta, arrakasta izanez gero, OTP tokena egiaztatzen du.
Dena arrakastatsua izan zen: "Nola erregistratu dezaket OTP 300 erabiltzaile baino gehiagorentzat?" pentsatu nuen arte.
Erabiltzaileak zerbitzarian saioa hasi behar du aske-erradioa eta zure kontutik eta exekutatu aplikazioa google autentifikatzailea, erabiltzailearentzako aplikaziorako QR kodea sortuko duena. Hemen sartzen da laguntza. shelinabox rekin konbinatuta .bash_profile.
[root@freeradius ~]# yum install -y shellinabox
Deabruaren konfigurazio fitxategia helbidean dago /etc/sysconfig/shellinabox.
443 ataka zehazten dut bertan eta zure ziurtagiria zehaztu dezakezu.
[root@freeradius ~]#systemctl enable --now shellinaboxd
Erabiltzaileak esteka jarraitu behar du, domeinu-kredituak sartu eta aplikaziorako QR kodea jaso behar du.
Algoritmoa hau da:
- Erabiltzailea nabigatzaile baten bidez hasten da makinan.
- Domeinuaren erabiltzailea egiaztatuta dagoen ala ez. Hala ez bada, ez da neurririk hartuko.
- Erabiltzailea domeinuko erabiltzailea bada, Administratzaileen taldeko kide izatea egiaztatuta dago.
- Administratzailea ez bada, Google Autheticator konfiguratuta dagoen egiaztatzen du. Hala ez bada, QR kode bat sortzen da eta erabiltzailea saioa amaitzen da.
- Administratzailea ez bada eta Google Authenticator konfiguratuta badago, amaitu saioa.
- Administratzailea bada, egiaztatu berriro Google Authenticator. Konfiguratuta ez badago, QR kode bat sortzen da.
Logika guztia erabiliz egiten da /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 konfigurazioa:
- Guk sortzen dugu Erradioa-zerbitzaria
- Beharrezko taldeak sortzen ditugu, sarbidea taldeka bereiztea beharrezkoa bada. Taldearen izena aktibatuta Sendotu pasatzen den taldearekin bat etorri behar da Saltzaile espezifikoa Fortinet-Talde-Izena.
- Beharrezkoa den editatzea SSL- portalak.
- Politiketan taldeak gehitzea.
Soluzio honen abantailak:
- Posible da OTP bidez autentifikatzea Sendotu kode irekiko irtenbidea.
- Erabiltzaileak ez du domeinu pasahitz bat sartu behar VPN bidez konektatzean, eta horrek zertxobait errazten du konexio prozesua. 6 digituko pasahitza errazago sartzen da segurtasun politikak ematen duena baino. Ondorioz, gaia duten txartel kopurua gutxitzen ari da: “Ezin dut VPNra konektatu”.
PS Soluzio hau erronka-erantzunarekin bi faktoreko autentifikazio oso batera berritzeko asmoa dugu.
Eguneratu:
Agindu bezala, erronka-erantzun aukerara egokitu nuen.
Beraz:
Fitxategian /etc/raddb/sites-enabled/default atala baimendu Honako hau da:
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
}
Atala autentifikatzeko orain honelakoa da:
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
}
Orain erabiltzaileen egiaztapena algoritmo honen arabera gertatzen da:
- Erabiltzaileak domeinu-kredituak sartzen ditu VPN bezeroan.
- Freeradius-ek kontuaren eta pasahitzaren baliozkotasuna egiaztatzen du
- Pasahitza zuzena bada, token eskaera bat bidaliko da.
- Tokena egiaztatzen ari da.
- Mozkina).
Iturria: www.habr.com