์๋
๋๋ฃ๋ค! ์ค๋๋ "์๊ฒฉ ์์
"์ ๋ํ ์ด์ ์ ๊ฐ๋๊ฐ ์ฝ๊ฐ ๊ฐ๋ผ์์์ ๋ ๋๋ถ๋ถ์ ๊ด๋ฆฌ์๊ฐ ํ์ฌ ๋คํธ์ํฌ์ ๋ํ ์ง์์ ์๊ฒฉ ์ก์ธ์ค ์์
์ ์ด๊ฒผ์ต๋๋ค. VPN ๋ณด์ ๊ฐ์ ์ ๋ํ ์ค๋ ๊ฒฝํ์ ๊ณต์ ํ ๋์
๋๋ค. ์ด ๊ธฐ์ฌ๋ ์ด์ IPSec IKEv2 ๋ฐ xAuth์ ์ ํํ์ง ์์ ๊ฒ์
๋๋ค. ์์คํ
์ ๊ตฌ์ถํ๋ ๊ฒ์
๋๋ค.
์ค๋์ ์ฌ์ฉ์ ๊ณ์ ์ด "ํ์ด์ฌํน"๋ ๊ฒฝ์ฐ์๋ MikroTik PPP-VPN์ ๋ณดํธํ๋ ๋ฐฉ๋ฒ์ ์๋ ค๋๋ฆฌ๊ฒ ์ต๋๋ค. ์ด ์ ๋๋ฅผ ๋ด ๊ณ ๊ฐ ์ค ํ ๋ช
์๊ฒ ์๊ฐํ์ ๋ ๊ทธ๋ "์, ์ด์ ์ํ์ ์๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค!"๋ผ๊ณ ๊ฐ๋จํ ์ค๋ช
ํ์ต๋๋ค.
์ด ๋ฐฉ๋ฒ์ ์ธ๋ถ ์ธ์ฆ์ ์๋น์ค๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๋ค. ์์ ์ ๋ผ์ฐํฐ ์์ฒด์์ ๋ด๋ถ์ ์ผ๋ก ์ํ๋ฉ๋๋ค. ์ฐ๊ฒฐ ํด๋ผ์ด์ธํธ์ ๋ํ ๋น์ฉ์ด ์์ต๋๋ค. ์ด ๋ฐฉ๋ฒ์ PC ํด๋ผ์ด์ธํธ์ ๋ชจ๋ฐ์ผ ์ฅ์น ๋ชจ๋์์ ์๋ํฉ๋๋ค.
์ผ๋ฐ์ ์ธ ๋ณดํธ ์ฒด๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- VPN ์๋ฒ์ ์ฑ๊ณต์ ์ผ๋ก ์ฐ๊ฒฐ๋ ์ฌ์ฉ์์ ๋ด๋ถ IP ์ฃผ์๋ ์๋์ผ๋ก ๊ทธ๋ ์ด๋ฆฌ์คํธ์ ์ถ๊ฐ๋ฉ๋๋ค.
- ์ฐ๊ฒฐ ์ด๋ฒคํธ๋ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฐฉ๋ฒ ์ค ํ๋๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์์๊ฒ ์ ์ก๋๋ ์ผํ์ฑ ์ฝ๋๋ฅผ ์๋์ผ๋ก ์์ฑํฉ๋๋ค.
- ์ด ๋ชฉ๋ก์ ์ฃผ์๋ ์ผํ์ฑ ์ํธ๋ฅผ ๋ฐ๊ธฐ ์ํด ๋๊ธฐ ์ค์ธ "์ธ์ฆ์" ์๋น์ค๋ฅผ ์ ์ธํ๊ณ ๋ก์ปฌ ๋คํธ์ํฌ ๋ฆฌ์์ค์ ๋ํ ์ก์ธ์ค๊ฐ ์ ํ๋ฉ๋๋ค.
- ์ฝ๋๋ฅผ ์ ์ํ ํ ์ฌ์ฉ์๋ ๋คํธ์ํฌ์ ๋ด๋ถ ๋ฆฌ์์ค์ ์ก์ธ์คํ ์ ์์ต๋๋ค.
์ฒ์์ผ๋ก ๋ด๊ฐ ์ง๋ฉดํด์ผ ํ๋ ๊ฐ์ฅ ์์ ๋ฌธ์ ๋ ์ฌ์ฉ์์๊ฒ 2FA ์ฝ๋๋ฅผ ๋ณด๋ด๊ธฐ ์ํด ์ฌ์ฉ์์ ๋ํ ์ฐ๋ฝ์ฒ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๊ฒ์ด์์ต๋๋ค. Mikrotik์์๋ ์ฌ์ฉ์์ ํด๋นํ๋ ์์์ ๋ฐ์ดํฐ ํ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๋ฏ๋ก ๊ธฐ์กด "์ค๋ช " ํ๋๋ฅผ ์ฌ์ฉํ์ต๋๋ค.
/ppp ๋น๋ฐ ์ถ๊ฐ ์ด๋ฆ=Petrov ๋น๋ฐ๋ฒํธ=4M@ngr! ์ฝ๋ฉํธ="89876543210"
์ด ๋ฌธ์ ๋ ๋ ์ฌ๊ฐํ ๊ฒ์ผ๋ก ํ๋ช
๋์์ต๋๋ค. ๊ฒฝ๋ก ์ ํ๊ณผ ์ฝ๋ ์ ๋ฌ ๋ฐฉ๋ฒ์
๋๋ค. ํ์ฌ ์ธ ๊ฐ์ง ์ฒด๊ณ๊ฐ ๊ตฌํ๋์ด ์์ต๋๋ค. a) USB ๋ชจ๋์ ํตํ SMS b) ์ด๋ฉ์ผ c) ์ ์ ์
๋ฃฐ๋ฌ ์ฌ์
์์ ๊ธฐ์
๊ณ ๊ฐ์ด ์ฌ์ฉํ ์ ์๋ ์ด๋ฉ์ผ์ ํตํ SMS.
์, SMS ์ฒด๊ณ๋ ๋น์ฉ์ ๋ฐ์์ํต๋๋ค. ๊ทธ๋ฌ๋ ๋ณด๋ฉด "๋ณด์์ ํญ์ ๋์ ๊ดํ ๊ฒ์
๋๋ค"(c).
๋๋ ๊ฐ์ธ์ ์ผ๋ก ์ ์ ๋ฉ์ผ ์ฒด๊ณ๋ฅผ ์ข์ํ์ง ์์ต๋๋ค. ์ธ์ฆ ์ค์ธ ํด๋ผ์ด์ธํธ์ ๋ํด ๋ฉ์ผ ์๋ฒ๋ฅผ ์ฌ์ฉํ ์ ์์ด์ผ ํ๊ธฐ ๋๋ฌธ์ด ์๋๋๋ค. ํธ๋ํฝ์ ๋ถํ ํ๋ ๊ฒ์ ๋ฌธ์ ๊ฐ ์๋๋๋ค. ๊ทธ๋ฌ๋ ํด๋ผ์ด์ธํธ๊ฐ ๋ถ์ฃผ์ํ๊ฒ ๋ธ๋ผ์ฐ์ ์ VPN๊ณผ ์ด๋ฉ์ผ ์ํธ๋ฅผ ๋ชจ๋ ์ ์ฅํ ๋ค์ ๋ฉํฑ์ ๋ถ์คํ ๊ฒฝ์ฐ ๊ณต๊ฒฉ์๋ ์ฌ๊ธฐ์์ ํ์ฌ ๋คํธ์ํฌ์ ๋ํ ์ ์ฒด ์ก์ธ์ค ๊ถํ์ ์ป์ ์ ์์ต๋๋ค.
๊ทธ๋์ ๊ฒฐ์ ๋์์ต๋๋ค. SMS ๋ฉ์์ง๋ฅผ ์ฌ์ฉํ์ฌ ์ผํ์ฑ ์ฝ๋๋ฅผ ์ ๋ฌํฉ๋๋ค.
์ธ ๋ฒ์งธ ๋ฌธ์ ๋ ์ด๋์ MikroTik์์ 2FA์ ๋ํ ์ ์ฌ ๋ฌด์์ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ. RouterOS ์คํฌ๋ฆฝํ ์ธ์ด์๋ random() ํจ์์ ์ ์ฌํ ๊ธฐ๋ฅ์ด ์์ผ๋ฉฐ ์ด์ ์ ๋ช ๊ฐ์ง ๋ชฉ๋ฐ ์คํฌ๋ฆฝํธ ์์ฌ ๋์ ์์ฑ๊ธฐ๋ฅผ ๋ณธ ์ ์ด ์์ต๋๋ค. ๋๋ ์ฌ๋ฌ ๊ฐ์ง ์ด์ ๋ก ๊ทธ๋ค ์ค ์ด๋ ๊ฒ๋ ์ข์ํ์ง ์์์ต๋๋ค.
์ฌ์ค MikroTik์๋ ์์ฌ ๋์ ์ํ์ค ์์ฑ๊ธฐ๊ฐ ์์ต๋๋ค! /certificates scep-server์ ๋งฅ๋ฝ์์ ๊ฒ๋ณด๊ธฐ์๋ ์จ๊ฒจ์ ธ ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ ๋ฐฉ๋ฒ ์ผํ์ฉ ์ํธ๋ฅผ ์ป๋ ๊ฒ์ ์ฝ๊ณ ๊ฐ๋จํฉ๋๋ค - ๋ช ๋ น์ผ๋ก /์ธ์ฆ์ scep-server otp ์์ฑ. ๊ฐ๋จํ ๋ณ์ ํ ๋น ์์ ์ ์ํํ๋ฉด ๋์ค์ ์คํฌ๋ฆฝํธ์์ ์ฌ์ฉํ ์ ์๋ ๋ฐฐ์ด ๊ฐ์ ์ป๊ฒ ๋ฉ๋๋ค.
๋ ๋ฒ์งธ ๋ฐฉ๋ฒ ์ ์ฉํ๊ธฐ ์ฌ์ด ์ผํ์ฉ ๋น๋ฐ๋ฒํธ ์ป๊ธฐ - ์ธ๋ถ ์๋น์ค ์ฌ์ฉ
์ํธ
:global rnd1 [:pick ([/tool fetch url="https://www.random.org/strings/?num=1&len=7&digits=on&unique=on&format=plain&rnd=new" as-value output=user ]->"da
ta") 1 6]
:put $rnd1
์ฝ์์ฉ์ผ๋ก ํ์ํ๋ ์์ฒญ(์คํฌ๋ฆฝํธ ๋ณธ๋ฌธ์ ์ด์ค์ผ์ดํ ํน์ ๋ฌธ์๊ฐ ํ์ํจ)์ $rnd1 ๋ณ์์ XNUMX์๋ฆฌ ๋ฌธ์์ด์ ์์ ํฉ๋๋ค. ๋ค์ "put" ๋ช ๋ น์ ๋จ์ํ MikroTik ์ฝ์์ ๋ณ์๋ฅผ ํ์ํฉ๋๋ค.
๋ค ๋ฒ์งธ ๋ฌธ์ ์ ์ํ๊ฒ ํด๊ฒฐํด์ผ ํ๋ ๋ฌธ์ - ์ด๊ฒ์ ์ฐ๊ฒฐ๋ ํด๋ผ์ด์ธํธ๊ฐ ์ธ์ฆ์ ๋ ๋ฒ์งธ ๋จ๊ณ์์ ์ผํ์ฑ ์ฝ๋๋ฅผ ์ ์กํ๋ ๋ฐฉ๋ฒ๊ณผ ์์น์ ๋๋ค.
MikroTik ๋ผ์ฐํฐ์๋ ์ฝ๋๋ฅผ ์๋ฝํ๊ณ ํน์ ํด๋ผ์ด์ธํธ์ ์ผ์น์ํฌ ์ ์๋ ์๋น์ค๊ฐ ์์ด์ผ ํฉ๋๋ค. ์ ๊ณต๋ ์ฝ๋๊ฐ ์์ํ ๊ฒ๊ณผ ์ผ์นํ๋ ๊ฒฝ์ฐ ํด๋ผ์ด์ธํธ์ ์ฃผ์๋ ํ์ฌ ๋ด๋ถ ๋คํธ์ํฌ์ ๋ํ ์ก์ธ์ค๊ฐ ํ์ฉ๋๋ ์ฃผ์์ธ ํน์ "ํ์ดํธ" ๋ชฉ๋ก์ ํฌํจ๋์ด์ผ ํฉ๋๋ค.
์๋ชป๋ ์๋น์ค ์ ํ์ผ๋ก ์ธํด Mikrotik์ ๋ด์ฅ๋ ์น ํ๋ก์๋ฅผ ์ฌ์ฉํ์ฌ http๋ฅผ ํตํด ์ฝ๋๋ฅผ ์๋ฝํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ๋ฐฉํ๋ฒฝ์ IP ์ฃผ์์ ๋์ ๋ชฉ๋ก๊ณผ ํจ๊ป ์๋ํ ์ ์์ผ๋ฏ๋ก ์ฝ๋ ๊ฒ์์ ์ํํ๊ณ ํด๋ผ์ด์ธํธ IP์ ์ผ์น์ํค๊ณ Layer7 regexp๋ฅผ ์ฌ์ฉํ์ฌ "ํ์ดํธ" ๋ชฉ๋ก์ ์ถ๊ฐํ๋ ๊ฒ์ ๋ฐฉํ๋ฒฝ์ ๋๋ค. ๋ผ์ฐํฐ ์์ฒด์๋ ์กฐ๊ฑด๋ถ DNS ์ด๋ฆ "gw.local"์ด ์ง์ ๋์์ผ๋ฉฐ PPP ํด๋ผ์ด์ธํธ์ ๋ฐํํ๊ธฐ ์ํด ์ ์ A ๋ ์ฝ๋๊ฐ ์์ฑ๋์์ต๋๋ค.
DNS
/ip dns ์ ์ ์ถ๊ฐ ์ด๋ฆ=gw.local ์ฃผ์=172.31.1.1
ํ๋ก์์์ ํ์ธ๋์ง ์์ ํด๋ผ์ด์ธํธ์ ํธ๋ํฝ ์บก์ฒ:
/ip firewall nat add chain=dstnat dst-port=80,443 in-interface=2fa protocol=tcp !src-address-list=2fa_approved action=redirect to-ports=3128
์ด ๊ฒฝ์ฐ ํ๋ก์์๋ ๋ ๊ฐ์ง ๊ธฐ๋ฅ์ด ์์ต๋๋ค.
1. ํด๋ผ์ด์ธํธ์ TCP ์ฐ๊ฒฐ์ ์ฝ๋๋ค.
2. ์ธ์ฆ์ ์ฑ๊ณตํ๋ฉด ํด๋ผ์ด์ธํธ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ธ์ฆ ์ฑ๊ณต์ ์๋ฆฌ๋ ํ์ด์ง ๋๋ ์ฌ์ง์ผ๋ก ๋ฆฌ๋๋ ์ ํฉ๋๋ค.
ํ๋ก์ ๊ตฌ์ฑ
/ip proxy
set enabled=yes port=3128
/ip proxy access
add action=deny disabled=no redirect-to=gw.local./mikrotik_logo.png src-address=0.0.0.0/0
์ค์ํ ๊ตฌ์ฑ ์์๋ฅผ ๋์ดํ๊ฒ ์ต๋๋ค.
- interface-list "2fa" - 2FA ๋ด์์ ์ฒ๋ฆฌํด์ผ ํ๋ ํธ๋ํฝ์ธ ํด๋ผ์ด์ธํธ ์ธํฐํ์ด์ค์ ๋์ ๋ชฉ๋ก์ ๋๋ค.
- address-list "2fa_jailed" - VPN ํด๋ผ์ด์ธํธ์ ํฐ๋ IP ์ฃผ์ ๋ชฉ๋ก์ธ "ํ์";
- address_list "2fa_approved" - XNUMX๋จ๊ณ ์ธ์ฆ์ ์ฑ๊ณต์ ์ผ๋ก ํต๊ณผํ VPN ํด๋ผ์ด์ธํธ์ ํฐ๋ IP ์ฃผ์์ "ํฐ์" ๋ชฉ๋ก์ ๋๋ค.
- ๋ฐฉํ๋ฒฝ ์ฒด์ธ "input_2fa" - tcp ํจํท์์ ์ธ์ฆ ์ฝ๋๊ฐ ์๋์ง ํ์ธํ๊ณ ์ฝ๋ ๋ฐ์ ์์ IP ์ฃผ์๋ฅผ ํ์ํ ๊ฒ๊ณผ ์ผ์น์ํต๋๋ค. ์ฒด์ธ์ ๊ท์น์ ๋์ ์ผ๋ก ์ถ๊ฐ ๋ฐ ์ ๊ฑฐ๋ฉ๋๋ค.
ํจํท ์ฒ๋ฆฌ์ ๋จ์ํ๋ ์์๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์์ง ์ธ์ฆ์ ๋ ๋ฒ์งธ ๋จ๊ณ๋ฅผ ํต๊ณผํ์ง ์์ "ํ์" ๋ชฉ๋ก์ ํด๋ผ์ด์ธํธ์์ ์ค๋ ํธ๋ํฝ์ Layer7 ๊ฒ์ฌ์ ๋ค์ด๊ฐ๊ธฐ ์ํด ํ์ค "์ ๋ ฅ" ์ฒด์ธ์ ๊ท์น์ด ์์ฑ๋์์ต๋๋ค.
์ํธ
/ip firewall filter add chain=input !src-address-list=2fa_approved action=jump jump-target=input_2fa
์ด์ ์ด ๋ชจ๋ ๋ถ๋ฅผ PPP ์๋น์ค์ ์ฐ๊ฒฐํ๊ธฐ ์์ํ๊ฒ ์ต๋๋ค. MikroTik์ ์ฌ์ฉํ๋ฉด ํ๋กํ(ppp-profile)์์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๊ณ ppp ์ฐ๊ฒฐ์ ์ค์ ํ๊ณ ๋๋ ์ด๋ฒคํธ์ ์คํฌ๋ฆฝํธ๋ฅผ ํ ๋นํ ์ ์์ต๋๋ค. ppp-profile ์ค์ ์ PPP ์๋ฒ ์ ์ฒด์ ๊ฐ๋ณ ์ฌ์ฉ์ ๋ชจ๋์๊ฒ ์ ์ฉ๋ ์ ์์ต๋๋ค. ๋์์ ์ฌ์ฉ์์๊ฒ ํ ๋น๋ ํ๋กํ์ด ์ฐ์ ์์๋ฅผ ๊ฐ์ง๋ฉฐ ์๋ฒ ์ ์ฒด์ ๋ํด ์ ํ๋ ํ๋กํ์ ๋งค๊ฐ๋ณ์๋ฅผ ์ง์ ๋ ๋งค๊ฐ๋ณ์๋ก ๋ฎ์ด์๋๋ค.
์ด ์ ๊ทผ ๋ฐฉ์์ ๊ฒฐ๊ณผ๋ก ์ด์ค ์ธ์ฆ์ ์ํ ํน์ ํ๋กํ์ ์์ฑํ๊ณ ๋ชจ๋ ์ฌ์ฉ์์๊ฒ ํ ๋นํ๋ ๊ฒ์ด ์๋๋ผ ํ์ํ๋ค๊ณ ์๊ฐํ๋ ์ฌ์ฉ์์๊ฒ๋ง ํ ๋นํ ์ ์์ต๋๋ค. ์ด๋ PPP ์๋น์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ต์ข ์ฌ์ฉ์๋ฅผ ์ฐ๊ฒฐํ ๋ฟ๋ง ์๋๋ผ ๋์์ ์ฌ์ดํธ ๊ฐ ์ฐ๊ฒฐ์ ๊ตฌ์ถํ๋ ๊ฒฝ์ฐ ๊ด๋ จ์ด ์์ ์ ์์ต๋๋ค.
์๋ก ์์ฑ๋ ํน์ ํ๋กํ์์๋ ์ฃผ์ ๋ฐ ์ธํฐํ์ด์ค์ "ํ์" ๋ชฉ๋ก์ ์ฐ๊ฒฐ๋ ์ฌ์ฉ์์ ์ฃผ์ ๋ฐ ์ธํฐํ์ด์ค๋ฅผ ๋์ ์ผ๋ก ์ถ๊ฐํฉ๋๋ค.
์ํธ
/ppp profile add address-list=2fa_jailed change-tcp-mss=no local-address=192.0.2.254 name=2FA interface-list=2fa only-one=yes remote-address=dhcp_pool1 use-compression=no use-encryption= required use-mpls=no use-upnp=no dns-server=172.31.1.1
dstnat(์ฌ์ ๋ผ์ฐํ ) ์ฒด์ธ์์ ๋น๋ณด์กฐ VPN ํด๋ผ์ด์ธํธ์ ํธ๋ํฝ์ ๊ฐ์งํ๊ณ ์บก์ฒํ๋ ค๋ฉด "address-list" ๋ฐ "interface-list" ๋ชฉ๋ก์ ๋ชจ๋ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
์ค๋น๊ฐ ์๋ฃ๋๋ฉด ์ถ๊ฐ ๋ฐฉํ๋ฒฝ ์ฒด์ธ๊ณผ ํ๋กํ์ด ์์ฑ๋๊ณ 2FA ์ฝ๋ ๋ฐ ๊ฐ๋ณ ๋ฐฉํ๋ฒฝ ๊ท์น์ ์๋ ์์ฑ์ ๋ด๋นํ๋ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํฉ๋๋ค.
PPP ์ฐ๊ฒฐ ์ด๋ฒคํธ์ ๋ํ ํ๋กํ์ ์ฌ์ฉ๋๋ ์ฝ๋
#ะะพะณะธััะตะผ ะดะปั ะพัะปะฐะดะบะธ ะฟะพะปััะตะฝะฝัะต ะฟะตัะตะผะตะฝะฝัะต :log info (
quot;local-address")
:log info (quot;remote-address")
:log info (quot;caller-id")
:log info (quot;called-id")
:log info ([/int pptp-server get (quot;interface") name])
#ะะฑััะฒะปัะตะผ ัะฒะพะธ ะปะพะบะฐะปัะฝัะต ะฟะตัะตะผะตะฝะฝัะต
:local listname "2fa_jailed"
:local viamodem false
:local modemport "usb2"
#ะธัะตะผ ะฐะฒัะพะผะฐัะธัะตัะบะธ ัะพะทะดะฐะฝะฝัั ะทะฐะฟะธัั ะฒ ะฐะดัะตั-ะปะธััะต "2fa_jailed"
:local recnum1 [/ip fi address-list find address=(quot;remote-address") list=$listname]
#ะฟะพะปััะฐะตะผ ะฟัะตะฒะดะพัะปััะฐะนะฝัะน ะบะพะด ัะตัะตะท random.org
#:local rnd1 [:pick ([/tool fetch url="https://www.random.org/strings/?num=1&len=7&digits=on&unique=on&format=plain&rnd=new" as-value output=user]->"data") 0 4] #ะปะธะฑะพ ะฟะพะปััะฐะตะผ ะฟัะตะฒะดะพัะปััะฐะนะฝัะน ะบะพะด ัะตัะตะท ะปะพะบะฐะปัะฝัะน ะณะตะฝะตัะฐัะพั
#:local rnd1 [pick ([/cert scep-server otp generate as-value minutes-valid=1]->"password") 0 4 ]#ะัะตะผ ะธ ะพะฑะฝะพะฒะปัะตะผ ะบะพะผะผะตะฝั ะบ ะทะฐะฟะธัะธ ะฒ ะฐะดัะตั-ะปะธััะต. ะะฝะพัะธะผ ะธัะบะพะผัะน ะบะพะด ะดะปั ะพัะปะฐะดะบะธ
/ip fir address-list set $recnum1 comment=$rnd1
#ะฟะพะปััะฐะตะผ ะฝะพะผะตั ัะตะปะตัะพะฝะฐ ะบัะดะฐ ัะปะฐัั SMS
:local vphone [/ppp secret get [find name=$user] comment]#ะะพัะพะฒะธะผ ัะตะปะพ ัะพะพะฑัะตะฝะธั. ะัะปะธ ะบะปะธะตะฝั ะฟะพะดะบะปััะฐะตััั ะบ VPN ะฟััะผะพ ั ัะตะปะตัะพะฝะฐ ะตะผั ะดะพััะฐัะพัะฝะพ
#ะฑัะดะตั ะฟะตัะตะนัะธ ะฟััะผะพ ะฟะพ ัััะปะบะต ะธะท ะฟะพะปััะตะฝะฝะพะณะพ ัะพะพะฑัะตะฝะธั
:local msgboby ("Your code: ".$comm1."n Or open link http://gw.local/otp/".$comm1."/")# ะัะฟัะฐะฒะปัะตะผ SMS ะฟะพ ะฒัะฑัะฐะฝะฝะพะผั ะบะฐะฝะฐะปั - USB-ะผะพะดะตะผ ะธะปะธ email-to-sms
if $viamodem do={
/tool sms send phone-number=$vphone message=$msgboby port=$modemport }
else={
/tool e-mail send server=a.b.c.d [email protected] [email protected] subject="@".$vphone body=$msgboby }#ะะตะฝะตัะธััะตะผ Layer7 regexp
local vregexp ("otp\/".$comm1)
:local vcomment ("2fa_".(quot;remote-address"))
/ip firewall layer7-protocol add name=(quot;vcomment") comment=(
quot;remote-address") regexp=(
quot;vregexp")
#ะะตะฝะตัะธััะตะผ ะฟัะฐะฒะธะปะพ ะฟัะพะฒะตััััะตะต ะฟะพ Layer7 ััะฐัะธะบ ะบะปะธะตะฝัะฐ ะฒ ะฟะพะธัะบะฐั ะฝัะถะฝะพะณะพ ะบะพะดะฐ
#ะธ ะฝะตะฑะพะปััะพะน ะทะฐัะธัะพะน ะพั ะฑััััะพััะฐ ะบะพะดะพะฒ ั ะฟะพะผะพััั dst-limit
/ip firewall filter add action=add-src-to-address-list address-list=2fa_approved address-list-timeout=none-dynamic chain=input_2fa dst-port=80,443,3128 layer7-protocol=(quot;vcomment") protocol=tcp src-address=(
quot;remote-address") dst-limit=1,1,src-address/1m40s
ํนํ ์๋ฌด ์๊ฐ ์์ด ๋ณต์ฌ-๋ถ์ฌ๋ฃ๊ธฐ๋ฅผ ์ข์ํ๋ ์ฌ๋๋ค์ ์ํด ๊ฒฝ๊ณ ํฉ๋๋ค. ์ฝ๋๋ ํ ์คํธ ๋ฒ์ ์์ ๊ฐ์ ธ์จ ๊ฒ์ด๋ฉฐ ์ฌ์ํ ์คํ๊ฐ ํฌํจ๋ ์ ์์ต๋๋ค. ์ดํดํ๋ ์ฌ๋์ด ์ ํํ ์ด๋์ ์๋์ง ํ์ ํ๋ ๊ฒ์ ์ด๋ ต์ง ์์ต๋๋ค.์ฌ์ฉ์๊ฐ ์ฐ๊ฒฐ์ ๋์ผ๋ฉด "On-Down" ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๊ณ ๋งค๊ฐ๋ณ์๊ฐ ์๋ ํด๋น ์คํฌ๋ฆฝํธ๊ฐ ํธ์ถ๋ฉ๋๋ค. ์ด ์คํฌ๋ฆฝํธ์ ์์ ์ ์ฐ๊ฒฐ์ด ๋๊ธด ์ฌ์ฉ์์ ๋ํด ์์ฑ๋ ๋ฐฉํ๋ฒฝ ๊ท์น์ ์ ๋ฆฌํ๋ ๊ฒ์ ๋๋ค.
PPP ์จ๋ค์ด ์ฐ๊ฒฐ ์ด๋ฒคํธ์ ๋ํ ํ๋กํ์ ์ฌ์ฉ๋๋ ์ฝ๋
:local vcomment ("2fa_".(
quot;remote-address"))
/ip firewall address-list remove [find address=(quot;remote-address") list=2fa_approved] /ip firewall filter remove [find chain="input_2fa" src-address=(
quot;remote-address") ] /ip firewall layer7-protocol remove [find name=$vcomment]
๊ทธ๋ฐ ๋ค์ ์ฌ์ฉ์๋ฅผ ์์ฑํ๊ณ ์ ์ฒด ๋๋ ์ผ๋ถ๋ฅผ XNUMX๋จ๊ณ ์ธ์ฆ ํ๋กํ์ ํ ๋นํ ์ ์์ต๋๋ค.์๋ฐ์ค
์ํธ
/ppp secrets set [find name=Petrov] profile=2FA
ํด๋ผ์ด์ธํธ ์ธก์์ ์ด๋ป๊ฒ ๋ณด์ด๋์ง.
VPN ์ฐ๊ฒฐ์ด ์ค์ ๋๋ฉด SIM ์นด๋๊ฐ ์๋ Android/iOS ์ ํ/ํ๋ธ๋ฆฟ์ ๋ค์๊ณผ ๊ฐ์ SMS๋ฅผ ๋ฐ์ต๋๋ค.
SMS
์ ํ/ํ๋ธ๋ฆฟ์์ ์ง์ ์ฐ๊ฒฐ์ด ์ค์ ๋๋ฉด ๋ฉ์์ง์ ๋งํฌ๋ฅผ ํด๋ฆญํ๊ธฐ๋ง ํ๋ฉด 2FA๋ฅผ ํต๊ณผํ ์ ์์ต๋๋ค. ํธ์ํฉ๋๋ค.
PC์์ VPN ์ฐ๊ฒฐ์ด ์ค์ ๋๋ฉด ์ฌ์ฉ์๋ ์ต์ํ์ ๋น๋ฐ๋ฒํธ ํ์์ ์ ๋ ฅํด์ผ ํฉ๋๋ค. VPN์ ์ค์ ํ ๋ HTML ํ์ผ ํํ์ ์์ ์์์ด ์ฌ์ฉ์์๊ฒ ์ ๊ณต๋ฉ๋๋ค. ํ์ผ์ ๋ฉ์ผ๋ก ๋ณด๋ผ ์๋ ์์ผ๋ฏ๋ก ์ฌ์ฉ์๊ฐ ํ์ผ์ ์ ์ฅํ๊ณ ํธ๋ฆฌํ ์์น์ ๋ฐ๋ก ๊ฐ๊ธฐ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
ํ ์ด๋ธ์ ๋ผ๋ฒจ
์ฌ์ฉ์๊ฐ ๋ฐ๋ก ๊ฐ๊ธฐ๋ฅผ ํด๋ฆญํ๋ฉด ๊ฐ๋จํ ์ฝ๋ ์ ๋ ฅ ์์์ด ์ด๋ฆฌ๊ณ ์ด๋ฆฐ URL์ ์ฝ๋๊ฐ ๋ถ์ฌ๋ฃ์ด์ง๋๋ค.
์คํฌ๋ฆฐ ํํ
๊ฐ์ฅ ์์์ ์ธ ํํ๋ฅผ ์๋ก ๋ค์ด ์ค๋ช ํฉ๋๋ค. ์ํ๋ ์ฌ๋์ ์ค์ค๋ก ์์ ํ ์ ์์ต๋๋ค.
2fa_login_mini.html
<html> <head> <title>SMS OTP login</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> <body> <form name="login" action="location.href='http://gw.local/otp/'+document.getElementById(โtext').value" method="post" <input id="text" type="text"/> <input type="button" value="Login" onclick="location.href='http://gw.local/otp/'+document.getElementById('text').value"/> </form> </body> </html>
์ธ์ฆ์ ์ฑ๊ณตํ๋ฉด ๋ธ๋ผ์ฐ์ ์ MikroTik ๋ก๊ณ ๊ฐ ํ์๋์ด ์ธ์ฆ ์ฑ๊ณต์ ์๋ฆฝ๋๋ค.
์ด๋ฏธ์ง๋ WebProxy Deny Redirect๋ฅผ ์ฌ์ฉํ์ฌ ๋ด์ฅ๋ MikroTik ์น ์๋ฒ์์ ๋ฐํ๋ฉ๋๋ค.
"ํซ์คํ" ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉ์ ์ ์ํ ์ ์๊ณ ๊ฑฐ๊ธฐ์ ์์ ์ ๋ฒ์ ์ ์ ๋ก๋ํ๊ณ WebProxy๋ก ๊ฑฐ๋ถ ๋ฆฌ๋๋ ์ URL์ ์ค์ ํ ์ ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
๊ฐ์ฅ ์ ๋ ดํ "์ฅ๋๊ฐ" Mikrotik์ 20๋ฌ๋ฌ์ ๊ตฌ์ ํ๊ณ 500๋ฌ๋ฌ์ง๋ฆฌ ๋ผ์ฐํฐ๋ฅผ ๊ทธ๊ฒ์ผ๋ก ๊ต์ฒดํ๋ ค๋ ์ฌ๋๋ค์๊ฒ ํฐ ์์ฒญ์ด ์์ต๋๋ค. ๊ทธ๋ ๊ฒ ํ์ง ๋ง์ญ์์ค. "hAP Lite" / "hAP mini"(ํ ์ก์ธ์ค ํฌ์ธํธ)์ ๊ฐ์ ์ฅ์น๋ CPU(smips)๊ฐ ๋งค์ฐ ์ฝํ์ฌ ๋น์ฆ๋์ค ์ธ๊ทธ๋จผํธ์ ๋ถํ๋ฅผ ์ฒ๋ฆฌํ์ง ๋ชปํ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
๊ฒฝ๊ณ ! ์ด ์๋ฃจ์ ์๋ ํ ๊ฐ์ง ๋จ์ ์ด ์์ต๋๋ค. ํด๋ผ์ด์ธํธ๊ฐ ์ฐ๊ฒฐํ๊ฑฐ๋ ์ฐ๊ฒฐ์ ๋์ผ๋ฉด ๋ผ์ฐํฐ๊ฐ ๋นํ๋ฐ์ฑ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๋ ค๊ณ ์๋ํ๋ ๊ตฌ์ฑ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ฐ์ํฉ๋๋ค. ๋ง์ ์์ ํด๋ผ์ด์ธํธ์ ๋น๋ฒํ ์ฐ๊ฒฐ ๋ฐ ์ฐ๊ฒฐ ํด์ ๋ก ์ธํด ๋ผ์ฐํฐ์ ๋ด๋ถ ์ ์ฅ์ ์ฑ๋ฅ์ด ์ ํ๋ ์ ์์ต๋๋ค.
์ถ์ : ํด๋ผ์ด์ธํธ์ ์ฝ๋๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ์ ํ๋ก๊ทธ๋๋ฐ ๋ฅ๋ ฅ์ด ์ถฉ๋ถํ ํ ํ์ฅ ๋ฐ ๋ณด์๋ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ํ ๋ ๊ทธ๋จ์ผ๋ก ๋ฉ์์ง๋ฅผ ๋ณด๋ด๊ฑฐ๋ ... ์ต์ ์ ์ ์ํ ์ ์์ต๋๋ค!
์ด ๊ธฐ์ฌ๊ฐ ๊ทํ์๊ฒ ์ ์ฉํ๊ณ ์ค์๊ธฐ์ ์ ๋คํธ์ํฌ๋ฅผ ์ข ๋ ์์ ํ๊ฒ ๋ง๋๋ ๋ฐ ๋์์ด ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
์ถ์ฒ : habr.com