Π¨ΡΠΎ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ Π°ΠΊΠΎ ΡΠ°ΠΊΠ°ΡΠ΅ Π΄Π²ΠΎΡΠ°ΠΊΡΠΎΡΠ½Π° Π°Π²ΡΠ΅Π½ΡΠΈΠΊΠ°ΡΠΈΡΠ° ΠΈ ΡΠ΅ Π΄Π²ΠΎΡΠΌΠΈΡΠ΅, Π½ΠΎ Π½Π΅ΠΌΠ° ΠΏΠ°ΡΠΈ Π·Π° Ρ Π°ΡΠ΄Π²Π΅ΡΡΠΊΠΈ ΡΠΎΠΊΠ΅Π½ΠΈ ΠΈ Π²ΠΎΠΎΠΏΡΡΠΎ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π°Ρ Π΄Π° ΡΠ΅ Π·Π°Π΄ΡΠΆΠΈΡΠ΅ Π½Π° Π΄ΠΎΠ±ΡΠΎΡΠΎ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
ΠΠ²Π° ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ Π΅ Π½Π΅ΡΡΠΎ ΡΡΠΏΠ΅Ρ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π½ΠΎ, ΡΡΠΊΡ ΠΌΠ΅ΡΠ°Π²ΠΈΠ½Π° ΠΎΠ΄ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡΠ° ΠΊΠΎΠΈ ΡΠ΅ Π½Π°ΠΎΡΠ°Π°Ρ Π½Π° ΠΠ½ΡΠ΅ΡΠ½Π΅Ρ.
ΠΠ½Π°ΡΠΈ ΡΠΎΠ° Π΅ Π΄Π°Π΄Π΅Π½ΠΎ
ΠΠΌΠ΅ Π½Π° Π΄ΠΎΠΌΠ΅Π½ Active Directory.
ΠΠΎΡΠΈΡΠ½ΠΈΡΠΈ Π½Π° Π΄ΠΎΠΌΠ΅Π½ΠΈ ΠΊΠΎΠΈ ΡΠ°Π±ΠΎΡΠ°Ρ ΠΏΡΠ΅ΠΊΡ VPN, ΠΊΠ°ΠΊΠΎ ΠΈ ΠΌΠ½ΠΎΠ³ΡΠΌΠΈΠ½Π° Π΄Π΅Π½Π΅Ρ.
VPN Π΄Π΅Π»ΡΠ²Π° ΠΊΠ°ΠΊΠΎ ΠΏΠΎΡΡΠ° Π’Π²ΡΠ΄ΠΈ.
ΠΠ°ΡΡΠ²ΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° Π»ΠΎΠ·ΠΈΠ½ΠΊΠ°ΡΠ° Π·Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΡ VPN Π΅ Π·Π°Π±ΡΠ°Π½Π΅ΡΠΎ ΡΠΎ Π±Π΅Π·Π±Π΅Π΄Π½ΠΎΡΠ½Π°ΡΠ° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°.
ΠΠΎΠ»ΠΈΡΠΈΠΊΠ° Fortinet Π²ΠΎ ΠΎΠ΄Π½ΠΎΡ Π½Π° ΡΠΎΠΏΡΡΠ²Π΅Π½ΠΈΡΠ΅ ΡΠΎΠΊΠ΅Π½ΠΈ, Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΎ Π½Π°ΡΠ΅ΡΠ΅ΡΠ΅ ΠΏΠΎΠΌΠ°Π»ΠΊΡ ΠΎΠ΄ redneck - ΠΈΠΌΠ° Π΄ΡΡΠΈ 10 Π΅Π΄ΠΈΠ½ΠΈΡΠΈ Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΠΈ ΡΠΎΠΊΠ΅Π½ΠΈ, ΠΎΡΡΠ°Π½Π°ΡΠΈΡΠ΅ ΡΠ΅ ΠΏΠΎ ΠΌΠ½ΠΎΠ³Ρ Π½Π΅ΠΊΠΎΡΠ΅Ρ ΡΠ΅Π½Π°. ΠΠ΅ Π³ΠΈ Π·Π΅ΠΌΠ°Π² ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ RSASecureID, Duo ΠΈ ΡΠ»ΠΈΡΠ½ΠΎ, Π·Π°ΡΠΎΠ° ΡΡΠΎ ΡΠ°ΠΊΠ°ΠΌ ΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΊΠΎΠ΄.
ΠΡΠ΅Π΄ΡΡΠ»ΠΎΠ²ΠΈ: Π΄ΠΎΠΌΠ°ΡΠΈΠ½ * nix ΡΠΎ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½ ΡΠ»ΠΎΠ±ΠΎΠ΄Π΅Π½ ΡΠ°Π΄ΠΈΡΡ, ssd β Π²Π½Π΅ΡΠ΅Π½ Π²ΠΎ Π΄ΠΎΠΌΠ΅Π½ΠΎΡ, ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΈΡΠ΅ Π½Π° Π΄ΠΎΠΌΠ΅Π½ΠΎΡ ΠΌΠΎΠΆΠ°Ρ Π»Π΅ΡΠ½ΠΎ Π΄Π° ΡΠ΅ Π°Π²ΡΠ΅Π½ΡΠΈΡΠΈΡΠ°Π°Ρ Π½Π° Π½Π΅Π³ΠΎ.
ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΈ: ΡΠ΅Π»ΠΈΠ½Π°Π±ΠΎΠΊΡ, ΡΠΈΠ»Π΅ΡΠ°, ΡΠ»ΠΎΠ±ΠΎΠ΄Π΅Π½ ΡΠ°Π΄ΠΈΡΡ-Π»Π΄Π°ΠΏ, ΡΠΎΠ½Ρ Π±ΡΠ½ΡΠΎΠ²Π½ΠΈΠΊ.tlf ΠΎΠ΄ ΡΠΊΠ»Π°Π΄ΠΈΡΡΠ΅ΡΠΎ
ΠΠΎ ΠΌΠΎΡΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ, 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:
- ΠΠΈΠ΅ ΡΠΎΠ·Π΄Π°Π²Π°ΠΌΠ΅ ΡΠ°Π΄ΠΈΡΡ- ΡΠ΅ΡΠ²Π΅Ρ
- ΠΠΈ ΡΠΎΠ·Π΄Π°Π²Π°ΠΌΠ΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΈΡΠ΅ Π³ΡΡΠΏΠΈ, Π΄ΠΎΠΊΠΎΠ»ΠΊΡ Π΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ Π΄Π° ΡΠ΅ ΡΠ°Π·Π»ΠΈΠΊΡΠ²Π° ΠΏΡΠΈΡΡΠ°ΠΏΠΎΡ ΠΏΠΎ Π³ΡΡΠΏΠ°. ΠΠΌΠ΅ΡΠΎ Π½Π° Π³ΡΡΠΏΠ°ΡΠ° Π΅ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΎ Π’Π²ΡΠ΄ΠΈ ΠΌΠΎΡΠ° Π΄Π° ΠΎΠ΄Π³ΠΎΠ²Π°ΡΠ° Π½Π° Π³ΡΡΠΏΠ°ΡΠ° Π²ΠΎ ΠΊΠΎΡΠ° Π΅ ΠΈΡΠΏΡΠ°ΡΠ΅Π½Π° Π‘ΠΏΠ΅ΡΠΈΡΠΈΡΠ΅Π½ Π°ΡΡΠΈΠ±ΡΡ Π½Π° ΠΏΡΠΎΠ΄Π°Π²Π°ΡΠΎΡ Π€ΠΎΡΡΠΈΠ½Π΅Ρ-ΠΡΡΠΏΠ°-ΠΠΌΠ΅.
- Π£ΡΠ΅Π΄ΡΠ²Π°ΡΠ΅ Π½Π° ΠΏΠΎΡΡΠ΅Π±Π½ΠΈΡΠ΅ SSL-ΠΏΠΎΡΡΠ°Π»ΠΈ.
- ΠΠΎΠ΄Π°Π²Π°ΡΠ΅ Π³ΡΡΠΏΠΈ Π²ΠΎ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈΡΠ΅.
ΠΡΠ΅Π΄Π½ΠΎΡΡΠΈΡΠ΅ Π½Π° ΠΎΠ²Π° ΡΠ΅ΡΠ΅Π½ΠΈΠ΅:
- ΠΠΎΠΆΠ½ΠΎ Π΅ Π΄Π° ΡΠ΅ Π°Π²ΡΠ΅Π½ΡΠΈΡΠΈΡΠ° ΠΏΡΠ΅ΠΊΡ Π²ΠΊΠ»ΡΡΠ΅Π½ 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