Freeradius + Google Autheticator + LDAP + Fortigate

Π¨Ρ‚ΠΎ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Π°ΠΊΠΎ сакатС Π΄Π²ΠΎΡ„Π°ΠΊΡ‚ΠΎΡ€Π½Π° Π°Π²Ρ‚Π΅Π½Ρ‚ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° ΠΈ сС Π΄Π²ΠΎΡƒΠΌΠΈΡ‚Π΅, Π½ΠΎ Π½Π΅ΠΌΠ° ΠΏΠ°Ρ€ΠΈ Π·Π° хардвСрски Ρ‚ΠΎΠΊΠ΅Π½ΠΈ ΠΈ Π²ΠΎΠΎΠΏΡˆΡ‚ΠΎ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π°Ρ‚ Π΄Π° сС Π·Π°Π΄Ρ€ΠΆΠΈΡ‚Π΅ Π½Π° Π΄ΠΎΠ±Ρ€ΠΎΡ‚ΠΎ располоТСниС.

Ова Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π΅ Π΅ Π½Π΅ΡˆΡ‚ΠΎ супСр ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π½ΠΎ, Ρ‚ΡƒΠΊΡƒ мСшавина ΠΎΠ΄ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ˜Π° ΠΊΠΎΠΈ сС Π½Π°ΠΎΡ“Π°Π°Ρ‚ Π½Π° Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚.

Π—Π½Π°Ρ‡ΠΈ Ρ‚ΠΎΠ° Π΅ Π΄Π°Π΄Π΅Π½ΠΎ

ИмС на домСн Active Directory.

ΠšΠΎΡ€ΠΈΡΠ½ΠΈΡ†ΠΈ Π½Π° Π΄ΠΎΠΌΠ΅Π½ΠΈ ΠΊΠΎΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ ΠΏΡ€Π΅ΠΊΡƒ VPN, ΠΊΠ°ΠΊΠΎ ΠΈ ΠΌΠ½ΠΎΠ³ΡƒΠΌΠΈΠ½Π° дСнСс.

VPN Π΄Π΅Π»ΡƒΠ²Π° ΠΊΠ°ΠΊΠΎ ΠΏΠΎΡ€Ρ‚Π° Π’Π²Ρ€Π΄ΠΈ.

Π—Π°Ρ‡ΡƒΠ²ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° Π»ΠΎΠ·ΠΈΠ½ΠΊΠ°Ρ‚Π° Π·Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΡ‚ VPN Π΅ Π·Π°Π±Ρ€Π°Π½Π΅Ρ‚ΠΎ со бСзбСдносната ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°.

ΠŸΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° Fortinet Π²ΠΎ однос Π½Π° сопствСнитС Ρ‚ΠΎΠΊΠ΅Π½ΠΈ, Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΎ Π½Π°Ρ€Π΅Ρ‡Π΅Ρ‚Π΅ ΠΏΠΎΠΌΠ°Π»ΠΊΡƒ ΠΎΠ΄ redneck - ΠΈΠΌΠ° Π΄ΡƒΡ€ΠΈ 10 Π΅Π΄ΠΈΠ½ΠΈΡ†ΠΈ бСсплатни Ρ‚ΠΎΠΊΠ΅Π½ΠΈ, останатитС сС ΠΏΠΎ ΠΌΠ½ΠΎΠ³Ρƒ Π½Π΅ΠΊΠΎΡˆΠ΅Ρ€ Ρ†Π΅Π½Π°. НС Π³ΠΈ Π·Π΅ΠΌΠ°Π² ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ RSASecureID, Duo ΠΈ слично, Π·Π°Ρ‚ΠΎΠ° ΡˆΡ‚ΠΎ сакам ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄.

ΠŸΡ€Π΅Π΄ΡƒΡΠ»ΠΎΠ²ΠΈ: домаќин * nix со инсталиран слободСн радиус, ssd β€” внСсСн Π²ΠΎ Π΄ΠΎΠΌΠ΅Π½ΠΎΡ‚, корисницитС Π½Π° Π΄ΠΎΠΌΠ΅Π½ΠΎΡ‚ ΠΌΠΎΠΆΠ°Ρ‚ лСсно Π΄Π° сС Π°Π²Ρ‚Π΅Π½Ρ‚ΠΈΡ†ΠΈΡ€Π°Π°Ρ‚ Π½Π° Π½Π΅Π³ΠΎ.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ: шСлинабокс, Ρ„ΠΈΠ»Π΅Ρ‚Π°, слободСн радиус-Π»Π΄Π°ΠΏ, Ρ„ΠΎΠ½Ρ‚ Π±ΡƒΠ½Ρ‚ΠΎΠ²Π½ΠΈΠΊ.tlf ΠΎΠ΄ ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π΅Ρ‚ΠΎ https://github.com/xero/figlet-fonts.

Π’ΠΎ ΠΌΠΎΡ˜ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, CentOS 7.8.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Π°Ρ‚Π° Π»ΠΎΠ³ΠΈΠΊΠ° Π΅ слСдна: ΠΏΡ€ΠΈ ΠΏΠΎΠ²Ρ€Π·ΡƒΠ²Π°ΡšΠ΅ со VPN, корисникот ΠΌΠΎΡ€Π° Π΄Π° внСсС најава Π·Π° Π΄ΠΎΠΌΠ΅Π½ ΠΈ OTP намСсто Π»ΠΎΠ·ΠΈΠ½ΠΊΠ°.

ΠŸΠΎΡΡ‚Π°Π²ΡƒΠ²Π°ΡšΠ΅ услуги

Π’ /etc/raddb/radiusd.conf сС ΠΌΠ΅Π½ΡƒΠ²Π° само корисникот ΠΈ Π³Ρ€ΡƒΠΏΠ°Ρ‚Π° ΠΏΠΎΠ΄ Ρ‡ΠΈΠ΅ ΠΈΠΌΠ΅ Π·Π°ΠΏΠΎΡ‡Π½ΡƒΠ²Π° слободСн радиус, ΠΎΠ΄ услугата радиусд ΠΌΠΎΡ€Π° Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Ρ‡ΠΈΡ‚Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ Π²ΠΎ ситС ΠΏΠΎΠ΄Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΈ / home /.

user = root
group = root

Π—Π° Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° користитС Π³Ρ€ΡƒΠΏΠΈ Π²ΠΎ поставкитС Π’Π²Ρ€Π΄ΠΈ, Ρ‚Ρ€Π΅Π±Π° Π΄Π° сС прСнСсат Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΡ‡Π΅Π½ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ Π½Π° ΠΏΡ€ΠΎΠ΄Π°Π²Π°Ρ‡ΠΎΡ‚. Π—Π° Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΠΎΠ²Π° Π²ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΎΡ‚ raddb/ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°.Π³ Јас ΠΊΡ€Π΅ΠΈΡ€Π°ΠΌ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° со слСднава содрТина:

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-достапно Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° Π΅ ΠΊΡ€Π΅ΠΈΡ€Π°Π½Π° ldap.

Π’Ρ€Π΅Π±Π° Π΄Π° ΠΊΡ€Π΅ΠΈΡ€Π°Ρ‚Π΅ симболична врска Π΄ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΎΡ‚ 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/sites-enabled/inner-tunnel Π²ΠΎ Π΄Π΅Π»ΠΎΡ‚ овласти Π“ΠΎ Π΄ΠΎΠ΄Π°Π²Π°ΠΌ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°Ρ‚Π° ΡˆΡ‚ΠΎ ќС сС користи - group_authorization. Π’Π°ΠΆΠ½Π° Ρ‚ΠΎΡ‡ΠΊΠ° - ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°Ρ‚Π° Π½Π΅ сС ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡƒΠ²Π° со ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° Π²ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΎΡ‚ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°.Π³, Π½ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° Π²ΠΎ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° ΠΏΡ€Π΅Π΄ ΠΊΠ°Π΄Ρ€Π°Π²ΠΈΡ‚Π΅ Π·Π°Π³Ρ€Π°Π΄ΠΈ.
Π’ΠΎ Π΄Π΅Π»ΠΎΡ‚ Π°Π²Ρ‚Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎ Π²ΠΎ иститС Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ Ρ‚Ρ€Π΅Π±Π° Π΄Π° ја ΠΎΡ‚ΠΊΠΎΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Ρ‚Π΅ Π»ΠΈΠ½ΠΈΡ˜Π°Ρ‚Π° pam.

Π’ΠΎ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈ.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

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Π΄Π½ΠΈΡ‚Π΅ ΠΎΠΏΡ†ΠΈΠΈ Π·Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΡ‚ слободСн радиус с Google Π°Π²Ρ‚Π΅Π½Ρ‚ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π±Π°Ρ€Π° ΠΎΠ΄ корисникот Π΄Π° Π³ΠΈ внСсС ΠΈΠ½Π³Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈΡ‚Π΅ Π²ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚: корисничко ΠΈΠΌΠ΅ Π›ΠΎΠ·ΠΈΠ½ΠΊΠ°+ОВП.

ЗамислСтС ΠΊΠΎΠ»ΠΊΡƒ ΠΊΠ»Π΅Ρ‚Π²ΠΈ ќС Π²ΠΈ ΠΏΠ°Π΄Π½Π°Ρ‚ Π½Π° Π³Π»Π°Π²Π° Π°ΠΊΠΎ ја користитС стандардната ΠΊΠΎΠΏΡƒΠ»Π° слободСн радиус с Google Authenticator, бСшС ΠΎΠ΄Π»ΡƒΡ‡Π΅Π½ΠΎ Π΄Π° сС користи ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΠΎΡ‚ pam Ρ‚Π°ΠΊΠ° ΡˆΡ‚ΠΎ сС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡƒΠ²Π° само Ρ‚ΠΎΠΊΠ΅Π½ΠΎΡ‚ Google Authenticator.

Кога корисникот сС ΠΏΠΎΠ²Ρ€Π·ΡƒΠ²Π°, сС случува слСдново:

  • Freeradius ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡƒΠ²Π° Π΄Π°Π»ΠΈ корисникот Π΅ Π²ΠΎ Π΄ΠΎΠΌΠ΅Π½ΠΎΡ‚ ΠΈ Π²ΠΎ ΠΎΠ΄Ρ€Π΅Π΄Π΅Π½Π° Π³Ρ€ΡƒΠΏΠ° ΠΈ, Π΄ΠΎΠΊΠΎΠ»ΠΊΡƒ Π΅ ΡƒΡΠΏΠ΅ΡˆΠ΅Π½, Π³ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡƒΠ²Π° OTP Ρ‚ΠΎΠΊΠ΅Π½ΠΎΡ‚.

Π‘Γ¨ изглСдашС доста ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π΄ΠΎΠ΄Π΅ΠΊΠ° Π½Π΅ помислив: β€žΠšΠ°ΠΊΠΎ ΠΌΠΎΠΆΠ°ΠΌ Π΄Π° рСгистрирам OTP Π·Π° 300+ корисници?

ΠšΠΎΡ€ΠΈΡΠ½ΠΈΠΊΠΎΡ‚ ΠΌΠΎΡ€Π° Π΄Π° сС најави Π½Π° сСрвСрот со слободСн радиус ΠΈ ΠΎΠ΄ Π²Π°ΡˆΠ°Ρ‚Π° смСтка ΠΈ ΡΡ‚Π°Ρ€Ρ‚ΡƒΠ²Π°Ρ˜Ρ‚Π΅ ја Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° АвтСнтикатор Π½Π° Google, кој ќС Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° QR ΠΊΠΎΠ΄ Π·Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π·Π° корисникот. Ова Π΅ мСстото ΠΊΠ°Π΄Π΅ ΡˆΡ‚ΠΎ Π΄ΠΎΠ°Ρ“Π° Π΄ΠΎ ΡΠΏΠ°ΡΡƒΠ²Π°ΡšΠ΅ шСлинабокс Π²ΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡ˜Π° со .bash_profile.

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

Π”Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° Π·Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° Π½Π° Π΄Π΅ΠΌΠΎΠ½ΠΎΡ‚ сС Π½Π°ΠΎΡ“Π° Π²ΠΎ /etc/sysconfig/shellinabox.
Π’Π°ΠΌΡƒ ја ΠΎΠ΄Ρ€Π΅Π΄ΡƒΠ²Π°ΠΌ ΠΏΠΎΡ€Ρ‚Π°Ρ‚Π° 443 ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΎ Π½Π°Π²Π΅Π΄Π΅Ρ‚Π΅ Π²Π°ΡˆΠΈΠΎΡ‚ сСртификат.

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

ΠšΠΎΡ€ΠΈΡΠ½ΠΈΠΊΠΎΡ‚ ΠΌΠΎΠΆΠ΅ само Π΄Π° ја слСди врската, Π΄Π° Π³ΠΈ внСсС ΠΈΠ½Π³Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈΡ‚Π΅ Π½Π° Π΄ΠΎΠΌΠ΅Π½ΠΎΡ‚ ΠΈ Π΄Π° Π΄ΠΎΠ±ΠΈΠ΅ QR ΠΊΠΎΠ΄ Π·Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π°.

Алгоритмот Π΅ ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ слСдува:

  • ΠšΠΎΡ€ΠΈΡΠ½ΠΈΠΊΠΎΡ‚ сС Π½Π°Ρ˜Π°Π²ΡƒΠ²Π° Π½Π° ΠΌΠ°ΡˆΠΈΠ½Π°Ρ‚Π° ΠΏΡ€Π΅ΠΊΡƒ прСлистувач.
  • Π‘Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡƒΠ²Π° Π΄Π°Π»ΠΈ корисникот Π΅ корисник Π½Π° Π΄ΠΎΠΌΠ΅Π½. Ако Π½Π΅, Ρ‚ΠΎΠ³Π°Ρˆ Π½Π΅ сС ΠΏΡ€Π΅Π·Π΅ΠΌΠ° Π½ΠΈΡˆΡ‚ΠΎ.
  • Ако корисникот Π΅ корисник Π½Π° Π΄ΠΎΠΌΠ΅Π½, сС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡƒΠ²Π° члСнството Π²ΠΎ администраторската Π³Ρ€ΡƒΠΏΠ°.
  • Ако Π½Π΅ Π΅ администратор, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡƒΠ²Π° Π΄Π°Π»ΠΈ Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½ Google Autheticator. Ако Π½Π΅, Ρ‚ΠΎΠ³Π°Ρˆ сС Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° QR-ΠΊΠΎΠ΄ ΠΈ корисникот сС ΠΎΠ΄Ρ˜Π°Π²ΡƒΠ²Π°.
  • Ако Π½Π΅ стС администратор ΠΈ Google Authenticator Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½, Ρ‚ΠΎΠ³Π°Ρˆ само ΠΎΠ΄Ρ˜Π°Π²Π΅Ρ‚Π΅ сС.
  • Ако Π΅ администратор, Ρ‚ΠΎΠ³Π°Ρˆ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Ρ‚Π΅ Π³ΠΎ Google Authenticator. Ако Π½Π΅ Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½, сС Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° QR-ΠΊΠΎΠ΄.

Π¦Π΅Π»Π°Ρ‚Π° Π»ΠΎΠ³ΠΈΠΊΠ° сС ΠΏΡ€Π°Π²ΠΈ со ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ /etc/skel/.bash_profile.

ΠΌΠ°Ρ‡ΠΊΠ° /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 Autheticator + LDAP + Fortigate

  • Π“ΠΈ создавамС ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈΡ‚Π΅ Π³Ρ€ΡƒΠΏΠΈ, Π΄ΠΎΠΊΠΎΠ»ΠΊΡƒ Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ Π΄Π° сС Ρ€Π°Π·Π»ΠΈΠΊΡƒΠ²Π° пристапот ΠΏΠΎ Π³Ρ€ΡƒΠΏΠ°. Π˜ΠΌΠ΅Ρ‚ΠΎ Π½Π° Π³Ρ€ΡƒΠΏΠ°Ρ‚Π° Π΅ Π²ΠΊΠ»ΡƒΡ‡Π΅Π½ΠΎ Π’Π²Ρ€Π΄ΠΈ ΠΌΠΎΡ€Π° Π΄Π° ΠΎΠ΄Π³ΠΎΠ²Π°Ρ€Π° Π½Π° Π³Ρ€ΡƒΠΏΠ°Ρ‚Π° Π²ΠΎ која Π΅ испратСна Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΡ‡Π΅Π½ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ Π½Π° ΠΏΡ€ΠΎΠ΄Π°Π²Π°Ρ‡ΠΎΡ‚ Π€ΠΎΡ€Ρ‚ΠΈΠ½Π΅Ρ‚-Π“Ρ€ΡƒΠΏΠ°-ИмС.

    Freeradius + Google Autheticator + LDAP + Fortigate

  • Π£Ρ€Π΅Π΄ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈΡ‚Π΅ SSL-ΠΏΠΎΡ€Ρ‚Π°Π»ΠΈ.

    Freeradius + Google Autheticator + LDAP + Fortigate

  • Π”ΠΎΠ΄Π°Π²Π°ΡšΠ΅ Π³Ρ€ΡƒΠΏΠΈ Π²ΠΎ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈΡ‚Π΅.

    Freeradius + Google Autheticator + LDAP + Fortigate

ΠŸΡ€Π΅Π΄Π½ΠΎΡΡ‚ΠΈΡ‚Π΅ Π½Π° ΠΎΠ²Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅:

  • МоТно Π΅ Π΄Π° сС Π°Π²Ρ‚Π΅Π½Ρ‚ΠΈΡ†ΠΈΡ€Π° ΠΏΡ€Π΅ΠΊΡƒ Π²ΠΊΠ»ΡƒΡ‡Π΅Π½ OTP Π’Π²Ρ€Π΄ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ со ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄.
  • ΠšΠΎΡ€ΠΈΡΠ½ΠΈΠΊΠΎΡ‚ Π½Π΅ ΠΌΠΎΡ€Π° Π΄Π° внСсува Π»ΠΎΠ·ΠΈΠ½ΠΊΠ° Π·Π° Π΄ΠΎΠΌΠ΅Π½ ΠΊΠΎΠ³Π° сС ΠΏΠΎΠ²Ρ€Π·ΡƒΠ²Π° ΠΏΡ€Π΅ΠΊΡƒ VPN, ΡˆΡ‚ΠΎ Π΄ΠΎΠ½Π΅ΠΊΠ°Π΄Π΅ Π³ΠΎ поСдноставува процСсот Π½Π° ΠΏΠΎΠ²Ρ€Π·ΡƒΠ²Π°ΡšΠ΅. Π›ΠΎΠ·ΠΈΠ½ΠΊΠ°Ρ‚Π° ΠΎΠ΄ 6 Ρ†ΠΈΡ„Ρ€ΠΈ Π΅ полСсна Π·Π° Π²Π½Π΅ΡΡƒΠ²Π°ΡšΠ΅ ΠΎΠ΄ ΠΎΠ½Π°Π° ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄Π΅Π½Π° со бСзбСдносната ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°. Како Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° Ρ‚ΠΎΠ°, Π±Ρ€ΠΎΡ˜ΠΎΡ‚ Π½Π° Π±ΠΈΠ»Π΅Ρ‚ΠΈ со Ρ‚Π΅ΠΌΠ°: β€žΠΠ΅ ΠΌΠΎΠΆΠ°ΠΌ Π΄Π° сС ΠΏΠΎΠ²Ρ€Π·Π°ΠΌ Π½Π° VPNβ€œ сС Π½Π°ΠΌΠ°Π»ΡƒΠ²Π°.

П.Π‘. ΠŸΠΎΡΡ‚ΠΎΡ˜Π°Ρ‚ ΠΏΠ»Π°Π½ΠΎΠ²ΠΈ Π·Π° Π½Π°Π΄Π³Ρ€Π°Π΄Π±Π° Π½Π° ΠΎΠ²Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π΄ΠΎ цСлосна Π΄Π²ΠΎΡ„Π°ΠΊΡ‚ΠΎΡ€Π½Π° Π°Π²Ρ‚Π΅Π½Ρ‚ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° со ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€ Π½Π° ΠΏΡ€Π΅Π΄ΠΈΠ·Π²ΠΈΠΊΠΎΡ‚.

АТуриратС:

Како ΡˆΡ‚ΠΎ Π²Π΅Ρ‚ΠΈΠ², ја Π½Π°Π΄Π³Ρ€Π°Π΄ΠΈΠ² Π½Π° ΠΎΠΏΡ†ΠΈΡ˜Π°Ρ‚Π° со ΠΏΡ€Π΅Π΄ΠΈΠ·Π²ΠΈΠΊ-ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€.
Π—Π½Π°Ρ‡ΠΈ:
Π’ΠΎ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° /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 ја ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡƒΠ²Π° валидноста ΠΈ Π»ΠΎΠ·ΠΈΠ½ΠΊΠ°Ρ‚Π° Π½Π° смСтката
  • Ако Π»ΠΎΠ·ΠΈΠ½ΠΊΠ°Ρ‚Π° Π΅ Ρ‚ΠΎΡ‡Π½Π°, Ρ‚ΠΎΠ³Π°Ρˆ сС ΠΈΡΠΏΡ€Π°ΡœΠ° Π±Π°Ρ€Π°ΡšΠ΅ Π·Π° Ρ‚ΠΎΠΊΠ΅Π½.
  • Π’ΠΎΠΊΠ΅Π½ΠΎΡ‚ сС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡƒΠ²Π°.
  • ΠŸΡ€ΠΎΡ„ΠΈΡ‚).

Π˜Π·Π²ΠΎΡ€: www.habr.com

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€