Freeradius + Google Authenticator + LDAP + Fortigate

αžαžΎαž˜αžΆαž“αž’αŸ’αžœαžΈαž€αžΎαžαž‘αžΎαž„αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž€αžΆαžšαž•αŸ’αž‘αŸ€αž„αž•αŸ’αž‘αžΆαžαŸ‹αž€αžαŸ’αžαžΆαž–αžΈαžšαž‚αžΊαž‚αž½αžšαž±αŸ’αž™αž…αž„αŸ‹αž”αžΆαž“ αž“αž·αž„αž…αŸ’αžšαž”αžΌαž€αž…αŸ’αžšαž”αž›αŸ‹ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αž·αž“αž˜αžΆαž“αž”αŸ’αžšαžΆαž€αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαžΌαžαžΉαž“αž•αŸ’αž“αŸ‚αž€αžšαžΉαž„ αž αžΎαž™αž‡αžΆαž‘αžΌαž‘αŸ…αž–αž½αž€αž‚αŸαž•αŸ’αžαž›αŸ‹αž‡αžΌαž“αžŠαžΎαž˜αŸ’αž”αžΈαžšαž€αŸ’αžŸαžΆαž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαž›αŸ’αž’αŸ”

αžŠαŸ†αžŽαŸ„αŸ‡β€‹αžŸαŸ’αžšαžΆαž™β€‹αž“αŸαŸ‡β€‹αž˜αž·αž“β€‹αž˜αŸ‚αž“β€‹αž‡αžΆβ€‹αž’αŸ’αžœαžΈβ€‹αžŠαŸ‚αž›β€‹αžŠαžΎαž˜β€‹αžαŸ’αž–αžŸαŸ‹β€‹αž“αŸ„αŸ‡β€‹αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚β€‹αž‡αžΆβ€‹αž€αžΆαžšβ€‹αž›αžΆαž™β€‹αž”αž‰αŸ’αž…αžΌαž›β€‹αž‚αŸ’αž“αžΆβ€‹αž“αŸƒβ€‹αžŠαŸ†αžŽαŸ„αŸ‡β€‹αžŸαŸ’αžšαžΆαž™β€‹αž•αŸ’αžŸαŸαž„αŸ—β€‹αžŠαŸ‚αž›β€‹αž˜αžΆαž“β€‹αž“αŸ…β€‹αž›αžΎβ€‹αž’αŸŠαžΈαž“αž’αžΊαžŽαž·αžαŸ”

αž•αŸ’αžαž›αŸ‹αž±αŸ’αž™αžŠαžΌαž…αŸ’αž“αŸαŸ‡

Π”ΠΎΠΌΠ΅Π½ Active Directory.

αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŠαŸ‚αž“αžŠαŸ‚αž›αž’αŸ’αžœαžΎαž€αžΆαžšαžαžΆαž˜αžšαž™αŸˆ VPN αžŠαžΌαž…αž‡αžΆαž˜αž“αž»αžŸαŸ’αžŸαž‡αžΆαž…αŸ’αžšαžΎαž“αžŸαž–αŸ’αžœαžαŸ’αž„αŸƒαž“αŸαŸ‡αŸ”

αžŠαžΎαžšαžαž½αž‡αžΆαž…αŸ’αžšαž€αž‘αŸ’αžœαžΆαžš VPN αž”αž“αŸ’αž‘αžΆαž™.

αž€αžΆαžšαžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž–αžΆαž€αŸ’αž™αžŸαž˜αŸ’αž„αžΆαžαŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž‰αŸ€αžœ VPN αžαŸ’αžšαžΌαžœαž”αžΆαž“αž αžΆαž˜αžƒαžΆαžαŸ‹αžŠαŸ„αž™αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–αŸ”

αž“αž™αŸ„αž”αžΆαž™ Fortinet αž‘αžΆαž€αŸ‹αž‘αž„αž‘αŸ…αž“αžΉαž„αžαžΌαžαžΉαž“αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ αž’αŸ’αž“αž€αž˜αž·αž“αž’αžΆαž…αž αŸ…αžœαžΆαžαž·αž…αž‡αžΆαž„ zhlob αž”αžΆαž“αž‘αŸ - αž˜αžΆαž“αž“αž·αž˜αž·αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαž₯αžαž‚αž·αžαžαŸ’αž›αŸƒαžšαž αžΌαžαžŠαž›αŸ‹ 10 αž“αŸ…αžŸαž›αŸ‹ - αž€αŸ’αž“αž»αž„αžαž˜αŸ’αž›αŸƒαžŠαŸ‚αž›αž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαž€αžΌαžŸαžΊαžšαŸ” αžαŸ’αž‰αž»αŸ†αž˜αž·αž“αž”αžΆαž“αž–αž·αž…αžΆαžšαžŽαžΆ RSASecureID, Duo αž“αž·αž„αž’αŸ’αžœαžΈαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž‘αŸ αž–αŸ’αžšαŸ„αŸ‡αžαŸ’αž‰αž»αŸ†αž…αž„αŸ‹αž”αžΆαž“αž”αŸ’αžšαž—αž–αž”αžΎαž€αž…αŸ†αž αŸ”

αžαž˜αŸ’αžšαžΌαžœαž€αžΆαžšαž‡αžΆαž˜αž»αž“αŸ– αž˜αŸ’αž…αžΆαžŸαŸ‹αž•αŸ’αž‘αŸ‡ * nix αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„ αžŸαŸαžšαžΈαžšαŸ‰αžΆαžŒαžΈαžŸ, ធេសធេសឌី - αž”αž‰αŸ’αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„ domain αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ domain αž’αžΆαž…αž•αŸ’αž‘αŸ€αž„αž•αŸ’αž‘αžΆαžαŸ‹αž”αžΆαž“αž™αŸ‰αžΆαž„αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž“αŸ…αž›αžΎαžœαžΆαŸ”

αž€αž‰αŸ’αž…αž”αŸ‹αž”αž“αŸ’αžαŸ‚αž˜αŸ– αž”αŸ’αžšαž’αž”αŸ‹αžŸαŸ‚αž›αž›αžΈαžŽαžΆ, αž•αŸ’αž›αŸ‚αž›αŸ’αžœαžΆ, αžŸαŸαžšαžΈαžšαŸ‰αžΆαžŒαžΈαžŸ-ldap, αž–αž»αž˜αŸ’αž–αž’αž€αŸ’αžŸαžš rebel.tlf αž–αžΈαžƒαŸ’αž›αžΆαŸ†αž„ https://github.com/xero/figlet-fonts.

αž“αŸ…αž€αŸ’αž“αž»αž„αž§αž‘αžΆαž αžšαžŽαŸαžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ† - CentOS 7.8 αŸ”

αžαž€αŸ’αž€αžœαž·αž‡αŸ’αž‡αžΆαž“αŸƒαž€αžΆαžšαž„αžΆαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαžŸαž“αŸ’αž˜αžαŸ‹αžαžΆαž˜αžΆαž“αžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜: αž“αŸ…αž–αŸαž›αž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ… VPN αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžαŸ’αžšαžΌαžœαžαŸ‚αž”αž‰αŸ’αž…αžΌαž›αž€αžΆαžšαž…αžΌαž›αžŠαŸ‚αž“αž“αž·αž„ OTP αž‡αŸ†αž“αž½αžŸαž±αŸ’αž™αž–αžΆαž€αŸ’αž™αžŸαž˜αŸ’αž„αžΆαžαŸ‹αŸ”

αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜

Π’ /etc/raddb/radiusd.conf αž˜αžΆαž“αžαŸ‚αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ αž“αž·αž„αž€αŸ’αžšαž»αž˜αž€αŸ’αž“αž»αž„αž“αžΆαž˜αžŠαŸ‚αž›αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜ αžŸαŸαžšαžΈαžšαŸ‰αžΆαžŒαžΈαžŸαž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαžŸαŸαžœαžΆαž€αž˜αŸ’αž˜ αž€αžΆαŸ† αž‚αž½αžšαžαŸ‚αž’αžΆαž…αž’αžΆαž“αž―αž€αžŸαžΆαžšαž“αŸ…αž€αŸ’αž“αž»αž„αžαžαžšαž„αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ” / home /.

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

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαžŠαŸ†αž‘αžΎαž„αžšαž½αž… αžŸαŸαžšαžΈαžšαŸ‰αžΆαžŒαžΈαžŸ-ldap αž“αŸ…αž€αŸ’αž“αž»αž„αžαž 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/sites-enabled/inner-tunnel αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€ αž•αŸ’αžαž›αŸ‹αžŸαž·αž‘αŸ’αž’αž· αžαŸ’αž‰αž»αŸ†αž”αž“αŸ’αžαŸ‚αž˜αžˆαŸ’αž˜αŸ„αŸ‡αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αŸ’αžšαžΎ - group_authorization αŸ” αž…αŸ†αžŽαž»αž…αžŸαŸ†αžαžΆαž“αŸ‹αž˜αž½αž™ - αžˆαŸ’αž˜αŸ„αŸ‡αž“αŸƒαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αžŠαŸ„αž™αžˆαŸ’αž˜αŸ„αŸ‡αž―αž€αžŸαžΆαžšαž“αŸ…αž€αŸ’αž“αž»αž„αžαž αž‚αŸ„αž›αž“αž™αŸ„αž”αžΆαž™ αžƒαž”αŸ‰αž»αž“αŸ’αžαŸ‚αžŠαŸ„αž™αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž“αŸ…αžαžΆαž„αž€αŸ’αž“αž»αž„αž―αž€αžŸαžΆαžš αž˜αž»αž“αž–αŸαž›αžŠαž„αŸ’αž€αŸ€αž”αž’αž„αŸ’αž€αžΆαž‰αŸ‹αŸ”
αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€ αž•αŸ’αž‘αŸ€αž„αž•αŸ’αž‘αžΆαžαŸ‹αž—αžΆαž–αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœ αž€αŸ’αž“αž»αž„β€‹αž―αž€αžŸαžΆαžšβ€‹αžŠαžŠαŸ‚αž› αž’αŸ’αž“αž€β€‹αžαŸ’αžšαžΌαžœβ€‹αž˜αž·αž“β€‹αž”αž‰αŸ’αž…αŸαž‰β€‹αž˜αžαž·β€‹αž›αžΎβ€‹αž”αž“αŸ’αž‘αžΆαžαŸ‹ αž•αžΆαŸ†.

αž“αŸ…αž€αŸ’αž“αž»αž„αž―αž€αžŸαžΆαžš 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

αž‡αž˜αŸ’αžšαžΎαžŸαž“αŸƒαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž€αž‰αŸ’αž…αž”αŸ‹αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜ αžŸαŸαžšαžΈαžšαŸ‰αžΆαžŒαžΈαžŸ с αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž•αŸ’αž‘αŸ€αž„αž•αŸ’αž‘αžΆαžαŸ‹αž αŸ’αž‚αžΌαž αŸ’αž‚αž› αžαž˜αŸ’αžšαžΌαžœαž±αŸ’αž™αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž”αž‰αŸ’αž…αžΌαž›αž–αŸαžαŸŒαž˜αžΆαž“αžŸαž˜αŸ’αž„αžΆαžαŸ‹αž€αŸ’αž“αž»αž„αž‘αž˜αŸ’αžšαž„αŸ‹αŸ– αžˆαŸ’αž˜αŸ„αŸ‡β€‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹β€‹αž–αžΆαž€αŸ’αž™αžŸαž˜αŸ’αž„αžΆαžαŸ‹+OTP.

αžŠαŸ„αž™αž€αžΆαžšαžŸαŸ’αžšαž˜αŸƒαž˜αžΎαž›αž…αŸ†αž“αž½αž“αž“αŸƒαž”αžŽαŸ’αžαžΆαžŸαžΆαžŠαŸ‚αž›αž“αžΉαž„αž’αŸ’αž›αžΆαž€αŸ‹αž›αžΎαž€αŸ’αž”αžΆαž› αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž”αŸ’αžšαžΎαž”αžŽαŸ’αžαž»αŸ†αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜ αžŸαŸαžšαžΈαžšαŸ‰αžΆαžŒαžΈαžŸ с Google AuthenticatorαžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαž”αŸ’αžšαžΎαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž˜αŸ‰αžΌαžŒαž»αž› αž•αžΆαŸ† αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž˜αžΆαž“αžαŸ‚αžŸαž‰αŸ’αž‰αžΆαžŸαž˜αŸ’αž„αžΆαžαŸ‹αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αžŠαŸ‚αž›αž’αžΆαž…αž–αž·αž“αž·αžαŸ’αž™αž”αžΆαž“αŸ” Google Authenticator.

αž–αŸαž›β€‹αž’αŸ’αž“αž€β€‹αž”αŸ’αžšαžΎβ€‹αž”αžΆαž“β€‹αž—αŸ’αž‡αžΆαž”αŸ‹β€‹ αž“αŸ„αŸ‡β€‹αž“αžΉαž„β€‹αž€αžΎαžβ€‹αž‘αžΎαž„β€‹αžŠαžΌαž…β€‹αžαžΆαž„β€‹αž€αŸ’αžšαŸ„αž˜αŸ–

  • Freeradius αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžαžΆαžαžΎαž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αžŠαŸ‚αž“ αž“αž·αž„αž“αŸ…αž€αŸ’αž“αž»αž„αž€αŸ’αžšαž»αž˜αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž˜αž½αž™αž¬αž’αžαŸ‹ αž αžΎαž™αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž‡αŸ„αž‚αž‡αŸαž™ αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžŸαž‰αŸ’αž‰αžΆαžŸαž˜αŸ’αž„αžΆαžαŸ‹ OTP αŸ”

αž’αŸ’αžœαžΈαž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αž˜αžΎαž›αž‘αŸ…αž›αŸ’αž’αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαžΆαž“αŸ‹αžšαž αžΌαžαžŠαž›αŸ‹αž–αŸαž›αžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž‚αž·αž "αžαžΎαžαŸ’αž‰αž»αŸ†αž’αžΆαž…αž…αž»αŸ‡αžˆαŸ’αž˜αŸ„αŸ‡ OTP αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ 300+ αž™αŸ‰αžΆαž„αžŠαžΌαž…αž˜αŸ’αžαŸαž…?"

αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžαŸ’αžšαžΌαžœαžαŸ‚αž…αžΌαž›αž‘αŸ…αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž‡αžΆαž˜αž½αž™ αžŸαŸαžšαžΈαžšαŸ‰αžΆαžŒαžΈαžŸ αž“αž·αž„αž–αžΈαž€αŸ’αžšαŸ„αž˜αž‚αžŽαž“αžΈαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ αž αžΎαž™αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž•αŸ’αž‘αŸ€αž„αž•αŸ’αž‘αžΆαžαŸ‹αžšαž”αžŸαŸ‹ GoogleαžŠαŸ‚αž›αž“αžΉαž„αž”αž„αŸ’αž€αžΎαžαž€αžΌαžŠ QR αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αŸ” αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž€αž“αŸ’αž›αŸ‚αž„αžŠαŸ‚αž›αž‡αŸ†αž“αž½αž™αž…αžΌαž›αž˜αž€αŸ” αž”αŸ’αžšαž’αž”αŸ‹αžŸαŸ‚αž›αž›αžΈαžŽαžΆ αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆαž‡αžΆαž˜αž½αž™ .bash_ αž”αŸ’αžšαžœαžαŸ’αžαž·αžšαžΌαž”.

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

αž―αž€αžŸαžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžŠαŸαž˜αž·αž“αž˜αžΆαž“αž‘αžΈαžαžΆαŸ†αž„αž“αŸ… /etc/sysconfig/shellinabox.
αžαŸ’αž‰αž»αŸ†αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž…αŸ’αžšαž€ 443 αž“αŸ…αž‘αžΈαž“αŸ„αŸ‡ αž αžΎαž™αž’αŸ’αž“αž€αž’αžΆαž…αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αžœαž·αž‰αŸ’αž‰αžΆαž”αž“αž”αžαŸ’αžšαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ”

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

αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž’αŸ’αžœαžΎαžαžΆαž˜αžαŸ†αžŽ αž”αž‰αŸ’αž…αžΌαž›αž€αŸ’αžšαŸαžŒαžΈαžαžŠαŸ‚αž“ αž“αž·αž„αž‘αž‘αž½αž›αž”αžΆαž“αž›αŸαžαž€αžΌαžŠ QR αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαŸ”

αž€αŸ’αž”αž½αž“αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž˜αžΆαž“αžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ–

  • αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž…αžΌαž›αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αžαžΆαž˜αžšαž™αŸˆαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαž»αž€αžšαž€αŸ”
  • αžαžΆαžαžΎαž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŠαŸ‚αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž·αž“αž·αžαŸ’αž™αž¬αž’αžαŸ‹αŸ” αž”αžΎβ€‹αž˜αž·αž“β€‹αžŠαžΌαž…αŸ’αž“αŸαŸ‡β€‹αž‘αŸ αž“αŸ„αŸ‡β€‹αž‚αŸ’αž˜αžΆαž“β€‹αž…αŸ†αžŽαžΆαžαŸ‹αž€αžΆαžšβ€‹αž‘αŸαŸ”
  • αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž‡αžΆαž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŠαŸ‚αž“ αžŸαž˜αžΆαž‡αž·αž€αž—αžΆαž–αž“αŸ…αž€αŸ’αž“αž»αž„αž€αŸ’αžšαž»αž˜αž’αŸ’αž“αž€αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž·αž“αž·αžαŸ’αž™αŸ”
  • αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαž’αŸ’αž“αž€αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž‘αŸ αžœαžΆαž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžαžΆαžαžΎ 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 αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžŸαž»αž–αž›αž—αžΆαž–αž“αŸƒαž‚αžŽαž“αžΈ αž“αž·αž„αž–αžΆαž€αŸ’αž™αžŸαž˜αŸ’αž„αžΆαžαŸ‹
  • αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž–αžΆαž€αŸ’αž™αžŸαž˜αŸ’αž„αžΆαžαŸ‹αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœ αž“αŸ„αŸ‡αžŸαŸ†αžŽαžΎαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαž‰αŸ’αž‰αžΆαžŸαž˜αŸ’αž„αžΆαžαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž‰αžΎαŸ”
  • αž“αž·αž˜αž·αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαž€αŸ†αž–αž»αž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž‘αŸ€αž„αž•αŸ’αž‘αžΆαžαŸ‹αŸ”
  • αž”αŸ’αžšαžΆαž€αŸ‹αž…αŸ†αžŽαŸαž‰) αŸ”

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹