Freeradius + Google Autheticator + LDAP + Fortigate

āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻšāĻžāĻ¨ āĻāĻŦāĻ‚ āĻĻā§āĻŦāĻŋ-āĻĢā§āĻ¯āĻžāĻ•ā§āĻŸāĻ° āĻĒā§āĻ°āĻŽāĻžāĻŖā§€āĻ•āĻ°āĻŖ āĻšāĻžāĻ¨ āĻ¤āĻŦā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ•ā§€ āĻ•āĻ°āĻž āĻ‰āĻšāĻŋāĻ¤, āĻ¤āĻŦā§‡ āĻšāĻžāĻ°ā§āĻĄāĻ“āĻ¯āĻŧā§āĻ¯āĻžāĻ° āĻŸā§‹āĻ•ā§‡āĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ•ā§‹āĻ¨āĻ“ āĻ…āĻ°ā§āĻĨ āĻ¨ā§‡āĻ‡ āĻāĻŦāĻ‚ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ­āĻžāĻŦā§‡ āĻ¤āĻžāĻ°āĻž āĻāĻ•āĻŸāĻŋ āĻ­āĻžāĻ˛ āĻŽā§‡āĻœāĻžāĻœ āĻ§āĻ°ā§‡ āĻ°āĻžāĻ–āĻžāĻ° āĻĒāĻ°āĻžāĻŽāĻ°ā§āĻļ āĻĻā§‡āĻ¯āĻŧāĨ¤

āĻāĻ‡ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨āĻŸāĻŋ āĻ–ā§āĻŦ āĻ†āĻ¸āĻ˛ āĻ•āĻŋāĻ›ā§ āĻ¨āĻ¯āĻŧ, āĻŦāĻ°āĻ‚ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻ¨ā§‡āĻŸā§‡ āĻĒāĻžāĻ“āĻ¯āĻŧāĻž āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ā§‡āĻ° āĻŽāĻŋāĻļā§āĻ°āĻŖāĨ¤

āĻ¤āĻžāĻ‡ āĻĻā§‡āĻ“āĻ¯āĻŧāĻž āĻšāĻ˛

āĻĄā§‹āĻŽā§‡āĻ¨ āĻ¨āĻžāĻŽ āĻ¸āĻ•ā§āĻ°āĻŋāĻ¯āĻŧ āĻĄāĻŋāĻ°ā§‡āĻ•ā§āĻŸāĻ°āĻŋ.

VPN āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻž āĻĄā§‹āĻŽā§‡āĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻ°āĻž, āĻ¯ā§‡āĻŽāĻ¨ āĻ†āĻœ āĻ…āĻ¨ā§‡āĻ•ā§‡āĻ° āĻŽāĻ¤āĨ¤

āĻ­āĻŋāĻĒāĻŋāĻāĻ¨ āĻāĻ•āĻŸāĻŋ āĻ—ā§‡āĻŸāĻ“āĻ¯āĻŧā§‡ āĻšāĻŋāĻ¸ā§‡āĻŦā§‡ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡ āĻĻā§ƒigāĻŧāĻšā§‡āĻ¤āĻž.

VPN āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻĒāĻžāĻ¸āĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻĄ āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖ āĻ¨āĻŋāĻ°āĻžāĻĒāĻ¤ā§āĻ¤āĻž āĻ¨ā§€āĻ¤āĻŋ āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¨āĻŋāĻˇāĻŋāĻĻā§āĻ§āĨ¤

āĻ°āĻžāĻœāĻ¨ā§€āĻ¤āĻŋ Fortinet āĻāĻ° āĻ¨āĻŋāĻœāĻ¸ā§āĻŦ āĻŸā§‹āĻ•ā§‡āĻ¨āĻ—ā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•āĻŋāĻ¤, āĻ†āĻĒāĻ¨āĻŋ āĻāĻŸāĻŋāĻ•ā§‡ āĻ°ā§‡āĻĄāĻ¨ā§‡āĻ•ā§‡āĻ° āĻšā§‡āĻ¯āĻŧā§‡ āĻ•āĻŽ āĻŦāĻ˛āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŦā§‡āĻ¨ āĻ¨āĻž - āĻāĻ–āĻžāĻ¨ā§‡ 10 āĻ‡āĻ‰āĻ¨āĻŋāĻŸā§‡āĻ° āĻŽāĻ¤ā§‹ āĻŦāĻŋāĻ¨āĻžāĻŽā§‚āĻ˛ā§āĻ¯ā§‡āĻ° āĻŸā§‹āĻ•ā§‡āĻ¨ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡, āĻŦāĻžāĻ•āĻŋāĻ—ā§āĻ˛āĻŋ āĻ–ā§āĻŦ āĻ…-āĻ•ā§‹āĻļāĻžāĻ° āĻŽā§‚āĻ˛ā§āĻ¯ā§‡āĨ¤ āĻ†āĻŽāĻŋ RSASecureID, Duo āĻāĻŦāĻ‚ āĻāĻ° āĻŽāĻ¤ā§‹ āĻŦāĻŋāĻŦā§‡āĻšāĻ¨āĻž āĻ•āĻ°āĻŋāĻ¨āĻŋ, āĻ•āĻžāĻ°āĻŖ āĻ†āĻŽāĻŋ āĻ“āĻĒā§‡āĻ¨ āĻ¸ā§‹āĻ°ā§āĻ¸ āĻšāĻžāĻ‡āĨ¤

āĻĒā§‚āĻ°ā§āĻŦāĻļāĻ°ā§āĻ¤: āĻ¨āĻŋāĻŽāĻ¨ā§āĻ¤ā§āĻ°āĻŖāĻ•āĻ°ā§āĻ¤āĻž * āĻ¸ā§āĻ¨ā§‹ āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ¸āĻš freeradius, āĻāĻ¸āĻāĻ¸āĻĄāĻŋ — āĻĄā§‹āĻŽā§‡āĻ¨ā§‡ āĻĒā§āĻ°āĻŦā§‡āĻļ āĻ•āĻ°āĻ˛ā§‡ āĻĄā§‹āĻŽā§‡āĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻ°āĻž āĻ¸āĻšāĻœā§‡āĻ‡ āĻāĻŸāĻŋāĻ•ā§‡ āĻĒā§āĻ°āĻŽāĻžāĻŖā§€āĻ•āĻ°āĻŖ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤

āĻ…āĻ¤āĻŋāĻ°āĻŋāĻ•ā§āĻ¤ āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœ: shellinabox, āĻĄā§āĻŽā§āĻ°, freeradius-ldap, āĻĢāĻ¨ā§āĻŸ rebel.tlf āĻ¸āĻ‚āĻ—ā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ āĻĨā§‡āĻ•ā§‡ https://github.com/xero/figlet-fonts.

āĻ†āĻŽāĻžāĻ° āĻ‰āĻĻāĻžāĻšāĻ°āĻŖā§‡, CentOS 7.8.

āĻ…āĻĒāĻžāĻ°ā§‡āĻŸāĻŋāĻ‚ āĻ˛āĻœāĻŋāĻ•āĻŸāĻŋ āĻ¨āĻŋāĻŽā§āĻ¨āĻ°ā§‚āĻĒ: āĻāĻ•āĻŸāĻŋ VPN āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻ‚āĻ¯ā§‹āĻ— āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻ•ā§‡ āĻĒāĻžāĻ¸āĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻĄā§‡āĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤ā§‡ āĻāĻ•āĻŸāĻŋ āĻĄā§‹āĻŽā§‡āĻ¨ āĻ˛āĻ—āĻ‡āĻ¨ āĻāĻŦāĻ‚ OTP āĻ˛āĻŋāĻ–āĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤

āĻ¸ā§‡āĻŦāĻž āĻ¸ā§‡āĻŸ āĻ†āĻĒ āĻ•āĻ°āĻž āĻšāĻšā§āĻ›ā§‡

В /etc/raddb/radiusd.conf āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€ āĻāĻŦāĻ‚ āĻ—ā§‹āĻˇā§āĻ ā§€ āĻ¯āĻžāĻ° āĻ¨āĻžāĻŽā§‡ āĻāĻŸāĻŋ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻļā§āĻ°ā§ āĻšāĻ¯āĻŧ freeradius, āĻ¸ā§‡āĻŦāĻž āĻĨā§‡āĻ•ā§‡ āĻŦā§āĻ¯āĻžāĻ¸āĻžāĻ°ā§āĻ§ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¸āĻžāĻŦāĻĄāĻŋāĻ°ā§‡āĻ•ā§āĻŸāĻ°āĻŋāĻ¤ā§‡ āĻĢāĻžāĻ‡āĻ˛ āĻĒāĻĄāĻŧāĻ¤ā§‡ āĻ¸āĻ•ā§āĻˇāĻŽ āĻšāĻ¤ā§‡ āĻšāĻŦā§‡ / āĻšā§‹āĻŽ /.

user = root
group = root

āĻ¸ā§‡āĻŸāĻŋāĻ‚āĻ¸ā§‡ āĻ—ā§āĻ°ā§āĻĒ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻ¸āĻ•ā§āĻˇāĻŽ āĻšāĻ¤ā§‡ āĻĻā§ƒigāĻŧāĻšā§‡āĻ¤āĻž, āĻĒā§āĻ°ā§‡āĻ°āĻŖ āĻ•āĻ°āĻž āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻŦāĻŋāĻ•ā§āĻ°ā§‡āĻ¤āĻž āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻŦā§ˆāĻļāĻŋāĻˇā§āĻŸā§āĻ¯. āĻĄāĻŋāĻ°ā§‡āĻ•ā§āĻŸāĻ°āĻŋāĻ¤ā§‡ āĻāĻŸāĻŋ āĻ•āĻ°āĻ¤ā§‡ 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
        }
}

āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ā§‡āĻļāĻ¨ā§‡āĻ° āĻĒāĻ°ā§‡ freeradius-ldap āĻĄāĻŋāĻ°ā§‡āĻ•ā§āĻŸāĻ°āĻŋāĻ¤ā§‡ 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/site-enabled/default и raddb/āĻ¸āĻžāĻ‡āĻŸ-āĻ¸āĻ•ā§āĻˇāĻŽ/āĻ‡āĻ¨āĻžāĻ°-āĻŸāĻžāĻ¨ā§‡āĻ˛ āĻŦāĻŋāĻ­āĻžāĻ—ā§‡ āĻ…āĻ¨ā§āĻŽā§‹āĻĻāĻ¨ āĻ•āĻ°āĻž āĻ†āĻŽāĻŋ āĻ¯ā§‡ āĻ¨ā§€āĻ¤āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻšāĻŦā§‡ āĻ¤āĻžāĻ° āĻ¨āĻžāĻŽ āĻ¯ā§‹āĻ— āĻ•āĻ°āĻŋ - group_authorization. āĻāĻ•āĻŸāĻŋ āĻ—ā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āĻĒāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ - āĻ¨ā§€āĻ¤āĻŋāĻ° āĻ¨āĻžāĻŽ āĻĄāĻŋāĻ°ā§‡āĻ•ā§āĻŸāĻ°āĻŋāĻ¤ā§‡ āĻĢāĻžāĻ‡āĻ˛ā§‡āĻ° āĻ¨āĻžāĻŽ āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŋāĻ¤ āĻšāĻ¯āĻŧ āĻ¨āĻž āĻ¨ā§€āĻ¤āĻŋ.āĻĄāĻŋ, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ•ā§‹āĻāĻ•āĻĄāĻŧāĻž āĻ§āĻ¨ā§āĻ°ā§āĻŦāĻ¨ā§āĻ§āĻ¨ā§€ āĻ†āĻ—ā§‡ āĻĢāĻžāĻ‡āĻ˛ āĻ­āĻŋāĻ¤āĻ°ā§‡ āĻāĻ•āĻŸāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļ.
āĻŦāĻŋāĻ­āĻžāĻ—ā§‡ āĻŦāĻŋāĻļā§āĻĻā§āĻ§āĻ¤āĻž āĻĒā§āĻ°āĻŽāĻžāĻŖ āĻ•āĻ°āĻž āĻāĻ•āĻ‡ āĻĢāĻžāĻ‡āĻ˛āĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ˛āĻžāĻ‡āĻ¨āĻŸāĻŋ āĻ†āĻ¨āĻ•āĻŽā§‡āĻ¨ā§āĻŸ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ āĻĒāĻžāĻŽ.

āĻĢāĻžāĻ‡āĻ˛ā§‡ clients.conf āĻ¯ā§‡ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻŸāĻžāĻ°āĻ—ā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻ‚āĻ¯ā§‹āĻ— āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ āĻ¤āĻž āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ•āĻ°ā§āĻ¨ āĻĻā§ƒigāĻŧāĻšā§‡āĻ¤āĻž:

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

āĻŦāĻžāĻ¨ā§āĻĄāĻŋāĻ˛ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻĄāĻŋāĻĢāĻ˛ā§āĻŸ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ freeradius Ņ āĻ—ā§āĻ—āĻ˛ āĻĒā§āĻ°āĻŽāĻžāĻŖā§€āĻ•āĻ°āĻŖāĻ•āĻžāĻ°ā§€ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻ•ā§‡ āĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸ā§‡ āĻļāĻ‚āĻ¸āĻžāĻĒāĻ¤ā§āĻ° āĻĒā§āĻ°āĻŦā§‡āĻļ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡: āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻ° āĻ¨āĻžāĻŽ/āĻĒāĻžāĻ¸āĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻĄ+OTP āĻ¤ā§‡.

āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻĄāĻŋāĻĢāĻ˛ā§āĻŸ āĻ•āĻĒā§āĻ˛āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡āĻ¨ āĻ¤āĻŦā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻŽāĻžāĻĨāĻžāĻ¯āĻŧ āĻ¯ā§‡ āĻ…āĻ­āĻŋāĻļāĻžāĻĒā§‡āĻ° āĻ¸āĻ‚āĻ–ā§āĻ¯āĻž āĻĒāĻĄāĻŧāĻŦā§‡ āĻ¤āĻž āĻ•āĻ˛ā§āĻĒāĻ¨āĻž āĻ•āĻ°ā§āĻ¨ freeradius Ņ Google āĻĒā§āĻ°āĻŽāĻžāĻŖāĻ•āĻžāĻ°ā§€, āĻŽāĻĄāĻŋāĻ‰āĻ˛ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ āĻ¨ā§‡āĻ“āĻ¯āĻŧāĻž āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛ āĻĒāĻžāĻŽ āĻ¯āĻžāĻ¤ā§‡ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻŸā§‹āĻ•ā§‡āĻ¨ āĻšā§‡āĻ• āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ Google āĻĒā§āĻ°āĻŽāĻžāĻŖāĻ•āĻžāĻ°ā§€.

āĻ¯āĻ–āĻ¨ āĻāĻ•āĻœāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€ āĻ¸āĻ‚āĻ¯ā§‹āĻ— āĻ•āĻ°ā§‡, āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤āĻ—ā§āĻ˛āĻŋ āĻ˜āĻŸā§‡:

  • Freeradius āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€ āĻĄā§‹āĻŽā§‡āĻ¨ā§‡ āĻāĻŦāĻ‚ āĻāĻ•āĻŸāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ—ā§āĻ°ā§āĻĒā§‡ āĻ†āĻ›ā§‡ āĻ•āĻŋāĻ¨āĻž āĻ¤āĻž āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ āĻ¸āĻĢāĻ˛ āĻšāĻ˛ā§‡ OTP āĻŸā§‹āĻ•ā§‡āĻ¨ āĻšā§‡āĻ• āĻ•āĻ°ā§‡āĨ¤

āĻ¯āĻ¤āĻ•ā§āĻˇāĻŖ āĻ¨āĻž āĻ†āĻŽāĻŋ āĻ­āĻžāĻŦāĻŋ, "āĻ†āĻŽāĻŋ āĻ•ā§€āĻ­āĻžāĻŦā§‡ 300+ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻ° āĻœāĻ¨ā§āĻ¯ OTP āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋ?"

āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻ•ā§‡ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°ā§‡ āĻ˛āĻ— āĻ‡āĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ freeradius āĻāĻŦāĻ‚ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ…ā§āĻ¯āĻžāĻ•āĻžāĻ‰āĻ¨ā§āĻŸ āĻĨā§‡āĻ•ā§‡ āĻāĻŦāĻ‚ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻšāĻžāĻ˛ā§ āĻ•āĻ°ā§āĻ¨ āĻ—ā§āĻ—āĻ˛ āĻĒā§āĻ°āĻŽāĻžāĻŖā§€āĻ•āĻ°āĻŖāĻ•āĻžāĻ°ā§€, āĻ¯āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻ° āĻœāĻ¨ā§āĻ¯ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ QR āĻ•ā§‹āĻĄ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻŦā§‡āĨ¤ āĻāĻ‡ āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ āĻāĻŸāĻŋ āĻ‰āĻĻā§āĻ§āĻžāĻ° āĻ†āĻ¸ā§‡ shellinabox āĻ†āĻŽāĻŋ āĻ¤āĻžāĻ˛ āĻŽāĻŋāĻ˛āĻžāĻ¤ā§‡ āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°āĻ›āĻŋ .bash_profile.

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

āĻĄā§‡āĻŽāĻ¨ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨ āĻĢāĻžāĻ‡āĻ˛āĻŸāĻŋ āĻ…āĻŦāĻ¸ā§āĻĨāĻŋāĻ¤ /etc/sysconfig/shellinabox.
āĻ†āĻŽāĻŋ āĻ¸ā§‡āĻ–āĻžāĻ¨ā§‡ āĻĒā§‹āĻ°ā§āĻŸ 443 āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ•āĻ°āĻŋ āĻāĻŦāĻ‚ āĻ†āĻĒāĻ¨āĻŋ āĻ†āĻĒāĻ¨āĻžāĻ° āĻļāĻ‚āĻ¸āĻžāĻĒāĻ¤ā§āĻ° āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤

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

āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ˛āĻŋāĻ™ā§āĻ•āĻŸāĻŋ āĻ…āĻ¨ā§āĻ¸āĻ°āĻŖ āĻ•āĻ°āĻ¤ā§‡, āĻĄā§‹āĻŽā§‡āĻ¨ āĻļāĻ‚āĻ¸āĻžāĻĒāĻ¤ā§āĻ° āĻ˛āĻŋāĻ–āĻ¤ā§‡ āĻāĻŦāĻ‚ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨āĻŸāĻŋāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ QR āĻ•ā§‹āĻĄ āĻĒā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤

āĻ…ā§āĻ¯āĻžāĻ˛āĻ—āĻ°āĻŋāĻĻāĻŽ āĻ¨āĻŋāĻŽā§āĻ¨āĻ°ā§‚āĻĒ:

  • āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€ āĻāĻ•āĻŸāĻŋ āĻŦā§āĻ°āĻžāĻ‰āĻœāĻžāĻ°ā§‡āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻŽā§‡āĻļāĻŋāĻ¨ā§‡ āĻ˛āĻ— āĻ‡āĻ¨ āĻ•āĻ°ā§‡āĨ¤
  • āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€ āĻāĻ•āĻœāĻ¨ āĻĄā§‹āĻŽā§‡āĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€ āĻ•āĻŋāĻ¨āĻž āĻ¤āĻž āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ āĻ¨āĻž āĻšāĻ˛ā§‡ āĻ•ā§‹āĻ¨ā§‹ āĻŦā§āĻ¯āĻŦāĻ¸ā§āĻĨāĻž āĻ¨ā§‡āĻ“āĻ¯āĻŧāĻž āĻšāĻ¯āĻŧ āĻ¨āĻžāĨ¤
  • āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€ āĻ¯āĻĻāĻŋ āĻāĻ•āĻœāĻ¨ āĻĄā§‹āĻŽā§‡āĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€ āĻšāĻ¯āĻŧ, āĻ¤āĻžāĻšāĻ˛ā§‡ āĻ…ā§āĻ¯āĻžāĻĄāĻŽāĻŋāĻ¨āĻŋāĻ¸ā§āĻŸā§āĻ°ā§‡āĻŸāĻ° āĻ—ā§āĻ°ā§āĻĒā§‡āĻ° āĻ¸āĻĻāĻ¸ā§āĻ¯āĻĒāĻĻ āĻšā§‡āĻ• āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĨ¤
  • āĻĒā§āĻ°āĻļāĻžāĻ¸āĻ• āĻ¨āĻž āĻšāĻ˛ā§‡, āĻāĻŸāĻŋ Google āĻĒā§āĻ°āĻŽāĻžāĻŖā§€āĻ•āĻ°āĻŖāĻ•āĻžāĻ°ā§€ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ° āĻ•āĻ°āĻž āĻ†āĻ›ā§‡ āĻ•āĻŋāĻ¨āĻž āĻ¤āĻž āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°ā§‡āĨ¤ āĻ¯āĻĻāĻŋ āĻ¨āĻž āĻšāĻ¯āĻŧ, āĻ¤āĻžāĻšāĻ˛ā§‡ āĻāĻ•āĻŸāĻŋ QR āĻ•ā§‹āĻĄ āĻ¤ā§ˆāĻ°āĻŋ āĻšāĻ¯āĻŧ āĻāĻŦāĻ‚ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€ āĻ˛āĻ— āĻ†āĻ‰āĻŸ āĻšāĻ¯āĻŧā§‡ āĻ¯āĻžāĻ¯āĻŧāĨ¤
  • āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻĒā§āĻ°āĻļāĻžāĻ¸āĻ• āĻ¨āĻž āĻšāĻ¨ āĻāĻŦāĻ‚ Google āĻĒā§āĻ°āĻŽāĻžāĻŖā§€āĻ•āĻ°āĻŖāĻ•āĻžāĻ°ā§€ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ° āĻ•āĻ°āĻž āĻĨāĻžāĻ•ā§‡, āĻ¤āĻžāĻšāĻ˛ā§‡ āĻļā§āĻ§ā§ āĻ˛āĻ—āĻ†āĻ‰āĻŸ āĻ•āĻ°ā§āĻ¨āĨ¤
  • āĻ¯āĻĻāĻŋ āĻāĻ•āĻœāĻ¨ āĻĒā§āĻ°āĻļāĻžāĻ¸āĻ• āĻšāĻ¨, āĻ¤āĻžāĻšāĻ˛ā§‡ āĻ†āĻŦāĻžāĻ° 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

āĻĢāĻ°āĻŸāĻŋāĻ—ā§‡āĻŸ āĻ¸ā§‡āĻŸāĻ†āĻĒ:

  • āĻ†āĻŽāĻ°āĻž āĻŦāĻžāĻ¨āĻžāĻ‡ āĻŦā§āĻ¯āĻžāĻ¸āĻžāĻ°ā§āĻ§-āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°

    Freeradius + Google Autheticator + LDAP + Fortigate

  • āĻ†āĻŽāĻ°āĻž āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧ āĻ—ā§‹āĻˇā§āĻ ā§€āĻ—ā§āĻ˛āĻŋ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻŋ, āĻ¯āĻĻāĻŋ āĻāĻŸāĻŋ āĻ—ā§‹āĻˇā§āĻ ā§€ āĻĻā§āĻŦāĻžāĻ°āĻž āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸āĻ•ā§‡ āĻ†āĻ˛āĻžāĻĻāĻž āĻ•āĻ°āĻžāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻšāĻ¯āĻŧāĨ¤ āĻ—ā§āĻ°ā§āĻĒā§‡āĻ° āĻ¨āĻžāĻŽ āĻšāĻžāĻ˛ā§ āĻ†āĻ›ā§‡ āĻĻā§ƒigāĻŧāĻšā§‡āĻ¤āĻž āĻ¯ā§‡ āĻ—ā§āĻ°ā§āĻĒā§‡ āĻĒāĻžāĻ āĻžāĻ¨ā§‹ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ āĻ¤āĻžāĻ° āĻ¸āĻžāĻĨā§‡ āĻŽāĻŋāĻ˛āĻ¤ā§‡ āĻšāĻŦā§‡ āĻŦāĻŋāĻ•ā§āĻ°ā§‡āĻ¤āĻž āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻŦā§ˆāĻļāĻŋāĻˇā§āĻŸā§āĻ¯ Fortinet-āĻ—ā§āĻ°ā§āĻĒ-āĻ¨āĻžāĻŽ.

    Freeradius + Google Autheticator + LDAP + Fortigate

  • āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧ āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨āĻž SSL āĻāĻ°-āĻĒā§‹āĻ°ā§āĻŸāĻžāĻ˛

    Freeradius + Google Autheticator + LDAP + Fortigate

  • āĻ¨ā§€āĻ¤āĻŋāĻ¤ā§‡ āĻ—ā§āĻ°ā§āĻĒ āĻ¯ā§‹āĻ— āĻ•āĻ°āĻžāĨ¤

    Freeradius + Google Autheticator + LDAP + Fortigate

āĻāĻ‡ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ā§‡āĻ° āĻ¸ā§āĻŦāĻŋāĻ§āĻž:

  • OTP āĻ…āĻ¨ āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻĒā§āĻ°āĻŽāĻžāĻŖā§€āĻ•āĻ°āĻŖ āĻ•āĻ°āĻž āĻ¸āĻŽā§āĻ­āĻŦ āĻĻā§ƒigāĻŧāĻšā§‡āĻ¤āĻž āĻ“āĻĒā§‡āĻ¨ āĻ¸ā§‹āĻ°ā§āĻ¸ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨āĨ¤
  • 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
}

āĻāĻ–āĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻ…ā§āĻ¯āĻžāĻ˛āĻ—āĻ°āĻŋāĻĻāĻŽ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ¯āĻžāĻšāĻžāĻ‡ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ:

  • āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€ āĻ­āĻŋāĻĒāĻŋāĻāĻ¨ āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸā§‡ āĻĄā§‹āĻŽā§‡āĻ¨ āĻļāĻ‚āĻ¸āĻžāĻĒāĻ¤ā§āĻ° āĻĒā§āĻ°āĻŦā§‡āĻļ āĻ•āĻ°ā§‡āĨ¤
  • Freeradius āĻ…ā§āĻ¯āĻžāĻ•āĻžāĻ‰āĻ¨ā§āĻŸā§‡āĻ° āĻŦā§ˆāĻ§āĻ¤āĻž āĻāĻŦāĻ‚ āĻĒāĻžāĻ¸āĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻĄ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°ā§‡
  • āĻĒāĻžāĻ¸āĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻĄ āĻ¸āĻ āĻŋāĻ• āĻšāĻ˛ā§‡, āĻāĻ•āĻŸāĻŋ āĻŸā§‹āĻ•ā§‡āĻ¨ āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ āĻĒāĻžāĻ āĻžāĻ¨ā§‹ āĻšāĻ¯āĻŧ.
  • āĻŸā§‹āĻ•ā§‡āĻ¨ āĻ¯āĻžāĻšāĻžāĻ‡ āĻ•āĻ°āĻž āĻšāĻšā§āĻ›ā§‡āĨ¤
  • āĻ˛āĻžāĻ­)āĨ¤

āĻ‰āĻ¤ā§āĻ¸: www.habr.com

āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻœā§āĻĄāĻŧā§āĻ¨