๋ฐฉํ™”๋ฒฝ 1.0 ๋ฆด๋ฆฌ์Šค

nftables ๋ฐ iptables ํŒจํ‚ท ํ•„ํ„ฐ์— ๋Œ€ํ•œ ๋ž˜ํผ ํ˜•ํƒœ๋กœ ๊ตฌํ˜„๋œ ๋™์ ์œผ๋กœ ์ œ์–ด๋˜๋Š” ๋ฐฉํ™”๋ฒฝ Firewalld 1.0์˜ ๋ฆด๋ฆฌ์Šค๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. Firewalld๋Š” ํŒจํ‚ท ํ•„ํ„ฐ ๊ทœ์น™์„ ๋‹ค์‹œ ๋กœ๋“œํ•˜๊ฑฐ๋‚˜ ์„ค์ •๋œ ์—ฐ๊ฒฐ์„ ๋Š์ง€ ์•Š๊ณ ๋„ D-Bus๋ฅผ ํ†ตํ•ด ํŒจํ‚ท ํ•„ํ„ฐ ๊ทœ์น™์„ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํ”„๋กœ์„ธ์Šค๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์ ํŠธ๋Š” ์ด๋ฏธ RHEL 7+, Fedora 18+ ๋ฐ SUSE/openSUSE 15+๋ฅผ ํฌํ•จํ•œ ๋งŽ์€ Linux ๋ฐฐํฌํŒ์—์„œ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Firewalld ์ฝ”๋“œ๋Š” Python์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ GPLv2 ๋ผ์ด์„ ์Šค์— ๋”ฐ๋ผ ๋ผ์ด์„ ์Šค๊ฐ€ ๋ถ€์—ฌ๋ฉ๋‹ˆ๋‹ค.

๋ฐฉํ™”๋ฒฝ์„ ๊ด€๋ฆฌํ•˜๋ ค๋ฉด ๊ทœ์น™์„ ์ƒ์„ฑํ•  ๋•Œ IP ์ฃผ์†Œ, ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค ๋ฐ ํฌํŠธ ๋ฒˆํ˜ธ๊ฐ€ ์•„๋‹Œ ์„œ๋น„์Šค ์ด๋ฆ„์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” Firewall-cmd ์œ ํ‹ธ๋ฆฌํ‹ฐ๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค(์˜ˆ: SSH์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์—ด๋ ค๋ฉด ๋‹ค์Œ์ด ํ•„์š”ํ•จ). "firewall-cmd โ€”add โ€”service= ssh"๋ฅผ ์‹คํ–‰ํ•˜์—ฌ SSH๋ฅผ ๋‹ซ์Šต๋‹ˆ๋‹ค(โ€œfirewall-cmd โ€“remove โ€“service=sshโ€). ๋ฐฉํ™”๋ฒฝ ๊ตฌ์„ฑ์„ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ๋ฐฉํ™”๋ฒฝ ๊ตฌ์„ฑ(GTK) ๊ทธ๋ž˜ํ”ฝ ์ธํ„ฐํŽ˜์ด์Šค์™€ ๋ฐฉํ™”๋ฒฝ ์• ํ”Œ๋ฆฟ(Qt) ์• ํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. D-BUS API ๋ฐฉํ™”๋ฒฝ์„ ํ†ตํ•œ ๋ฐฉํ™”๋ฒฝ ๊ด€๋ฆฌ ์ง€์›์€ NetworkManager, libvirt, podman, docker ๋ฐ fall2ban๊ณผ ๊ฐ™์€ ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฒ„์ „ ๋ฒˆํ˜ธ์˜ ์ค‘์š”ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ๊นจ๋œจ๋ฆฌ๊ณ  ์˜์—ญ ์ž‘์—… ๋™์ž‘์„ ๋ณ€๊ฒฝํ•˜๋Š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ๊ณผ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜์—ญ์— ์ •์˜๋œ ๋ชจ๋“  ํ•„ํ„ฐ๋ง ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์ด์ œ ๋ฐฉํ™”๋ฒฝ์ด ์‹คํ–‰ ์ค‘์ธ ํ˜ธ์ŠคํŠธ๋กœ ํ–ฅํ•˜๋Š” ํŠธ๋ž˜ํ”ฝ์—๋งŒ ์ ์šฉ๋˜๋ฉฐ ์ „์†ก ํŠธ๋ž˜ํ”ฝ์„ ํ•„ํ„ฐ๋งํ•˜๋ ค๋ฉด ์ •์ฑ…์„ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์žฅ ๋ˆˆ์— ๋„๋Š” ๋ณ€ํ™”๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • iptables ์œ„์—์„œ ์ž‘๋™ํ•˜๋„๋ก ํ—ˆ์šฉํ•œ ๋ฐฑ์—”๋“œ๋Š” ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ์„ ์–ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. iptables์— ๋Œ€ํ•œ ์ง€์›์€ ๊ฐ€๊นŒ์šด ๋ฏธ๋ž˜์—๋„ ์œ ์ง€๋  ์˜ˆ์ •์ด์ง€๋งŒ ์ด ๋ฐฑ์—”๋“œ๋Š” ๊ฐœ๋ฐœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์˜์—ญ ๋‚ด ์ „๋‹ฌ ๋ชจ๋“œ๋Š” ๋ชจ๋“  ์ƒˆ๋กœ์šด ์˜์—ญ์— ๋Œ€ํ•ด ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋˜์–ด ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค ๋˜๋Š” ํ•œ ์˜์—ญ(๊ณต์šฉ, ๋ธ”๋ก, ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š”, ๋‚ด๋ถ€ ๋“ฑ) ๋‚ด์˜ ํŠธ๋ž˜ํ”ฝ ์†Œ์Šค ๊ฐ„์— ํŒจํ‚ท์˜ ์ž์œ ๋กœ์šด ์ด๋™์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด์ „ ๋™์ž‘์„ ๋˜๋Œ๋ฆฌ๊ณ  ํŒจํ‚ท์ด ํ•œ ์˜์—ญ ๋‚ด์—์„œ ์ „๋‹ฌ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด "firewall-cmd โ€“permanent โ€“zone public โ€“remove-forward" ๋ช…๋ น์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ฃผ์†Œ ๋ณ€ํ™˜(NAT)๊ณผ ๊ด€๋ จ๋œ ๊ทœ์น™์€ "inet" ํ”„๋กœํ† ์ฝœ ๊ณ„์—ด๋กœ ์ด๋™๋˜์—ˆ์Šต๋‹ˆ๋‹ค(์ด์ „์—๋Š” "ip" ๋ฐ "ip6" ๊ณ„์—ด์— ์ถ”๊ฐ€๋˜์–ด IPv4 ๋ฐ IPv6์— ๋Œ€ํ•œ ๊ทœ์น™์„ ๋ณต์ œํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค). ์ด ๋ณ€๊ฒฝ์„ ํ†ตํ•ด ipset์„ ์‚ฌ์šฉํ•  ๋•Œ ์ค‘๋ณต ํ•ญ๋ชฉ์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ipset ํ•ญ๋ชฉ์˜ ๋ณต์‚ฌ๋ณธ ์„ธ ๊ฐœ ๋Œ€์‹  ํ•˜๋‚˜๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • "--set-target" ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ง€์ •๋œ "๊ธฐ๋ณธ" ์ž‘์—…์€ ์ด์ œ "๊ฑฐ๋ถ€"์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ์˜์—ญ์— ์ •์˜๋œ ๊ทœ์น™์— ์†ํ•˜์ง€ ์•Š๋Š” ๋ชจ๋“  ํŒจํ‚ท์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฐจ๋‹จ๋ฉ๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ ํ†ต๊ณผ๊ฐ€ ํ—ˆ์šฉ๋˜๋Š” ICMP ํŒจํ‚ท์— ๋Œ€ํ•ด์„œ๋งŒ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๊ณต๊ฐœ์ ์œผ๋กœ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” "์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š”" ์˜์—ญ์— ๋Œ€ํ•œ ์ด์ „ ๋™์ž‘์„ ๋ฐ˜ํ™˜ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๊ทœ์น™์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ •์ฑ… ํ—ˆ์šฉํฌ์›Œ๋“œ โ€”์ถ”๊ฐ€ ์ˆ˜์‹  -์˜์—ญ ๊ณต์šฉ ๋ฐฉํ™”๋ฒฝ-cmd โ€”์˜๊ตฌ โ€”์ •์ฑ… ํ—ˆ์šฉํฌ์›Œ๋“œ โ€”์ถ”๊ฐ€ ์†ก์‹  ์˜์—ญ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉํ™”๋ฒฝ-cmd โ€”๋‹ค์‹œ ๋กœ๋“œ
  • ์ด์ œ "--set-target catch-all" ๊ทœ์น™์ด ์‹คํ–‰๋˜๊ธฐ ์ง์ „์— ๊ธ์ •์ ์ธ ์šฐ์„ ์ˆœ์œ„ ์ •์ฑ…์ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์ตœ์ข… ๋“œ๋กญ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์ „์— "--set-target drop|reject|accept"๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์˜์—ญ์„ ํฌํ•จํ•˜์—ฌ ๊ทœ์น™์„ ๊ฑฐ๋ถ€ํ•˜๊ฑฐ๋‚˜ ์ˆ˜๋ฝํ•ฉ๋‹ˆ๋‹ค.
  • ์ด์ œ ICMP ์ฐจ๋‹จ์€ ํ˜„์žฌ ํ˜ธ์ŠคํŠธ(์ž…๋ ฅ)๋กœ ์ฃผ์†Œ๊ฐ€ ์ง€์ •๋œ ์ˆ˜์‹  ํŒจํ‚ท์—๋งŒ ์ ์šฉ๋˜๋ฉฐ ์˜์—ญ ๊ฐ„์— ๋ฆฌ๋””๋ ‰์…˜๋˜๋Š”(์ „๋‹ฌ) ํŒจํ‚ท์—๋Š” ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • TFTP ํ”„๋กœํ† ์ฝœ์— ๋Œ€ํ•œ ์—ฐ๊ฒฐ์„ ์ถ”์ ํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์ง€๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ํ˜•ํƒœ์˜€๋˜ tftp-client ์„œ๋น„์Šค๊ฐ€ ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • "์ง์ ‘" ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์œผ๋ฉฐ ์ด๋ฏธ ๋งŒ๋“ค์–ด์ง„ ํŒจํ‚ท ํ•„ํ„ฐ ๊ทœ์น™์„ ์ง์ ‘ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฆฌ๋””๋ ‰์…˜๋œ ํŒจํ‚ท๊ณผ ๋‚˜๊ฐ€๋Š” ํŒจํ‚ท์„ ํ•„ํ„ฐ๋งํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•œ ํ›„์—๋Š” ์ด ์ธํ„ฐํŽ˜์ด์Šค์— ๋Œ€ํ•œ ํ•„์š”์„ฑ์ด ์‚ฌ๋ผ์กŒ์Šต๋‹ˆ๋‹ค.
  • ๊ธฐ๋ณธ์ ์œผ๋กœ "no"๋กœ ๋ณ€๊ฒฝ๋˜๋Š” CleanupModulesOnExit ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐฉํ™”๋ฒฝ์ด ์ข…๋ฃŒ๋œ ํ›„ ์ปค๋„ ๋ชจ๋“ˆ์˜ ์–ธ๋กœ๋“œ๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋Œ€์ƒ ์‹œ์Šคํ…œ(๋Œ€์ƒ)์„ ๊ฒฐ์ •ํ•  ๋•Œ ipset์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • WireGuard, Kubernetes ๋ฐ netbios-ns ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์ •์˜๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • zsh์— ๋Œ€ํ•œ ์ž๋™ ์™„์„ฑ ๊ทœ์น™์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • Python 2 ์ง€์›์ด ์ค‘๋‹จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ข…์†์„ฑ ๋ชฉ๋ก์ด ๋‹จ์ถ•๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฐฉํ™”๋ฒฝ์ด ์ž‘๋™ํ•˜๋ ค๋ฉด Linux ์ปค๋„ ์™ธ์—๋„ ์ด์ œ ์œ ์ผํ•œ Python ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ dbus, gobject ๋ฐ nftables๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ ebtables, ipset ๋ฐ iptables ํŒจํ‚ค์ง€๋Š” ์„ ํƒ ์‚ฌํ•ญ์œผ๋กœ ๋ถ„๋ฅ˜๋ฉ๋‹ˆ๋‹ค. Python ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ๋ฐ ์Šฌ๋ฆฝ์ด ์ข…์†์„ฑ์—์„œ ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€