-
Notifications
You must be signed in to change notification settings - Fork 0
understanding iptables
- iptables์ ์๋ ๋ฐฉ์, ๊ท์น ์ฒด์ธ ๋ฐ ์คํ ์์๋ฅผ ์ดํดํ๊ณ ์ถ์ ์ํฉ
https://jimmysong.io/en/blog/understanding-iptables/
iptables๋ Linux ์ปค๋์์ ์ค์ํ ๊ธฐ๋ฅ์ด๋ฉฐ ๋ค์ํ ์์ฉ ํ๋ก๊ทธ๋จ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. iptables๋ ํฌ๋ช ํ ํธ๋ํฝ ํ์ด์ฌํน์ ์ํด Istio์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. Istio์ ์๋ ๋ฐฉ์์ ์ดํดํ๋ ค๋ฉด iptables๋ฅผ ์ดํดํ๋ ๊ฒ์ด ๋งค์ฐ ์ค์ํฉ๋๋ค.
์ด ๊ธ์์๋ iptble์ ๋ํด ๊ฐ๋ตํ๊ฒ ์๊ฐํฉ๋๋ค.
iptables๋ Linux ์ปค๋์ ๋ฐฉํ๋ฒฝ ์ํํธ์จ์ด์ธ netfilter๋ฅผ ์ํ ๊ด๋ฆฌ ๋๊ตฌ์ ๋๋ค. netfilter๋ ์ฌ์ฉ์ ๊ณต๊ฐ์ ์์นํ๋ฉฐ netfilter์ ์ผ๋ถ์ ๋๋ค. netfilter๋ ์ปค๋ ๊ณต๊ฐ์ ์์นํ๋ฉฐ ๋คํธ์ํฌ ์ฃผ์ ๋ณํ๋ฟ๋ง ์๋๋ผ ํจํท ๋ด์ฉ ์์ ๋ฐ ํจํท ํํฐ๋ง ๋ฐฉํ๋ฒฝ ๊ธฐ๋ฅ๋ ๊ฐ์ถ๊ณ ์์ต๋๋ค.
Init ์ปจํ ์ด๋ ์ด๊ธฐํ๋ฅผ ์ํ iptables์ ๋ํด ์ดํด๋ณด๊ธฐ ์ ์ iptables์ ๊ท์น ๊ตฌ์ฑ์ ๋ํด ์ดํด๋ด ์๋ค.
๋ค์ ๊ทธ๋ฆผ์ iptables call chain์ ๋ณด์ฌ์ค๋๋ค.
Init ์ปจํ ์ด๋์ ์ฌ์ฉ๋๋ iptables ๋ฒ์ ์ v1.6.0์ด๋ฉฐ 5๊ฐ์ ํ ์ด๋ธ๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
- RAW๋ ํจํท์ ๊ตฌ์ฑํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. RAW์ ํจํท์ ์์คํ ์์ ์ถ์ ํ์ง ์์ต๋๋ค.
- ํํฐ๋ ๋ชจ๋ ๋ฐฉํ๋ฒฝ ๊ด๋ จ ์์ ์ ์์ฉํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๊ธฐ๋ณธ ํ ์ด๋ธ์ ๋๋ค.
- NAT์ ๋คํธ์ํฌ ์ฃผ์ ๋ณํ(์: ํฌํธ ํฌ์๋ฉ)์ ์ฌ์ฉ๋ฉ๋๋ค.
- Mangle์ ํน์ ํจํท์ ์์ ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค(์์๋ ํจํท ์ฐธ์กฐ).
- ๋ณด์์ ์ ์ด ๋คํธ์ํฌ ๊ท์น์ ๋ํ ์ก์ธ์ค๋ฅผ ๊ฐ์ ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
Istio-ํ๋ก์ ์ปจํ ์ด๋์ ๊ธฐ๋ณธ iptables ๊ท์น์ ํ์ธํฉ๋๋ค. ๊ธฐ๋ณธ ๋ณด๊ธฐ๋ ํํฐ ํ ์ด๋ธ์ ๊ท์น์ ๋๋ค.
$ iptables -L -v
Chain INPUT (policy ACCEPT 350K packets, 63M bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 18M packets, 1916M bytes)
pkts bytes target prot opt in out source destination
INPUT, FORWARD, OUTPUT ์ ์ธ ๊ฐ์ง ๊ธฐ๋ณธ ์ฒด์ธ์ด ์์ผ๋ฉฐ, ๊ฐ ์ฒด์ธ์ ์ฒซ ๋ฒ์งธ ์ถ๋ ฅ ๋ผ์ธ์ ์ฒด์ธ ์ด๋ฆ(์ด ๊ฒฝ์ฐ INPUT/FORWARD/OUTPUT)์ ํ์ํ ๋ค์ ๊ธฐ๋ณธ ์ ์ฑ (Access)์ ํ์ํฉ๋๋ค.
๋ค์์ ํธ๋ํฝ์ด INPUT ์ฒด์ธ์ ํต๊ณผํ ๋ค์ ์์ ํ๋กํ ์ฝ ์คํ์ผ๋ก ๋ค์ด๊ฐ๋ iptables์ ์ ์๋ ๊ตฌ์กฐ ๋ค์ด์ด๊ทธ๋จ์ ๋๋ค:
๊ฐ ์ฒด์ธ์ ์ฌ๋ฌ ๊ฐ์ ๊ท์น์ ์ถ๊ฐํ ์ ์์ผ๋ฉฐ ๊ท์น์ ์์์ ๋ค๋ก ์์๋๋ก ์คํ๋ฉ๋๋ค. ๊ท์น์ ํ ํค๋ ์ ์๋ฅผ ์ดํด๋ด ์๋ค.
PKTS: ์ฒ๋ฆฌ๋ ์ผ์นํ๋ ๋ฉ์์ง ์ bytes: ์ฒ๋ฆฌ๋ ๋์ ํจํท ํฌ๊ธฐ(bytes) Target: ๋ฉ์์ง๊ฐ ๊ท์น๊ณผ ์ผ์นํ๋ฉด ์ง์ ๋ ๋์์ด ์คํ๋ฉ๋๋ค. PROT: TDP, UDP, ICMP, ALL๊ณผ ๊ฐ์ ํ๋กํ ์ฝ. opt: ๊ฑฐ์ ์ฌ์ฉ๋์ง ์๋ ์ด ์ด์ IP ์ต์ ์ ํ์ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. IN: ์ธ๋ฐ์ด๋ ๋คํธ์ํฌ ์ธํฐํ์ด์ค. OUT: ์์๋ฐ์ด๋ ๋คํธ์ํฌ ์ธํฐํ์ด์ค. source: ํธ๋ํฝ์ ์์ค IP ์ฃผ์ ๋๋ ์๋ธ๋ท, ํ์๋ ์ด๋์๋ ์์ต๋๋ค. destination: ํธ๋ํฝ์ ๋ชฉ์ ์ง IP ์ฃผ์ ๋๋ ์๋ธ๋ท ๋๋ ์๋ฌด ๊ณณ์์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ํ ๊ท์น์ ์ต์ ์ ๋ํ๋ด๋ ๋ง์ง๋ง์ ํ์๋ ํค๋๊ฐ ์๋ ์ด์ด ์์ผ๋ฉฐ, ์ด์ ์ด์ ๊ตฌ์ฑ์ ๋ณด์ํ๊ธฐ ์ํด ๊ท์น์ ํ์ฅ ์ผ์น ์กฐ๊ฑด์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. prot, opt, in, out, source ๋ฐ destination๊ณผ ๋ชฉ์ ์ง ๋ค์ ํ์๋ ํค๋๊ฐ ์๋ ์ด์ด ํจ๊ป ์ผ์น ๊ท์น์ ๊ตฌ์ฑํฉ๋๋ค. ํธ๋ํฝ์ด ์ด๋ฌํ ๊ท์น๊ณผ ์ผ์นํ ๋ TARGET์ด ์คํ๋ฉ๋๋ค.
๋์ ์ ํ์๋ ACCEPT, REJECT, DROP, LOG, SNAT, MASQUERADE, DNAT, REDIRECT, RETURN ๋๋ ๋ค๋ฅธ ๊ท์น์ผ๋ก ์ ํ ๋ฑ์ด ์์ต๋๋ค. ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ฆฌํด ๋ฌธ๊ณผ ์ ์ฌํ ๋ฆฌํด ์ ํ์ ์ ์ธํ๊ณ ์์์ ๋ง๋ ์ฒด์ธ์์ ํ๋์ ๊ท์น๋ง ์คํํ๋ฉด ํ ๋ ๊ทธ๋จ์ด ์ด๋๋ก ํฅํ๊ณ ์๋์ง ํ์ธํ ์ ์์ผ๋ฉฐ, ์ฝ ํฌ์ธํธ๋ก ๋์๊ฐ ๋ค์ ๊ท์น์ ๊ณ์ ์คํํฉ๋๋ค.
์ถ๋ ฅ์์ Init ์ปจํ ์ด๋๋ iptables์ ๊ธฐ๋ณธ ๋งํฌ์ ๊ท์น์ ๋ง๋ค์ง ์๊ณ ๋์ ์ ๋งํฌ๋ฅผ ์์ฑํ๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
- Envoy Proxy๊ฐ Application Pod์ injection ๋๋ ์์ธ ๊ณผ์ ์?
- Istio custom resource๋ค์ด ์ด๋ป๊ฒ mesh logic์ผ๋ก ๋ณํ๋๊ฐ?
- Istio์ Custom Resource๋ค์ด mesh logic์ผ๋ก ๋ณํ๋ ์ดํ ์ ์ฉ ์์๊ฐ ์ด๋ป๊ฒ ๋ณด์ฅ ๋๋๊ฐ?
- Envoy Proxy๊ฐ ์ด๋ป๊ฒ ํธ๋ํฝ์ ๊ฐ๋ก์ฑ๋๊ฐ?
- Istio init container ์ pause container์ ์ฐ๊ด์ฑ
- iptables traffic hijacking์์ iptables ๋ช ๊ณ์ธต๊น์ง ์ฒ๋ฆฌ ๋๋์ง?
- Iptables์์ NAT(SNAT) ํ ์ด๋ธ์ด INPUT ์ฒด์ธ์ ์ ํํ ์ด๋ ์ํฉ์์ ์ฐ๋์ง?