Freeradius + Google OTP + LDAP + Fortigate

์ด์ค‘ ์ธ์ฆ์ด ๋ฐ”๋žŒ์งํ•˜๊ณ  ๊ฐ€์‹œ์ ์ด์ง€๋งŒ ํ•˜๋“œ์›จ์–ด ํ† ํฐ์— ๋Œ€ํ•œ ๋ˆ์ด ์—†๊ณ  ์ผ๋ฐ˜์ ์œผ๋กœ ์ข‹์€ ๋ถ„์œ„๊ธฐ๋ฅผ ์œ ์ง€ํ•˜๋„๋ก ์ œ์•ˆํ•œ๋‹ค๋ฉด ์–ด๋–จ๊นŒ์š”?

์ด ์†”๋ฃจ์…˜์€ ๋งค์šฐ ๋…์ฐฝ์ ์ธ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ธํ„ฐ๋„ท์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ์†”๋ฃจ์…˜์„ ํ˜ผํ•ฉํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์ฃผ์–ด์ง„

๋„๋ฉ”์ธ ์ด๋ฆ„ Active Directory์˜.

์˜ค๋Š˜๋‚  ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ฒ˜๋Ÿผ VPN์„ ํ†ตํ•ด ์ž‘์—…ํ•˜๋Š” ๋„๋ฉ”์ธ ์‚ฌ์šฉ์ž.

VPN ๊ฒŒ์ดํŠธ์›จ์ด ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์š”์ƒˆ.

VPN ํด๋ผ์ด์–ธํŠธ์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ €์žฅ์€ ๋ณด์•ˆ ์ •์ฑ…์— ์˜ํ•ด ๊ธˆ์ง€๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ •์น˜ ํฌํ‹ฐ๋„ท ์ž์‹ ์˜ ํ† ํฐ๊ณผ ๊ด€๋ จํ•˜์—ฌ zhlob ๋ฏธ๋งŒ์ด๋ผ๊ณ  ๋ถ€๋ฅผ ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์ตœ๋Œ€ 10๊ฐœ์˜ ๋ฌด๋ฃŒ ํ† ํฐ์ด ์žˆ๊ณ  ๋‚˜๋จธ์ง€๋Š” ๋งค์šฐ ์ฝ”์…” ๊ฐ€๊ฒฉ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋‚˜๋Š” ์˜คํ”ˆ ์†Œ์Šค๋ฅผ ์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— RSASecureID, Duo ๋“ฑ์„ ๊ณ ๋ คํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์ „์ œ ์กฐ๊ฑด: ์ฃผ์ธ *์•„๋‹ˆ์•ผ ์„ค๋ฆฝ ํ•˜์—ฌ FreeRADIUS, SSD - ๋„๋ฉ”์ธ์— ์ž…๋ ฅํ•˜๋ฉด ๋„๋ฉ”์ธ ์‚ฌ์šฉ์ž๊ฐ€ ์‰ฝ๊ฒŒ ์ธ์ฆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถ”๊ฐ€ ํŒจํ‚ค์ง€: ์‰˜๋ฆฌ๋‚˜ ์ƒ์ž, ๋ฌดํ™”๊ณผ, ์ž์œ  ๋ฐ˜๊ฒฝ LDAP, ํฐํŠธ ๋ฐ˜๋ž€๊ตฐ.tlf ์ €์žฅ์†Œ์—์„œ https://github.com/xero/figlet-fonts.

๋‚ด ์˜ˆ์—์„œ-CentOS 7.8.

์ž‘์—… ๋…ผ๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. VPN์— ์—ฐ๊ฒฐํ•  ๋•Œ ์‚ฌ์šฉ์ž๋Š” ์•”ํ˜ธ ๋Œ€์‹  ๋„๋ฉ”์ธ ๋กœ๊ทธ์ธ๊ณผ OTP๋ฅผ ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์„œ๋น„์Šค ์„ค์ •

ะ’ /etc/raddb/radiusd.conf ๋Œ€์‹  ์‹œ์ž‘ํ•˜๋Š” ์‚ฌ์šฉ์ž ๋ฐ ๊ทธ๋ฃน๋งŒ ํ•˜์—ฌ FreeRADIUS, ์„œ๋น„์Šค ์ดํ›„ ๋ฐ˜์ง€๋ฆ„ ๋ชจ๋“  ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ์˜ ํŒŒ์ผ์„ ์ฝ์„ ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. /์ง‘/.

user = root
group = root

์„ค์ •์—์„œ ๊ทธ๋ฃน์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์š”์ƒˆ, ์ „์†กํ•ด์•ผ ํ•จ ๊ณต๊ธ‰์—…์ฒด๋ณ„ ์†์„ฑ. ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ๋””๋ ‰ํ† ๋ฆฌ์—์„œ 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
        }
}

์„ค์น˜ ํ›„ ์ž์œ  ๋ฐ˜๊ฒฝ 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/์‚ฌ์ดํŠธ ํ™œ์„ฑํ™”/๋‚ด๋ถ€ ํ„ฐ๋„ ์„น์…˜์—์„œ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋‹ค ์‚ฌ์šฉํ•  ์ •์ฑ… ์ด๋ฆ„์ธ group_authorization์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ค‘์š”ํ•œ ์  - ์ •์ฑ…์˜ ์ด๋ฆ„์€ ๋””๋ ‰ํ† ๋ฆฌ์˜ ํŒŒ์ผ ์ด๋ฆ„์œผ๋กœ ๊ฒฐ์ •๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ •์ฑ….d, ๊ทธ๋Ÿฌ๋‚˜ ์ค‘๊ด„ํ˜ธ ์•ž์˜ ํŒŒ์ผ ๋‚ด๋ถ€ ์ง€์‹œ๋ฌธ์— ์˜ํ•ด.
์„น์…˜์—์„œ ์ธ์ฆ ๋™์ผํ•œ ํŒŒ์ผ์—์„œ ์ค„์˜ ์ฃผ์„์„ ์ œ๊ฑฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 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

๊ธฐ๋ณธ ๋ฒˆ๋“ค ๊ตฌํ˜„ ์˜ต์…˜ ํ•˜์—ฌ FreeRADIUS ั Google ์ธ์ฆ ์ž ์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค์Œ ํ˜•์‹์œผ๋กœ ์ž๊ฒฉ ์ฆ๋ช…์„ ์ž…๋ ฅํ•˜๋„๋ก ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ด๋ฆ„/๋น„๋ฐ€๋ฒˆํ˜ธ+OTP.

๊ธฐ๋ณธ ๋ฌถ์Œ ์‚ฌ์šฉ ์‹œ ๋จธ๋ฆฌ์— ๋–จ์–ด์งˆ ์ €์ฃผ์˜ ์ˆ˜๋ฅผ ์ƒ์ƒํ•˜์—ฌ ํ•˜์—ฌ FreeRADIUS ั ๊ตฌ๊ธ€ ์ธ์ฆ ์ž, ๋ชจ๋“ˆ ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. PAM ํ† ํฐ๋งŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ๊ธ€ ์ธ์ฆ ์ž.

์‚ฌ์šฉ์ž๊ฐ€ ์—ฐ๊ฒฐํ•˜๋ฉด ๋‹ค์Œ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

  • Freeradius๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋„๋ฉ”์ธ๊ณผ ํŠน์ • ๊ทธ๋ฃน์— ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์„ฑ๊ณตํ•˜๋ฉด OTP ํ† ํฐ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

โ€œ์–ด๋–ป๊ฒŒ 300๋ช… ์ด์ƒ์˜ OTP๋ฅผ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์„๊นŒ?โ€

์‚ฌ์šฉ์ž๋Š” ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ฒ„์— ๋กœ๊ทธ์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์—ฌ FreeRADIUS ๊ท€ํ•˜์˜ ๊ณ„์ •์—์„œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค. ๊ตฌ๊ธ€ ์ธ์ฆ ์ž, ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ 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

ํฌํ‹ฐ๊ฒŒ์ดํŠธ ์„ค์ •:

  • ์ฐฝ์กฐํ•˜๋‹ค ๋ฐ˜์ง€๋ฆ„-์„ฌ๊ธฐ๋Š” ์‚ฌ๋žŒ

    Freeradius + Google OTP + LDAP + Fortigate

  • ํ•„์š”ํ•œ ๊ทธ๋ฃน์„ ์ƒ์„ฑํ•˜๊ณ  ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๊ทธ๋ฃน๋ณ„๋กœ ์•ก์„ธ์Šค ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฃน ์ด๋ฆ„ ์‚ฌ์šฉ ์š”์ƒˆ ์ „๋‹ฌ๋œ ๊ทธ๋ฃน๊ณผ ์ผ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ณต๊ธ‰์—…์ฒด๋ณ„ ์†์„ฑ Fortinet-๊ทธ๋ฃน-์ด๋ฆ„.

    Freeradius + Google OTP + LDAP + Fortigate

  • ํ•„์š”ํ•œ ํŽธ์ง‘ SSL- ํฌํ„ธ.

    Freeradius + Google OTP + LDAP + Fortigate

  • ์ •์ฑ…์— ๊ทธ๋ฃน ์ถ”๊ฐ€.

    Freeradius + Google OTP + LDAP + Fortigate

์ด ์†”๋ฃจ์…˜์˜ ์žฅ์ :

  • ์—์„œ OTP ์ธ์ฆ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์š”์ƒˆ ์˜คํ”ˆ ์†Œ์Šค ์†”๋ฃจ์…˜.
  • ์‚ฌ์šฉ์ž๋Š” VPN์„ ํ†ตํ•ด ์—ฐ๊ฒฐํ•  ๋•Œ ๋„๋ฉ”์ธ ์•”ํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์—ฐ๊ฒฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹ค์†Œ ๊ฐ„์†Œํ™”๋ฉ๋‹ˆ๋‹ค. 6์ž๋ฆฌ ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ๋ณด์•ˆ์ •์ฑ…์—์„œ ์ œ๊ณตํ•˜๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ๋ณด๋‹ค ์ž…๋ ฅํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ "VPN์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค"๋ผ๋Š” ์ œ๋ชฉ์˜ ํ‹ฐ์ผ“ ์ˆ˜๊ฐ€ ์ค„์–ด๋“ญ๋‹ˆ๋‹ค.

์ถ”์‹ : ์ด ์†”๋ฃจ์…˜์„ Challenge-Response๊ฐ€ ํฌํ•จ๋œ ๋ณธ๊ฒฉ์ ์ธ ์ด์ค‘ ์ธ์ฆ์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค.

์—…๋ฐ์ดํŠธ :

์•ฝ์†๋Œ€๋กœ ์ฑŒ๋ฆฐ์ง€-์‘๋‹ต ์˜ต์…˜์œผ๋กœ ์กฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ :
ํŒŒ์ผ์—์„œ /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๋Š” ๊ณ„์ •๊ณผ ์•”ํ˜ธ์˜ ์œ ํšจ์„ฑ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • ์•”ํ˜ธ๊ฐ€ ์ •ํ™•ํ•˜๋ฉด ํ† ํฐ ์š”์ฒญ์ด ์ „์†ก๋ฉ๋‹ˆ๋‹ค.
  • ํ† ํฐ์„ ํ™•์ธ ์ค‘์ž…๋‹ˆ๋‹ค.
  • ์ด์ต).

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€