Freeradius + Google Autheticator + LDAP + Fortigate

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 https://github.com/xero/figlet-fonts.

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

    Freeradius + Google Autheticator + LDAP + Fortigate

  • 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.

    Freeradius + Google Autheticator + LDAP + Fortigate

  • Beharrezkoa den editatzea SSL- portalak.

    Freeradius + Google Autheticator + LDAP + Fortigate

  • Politiketan taldeak gehitzea.

    Freeradius + Google Autheticator + LDAP + Fortigate

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

Gehitu iruzkin berria