์๊ท๋ชจ RTFM/์คํผ์ธ SSH/RDP/๊ธฐํ๋ฅผ ํตํด ์ ์ธ๊ณ ์ด๋์์๋ ์์ ์ ์๋ฒ์ ์ก์ธ์คํ ์ ์๋๋ก ์์ ๊ณผ ์ฌ๋ํ๋ ์ฌ๋์ ์ ๊ณตํด์ผ ํ๋ ์ฌ๋๋ค์ ์ํ ๊ฒ์ ๋๋ค.
์ฐ๋ฆฌ๋ VPN์ด๋ โโ๊ธฐํ ๋ถ๊ฐ ๊ธฐ๋ฅ ์์ด ์ด๋ค ์ฅ์น์์๋ ์์ ์ ์ํํด์ผ ํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์๋ฒ๋ฅผ ๊ฐ์ง๊ณ ๋๋ฌด ๋ง์ ์ด๋์ ํ ํ์๊ฐ ์๋๋ก ๋ง์ด์ฃ .
์ด๊ฒ์ ํ์ํ ๊ฒ์
๋ฌผ๋ก "๋ชจ๋ ๊ฒ์ด ์ธํฐ๋ท์ ์์ต๋๋ค."
์๋ฅผ ๋ค์ด Fedora/CentOS๋ฅผ ์ฌ์ฉํ์ฌ ์ฐ์ตํ๊ฒ ์ง๋ง ๊ทธ๊ฒ์ ์ค์ํ์ง ์์ต๋๋ค.
๋ฐ์ฐจ๋ ์ด ๋ฌธ์ ์ ๋ํ ์ด๋ณด์์ ์ ๋ฌธ๊ฐ ๋ชจ๋์๊ฒ ์ ํฉํ๋ฏ๋ก ์๊ฒฌ์ด ์์ง๋ง ๋ ์งง์ ๊ฒ์ ๋๋ค.
1. ์๋ฒ
-
๋ ธํฌ ์๋ฒ๋ฅผ ์ค์นํ์ญ์์ค:
yum/dnf install knock-server
-
๊ตฌ์ฑํฉ๋๋ค(์: ssh์์) - /etc/knockd.conf:
[options] UseSyslog interface = enp1s0f0 [SSHopen] sequence = 33333,22222,11111 seq_timeout = 5 tcpflags = syn start_command = iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT cmd_timeout = 3600 stop_command = iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT [SSHclose] sequence = 11111,22222,33333 seq_timeout = 5 tcpflags = syn command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
'์ด๋ฆผ' ๋ถ๋ถ์ 1์๊ฐ ํ์ ์๋์ผ๋ก ๋ซํ๋๋ก ์ค์ ๋์ด ์์ต๋๋ค. ๋น์ ์ ๊ฒฐ์ฝ ์์ง ๋ชปํฉ๋๋ค ...
-
/etc/sysconfig/iptables:
... -A INPUT -p tcp -m state --state NEW -m tcp --dport 11111 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 22222 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 33333 -j ACCEPT ...
-
์์ผ๋ก:
service iptables restart service knockd start
-
๋ด๋ถ์์ ํ์ ํ๋ ๊ฐ์ Windows Server์ RDP๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค(/etc/knockd.conf; ์ทจํฅ์ ๋ง๊ฒ ์ธํฐํ์ด์ค ์ด๋ฆ์ ๋์ฒดํ์ญ์์ค).
[RDPopen] sequence = 44444,33333,22222 seq_timeout = 5 tcpflags = syn start_command = iptables -t nat -A PREROUTING -s %IP% -i enp1s0f0 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.0.2 cmd_timeout = 3600 stop_command = iptables -t nat -D PREROUTING -s %IP% -i enp1s0f0 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.0.2 [RDPclose] sequence = 22222,33333,44444 seq_timeout = 5 tcpflags = syn command = iptables -t nat -D PREROUTING -s %IP% -i enp1s0f0 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.0.2
๋ค์ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ์๋ฒ์ ํด๋ผ์ด์ธํธ์์ ๋ชจ๋ ํฅ์ ์ถ์ ํฉ๋๋ค.
iptables -S
.
2. ๊ฐํด์ ๋ํ ์๋ด
knockd.conf:
๋ง๋์๋ ๋ชจ๋ ๊ฒ์ด ๋ด๊ฒจ ์๋๋ฐ(๋จ ์ด๋ ๋ถ์ ํํจ), ๋ ธํฌ๋๋ ๋ฉ์์ง์ ๊ฝค ์ธ์ํ ์น๊ตฌ์ด๋ฏ๋ก ๊ฐ๋ณํ ์ฃผ์๊ฐ ํ์ํ๋ค.
- ๋ฒ์
Fedora/CentOS ์ ์ฅ์์์ ์ค๋์ ์ต์ ๋ฒ์ ์ 0.63์ ๋๋ค. UDP๋ฅผ ์ํ๋ ์ฌ๋ - 0.70 ํจํท์ ์ฐพ์ผ์ธ์. - ์ธํฐํ์ด์ค
๊ธฐ๋ณธ Fedora/CentOS ๊ตฌ์ฑ์์๋ ์ด ์ค ์๋. ์์ผ๋ก ์ถ๊ฐํ์ธ์. ๊ทธ๋ ์ง ์์ผ๋ฉด ์๋ํ์ง ์์ต๋๋ค. - ์๊ฐ ์ ํ
์ฌ๊ธฐ์๋ ์ทจํฅ์ ๋ฐ๋ผ ์ ํํ์๋ฉด ๋ฉ๋๋ค. ํด๋ผ์ด์ธํธ๊ฐ ๋ชจ๋ ์์ ์ ์ํํ ์ถฉ๋ถํ ์๊ฐ์ ๊ฐ์ ธ์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ํฌํธ ์ค์บ๋ ๋ด์ด ์๋ํ์ง ์๊ฒ ๋ฉ๋๋ค(๊ทธ๋ฆฌ๊ณ 146%๊ฐ ์ค์บํฉ๋๋ค). - ์์/์ค์ง/๋ช
๋ น.
๋ช ๋ น์ด ํ๋ ์์ผ๋ฉด ๋ช ๋ น, ๋ ๊ฐ๊ฐ ์์ผ๋ฉด start_command+stop_command์ ๋๋ค.
์ค์๋ฅผ ํ๋ฉด knockd๋ ์นจ๋ฌต์ ์ ์งํ์ง๋ง ์๋ํ์ง ์์ต๋๋ค. - ํ๋กํ
์ด๋ก ์ ์ผ๋ก๋ UDP๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ค์ ๋ก tcp์ udp๋ฅผ ์์ด์ ํ๋๋ฐ, ๋ฐ๋ฆฌ ํด๋ณ์ ํด๋ผ์ด์ธํธ๋ XNUMX๋ฒ์งธ์๋ง ๊ฒ์ดํธ๋ฅผ ์ด ์ ์์์ต๋๋ค. TCP๋ ํ์ํ ๋ ๋์ฐฉํ์ง๋ง UDP๋ ์ฌ์ค์ด ์๋๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ ๋ค์ ๋ง์ ๋ฌธ์ ์ ๋๋ค. - ์์
์์์ ๋ ์ดํฌ๋ ์ํ์ค๊ฐ โโ๊ต์ฐจํด์๋ ์ ๋๋ค๋ ๊ฒ์ ๋๋ค. ์ด๋ป๊ฒ ํํํด์ผ ํ ๊น์?
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
open: 11111,22222,33333
close: 22222,11111,33333
ํฅ์ผ๋ก 11111 ์ด ์ 22222์์ ๋ค์ ํฅ์ ๊ธฐ๋ค๋ฆฝ๋๋ค. ๊ทธ๋ฌ๋ ์ด(22222) ํฅ ์ดํ์๋ ์๋์ด ์์๋ฉ๋๋ค. ๊ฐ๊น์ด ๊ทธ๋ฆฌ๊ณ ๋ชจ๋ ๊ฒ์ด ๊นจ์ง ๊ฒ์ ๋๋ค. ์ด๋ ํด๋ผ์ด์ธํธ์ ์ง์ฐ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค. ๊ทธ๋ฐ ๊ฒ๋ค ยฉ.
iptables์
/etc/sysconfig/iptables์ ์๋ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
*nat
:PREROUTING ACCEPT [0:0]
์ค์ ๋ก๋ ์ฐ๋ฆฌ๋ฅผ ๊ดด๋กญํ์ง ์์ผ๋ฏ๋ก ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
*filter
:INPUT ACCEPT [0:0]
...
-A INPUT -j REJECT --reject-with icmp-host-prohibited
๊ทธ๊ฒ์ ๋ฐฉํดํฉ๋๋ค.
knockd๋ INPUT ์ฒด์ธ ๋์ ๊ท์น์ ์ถ๊ฐํ๋ฏ๋ก ๊ฑฐ๋ถ๋ฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด ๊ฑฐ๋ถ๋ฅผ ๋๋ ๊ฒ์ ๋ชจ๋ ๋ฐ๋์ ์ฐจ๋ฅผ ์ฌ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
iptables์์ ๊ธธ์ ์์ง ์์ผ๋ ค๋ฉด ๋ฌด์ ์์ ๋ฌด์์ ์ฝ์
ํด์ผ ํ ๊น์?
- ๊ธฐ๋ณธ CentOS/Fedora์์ ์ฒ์์ผ๋ก ๊ท์น(โ๊ธ์ง๋์ง ์์ ๊ฒ์ ํ์ฉ๋ฉ๋๋คโ)์ ๊ทธ ๋ฐ๋์ ๊ท์น์ผ๋ก ๋์ฒด๋ฉ๋๋ค.
- ๋ง์ง๋ง ๊ท์น์ ์ ๊ฑฐํฉ๋๋ค.
๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
*filter
:INPUT DROP [0:0]
...
#-A INPUT -j REJECT --reject-with icmp-host-prohibited
๋ฌผ๋ก DROP ๋์ REJECT๋ฅผ ์ํํ ์๋ ์์ง๋ง DROP์ ์ฌ์ฉํ๋ฉด ๋ด์ ์ถ์ด ๋ ์ฌ๋ฏธ์์ด์ง ๊ฒ์ ๋๋ค.
3. ํด๋ผ์ด์ธํธ
๋ด ๊ด์ ์์ ๋ณผ ๋ ์ด ์ฅ์๋ ๊ฐ์ฅ ํฅ๋ฏธ๋ก์ด ๊ณณ์ ๋๋ค. ํด๋ณ์์๋ฟ๋ง ์๋๋ผ ๋ชจ๋ ์ฅ์น์์ ์์ ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
์์น์ ์ผ๋ก ๋ค์์ ๊ณ ๊ฐ์ด ์์ฅ๋์ด ์์ต๋๋ค.
ํด๋ผ์ด์ธํธ๋ฅผ ์ ํํ ๋ ํจํท ๊ฐ ์ง์ฐ ์ต์ ์ ์ง์ํ๋์ง ํ์ธํด์ผ ํฉ๋๋ค. ์, ํด๋ณ ๊ฐ์๋ ์ฐจ์ด๊ฐ ์์ผ๋ฉฐ 100๋ฉ๊ฐ๋นํธ๋ ํจํท์ด ์ฃผ์ด์ง ์์น์์ ์ ์์ ์ฌ๋ฐ๋ฅธ ์์๋ก ๋์ฐฉํ๋ค๋ ๊ฒ์ ๋ณด์ฅํ์ง ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ค, ํด๋ผ์ด์ธํธ๋ฅผ ์ค์ ํ ๋ ์ง์ฐ ์๊ฐ์ ์ง์ ์ ํํด์ผ ํฉ๋๋ค. ์๊ฐ ์ด๊ณผ๊ฐ ๋๋ฌด ๋ง์ผ๋ฉด ๋ด์ด ๊ณต๊ฒฉํ๊ณ ๋๋ฌด ์ ์ผ๋ฉด ํด๋ผ์ด์ธํธ์ ์๊ฐ์ด ์์ต๋๋ค. ์ง์ฐ์ด ๋๋ฌด ๋ง์ผ๋ฉด ํด๋ผ์ด์ธํธ๊ฐ ์ ์๊ฐ์ ๋์ฐฉํ์ง ๋ชปํ๊ฑฐ๋ ๋ฐ๋ณด ๊ฐ์ ์ถฉ๋์ด ๋ฐ์ํฉ๋๋ค("๋ ์ดํฌ" ์ฐธ์กฐ). ์ง์ฐ์ด ๋๋ฌด ์ ์ผ๋ฉด ํจํท์ด ์ธํฐ๋ท์์ ์์ค๋ฉ๋๋ค.
timeout=5s์ธ ๊ฒฝ์ฐ Delay=100..500ms๋ ์์ ํ ์๋ํ๋ ์ต์ ์ ๋๋ค.
Windows
์๋ฌด๋ฆฌ ์๊ธฐ๊ฒ ๋ค๋ฆฌ๋๋ผ๋ Google์ด ์ด ํ๋ซํผ์ ๋ํ ํ์คํ ๋ ธํฌ ํด๋ผ์ด์ธํธ๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ ๋งค์ฐ ์ค์ํ ์ผ์ ๋๋ค. CLI๋ ์ง์ฐ, TCP ๋ฐ ํ ์์ด ์ง์ํฉ๋๋ค.
์ต์
์ผ๋ก ์๋ํด ๋ณผ ์ ์์ต๋๋ค.
Linux
์ฌ๊ธฐ์๋ ๊ฐ๋จํฉ๋๋ค.
dnf install knock -y
knock -d <delay> <dst_ip> 11111 22222 33333
๋งฅ OS
๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ homebrew์์ ํฌํธ๋ฅผ ์ค์นํ๋ ๊ฒ์
๋๋ค.
brew install knock
๋ค์๊ณผ ๊ฐ์ ๋ช
๋ น์ ํ์ํ ๋ฐฐ์น ํ์ผ์ ๊ทธ๋ฆฝ๋๋ค.
#!bin/sh
knock -d <delay> <dst_ip> 11111 22222 33333
iOS
์๋ ์ต์ ์ KnockOnD(์์ ์์ ๋ฌด๋ฃ)์ ๋๋ค.
Android
"ํญ๊ตฌ๋ฅผ ๋ ธํฌํ์ธ์" ๊ด๊ณ ๋ ์๋์ง๋ง ํจ๊ณผ๊ฐ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ๋ฐ์๋ค์ ๋งค์ฐ ๋ฐ์์ด ์ข์ต๋๋ค.
๋ฌผ๋ก Habrรฉ์ PS ๊ฐ๊ฒฉ ์ธํ, ์ธ์ ๊ฐ๋ ์ ์ ์ถ๋ณต์ด ์๊ธฐ๋ฅผ...
Upd1: ๋๋ถ์
Upd2: ๋ค๋ฅธ ๊ฒ
์ถ์ฒ : habr.com