рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рджреЛ-рдХрд╛рд░рдХ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╡рд╛рдВрдЫрдиреАрдп рдФрд░ рдХрд╛рдВрдЯреЗрджрд╛рд░ рджреЛрдиреЛрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдЯреЛрдХрди рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдкреИрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рд╡реЗ рдЕрдЪреНрдЫреЗ рдореВрдб рдореЗрдВ рд░рд╣рдиреЗ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣ рд╕рдорд╛рдзрд╛рди рдХреЛрдИ рдЕрддрд┐ рдореМрд▓рд┐рдХ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдкрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХрд╛ рдорд┐рд╢реНрд░рдг рд╣реИред
рддреЛ рджрд┐рдпрд╛
рдбреЛрдореЗрди рдирд╛рдо рд╕рдХреНрд░рд┐рдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛.
рд╡реАрдкреАрдПрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдбреЛрдореЗрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛, рдЖрдЬ рдХреЗ рдХрдИ рд▓реЛрдЧреЛрдВ рдХреА рддрд░рд╣ред
рд╡реАрдкреАрдПрди рдЧреЗрдЯрд╡реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ FortiGate.
рд╡реАрдкреАрдПрди рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдкрд╛рд╕рд╡рд░реНрдб рд╕рд╣реЗрдЬрдирд╛ рд╕реБрд░рдХреНрд╖рд╛ рдиреАрддрд┐ рджреНрд╡рд╛рд░рд╛ рдирд┐рд╖рд┐рджреНрдз рд╣реИред
рд░рд╛рдЬрдиреАрддрд┐ рдлреЛрд░реНрдЯреАрдиреЗрдЯ рдЖрдкрдХреЗ рдЕрдкрдиреЗ рдЯреЛрдХрди рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдЖрдк рдЗрд╕реЗ рдПрдХ рдЬрд╝реНрд▓реЛрдм рд╕реЗ рдХрдо рдирд╣реАрдВ рдХрд╣ рд╕рдХрддреЗ - рдЗрд╕рдореЗрдВ 10 рдореБрдлреНрдд рдЯреЛрдХрди рд╣реИрдВ, рдмрд╛рдХреА - рдмрд╣реБрдд рдЧреИрд░-рдХреЛрд╖реЗрд░ рдХреАрдордд рдкрд░ред рдореИрдВрдиреЗ RSASecureID, Duo рдЗрддреНрдпрд╛рджрд┐ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рдЪрд╛рд╣рддрд╛ рд╣реВрдБред
рдкреВрд░реНрд╡рд╛рд╡рд╢реНрдпрдХрддрд╛рдПрдБ: рдореЗрдЬрд╝рдмрд╛рди * nix рд╕реНрдерд╛рдкрд┐рдд рдХреЗ рд╕рд╛рде freeradius, рдПрд╕рдПрд╕рдПрд╕рдбреА - рдбреЛрдореЗрди рдореЗрдВ рджрд░реНрдЬ, рдбреЛрдореЗрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕ рдкрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрддрд┐рд░рд┐рдХреНрдд рдкреИрдХреЗрдЬ: рд╢реЗрд▓рд┐рдирдмреЙрдХреНрд╕, рдЕрдВрдЬреАрд░, freeradius-ldap, рдлрд╝реЙрдиреНрдЯ рд╡рд┐рджреНрд░реЛрд╣реА.tlf рднрдВрдбрд╛рд░ рд╕реЗ
рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ - CentOS 7.8.
рдХрд╛рд░реНрдп рдХрд╛ рддрд░реНрдХ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ: рд╡реАрдкреАрдПрди рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╕рдордп, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдбреЛрдореЗрди рд▓реЙрдЧрд┐рди рдФрд░ рдУрдЯреАрдкреА рджрд░реНрдЬ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рд╕реЗрд╡рд╛рдПрдБ рд╕реЗрдЯрдЕрдк
╨Т /etc/raddb/radiusd.conf рдХреЗрд╡рд▓ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ рд╕рдореВрд╣ рдЬрд┐рд╕рдХреА рдУрд░ рд╕реЗ рдкреНрд░рд╛рд░рдВрдн рд╣реЛрддрд╛ рд╣реИ freeradius, рд╕реЗрд╡рд╛ рдХреЗ рдмрд╛рдж рд╕реЗ рддреНрд░рд┐рдЬреНрдпрд╛ рд╕рднреА рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЗрдВ рдкрдврд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП /рд╣реЛрдо/.
user = root
group = root
рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рд╕рдореВрд╣реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП FortiGate, рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рд╡рд┐рдХреНрд░реЗрддрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛. рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ 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/рд╕рд╛рдЗрдЯ-рд╕рдХреНрд╖рдо/рдбрд┐рдлрд╝реЙрд▓реНрдЯ ╨╕ raddb/рд╕рд╛рдЗрдЯ-рд╕рдХреНрд╖рдо/рдЖрдВрддрд░рд┐рдХ-рд╕реБрд░рдВрдЧ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдХреЛ рдЕрдзрд┐рдХреГрдд рдореИрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдиреАрддрд┐ рдХрд╛ рдирд╛рдо рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ - рд╕рдореВрд╣_рдкреНрд░рд╛рдзрд┐рдХрд░рдгред рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ - рдкреЙрд▓рд┐рд╕реА рдХрд╛ рдирд╛рдо рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдирд╛рдо рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдиреАрддрд┐.рдбреА, рд▓реЗрдХрд┐рди рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реЗрд╕рд┐рдЬрд╝ рд╕реЗ рдкрд╣рд▓реЗ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрджрд░ рдПрдХ рдирд┐рд░реНрджреЗрд╢ рджреНрд╡рд╛рд░рд╛ред
рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдкреНрд░рдорд╛рдгрд┐рдд рдЙрдиреНрд╣реАрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдЖрдкрдХреЛ рд▓рд╛рдЗрди рдХреЛ рдЕрдирдХрдореНрдореЗрдВрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдкреАрдПрдПрдо.
рдлрд╛рдЗрд▓ рдореИрдВ client.conf рдЙрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ рдЬрд┐рдирдХреЗ рд╕рд╛рде рдпрд╣ рдЬреБрдбрд╝реЗрдЧрд╛ FortiGate:
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 рдкреНрд░рдорд╛рдгрдХ.
рдЬрдм рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрдиреЗрдХреНрдЯ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдирд┐рдореНрди рд╣реЛрддрд╛ рд╣реИ:
- рдлрд╝реНрд░реАрд░реЗрдбрд┐рдпрд╕ рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЛрдореЗрди рдореЗрдВ рд╣реИ рдФрд░ рдХрд┐рд╕реА рдирд┐рд╢реНрдЪрд┐рдд рд╕рдореВрд╣ рдореЗрдВ рд╣реИ рдФрд░, рд╕рдлрд▓ рд╣реЛрдиреЗ рдкрд░, рдУрдЯреАрдкреА рдЯреЛрдХрди рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИред
рдЙрд╕ рдХреНрд╖рдг рддрдХ рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рдерд╛ рдЬрдм рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ "рдореИрдВ 300+ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдУрдЯреАрдкреА рдХреИрд╕реЗ рдкрдВрдЬреАрдХреГрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?"
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕рд░реНрд╡рд░ рдкрд░ рд▓реЙрдЧ рдЗрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ freeradius рдФрд░ рдЕрдкрдиреЗ рдЦрд╛рддреЗ рдХреЗ рдЕрдВрддрд░реНрдЧрдд рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рдПрдБ Google рдкреНрд░рдорд╛рдгрдХ, рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрдпреВрдЖрд░ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ред рдпрд╣реАрдВ рд╕реЗ рдорджрдж рдорд┐рд▓рддреА рд╣реИ. рд╢реЗрд▓рд┐рдирдмреЙрдХреНрд╕ рдХреЗ рд╕рд╛рде рд╕рдореНрдорд┐рд▓рди рдореЗрдВ .bash_profile.
[root@freeradius ~]# yum install -y shellinabox
рдбреЗрдореЙрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рд╕реНрдерд┐рдд рд╣реИ /etc/sysconfig/shellinabox.
рдореИрдВ рд╡рд╣рд╛рдВ рдкреЛрд░реНрдЯ 443 рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЖрдк рдЕрдкрдирд╛ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
[root@freeradius ~]#systemctl enable --now shellinaboxd
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХреЗрд╡рд▓ рд▓рд┐рдВрдХ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдбреЛрдореЗрди рдХреНрд░реЗрдбрд┐рдЯ рджрд░реНрдЬ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрдпреВрдЖрд░ рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
- рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдорд╢реАрди рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░рддрд╛ рд╣реИред
- рдХреНрдпрд╛ рдбреЛрдореЗрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдЬрд╛рдБрдЪ рдХреА рдЧрдИ рд╣реИ. рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдХреЛрдИ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА.
- рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рдбреЛрдореЗрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реИ, рддреЛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рд╕рдореВрд╣ рдореЗрдВ рд╕рджрд╕реНрдпрддрд╛ рдХреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИред
- рдпрджрд┐ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ Google рдкреНрд░рдорд╛рдгрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдПрдХ рдХреНрдпреВрдЖрд░ рдХреЛрдб рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓реЙрдЧрдЖрдЙрдЯ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред
- рдпрджрд┐ рдХреЛрдИ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдирд╣реАрдВ рд╣реИ рдФрд░ Google рдкреНрд░рдорд╛рдгрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдмрд╕ рд▓реЙрдЧрдЖрдЙрдЯ рдХрд░реЗрдВред
- рдпрджрд┐ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рд╣реИ, рддреЛ Google рдкреНрд░рдорд╛рдгрдХ рдХреЛ рджреЛрдмрд╛рд░рд╛ рдЬрд╛рдВрдЪреЗрдВред рдпрджрд┐ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдПрдХ QR рдХреЛрдб рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред
рд╕рднреА рддрд░реНрдХ рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ /etc/sgel/.bash_profile.
рдмрд┐рд▓реНрд▓реА /etc/sgel/.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 рдЙрд╕ рд╕рдореВрд╣ рд╕реЗ рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рд╡рд┐рдХреНрд░реЗрддрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛ рдлреЛрд░реНрдЯрд┐рдиреЗрдЯ-рд╕рдореВрд╣-рдирд╛рдо.
- рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдкрд╛рджрди рдПрд╕рдПрд╕рдПрд▓-рдкреЛрд░реНрдЯрд▓.
- рдиреАрддрд┐рдпреЛрдВ рдореЗрдВ рд╕рдореВрд╣ рдЬреЛрдбрд╝рдирд╛.
рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд╛рдн:
- рдкрд░ рдУрдЯреАрдкреА рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ FortiGate рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рд╕рдорд╛рдзрд╛рди.
- рд╡реАрдкреАрдПрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╕рдордп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЛрдореЗрди рдкрд╛рд╕рд╡рд░реНрдб рджрд░реНрдЬ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХрдиреЗрдХреНрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХреБрдЫ рд╣рдж рддрдХ рд╕рд░рд▓ рдмрдирд╛рддрд╛ рд╣реИред рд╕реБрд░рдХреНрд╖рд╛ рдиреАрддрд┐ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдкрд╛рд╕рд╡рд░реНрдб рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 6 рдЕрдВрдХреЛрдВ рдХрд╛ рдкрд╛рд╕рд╡рд░реНрдб рджрд░реНрдЬ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, "рдореИрдВ рд╡реАрдкреАрдПрди рд╕реЗ рдХрдиреЗрдХреНрдЯ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛" рд╡рд┐рд╖рдп рд╡рд╛рд▓реЗ рдЯрд┐рдХрдЯреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдШрдЯ рдЬрд╛рддреА рд╣реИред
PS рд╣рдо рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреЛ рдЪреБрдиреМрддреА-рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдкреВрд░реНрдг-рд╡рд┐рдХрд╕рд┐рдд рджреЛ-рдХрд╛рд░рдХ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВред
рдЕрдкрдбреЗрдЯ:
рдЬреИрд╕рд╛ рдХрд┐ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдореИрдВрдиреЗ рдЗрд╕реЗ рдЪреБрдиреМрддреА-рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╡рд┐рдХрд▓реНрдк рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ред
рддреЛ:
рдлрд╛рдЗрд▓ рдореИрдВ /etc/raddb/рд╕рд╛рдЗрдЯ-рд╕рдХреНрд╖рдо/рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЕрдиреБрднрд╛рдЧ рдХреЛ рдЕрдзрд┐рдХреГрдд рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:
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
}
рдЕрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рддреНрдпрд╛рдкрди рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╣реЛрддрд╛ рд╣реИ:
- рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡реАрдкреАрдПрди рдХреНрд▓рд╛рдЗрдВрдЯ рдореЗрдВ рдбреЛрдореЗрди рдХреНрд░реЗрдбрд┐рдЯ рджрд░реНрдЬ рдХрд░рддрд╛ рд╣реИред
- рдлрд╝реНрд░реАрд░реЗрдбрд┐рдпрд╕ рдЦрд╛рддреЗ рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдХреА рд╡реИрдзрддрд╛ рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ
- рдпрджрд┐ рдкрд╛рд╕рд╡рд░реНрдб рд╕рд╣реА рд╣реИ, рддреЛ рдЯреЛрдХрди рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред
- рдЯреЛрдХрди рдХрд╛ рд╕рддреНрдпрд╛рдкрди рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ.
- рд▓рд╛рдн)ред
рд╕реНрд░реЛрдд: www.habr.com