Freeradius + Google Authenticator + LDAP + Fortigate

Beth os yw dilysu dau-ffactor yn ddymunol ac yn bigog, ond nad oes arian ar gyfer tocynnau caledwedd ac yn gyffredinol maent yn cynnig aros mewn hwyliau da.

Nid yw'r ateb hwn yn rhywbeth hynod wreiddiol, ond yn hytrach yn gymysgedd o wahanol atebion a geir ar y Rhyngrwyd.

Felly rhoddwyd

Enw Parth Active Directory.

Defnyddwyr parth sy'n gweithio trwy VPN, fel llawer heddiw.

Yn gweithredu fel porth VPN Atgyfnerthu.

Mae polisi diogelwch yn gwahardd arbed cyfrinair ar gyfer y cleient VPN.

Gwleidyddiaeth Fortinet o ran eich tocynnau eich hun, ni allwch ei alw'n llai na zhlob - mae cymaint â 10 tocyn rhad ac am ddim, y gweddill - am bris an-kosher iawn. Wnes i ddim ystyried RSASecureID, Duo ac yn y blaen, oherwydd rydw i eisiau ffynhonnell agored.

Rhagofynion: gwesteiwr * nix gyda'r sefydledig rhyddradiws, ssd - wedi'i osod yn y parth, gall defnyddwyr parth ddilysu arno'n hawdd.

Pecynnau ychwanegol: blwch shellina, ffiglet, rhyddradiws-ldap, ffont gwrthryfel.tlf o'r ystorfa https://github.com/xero/figlet-fonts.

Yn fy enghraifft i - CentOS 7.8.

Mae rhesymeg y gwaith i fod fel a ganlyn: wrth gysylltu â VPN, rhaid i'r defnyddiwr nodi mewngofnodi parth ac OTP yn lle cyfrinair.

Gosod gwasanaethau

В /etc/raddb/radiusd.conf dim ond y defnyddiwr a'r grŵp sy'n cychwyn ar ei ran rhyddradiws, ers y gwasanaeth radiws Dylai fod yn gallu darllen ffeiliau ym mhob is-gyfeiriadur / cartref /.

user = root
group = root

Er mwyn gallu defnyddio grwpiau mewn gosodiadau Atgyfnerthu, angen eu trosglwyddo Priodoledd Penodol y Gwerthwr. I wneud hyn, yn y cyfeiriadur raddb/polisi.d Rwy'n creu ffeil gyda'r cynnwys canlynol:

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

Ar ôl ei osod rhyddradiws-ldap yn y cyfeiriadur raddb/mods-ar gael ffeil yn cael ei greu ldap.

Mae angen i chi greu dolen symbolaidd i'r cyfeiriadur raddb/mods-alluogi.

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

Cyflwynaf ei gynnwys fel a ganlyn:

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

Mewn ffeiliau gradd/galluogi safleoedd/diofyn и raddb/safleoedd-galluogi/twnnel-mewnol yn adran awdurdodi Rwy'n ychwanegu enw'r polisi i'w ddefnyddio - group_authorization. Pwynt pwysig - nid yw enw'r polisi yn cael ei bennu gan enw'r ffeil yn y cyfeiriadur polisi.d, ond gan gyfarwyddeb y tu mewn i'r ffeil cyn y braces cyrliog.
Yn yr adran dilysu yn yr un ffeiliau mae angen i chi ddadwneud y llinell pam.

Mewn ffeil cleientiaid.conf nodi'r paramedrau i gysylltu â nhw Atgyfnerthu:

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

Cyfluniad modiwl 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

Opsiynau gweithredu bwndel rhagosodedig rhyddradiws с dilyswr google gofyn i'r defnyddiwr nodi tystlythyrau yn y fformat: enw defnyddiwr/cyfrinair+OTP.

Trwy ddychmygu nifer y melltithion a fydd yn disgyn ar y pen, yn achos defnyddio'r bwndel rhagosodedig rhyddradiws с Dilysydd Google, penderfynwyd defnyddio cyfluniad y modiwl pam fel mai dim ond y tocyn y gellir ei wirio Dilysydd Google.

Pan fydd defnyddiwr yn cysylltu, mae'r canlynol yn digwydd:

  • Mae Freeradius yn gwirio a yw'r defnyddiwr yn y parth ac mewn grŵp penodol ac, os yw'n llwyddiannus, yn gwirio'r tocyn OTP.

Roedd popeth yn edrych yn ddigon da tan yr eiliad pan feddyliais “Sut alla i gofrestru OTP ar gyfer 300+ o ddefnyddwyr?”

Rhaid i'r defnyddiwr fewngofnodi i'r gweinydd gyda rhyddradiws ac o dan eich cyfrif a rhedeg y cais Dilyswr Google, a fydd yn cynhyrchu cod QR ar gyfer y cais ar gyfer y defnyddiwr. Dyma lle mae cymorth yn dod i mewn. blwch shellina mewn cyfuniad â .bash_proffil.

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

Mae ffeil ffurfweddu'r daemon wedi'i lleoli yn /etc/sysconfig/shellinabox.
Rwy'n nodi porthladd 443 yno a gallwch chi nodi'ch tystysgrif.

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

Nid oes ond angen i'r defnyddiwr ddilyn y ddolen, nodi credydau parth a derbyn cod QR ar gyfer y cais.

Mae'r algorithm fel a ganlyn:

  • Mae'r defnyddiwr yn mewngofnodi i'r peiriant trwy borwr.
  • Mae p'un a yw'r defnyddiwr yn ddefnyddiwr parth yn cael ei wirio. Os na, yna ni chymerir unrhyw gamau.
  • Os yw'r defnyddiwr yn ddefnyddiwr parth, mae aelodaeth yn y grŵp Gweinyddwyr yn cael ei wirio.
  • Os nad yw'n weinyddwr, mae'n gwirio a yw Google Autheticator wedi'i ffurfweddu. Os na, yna mae cod QR yn cael ei gynhyrchu ac mae'r defnyddiwr yn allgofnodi.
  • Os nad yw gweinyddwr a Google Authenticator wedi'i ffurfweddu, yna dim ond allgofnodi.
  • Os yw'n weinyddwr, yna gwiriwch Google Authenticator eto. Os na chaiff ei ffurfweddu, cynhyrchir cod QR.

Mae'r holl resymeg yn cael ei wneud gan ddefnyddio /etc/skel/.bash_profile.

cath /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

Atal gosodiad:

  • Rydym yn creu radiws-gweinydd

    Freeradius + Google Authenticator + LDAP + Fortigate

  • Rydym yn creu'r grwpiau angenrheidiol, os oes angen gwahaniaethu mynediad fesul grŵp. Enw'r grŵp ymlaen Atgyfnerthu rhaid iddo gyfateb i'r grŵp sy'n cael ei basio i mewn Priodoledd Penodol y Gwerthwr Fortinet-Enw Grŵp.

    Freeradius + Google Authenticator + LDAP + Fortigate

  • Golygu'r angenrheidiol SSL-pyrth.

    Freeradius + Google Authenticator + LDAP + Fortigate

  • Ychwanegu grwpiau at bolisïau.

    Freeradius + Google Authenticator + LDAP + Fortigate

Manteision yr ateb hwn:

  • Mae'n bosibl dilysu trwy OTP ymlaen Atgyfnerthu datrysiad ffynhonnell agored.
  • Nid yw'r defnyddiwr yn nodi cyfrinair parth wrth gysylltu trwy VPN, sy'n symleiddio'r broses gysylltu i raddau. Mae'r cyfrinair 6 digid yn haws i'w nodi na'r un a ddarperir gan y polisi diogelwch. O ganlyniad, mae nifer y tocynnau gyda'r pwnc: “Ni allaf gysylltu â'r VPN” yn lleihau.

PS Rydym yn bwriadu uwchraddio'r datrysiad hwn i ddilysiad dau ffactor llawn gydag ymateb her.

Diweddaru:

Fel yr addawyd, fe wnes i ei addasu i'r opsiwn her-ymateb.
Felly:
Mewn ffeil /etc/raddb/sites-enabled/diofyn adran awdurdodi fel a ganlyn:

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
}

Adran dilysu nawr yn edrych fel hyn:

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
}

Nawr mae dilysiad defnyddiwr yn digwydd yn ôl yr algorithm canlynol:

  • Mae'r defnyddiwr yn nodi tystlythyrau parth yn y cleient VPN.
  • Mae Freeradius yn gwirio dilysrwydd cyfrif a chyfrinair
  • Os yw'r cyfrinair yn gywir, yna anfonir cais am docyn.
  • Mae'r tocyn yn cael ei wirio.
  • elw).

Ffynhonnell: hab.com

Ychwanegu sylw