Skip to content

understanding iptables

Meiko edited this page Oct 4, 2024 · 2 revisions
  • iptables์˜ ์ž‘๋™ ๋ฐฉ์‹, ๊ทœ์น™ ์ฒด์ธ ๋ฐ ์‹คํ–‰ ์ˆœ์„œ๋ฅผ ์ดํ•ดํ•˜๊ณ  ์‹ถ์€ ์ƒํ™ฉ

Reference

https://jimmysong.io/en/blog/understanding-iptables/


iptables๋Š” Linux ์ปค๋„์—์„œ ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ์ด๋ฉฐ ๋‹ค์–‘ํ•œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. iptables๋Š” ํˆฌ๋ช…ํ•œ ํŠธ๋ž˜ํ”ฝ ํ•˜์ด์žฌํ‚น์„ ์œ„ํ•ด Istio์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. Istio์˜ ์ž‘๋™ ๋ฐฉ์‹์„ ์ดํ•ดํ•˜๋ ค๋ฉด iptables๋ฅผ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ธ€์—์„œ๋Š” iptble์— ๋Œ€ํ•ด ๊ฐ„๋žตํ•˜๊ฒŒ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.


iptables introduction

iptables๋Š” Linux ์ปค๋„์˜ ๋ฐฉํ™”๋ฒฝ ์†Œํ”„ํŠธ์›จ์–ด์ธ netfilter๋ฅผ ์œ„ํ•œ ๊ด€๋ฆฌ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. netfilter๋Š” ์‚ฌ์šฉ์ž ๊ณต๊ฐ„์— ์œ„์น˜ํ•˜๋ฉฐ netfilter์˜ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค. netfilter๋Š” ์ปค๋„ ๊ณต๊ฐ„์— ์œ„์น˜ํ•˜๋ฉฐ ๋„คํŠธ์›Œํฌ ์ฃผ์†Œ ๋ณ€ํ™˜๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํŒจํ‚ท ๋‚ด์šฉ ์ˆ˜์ • ๋ฐ ํŒจํ‚ท ํ•„ํ„ฐ๋ง ๋ฐฉํ™”๋ฒฝ ๊ธฐ๋Šฅ๋„ ๊ฐ–์ถ”๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Init ์ปจํ…Œ์ด๋„ˆ ์ดˆ๊ธฐํ™”๋ฅผ ์œ„ํ•œ iptables์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด๊ธฐ ์ „์— iptables์™€ ๊ทœ์น™ ๊ตฌ์„ฑ์— ๋Œ€ํ•ด ์‚ดํŽด๋ด…์‹œ๋‹ค.

๋‹ค์Œ ๊ทธ๋ฆผ์€ iptables call chain์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

iptables

Init ์ปจํ…Œ์ด๋„ˆ์— ์‚ฌ์šฉ๋˜๋Š” iptables ๋ฒ„์ „์€ v1.6.0์ด๋ฉฐ 5๊ฐœ์˜ ํ…Œ์ด๋ธ”๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

  1. RAW๋Š” ํŒจํ‚ท์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. RAW์˜ ํŒจํ‚ท์€ ์‹œ์Šคํ…œ์—์„œ ์ถ”์ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  2. ํ•„ํ„ฐ๋Š” ๋ชจ๋“  ๋ฐฉํ™”๋ฒฝ ๊ด€๋ จ ์ž‘์—…์„ ์ˆ˜์šฉํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋ณธ ํ…Œ์ด๋ธ”์ž…๋‹ˆ๋‹ค.
  3. NAT์€ ๋„คํŠธ์›Œํฌ ์ฃผ์†Œ ๋ณ€ํ™˜(์˜ˆ: ํฌํŠธ ํฌ์›Œ๋”ฉ)์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  4. Mangle์€ ํŠน์ • ํŒจํ‚ท์„ ์ˆ˜์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค(์†์ƒ๋œ ํŒจํ‚ท ์ฐธ์กฐ).
  5. ๋ณด์•ˆ์€ ์ œ์–ด ๋„คํŠธ์›Œํฌ ๊ทœ์น™์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ๊ฐ•์ œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

Understand iptables rules

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์ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.


Types supported by Target

๋Œ€์ƒ ์œ ํ˜•์—๋Š” ACCEPT, REJECT, DROP, LOG, SNAT, MASQUERADE, DNAT, REDIRECT, RETURN ๋˜๋Š” ๋‹ค๋ฅธ ๊ทœ์น™์œผ๋กœ ์ ํ”„ ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ๋ฆฌํ„ด ๋ฌธ๊ณผ ์œ ์‚ฌํ•œ ๋ฆฌํ„ด ์œ ํ˜•์„ ์ œ์™ธํ•˜๊ณ  ์ˆœ์„œ์— ๋งž๋Š” ์ฒด์ธ์—์„œ ํ•˜๋‚˜์˜ ๊ทœ์น™๋งŒ ์‹คํ–‰ํ•˜๋ฉด ํ…”๋ ˆ๊ทธ๋žจ์ด ์–ด๋””๋กœ ํ–ฅํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ฝœ ํฌ์ธํŠธ๋กœ ๋Œ์•„๊ฐ€ ๋‹ค์Œ ๊ทœ์น™์„ ๊ณ„์† ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ถœ๋ ฅ์—์„œ Init ์ปจํ…Œ์ด๋„ˆ๋Š” iptables์˜ ๊ธฐ๋ณธ ๋งํฌ์— ๊ทœ์น™์„ ๋งŒ๋“ค์ง€ ์•Š๊ณ  ๋Œ€์‹  ์ƒˆ ๋งํฌ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Clone this wiki locally