Freeradius + Google Authenticator + LDAP + เดซเต‹เตผเดŸเตเดŸเดฟเด—เต‡เดฑเตเดฑเต

เดฐเดฃเตเดŸเต-เด˜เดŸเด• เดชเตเดฐเดพเดฎเดพเดฃเต€เด•เดฐเดฃเด‚ เด…เดญเดฟเดฒเดทเดฃเต€เดฏเดตเตเด‚ เดฎเตเดณเตเดณเตเด‚ เด†เดฃเต†เด™เตเด•เดฟเตฝ, เดชเด•เตเดทเต‡ เดนเดพเตผเดกเตโ€Œเดตเต†เดฏเตผ เดŸเต‹เด•เตเด•เดฃเตเด•เตพเด•เตเด•เต เดชเดฃเดฎเดฟเดฒเตเดฒ, เดชเตŠเดคเตเดตเต† เด…เดตเตผ เดจเดฒเตเดฒ เดฎเดพเดจเดธเดฟเด•เดพเดตเดธเตเดฅเดฏเดฟเตฝ เดคเตเดŸเดฐเดพเตป เดตเดพเด—เตเดฆเดพเดจเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต.

เดˆ เดธเตŠเดฒเตเดฏเต‚เดทเตป เดธเต‚เดชเตเดชเตผ เด’เดฑเดฟเดœเดฟเดจเตฝ เด’เดจเตเดจเดฒเตเดฒ, เดฎเดฑเดฟเดšเตเดšเต เด‡เดจเตเดฑเตผเดจเต†เดฑเตเดฑเดฟเตฝ เด•เดฃเตเดŸเต†เดคเตเดคเดฟเดฏ เดตเตเดฏเดคเตเดฏเดธเตเดค เดชเดฐเดฟเดนเดพเดฐเด™เตเด™เดณเตเดŸเต† เดฎเดฟเดถเตเดฐเดฟเดคเดฎเดพเดฃเต.

เด…เด™เตเด™เดจเต† เด•เตŠเดŸเตเดคเตเดคเต

เดกเตŠเดฎเต†เตป เด†เด•เตเดŸเต€เดตเต เดกเดฏเดฑเด•เตเดŸเดฑเดฟ.

เด‡เดจเตเดจเดคเตเดคเต† เดชเดฒเดฐเต†เดฏเตเด‚ เดชเต‹เดฒเต† เด’เดฐเต VPN เดตเดดเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจ เดกเตŠเดฎเต†เดฏเตโ€Œเตป เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เตพ.

เด’เดฐเต VPN เด—เต‡เดฑเตเดฑเตโ€Œเดตเต‡ เด†เดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต Tigเตผเดœเตเดœเดธเตเดตเดฒเดฎเดพเด•เตเด•เตเด•.

VPN เด•เตเดฒเดฏเดจเตเดฑเดฟเดจเดพเดฏเดฟ เดชเดพเดธเตโ€Œเดตเต‡เดกเต เดธเด‚เดฐเด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเดคเต เดธเตเดฐเด•เตเดทเดพ เดจเดฏเด‚ เดจเดฟเดฐเต‹เดงเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต.

เดฐเดพเดทเตเดŸเตเดฐเต€เดฏเด‚ เดซเต‹เตผเดŸเตเดŸเดฟเดจเต†เดฑเตเดฑเต เดจเดฟเด™เตเด™เดณเตเดŸเต† เดธเตเดตเดจเตเดคเด‚ เดŸเต‹เด•เตเด•เดฃเตเด•เดณเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดชเตเดชเต†เดŸเตเดŸเต, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด‡เดคเดฟเดจเต† เด’เดฐเต zhlob-เดจเต‡เด•เตเด•เดพเตพ เด•เตเดฑเดตเดพเดฏเดฟ เดตเดฟเดณเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเดฟเดฒเตเดฒ - 10 เดตเดฐเต† เดธเต—เดœเดจเตเดฏ เดŸเต‹เด•เตเด•เดฃเตเด•เตพ เด‰เดฃเตเดŸเต, เดฌเดพเด•เตเด•เดฟเดฏเตเดณเตเดณเดต - เดตเดณเดฐเต† เดจเต‹เตบ-เด•เต‹เดทเตผ เดตเดฟเดฒเดฏเตเด•เตเด•เต. RSASecureID, Duo เดŽเดจเตเดจเดฟเดตเดฏเตเด‚ เดฎเดฑเตเดฑเตเด‚ เดžเดพเตป เดชเดฐเดฟเด—เดฃเดฟเดšเตเดšเดฟเดฒเตเดฒ, เด•เดพเดฐเดฃเด‚ เดŽเดจเดฟเด•เตเด•เต เด“เดชเตเดชเตบ เดธเต‹เดดเตโ€Œเดธเต เดตเต‡เดฃเด‚.

เดฎเตเตปเดตเตเดฏเดตเดธเตเดฅเด•เตพ: เดนเต‹เดธเตเดฑเตเดฑเต * เดจเดฟเด•เตเดธเต เด•เต‚เดŸเต† เดธเตเดฅเดพเดชเดฟเดšเตเดšเต เดซเตเดฐเต€เดฑเต‡เดกเดฟเดฏเดธเต, ssd - เดกเตŠเดฎเต†เดฏเตโ€Œเดจเดฟเดฒเต‡เด•เตเด•เต เดชเตเดฐเดตเต‡เดถเดฟเดšเตเดšเต, เดกเตŠเดฎเต†เดฏเตเตป เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เตพเด•เตเด•เต เด…เดคเดฟเตฝ เดŽเดณเตเดชเตเดชเดคเตเดคเดฟเตฝ เดชเตเดฐเดพเดฎเดพเดฃเต€เด•เดฐเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚.

เด…เดงเดฟเด• เดชเดพเด•เตเด•เต‡เดœเตเด•เตพ: เดทเต†เดฒเตเดฒเดฟเดจเดพเดฌเต‹เด•เตเดธเต, เด…เดคเตเดคเดฟเดชเตเดชเดดเด‚, freeradius-ldap, เดซเต‹เดฃเตเดŸเต rebel.tlf เดถเต‡เด–เดฐเดคเตเดคเดฟเตฝ เดจเดฟเดจเตเดจเต https://github.com/xero/figlet-fonts.

เดŽเดจเตเดฑเต† เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเตฝ - CentOS 7.8.

เดœเต‹เดฒเดฟเดฏเตเดŸเต† เดฒเต‹เดœเดฟเด•เต เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจเดคเดพเดฏเดฟเดฐเดฟเด•เตเด•เดฃเด‚: เด’เดฐเต VPN-เดฒเต‡เด•เตเด•เต เด•เดฃเด•เตโ€Œเดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเดฎเตเดชเต‹เตพ, เด’เดฐเต เดชเดพเดธเตโ€Œเดตเต‡เดกเดฟเดจเต เดชเด•เดฐเด‚ เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเต เด’เดฐเต เดกเตŠเดฎเต†เดฏเตโ€Œเตป เดฒเต‹เด—เดฟเตป, OTP เดŽเดจเตเดจเดฟเดต เดจเตฝเด•เดฃเด‚.

เดธเต‡เดตเดจเด™เตเด™เดณเตเดŸเต† เดธเดœเตเดœเต€เด•เดฐเดฃเด‚

ะ’ /etc/raddb/radiusd.conf เด†เดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจ เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเตเด‚ เด—เตเดฐเต‚เดชเตเดชเดฟเดจเตเด‚ เดตเต‡เดฃเตเดŸเดฟ เดฎเดพเดคเตเดฐเด‚ เดซเตเดฐเต€เดฑเต‡เดกเดฟเดฏเดธเต, เดธเต‡เดตเดจเด‚ เดฎเตเดคเตฝ เดตเตเดฏเดพเดธเดพเตผเดฆเตเดงเด‚ เดŽเดฒเตเดฒเดพ เด‰เดชเดกเดฏเดฑเด•เตโ€ŒเดŸเดฑเดฟเด•เดณเดฟเดฒเต†เดฏเตเด‚ เดซเดฏเดฒเตเด•เตพ เดตเดพเดฏเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเดฃเด‚ / เดตเต€เดŸเต /.

user = root
group = root

เด•เตเดฐเดฎเต€เด•เดฐเดฃเด™เตเด™เดณเดฟเตฝ เด—เตเดฐเต‚เดชเตเดชเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚ Tigเตผเดœเตเดœเดธเตเดตเดฒเดฎเดพเด•เตเด•เตเด•, เด•เตˆเดฎเดพเดฑเตเดฑเด‚ เดšเต†เดฏเตเดฏเดฃเด‚ เดตเต†เดฃเตเดŸเตผ เดธเตเดชเต†เดธเดฟเดซเดฟเด•เต เด†เดŸเตเดฐเดฟเดฌเตเดฏเต‚เดŸเตเดŸเต. เด‡เดคเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต, เดกเดฏเดฑเด•เตเดŸเดฑเดฟเดฏเดฟเตฝ 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-enabled.

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 เด…เดคเต เดฌเดจเตเดงเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจ เดชเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เตพ เดจเดฟเตผเดฆเตเดฆเต‡เดถเดฟเด•เตเด•เตเด• Tigเตผเดœเตเดœเดธเตเดตเดฒเดฎเดพเด•เตเด•เตเด•:

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 เด“เดคเดจเตเดฑเดฟเด•เตเด•เต‡เดฑเตเดฑเตผ เดซเต‹เตผเดฎเดพเดฑเตเดฑเดฟเตฝ เด•เตเดฐเต†เดกเตปเดทเตเดฏเดฒเตเด•เตพ เดจเตฝเด•เดพเตป เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเต‹เดŸเต เด†เดตเดถเตเดฏเดชเตเดชเต†เดŸเตเดจเตเดจเต: เด‰เดชเดฏเต‹เด•เตเดคเตƒเดจเดพเดฎเด‚/เดชเดพเดธเตโ€Œเดตเต‡เดกเต+OTP.

เดกเดฟเดซเต‹เตพเดŸเตเดŸเต เดฌเดฃเตเดŸเดฟเตฝ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ, เดคเดฒเดฏเดฟเตฝ เดตเต€เดดเตเดจเตเดจ เดถเดพเดชเด™เตเด™เดณเตเดŸเต† เดŽเดฃเตเดฃเด‚ เดธเด™เตเด•เตฝเดชเตเดชเดฟเด•เตเด•เตเด• เดตเดดเดฟ เดซเตเดฐเต€เดฑเต‡เดกเดฟเดฏเดธเต ั Google Authenticator, เดฎเตŠเดกเตเดฏเต‚เตพ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเตป เดคเต€เดฐเตเดฎเดพเดจเดฟเดšเตเดšเต เดชเดพเด‚ เด…เดคเดฟเดจเดพเตฝ เดŸเต‹เด•เตเด•เตบ เดฎเดพเดคเตเดฐเดฎเต‡ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเต‚ Google Authenticator.

เด’เดฐเต เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเต เด•เดฃเด•เตเดฑเตเดฑเตเดšเต†เดฏเตเดฏเตเดฎเตเดชเต‹เตพ, เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจเดต เดธเด‚เดญเดตเดฟเด•เตเด•เตเดจเตเดจเต:

  • เดซเตเดฐเต€เดฑเต‡เดกเดฟเดฏเดธเต เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเต เดกเตŠเดฎเต†เดฏเตโ€Œเดจเดฟเดฒเดพเดฃเต‹ เด’เดฐเต เดจเดฟเดถเตเดšเดฟเดค เด—เตเดฐเต‚เดชเตเดชเดฟเดฒเดพเดฃเต‹ เดŽเดจเตเดจเต เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเต, เดตเดฟเดœเดฏเดฟเดšเตเดšเดพเตฝ, OTP เดŸเต‹เด•เตเด•เตบ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเต.

โ€œ300+ เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เตพเด•เตเด•เดพเดฏเดฟ เดŽเดจเดฟเด•เตเด•เต เดŽเด™เตเด™เดจเต† OTP เดฐเดœเดฟเดธเตเดฑเตเดฑเตผ เดšเต†เดฏเตเดฏเดพเด‚?โ€ เดŽเดจเตเดจเต เดžเดพเตป เดšเดฟเดจเตเดคเดฟเดšเตเดš เดจเดฟเดฎเดฟเดทเด‚ เดตเดฐเต† เดŽเดฒเตเดฒเดพเด‚ เดฎเดคเดฟเดฏเดพเดฏเดคเดพเดฏเดฟ เด•เดพเดฃเดชเตเดชเต†เดŸเตเดŸเต.

เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเต เดธเต†เตผเดตเดฑเดฟเดฒเต‡เด•เตเด•เต เดฒเต‹เด—เดฟเตป เดšเต†เดฏเตเดฏเดฃเด‚ เดซเตเดฐเต€เดฑเต‡เดกเดฟเดฏเดธเต เดจเดฟเด™เตเด™เดณเตเดŸเต† เด…เด•เตเด•เต—เดฃเตเดŸเดฟเดจเต เด•เต€เดดเดฟเตฝ เดจเดฟเดจเตเดจเต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเด• Google เดชเตเดฐเดพเดฎเดพเดฃเดฟเด•เตป, เด‡เดคเต เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเตเดณเตเดณ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเดพเดฏเดฟ เด’เดฐเต QR เด•เต‹เดกเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด‚. เด‡เดตเดฟเดŸเต†เดฏเดพเดฃเต เดธเดนเดพเดฏเด‚ เดตเดฐเตเดจเตเดจเดคเต. เดทเต†เดฒเตเดฒเดฟเดจเดพเดฌเต‹เด•เตเดธเต เดธเด‚เดฏเต‹เดœเดจเดคเตเดคเดฟเตฝ .เดฌเดพเดทเต_เดชเตเดฐเตŠเดซเตˆเตฝ.

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

เดกเต†เดฎเตบ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดซเดฏเตฝ เดธเตเดฅเดฟเดคเดฟ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต /etc/sysconfig/shellinabox.
เดžเดพเตป เด…เดตเดฟเดŸเต† เดชเต‹เตผเดŸเตเดŸเต 443 เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เตเด•เดฏเตเด‚ เดจเดฟเด™เตเด™เดณเตเดŸเต† เดธเตผเดŸเตเดŸเดฟเดซเดฟเด•เตเด•เดฑเตเดฑเต เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเดพเด‚.

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

เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเต เดฒเดฟเด™เตเด•เต เดชเดฟเดจเตเดคเตเดŸเดฐเตเด•เดฏเตเด‚ เดกเตŠเดฎเต†เดฏเตเตป เด•เตเดฐเต†เดกเดฟเดฑเตเดฑเตเด•เตพ เดจเตฝเด•เตเด•เดฏเตเด‚ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเดพเดฏเดฟ เด’เดฐเต เด•เตเดฏเตเด†เตผ เด•เต‹เดกเต เดธเตเดตเต€เด•เดฐเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดคเดพเตฝ เดฎเดคเดฟเดฏเดพเด•เตเด‚.

เด…เตฝเด—เต‹เดฐเดฟเดคเด‚ เด‡เดชเตเดฐเด•เดพเดฐเดฎเดพเดฃเต:

  • เด’เดฐเต เดฌเตเดฐเต—เดธเดฑเดฟเดฒเต‚เดŸเต† เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเต เดฎเต†เดทเต€เดจเดฟเดฒเต‡เด•เตเด•เต เดฒเต‹เด—เดฟเตป เดšเต†เดฏเตเดฏเตเดจเตเดจเต.
  • เดกเตŠเดฎเต†เดฏเตเตป เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเต† เดชเดฐเดฟเดถเต‹เดงเดฟเดšเตเดšเดฟเดŸเตเดŸเตเดฃเตเดŸเต‹ เดŽเดจเตเดจเต. เด‡เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เด’เดฐเต เดจเดŸเดชเดŸเดฟเดฏเตเด‚ เดŽเดŸเตเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ.
  • เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเต เด’เดฐเต เดกเตŠเดฎเต†เดฏเตเตป เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดพเดฃเต†เด™เตเด•เดฟเตฝ, เด…เดกเตเดฎเดฟเดจเดฟเดธเตเดŸเตเดฐเต‡เดฑเตเดฑเต‡เดดเตเดธเต เด—เตเดฐเต‚เดชเตเดชเดฟเดฒเต† เด…เด‚เด—เดคเตเดตเด‚ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเด‚.
  • เด’เดฐเต เด…เดกเตโ€Œเดฎเดฟเตป เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, Google Authenticator เด•เต‹เตบเดซเดฟเด—เตผ เดšเต†เดฏเตโ€ŒเดคเดฟเดŸเตเดŸเตเดฃเตเดŸเต‹ เดŽเดจเตเดจเต เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเต. เด‡เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เด’เดฐเต เด•เตเดฏเตเด†เตผ เด•เต‹เดกเตเด‚ เด‰เดชเดฏเต‹เด•เตเดคเตƒ เดฒเต‹เด—เตเด”เดŸเตเดŸเตเด‚ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเด‚.
  • เด’เดฐเต เด…เดกเตโ€Œเดฎเดฟเดจเตเด‚ Google เด“เดคเดจเตเดฑเดฟเด•เตเด•เต‡เดฑเตเดฑเดฑเตเด‚ เด•เต‹เตบเดซเดฟเด—เตผ เดšเต†เดฏเตโ€ŒเดคเดฟเดŸเตเดŸเดฟเดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เดฒเต‹เด—เตเด”เดŸเตเดŸเต เดšเต†เดฏเตเดฏเตเด•.
  • เด…เดกเตเดฎเดฟเตป เด†เดฃเต†เด™เตเด•เดฟเตฝ, Google Authenticator เดตเต€เดฃเตเดŸเตเด‚ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเด•. เด•เต‹เตบเดซเดฟเด—เตผ เดšเต†เดฏเตโ€ŒเดคเดฟเดŸเตเดŸเดฟเดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เด’เดฐเต เด•เตเดฏเตเด†เตผ เด•เต‹เดกเต เดธเตƒเดทเตโ€ŒเดŸเดฟเด•เตเด•เตเด‚.

เดŽเดฒเตเดฒเดพ เดฏเตเด•เตเดคเดฟเดฏเตเด‚ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเดพเดฃเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต /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 Authenticator + LDAP + เดซเต‹เตผเดŸเตเดŸเดฟเด—เต‡เดฑเตเดฑเต

  • เดžเด™เตเด™เตพ เด†เดตเดถเตเดฏเดฎเดพเดฏ เด—เตเดฐเต‚เดชเตเดชเตเด•เตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเต, เด†เดตเดถเตเดฏเดฎเต†เด™เตเด•เดฟเตฝ, เด—เตเดฐเต‚เดชเตเดชเตเด•เดณเตเดŸเต† เด†เด•เตเดธเดธเต เดจเดฟเดฏเดจเตเดคเตเดฐเดฃเด‚. เด—เตเดฐเต‚เดชเตเดชเดฟเดจเตเดฑเต† เดชเต‡เดฐเต เด“เดฃเดพเดฃเต Tigเตผเดœเตเดœเดธเตเดตเดฒเดฎเดพเด•เตเด•เตเด• เด•เดŸเดจเตเดจเตเดชเต‹เดฏ เด—เตเดฐเต‚เดชเตเดชเตเดฎเดพเดฏเดฟ เดชเตŠเดฐเตเดคเตเดคเดชเตเดชเต†เดŸเดฃเด‚ เดตเต†เดฃเตเดŸเตผ เดธเตเดชเต†เดธเดฟเดซเดฟเด•เต เด†เดŸเตเดฐเดฟเดฌเตเดฏเต‚เดŸเตเดŸเต เดซเต‹เตผเดŸเตเดŸเดฟเดจเต†เดฑเตเดฑเต-เด—เตเดฐเต‚เดชเตเดชเต-เดจเดพเดฎเด‚.

    Freeradius + Google Authenticator + LDAP + เดซเต‹เตผเดŸเตเดŸเดฟเด—เต‡เดฑเตเดฑเต

  • เด†เดตเดถเตเดฏเดฎเดพเดฏ เดŽเดกเดฟเดฑเตเดฑเดฟเด‚เด—เต เดŽเดธเตเดŽเดธเตเดŽเตฝ- เดชเต‹เตผเดŸเตเดŸเดฒเตเด•เตพ.

    Freeradius + Google Authenticator + LDAP + เดซเต‹เตผเดŸเตเดŸเดฟเด—เต‡เดฑเตเดฑเต

  • เดจเดฏเด™เตเด™เดณเดฟเดฒเต‡เด•เตเด•เต เด—เตเดฐเต‚เดชเตเดชเตเด•เตพ เดšเต‡เตผเด•เตเด•เตเดจเตเดจเต.

    Freeradius + Google Authenticator + LDAP + เดซเต‹เตผเดŸเตเดŸเดฟเด—เต‡เดฑเตเดฑเต

เดˆ เดชเดฐเดฟเดนเดพเดฐเดคเตเดคเดฟเดจเตเดฑเต† เด—เตเดฃเด™เตเด™เตพ:

  • OTP เดตเดดเดฟ เดชเตเดฐเดพเดฎเดพเดฃเต€เด•เดฐเดฟเด•เตเด•เดพเตป เดธเดพเดงเดฟเด•เตเด•เตเด‚ Tigเตผเดœเตเดœเดธเตเดตเดฒเดฎเดพเด•เตเด•เตเด• เด“เดชเตเดชเตบ เดธเต‹เดดเตเดธเต เดชเดฐเดฟเดนเดพเดฐเด‚.
  • 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 เด•เตเดฒเดฏเดจเตเดฑเดฟเตฝ เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเต เดกเตŠเดฎเต†เดฏเตเตป เด•เตเดฐเต†เดกเดฟเดฑเตเดฑเตเด•เตพ เดจเตฝเด•เตเดจเตเดจเต.
  • เดซเตเดฐเต€เดฑเต‡เดกเดฟเดฏเดธเต เด…เด•เตเด•เต—เดฃเตเดŸเดฟเดจเตเดฑเต†เดฏเตเด‚ เดชเดพเดธเตโ€Œเดตเต‡เดกเดฟเดจเตเดฑเต†เดฏเตเด‚ เดธเดพเดงเตเดค เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเต
  • เดชเดพเดธเตโ€Œเดตเต‡เดกเต เดถเดฐเดฟเดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ, เด’เดฐเต เดŸเต‹เด•เตเด•เดฃเดฟเดจเดพเดฏเตเดณเตเดณ เด…เดญเตเดฏเตผเดคเตเดฅเดจ เด…เดฏเดฏเตโ€Œเด•เตเด•เตเด‚.
  • เดŸเต‹เด•เตเด•เตบ เดชเดฐเดฟเดถเต‹เดงเดฟเดšเตเดšเตเดตเดฐเดฟเด•เดฏเดพเดฃเต.
  • เดฒเดพเดญเด‚).

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•