[Linux] iptables ์์ ์ ๋ณต (๊ตฌ์กฐ, ๋์ ์๋ฆฌ, NAT๊น์ง)
iptables๋ ๋จ์ํ ๋ฐฉํ๋ฒฝ์ ๋์ด ๋ค์๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ์ํํ ์ ์์ต๋๋ค.
- ํจํท ํํฐ๋ง
- NAT (Network Address Translation)
- ํธ๋ํฝ ์ ์ด
- ํจํท ์์
- ๋คํธ์ํฌ ๋ณด์ ์ ์ฑ ์ ์ฉ
์ด๋ฒ ๊ธ์์๋ iptables์ ๊ตฌ์กฐ, ๋์ ๋ฐฉ์, NAT ์ฒ๋ฆฌ ๊ณผ์ ๊น์ง ์ ์ฒด์ ์ผ๋ก ์ ๋ฆฌํด ๋ณด๊ฒ ์ต๋๋ค.
iptables ๊ธฐ๋ณธ ๊ตฌ์กฐ
iptables๋ ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์กฐ๋ก ๋์ํฉ๋๋ค.
Table
โ Chain
โ Rule๊ตฌ์กฐ์ ์๋ฏธ
Table - ํจํท ์ฒ๋ฆฌ ๋ชฉ์
Chain - ํจํท ํ๋ฆ ๋จ๊ณ
Rule - ์ค์ ํจํท ์ฒ๋ฆฌ ๊ท์น
์๋ฅผ ๋ค์ด ๋ค์ ๊ท์น์ ๋ณด๊ฒ ์ต๋๋ค.
iptables -A INPUT -p tcp --dport 22 -j ACCEPT- INPUT ์ฒด์ธ์ ๊ท์น ์ถ๊ฐ
- TCP 22๋ฒ ํฌํธ ํ์ฉ
iptables Table ์ข ๋ฅ
iptables์๋ ์ฌ๋ฌ Table์ด ์กด์ฌํฉ๋๋ค.
Table ์ญํ
filter - ๊ธฐ๋ณธ ๋ฐฉํ๋ฒฝ
nat - ์ฃผ์ ๋ณํ
mangle - ํจํท ์์
raw - connection tracking ์ ์ด
security - SELinux ์ ์ฑ
์ผ๋ฐ์ ์ธ ์๋ฒ์์๋ ์ฃผ๋ก ๋ค์ ์ธ ๊ฐ์ง๋ฅผ ์ฌ์ฉํฉ๋๋ค.
filter
nat
mangleiptables Chain ๊ตฌ์กฐ
๊ฐ Table์๋ Chain์ด ์กด์ฌํฉ๋๋ค.
๋ํ์ ์ธ ์ฒด์ธ
Chain ์ค๋ช
INPUT - ์๋ฒ๋ก ๋ค์ด์ค๋ ํจํท
OUTPUT - ์๋ฒ์์ ๋๊ฐ๋ ํจํท
FORWARD - ๋ค๋ฅธ ๋คํธ์ํฌ๋ก ์ ๋ฌ๋๋ ํจํท
NAT table์์๋ ๋ค์ ์ฒด์ธ์ด ์ฌ์ฉ๋ฉ๋๋ค.
Chain ์ค๋ช
PREROUTING - ๋ผ์ฐํ ์ ์ ์ฒ๋ฆฌ
POSTROUTING - ๋ผ์ฐํ ํ ์ฒ๋ฆฌ
OUTPUT - ๋ก์ปฌ ํจํท ์ฒ๋ฆฌ
iptables ํจํท ํ๋ฆ
iptables๋ฅผ ์ดํดํ๋ ค๋ฉด ํจํท ํ๋ฆ ๊ตฌ์กฐ๋ฅผ ์์์ผ ํฉ๋๋ค.
ํจํท์ด ์๋ฒ์ ๋์ฐฉํ๋ฉด ๋ค์ ์์๋ฅผ ๋ฐ๋ฆ ๋๋ค.
Network Interface
โ
PREROUTING
โ
Routing Decision
โ โ
INPUT FORWARD
โ โ
Local Other Host
Process
โ
OUTPUT
โ
POSTROUTING
โ
NetworkPREROUTING
ํจํท์ด ์์คํ ์ ๋ค์ด์จ ์งํ ์ฒ๋ฆฌ
์ฃผ๋ก NAT์์ ์ฌ์ฉ
INPUT
์๋ฒ๋ก ๋ค์ด์ค๋ ํจํท ์ฒ๋ฆฌ
์
- SSH ์ ์
- ์น ์์ฒญ
FORWARD
์๋ฒ๊ฐ ๋ผ์ฐํฐ ์ญํ ์ ํ ๋ ์ฌ์ฉ
์
- VPN ์๋ฒ
- NAT ๊ฒ์ดํธ์จ์ด
OUTPUT
์๋ฒ์์ ์ธ๋ถ๋ก ๋๊ฐ๋ ํจํท
์
- curl ์์ฒญ
- DNS ์์ฒญ
POSTROUTING
ํจํท์ด ๋๊ฐ๊ธฐ ์ง์ ์ ์ฒ๋ฆฌ
์ฃผ๋ก SNAT ์ฒ๋ฆฌ
iptables Rule ์ฒ๋ฆฌ ๋ฐฉ์
iptables ๊ท์น์ ์์์ ์๋ ์์๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค.
์
1 allow 192.168.1.10
2 deny all192.168.1.10์์ ํจํท์ด ๋ค์ด์ค๋ฉด
rule 1 โ allow๋ฐ๋๋ก
1 deny all
2 allow 192.168.1.10์ด๋ฉด
rule 1์์ drop์ฆ
๐ ์ฒซ ๋ฒ์งธ๋ก ๋งค์นญ๋ ๊ท์น์ด ์ ์ฉ๋ฉ๋๋ค.
iptables ๊ธฐ๋ณธ ๋ช ๋ น์ด
ํ์ฌ ๊ท์น ํ์ธ
iptables -L -n -v๊ท์น ์ถ๊ฐ
iptables -A INPUT -p tcp --dport 80 -j ACCEPT๊ท์น ์ญ์
iptables -D INPUT 1์ ์ฑ ์ค์
iptables -P INPUT DROPiptables ์ํ ๊ธฐ๋ฐ ํํฐ๋ง
iptables๋ stateful firewall ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
์
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT์ํ ์ข ๋ฅ ๋ฐ ์๋ฏธ
NEW - ์๋ก์ด ์ฐ๊ฒฐ
ESTABLISHED - ์ด๋ฏธ ์ฐ๊ฒฐ๋ ํธ๋ํฝ
RELATED - ๊ด๋ จ ํธ๋ํฝ
INVALID - ์๋ชป๋ ํจํท
์ด ๊ท์น์ ๋๋ถ๋ถ์ ์๋ฒ์์ ํ์์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
iptables NAT ๊ธฐ๋ฅ
iptables๋ NAT ๊ธฐ๋ฅ๋ ์ ๊ณตํฉ๋๋ค.
NAT๋ ์ฃผ์ ๋ณํ ๊ธฐ๋ฅ์ ๋๋ค.
SNAT
์ถ๋ฐ์ง ์ฃผ์ ๋ณ๊ฒฝ
์
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 1.2.3.4์ฌ์ฉ ์
- ์ธํฐ๋ท ๊ณต์
- NAT ๊ฒ์ดํธ์จ์ด
MASQUERADE
SNAT ์๋ ๋ฒ์
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE์ฃผ๋ก
- ๊ฐ์ ์ฉ ๋ผ์ฐํฐ
- VPN ์๋ฒ
์์ ์ฌ์ฉํฉ๋๋ค.
DNAT
๋ชฉ์ ์ง ์ฃผ์ ๋ณ๊ฒฝ
์
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to 192.168.1.100:80์
public ip โ internal server์ฆ ํฌํธ ํฌ์๋ฉ ๊ธฐ๋ฅ์ ๋๋ค.
iptables์์ ์์ฃผ ์ฌ์ฉํ๋ ๊ธฐ๋ณธ ๊ท์น
์ผ๋ฐ์ ์ธ ์๋ฒ ๋ฐฉํ๋ฒฝ ์ค์
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -P INPUT DROP์๋ฏธ
- ๊ธฐ์กด ์ฐ๊ฒฐ ํ์ฉ
- SSH ํ์ฉ
- HTTP ํ์ฉ
- HTTPS ํ์ฉ
- ๋๋จธ์ง ์ฐจ๋จ
iptables์ ์ญํ
iptables๋ ๋จ์ํ ๋ฐฉํ๋ฒฝ์ด ์๋๋ผ Linux ํจํท ์ฒ๋ฆฌ ์์คํ ์ ์ด ๋๊ตฌ์ ๋๋ค.
iptables๋ฅผ ์ด์ฉํ๋ฉด ๋ค์ ์์คํ ์ ๋ง๋ค ์ ์์ต๋๋ค.
- ๋ฐฉํ๋ฒฝ
- NAT gateway
- VPN ์๋ฒ
- Router
- IDS/IPS ๊ธฐ๋ฐ ์์คํ
์ ๋ฆฌ
iptables๋ Linux ๋คํธ์ํฌ ๋ณด์์์ ๋งค์ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค.
ํต์ฌ ๊ฐ๋
- Table โ Chain โ Rule ๊ตฌ์กฐ
- ํจํท ํ๋ฆ ์ดํด
- NAT ์ฒ๋ฆฌ
- ์ํ ๊ธฐ๋ฐ ํํฐ๋ง
์ด ๋ค ๊ฐ์ง๋ฅผ ์ดํดํ๋ฉด ๋๋ถ๋ถ์ iptables ์ค์ ์ ์ดํดํ ์ ์์ต๋๋ค.