Freeradius + Google Authenticator + LDAP + Fortigate

Dè ma tha dearbhadh dà-fhactaraidh an dà chuid ion-mhiannaichte agus dòrainneach, ach chan eil airgead ann airson comharran bathar-cruaidh agus san fharsaingeachd tha iad a’ tabhann fuireach ann an deagh shunnd.

Chan eil am fuasgladh seo rudeigin fìor thùsail, ach measgachadh de dhiofar fhuasglaidhean a lorgar air an eadar-lìn.

Mar sin air a thoirt seachad

Ainm Domain Active Directory.

Luchd-cleachdaidh fearainn ag obair tro VPN, mar a tha mòran an-diugh.

Ag obair mar gheata VPN Daingnich.

Tha sàbhaladh am facal-faire airson neach-dèiligidh VPN air a thoirmeasg le poileasaidh tèarainteachd.

Poilitigs Fortinet a thaobh na comharran agad fhèin, chan urrainn dhut nas lugha na zhlob a ghairm - tha uimhir ri 10 comharran an-asgaidh, an còrr - aig prìs gu math neo-kosher. Cha do bheachdaich mi air RSASecureID, Duo agus an leithid, oir tha mi ag iarraidh stòr fosgailte.

Ro-ghoireasan: aoigheachd * nix le stèidhichte saor-radius, ssd - a-steach don àrainn, faodaidh luchd-cleachdaidh fearainn dearbhadh gu furasta air.

Pacaidean a bharrachd: bogsa sligean, figead, freeradius-ldap, cruth-clò reubaltach.tlf bhon stòr https://github.com/xero/figlet-fonts.

Anns an eisimpleir agam - CentOS 7.8.

Tha còir aig loidsig na h-obrach a bhith mar a leanas: nuair a cheanglas e ri VPN, feumaidh an neach-cleachdaidh logadh a-steach fearainn agus OTP a chuir a-steach an àite facal-faire.

Suidheachadh seirbheisean

В /etc/raddb/radiusd.conf chan eil ach an neach-cleachdaidh agus a’ bhuidheann às a leth a’ tòiseachadh saor-radius, bhon t-seirbheis radiusd bu chòir dha a bhith comasach air faidhlichean a leughadh anns a h-uile fo-eòlaire / dachaigh /.

user = root
group = root

Airson a bhith comasach air buidhnean a chleachdadh ann an roghainnean Daingnich, feumar a thar-chuir Feartan sònraichte an neach-reic. Gus seo a dhèanamh, anns an eòlaire radb/policy.d Bidh mi a’ cruthachadh faidhle leis an t-susbaint a leanas:

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
        }
}

An dèidh an stàladh freeradius-ldap anns an eòlaire raddb/mods-ri fhaighinn faidhle air a chruthachadh ldap.

Feum air ceangal samhlachail a chruthachadh ris an eòlaire raddb/mods-comas.

ln -s /etc/raddb/mods-available/ldap /etc/raddb/mods-enabled/ldap

Bheir mi a shusbaint chun fhoirm seo:

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'
        }
}

Ann am faidhlichean raddb/làraich-comas/bunaiteach и raddb/làraich-comas/tunail a-staigh ann an earrann ùghdarrachadh Cuiridh mi ainm a’ phoileasaidh a tha ri chleachdadh - group_authorization. Puing chudromach - chan eil ainm a 'phoileasaidh air a dhearbhadh le ainm an fhaidhle san eòlaire poileasaidh.d, ach le stiùireadh taobh a-staigh an fhaidhle mus tig na cromagan lùbach.
Anns an earrainn ceartachadh anns na h-aon fhaidhlichean feumaidh tu an loidhne a thoirt às Pam.

Ann am faidhle luchd-dèiligidh.conf òrdaich na crìochan leis am bi e ceangailte Daingnich:

client fortigate {
    ipaddr = 192.168.1.200
    secret = testing123
    require_message_authenticator = no
    nas_type = other
}

Rèiteachadh modal 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

Roghainnean buileachaidh pasgan bunaiteach saor-radius с dearbhadair google iarraidh air an neach-cleachdaidh teisteanasan a chuir a-steach san fhòrmat: ainm-cleachdaidh/facal-faire+OTP.

Le bhith a 'smaoineachadh air an àireamh de mhallachdan a bhios a' tuiteam air a 'cheann, ann an cùis a bhith a' cleachdadh a 'bhundle bunaiteach saor-radius с Google Authenticator, chaidh co-dhùnadh an rèiteachadh modal a chleachdadh Pam gus nach tèid ach an tòcan a sgrùdadh Google Authenticator.

Nuair a bhios neach-cleachdaidh a 'ceangal, bidh na leanas a' tachairt:

  • Bidh Freeradius a’ sgrùdadh a bheil an neach-cleachdaidh san raon agus ann am buidheann sònraichte agus, ma bhios e soirbheachail, thoir sùil air an tòcan OTP.

Bha a h-uile dad a’ coimhead math gu leòr gus an àm a smaoinich mi “Ciamar as urrainn dhomh OTP a chlàradh airson 300+ neach-cleachdaidh?”

Feumaidh an neach-cleachdaidh logadh a-steach don fhrithealaiche le saor-radius agus bho bhith fon chunntas agad agus ruith an tagradh Dearbhadair Google, a ghineas còd QR airson an tagradh airson an neach-cleachdaidh. Seo far a bheil cuideachadh a’ tighinn a-steach. bogsa sligean ann an co-bhonn ri .bash_profile.

[root@freeradius ~]# yum install -y shellinabox

Tha am faidhle rèiteachaidh daemon suidhichte aig /etc/sysconfig/shellinabox.
Bidh mi a 'sònrachadh port 443 an sin agus faodaidh tu an teisteanas agad a shònrachadh.

[root@freeradius ~]#systemctl enable --now shellinaboxd

Chan fheum an neach-cleachdaidh ach an ceangal a leantainn, cuir a-steach creideasan fearainn agus faigh còd QR airson an tagraidh.

Tha an algorithm mar a leanas:

  • Bidh an neach-cleachdaidh a’ logadh a-steach don inneal tro bhrobhsair.
  • Co-dhiù an tèid cleachdaiche an àrainn a sgrùdadh. Mura h-eil, chan eil gnìomh sam bith air a dhèanamh.
  • Ma tha an neach-cleachdaidh na neach-cleachdaidh fearainn, thèid ballrachd sa bhuidheann Rianairean a sgrùdadh.
  • Mura h-e rianaire a th’ ann, nì e sgrùdadh a bheil Google Authenticator air a rèiteachadh. Mura h-eil, an uairsin thèid còd QR agus logadh a-mach neach-cleachdaidh a chruthachadh.
  • Mura h-eil rianaire agus Google Authenticator air an rèiteachadh, dìreach dèan logadh a-mach.
  • Ma tha thu nad rianaire, thoir sùil air Google Authenticator a-rithist. Mura h-eil e air a rèiteachadh, thèid còd QR a chruthachadh.

Tha a h-uile loidsig air a dhèanamh a 'cleachdadh /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

Cuir stad air suidheachadh:

  • Bidh sinn a 'cruthachadh radius-fhrithealaiche

    Freeradius + Google Authenticator + LDAP + Fortigate

  • Bidh sinn a 'cruthachadh na buidhnean riatanach, ma tha sin riatanach, smachd ruigsinneachd le buidhnean. Ainm na buidhne air adhart Daingnich feumaidh iad a bhith co-ionnan ris a' bhuidheann a chaidh a-steach Feartan sònraichte an neach-reic Fortinet-Ainm-buidhne.

    Freeradius + Google Authenticator + LDAP + Fortigate

  • A 'deasachadh na tha riatanach SSL- portals.

    Freeradius + Google Authenticator + LDAP + Fortigate

  • A' cur buidhnean ri poileasaidhean.

    Freeradius + Google Authenticator + LDAP + Fortigate

Buannachdan an fhuasglaidh seo:

  • Tha e comasach dearbhadh le OTP air Daingnich fuasgladh stòr fosgailte.
  • Cha chuir an neach-cleachdaidh a-steach facal-faire fearainn nuair a bhios e a’ ceangal tro VPN, a nì beagan sìmpleachadh air a’ phròiseas ceangail. Tha e nas fhasa am facal-faire 6-fhigearach a chuir a-steach na am fear a thug am poileasaidh tèarainteachd seachad. Mar thoradh air an sin, tha an àireamh de thiogaidean leis a’ chuspair: “Chan urrainn dhomh ceangal ris an VPN” a’ dol sìos.

PS Tha sinn an dùil am fuasgladh seo ùrachadh gu dearbhadh dà-fhactaraidh làn-chuimseach le freagairt-dùbhlain.

update:

Mar a chaidh a ghealltainn, chuir mi a-steach e don roghainn freagairt dùbhlan.
Mar sin:
Ann am faidhle /etc/raddb/sites-enabled/default earrann ùghdarrachadh coltas mar seo:

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
}

Earrann ceartachadh a-nis tha e coltach ri seo:

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
}

A-nis tha dearbhadh cleachdaiche a’ tachairt a rèir an algairim a leanas:

  • Bidh an neach-cleachdaidh a’ dol a-steach do chreideasan fearainn anns a’ chleachdaiche VPN.
  • Bidh Freeradius a’ sgrùdadh dligheachd a’ chunntais agus am facal-faire
  • Ma tha am facal-faire ceart, thèid iarrtas airson tòcan a chuir.
  • Thathas a’ dearbhadh an tòcan.
  • prothaid).

Source: www.habr.com

Cuir beachd ann