Freeradius + Google Authenticator + LDAP + Fortigate

Чӣ мешавад, агар аутентификатсияи ду-омил ҳам матлуб ва ҳам ҷолиб бошад, аммо барои токенҳои сахтафзор пул нест ва дар маҷмӯъ онҳо пешниҳод мекунанд, ки дар рӯҳияи хуб бимонанд.

Ин ҳалли як чизи олиҷаноб нест, балки омехтаи қарорҳои гуногун дар Интернет аст.

Ҳамин тавр дода шудааст

Номи домени Рӯйхати фаъол.

Истифодабарандагони доменҳо тавассути VPN кор мекунанд, мисли бисёре аз имрӯз.

Ҳамчун дарвозаи VPN амал мекунад Фигат.

Нигоҳ доштани парол барои муштарии VPN тибқи сиёсати амният манъ аст.

Сиёсат Fortinet дар робита ба аломатҳои шахсии худ, шумо наметавонед онро камтар аз zhlob номид - то 10 токенҳои ройгон мавҷуданд, боқимонда - бо нархи хеле ғайрикошер. Ман RSASecureID, Duo ва монанди инҳоро баррасӣ накардаам, зеро ман манбаи кушода мехоҳам.

Талабот: мизбон * nix бо насбшуда радиуси озод, ssd - ба домен ворид шуда, корбарони домен метавонанд ба осонӣ дар он аутентификатсия кунанд.

Бастаҳои иловагӣ: қуттии шеллин, фиглет, озод-лдап, шрифт rebel.tlf аз анбор https://github.com/xero/figlet-fonts.

Дар мисоли ман - CentOS 7.8.

Мантиқи кор бояд чунин бошад: ҳангоми пайвастшавӣ ба VPN корбар бояд ба ҷои парол логини домен ва OTP ворид кунад.

Танзими хидматҳо

В /etc/raddb/radiusd.conf танҳо корбар ва гурӯҳе, ки аз номи онҳо оғоз мешавад радиуси озод, аз замони хидмат радиусд бояд файлҳоро дар ҳама зеркаталогҳо хонда тавонанд / хона /.

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-enabled/default и raddb / сайтҳо фаъол / нақби дохилӣ дар бахш иҷозат диҳед Ман номи сиёсатеро, ки истифода мешавад, илова мекунам - group_authorization. Як нуктаи муҳим - номи сиёсат бо номи файл дар директория муайян карда намешавад сиёсат.д, балки аз рӯи дастуре дар дохили файл пеш аз қавсҳои ҷингила.
Дар бахш аслӣ дар ҳамон файлҳо ба шумо лозим аст, ки сатрро шарҳ диҳед PAM.

Дар файл 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

Вариантҳои татбиқи бастаи пешфарз радиуси озод с аутентифики гугл аз корбар талаб кардани маълумоти эътимоднома дар формати: номи корбар / парол+БРСММ.

Бо тасаввур кардани шумораи лаънатҳое, ки ба сари онҳо хоҳанд афтод, дар сурати истифодаи бастаи пешфарз радиуси озод с Authenticator Google, қарор дода шуд, ки конфигуратсияи модул истифода шавад PAM то ки танҳо нишона санҷида шавад Authenticator Google.

Вақте ки корбар пайваст мешавад, инҳо рӯй медиҳанд:

  • Freeradius месанҷад, ки оё корбар дар домен ва дар гурӯҳи муайян қарор дорад ва агар муваффақ бошад, аломати OTP -ро месанҷад.

То он даме, ки ман фикр мекардам, ки "Чӣ гуна метавонам OTP-ро барои 300+ корбар сабти ном кунам?" Ҳама чиз ба қадри кофӣ хуб менамуд.

Истифодабаранда бояд бо сервер ворид шавад радиуси озод ва аз зери ҳисоби худ ва барномаро иҷро кунед Google Authenticator, ки рамзи QR-ро барои барнома барои корбар тавлид мекунад. Ин аст, ки кӯмак дар ин ҷо меояд. қуттии шеллин дар якҷоягӣ бо .bash_profile.

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

Файли конфигуратсияи демон дар /etc/sysconfig/shellinabox.
Ман дар он ҷо порти 443-ро муайян мекунам ва шумо метавонед сертификати худро муайян кунед.

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

Истифодабаранда танҳо бояд истинодро пайгирӣ кунад, кредитҳои домениро ворид кунад ва рамзи QR-ро барои барнома қабул кунад.

Алгоритм чунин аст:

  • Корбар тавассути браузер ба мошин ворид мешавад.
  • Оё корбари домен тафтиш карда мешавад. Агар не, пас чорае дида намешавад.
  • Агар корбар корбари домен бошад, узвият дар гурӯҳи Administrators тафтиш карда мешавад.
  • Агар администратор набошад, он тафтиш мекунад, ки оё 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:

  • Мо эҷод мекунем радиус-сервер

    Freeradius + Google Authenticator + LDAP + Fortigate

  • Мо гурӯҳҳои заруриро эҷод мекунем, агар лозим бошад, назорати дастрасӣ аз ҷониби гурӯҳҳо. Номи гурӯҳ Фигат бояд ба гурӯҳе, ки ба он дохил мешавад, мувофиқат кунад Хусусияти мушаххаси фурӯшанда Fortinet-Группа-Номи.

    Freeradius + Google Authenticator + LDAP + Fortigate

  • Таҳрири зарурӣ SSL-порталҳо.

    Freeradius + Google Authenticator + LDAP + Fortigate

  • Илова кардани гурӯҳҳо ба сиёсатҳо.

    Freeradius + Google Authenticator + LDAP + Fortigate

Афзалиятҳои ин ҳалли:

  • Ин мумкин аст, ки ба аутентификатсия тавассути 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 дурустии ҳисоб ва паролро тафтиш мекунад
  • Агар парол дуруст бошад, пас дархост барои нишона фиристода мешавад.
  • Токен тасдиқ карда мешавад.
  • фоида).

Манбаъ: will.com

Илова Эзоҳ