แ แ แแแฎแแแแ, แแฃ แแ แคแแฅแขแแ แแแแ แแแแแแขแแคแแแแชแแ แกแแกแฃแ แแแแแช แแ แแก แแ แแแฎแแแฌแแแ, แแแแ แแ แขแแฅแแแแแก แขแแแแแแแแกแแแแก แคแฃแแ แแ แแ แแก แแ แแแแแแแ แแแ แ แฎแแกแแแแแ แแแ แฉแแแแก แแแแแแแแแแแ.
แแก แแแแแกแแแแแ แแ แแ แแก แ แแฆแแช แกแฃแแแ แแ แแแแแแแฃแ แ, แแ แแแแ แแแขแแ แแแขแจแ แแแแแแแ แกแฎแแแแแกแฎแแ แแแแแฌแงแแแขแแแแแแแแก แแแแแแ.
แแกแ แแแชแแแฃแแ
แแแแแแแก Active Directory.
แแแแแแแก แแแแฎแแแ แแแแแแ, แ แแแแแแแช แแฃแจแแแแแ VPN-แแ, แ แแแแ แช แแฆแแก แแแแ แ.
แแแฅแแแแแแก แ แแแแ แช VPN แแแ แแแญแ แคแแ แขแแแแขแ.
VPN แแแแแแขแแกแแแแก แแแ แแแแก แจแแแแฎแแ แแแ แซแแแฃแแแ แฃแกแแคแ แแฎแแแแแก แแแแแขแแแแ.
แแแแแขแแแ Fortinet แกแแแฃแแแ แขแแแแแแแแแ แแแแแ แแแแแจแ, แแฅแแแ แแ แจแแแแซแแแแ แแแก แแแแ แฅแแแแ แแแแแแ แแแแแแแก - แแ แแก 10 แฃแคแแกแ แแแจแแแ, แแแแแ แฉแแแ - แซแแแแแ แแ แแแแจแแ แฃแแ แคแแกแแ. แแ แแ แแแแแแฎแแแ RSASecureID, Duo แแ แแกแแแแกแ, แ แแแแแ แฆแแ แฌแงแแ แ แแแแแ.
แฌแแแแแแ แแแแแ: แแแกแแแแซแแแ * nix แแแงแแแแแฃแแ แแแแแกแฃแคแแแ แ แแแแฃแกแ, แกแกแกแ - แแแแแแจแ แจแแกแฃแแ, แแแแแแแก แแแแฎแแแ แแแแแแก แแแ แขแแแแ แจแแฃแซแแแแ แแแกแแ แแแแแแขแแคแแแแชแแ.
แแแแแขแแแแแ แแแแแขแแแ: แจแแแแแแก แงแฃแแ, แแแฆแแ, แแแแแกแฃแคแแแ แ แแแแฃแกแ-แแแแแ, แจแ แแคแขแ แแแแแแแฎแ.tlf แกแแชแแแแแแ
แฉแแแก แแแแแแแแจแ - CentOS 7.8.
แแฃแจแแแแแก แแแแแแ แฃแแแ แแงแแก แจแแแแแแ: VPN-แแแ แแแแแแจแแ แแแแกแแก แแแแฎแแแ แแแแแแ แแแ แแแแก แแแชแแแแ แฃแแแ แจแแแงแแแแแก แแแแแแแก แจแแกแแแ แแ OTP.
แกแแ แแแกแแแแก แแแงแแแแแ
ะ /etc/raddb/radiusd.conf แแฎแแแแ แแแแฎแแแ แแแแแ แแ แฏแแฃแคแ, แ แแแแแก แกแแฎแแแแ แแฌแงแแแ แแแแแกแฃแคแแแ แ แแแแฃแกแ, แแแแกแแฎแฃแ แแแแแแแ แ แแแแฃแกแ แฃแแแ แจแแแซแแแก แคแแแแแแแก แฌแแแแแฎแแ แงแแแแ แฅแแแแแ แแฅแขแแ แแแจแ / แแแแแแ แ /.
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-แฉแแ แแฃแแแ/แแแแฃแแแกแฎแแแแ ะธ 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 Authenticator แแแแแฎแแแแ แแแแฎแแแ แแแแแกแแแ แจแแแงแแแแแก แ แฌแแฃแแแแแแ แกแแแแแแแ แคแแ แแแขแจแ: แแแแฎแแแ แแแแแก แกแแฎแแแ แแแ แแแ+OTP.
แแแแซแฆแแแแ แ แแแแแแแแแก แฌแแ แแแกแแฎแแแ, แ แแแแแแช แแแแชแแแ แแแแแ, แแแแฃแแแกแฎแแแแ แแแแแขแแก แแแแแงแแแแแแก แจแแแแฎแแแแแจแ แแแแแกแฃแคแแแ แ แแแแฃแกแ ั Google Authenticator, แแแแแฌแงแแ แแแแฃแแแก แแแแคแแแฃแ แแชแแแก แแแแแงแแแแแ Pam แ แแแ แแฎแแแแ แแแขแแแแก แจแแแแฌแแแแ แแงแแก แจแแกแแซแแแแแแ Google Authenticator.
แ แแแแกแแช แแแแฎแแแ แแแแแ แแแแแจแแ แแแก, แฎแแแแ แจแแแแแแ:
- Freeradius แแแแฌแแแแก แแ แแก แแฃ แแ แ แแแแฎแแแ แแแแแ แแแแแแจแ แแ แแแ แแแแฃแ แฏแแฃแคแจแ แแ แฌแแ แแแขแแแแก แจแแแแฎแแแแแจแ แแแแฌแแแแก OTP แขแแแแแก.
แงแแแแแคแแ แ แกแแแแแ แแกแแ แแแ แแแ แแแแแแงแฃแ แแแแแ แแ แแแแแแขแแแแ, แ แแแแกแแช แแ แแแแแคแแฅแ แ: โแ แแแแ แจแแแแซแแแ แแแแ แแแแกแขแ แแ แแ OTP 300+ แแแแฎแแแ แแแแแกแแแแก?โ
แแแแฎแแแ แแแแแ แฃแแแ แจแแแแแแก แกแแ แแแ แแ แแแแแกแฃแคแแแ แ แแแแฃแกแ แแ แแฅแแแแ แแแแแ แแจแแแแ แแ แแแฃแจแแแ แแแแแแแชแแ google authenticator, แ แแแแแแช แแแแแแแฃแจแแแแแก QR แแแแก แแแแแแแชแแแกแแแแก แแแแฎแแแ แแแแแกแแแแก. แกแฌแแ แแ แแฅ แแแแแก แแแฎแแแ แแแ. แจแแแแแแก แงแฃแแ แแแแแแแแชแแแจแ . bash_profile.
[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.
แแแขแ /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-แแก แแแงแแแแแ:
- แฉแแแ แแฅแแแแ แ แแแแฃแกแ- แกแแ แแแ แ
- แฉแแแ แแฅแแแแ แกแแญแแ แ แฏแแฃแคแแแก, แกแแญแแ แแแแแก แจแแแแฎแแแแแจแ, แฏแแฃแคแแแแก แแแแ แฌแแแแแแก แแแแขแ แแแก. แฏแแฃแคแแก แกแแฎแแแ แฉแแ แแฃแแแ แคแแ แขแแแแขแ แฃแแแ แแแแฎแแแแแแก แฏแแฃแคแก, แ แแแแแแช แแแแแแ แแแแงแแแแแแแก แกแแแชแแคแแแฃแ แ แแขแ แแแฃแขแ Fortinet-แฏแแฃแคแ-แกแแฎแแแ.
- แกแแญแแ แแแแแก แ แแแแฅแขแแ แแแ SSL-แแแ แขแแแแแ.
- แฏแแฃแคแแแแก แแแแแขแแแ แแแแแขแแแแจแ.
แแ แแแแแฌแงแแแขแแก แฃแแแ แแขแแกแแแแแ:
- แจแแกแแซแแแแแแแ แแแแแแขแแคแแแแชแแ แฉแแ แแฃแแ 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