nftables ํŒจํ‚ท ํ•„ํ„ฐ 1.0.6 ๋ฆด๋ฆฌ์Šค

IPv1.0.6, IPv4, ARP ๋ฐ ๋„คํŠธ์›Œํฌ ๋ธŒ๋ฆฌ์ง€์— ๋Œ€ํ•œ ํŒจํ‚ท ํ•„ํ„ฐ๋ง ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ฉํ•˜๋Š” ํŒจํ‚ท ํ•„ํ„ฐ nftables 6 ๋ฆด๋ฆฌ์Šค๊ฐ€ ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค(iptables, ip6table, arptables ๋ฐ ebtables๋ฅผ ๋Œ€์ฒดํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•จ). nftables ํŒจํ‚ค์ง€์—๋Š” ์‚ฌ์šฉ์ž ๊ณต๊ฐ„์—์„œ ์‹คํ–‰๋˜๋Š” ํŒจํ‚ท ํ•„ํ„ฐ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉฐ, ์ปค๋„ ์ˆ˜์ค€ ์ž‘์—…์€ ๋ฆด๋ฆฌ์Šค 3.13๋ถ€ํ„ฐ Linux ์ปค๋„์˜ ์ผ๋ถ€์˜€๋˜ nf_tables ํ•˜์œ„ ์‹œ์Šคํ…œ์—์„œ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ์ปค๋„ ์ˆ˜์ค€์€ ํŒจํ‚ท์—์„œ ๋ฐ์ดํ„ฐ ์ถ”์ถœ, ๋ฐ์ดํ„ฐ ์ž‘์—… ์ˆ˜ํ–‰ ๋ฐ ํ๋ฆ„ ์ œ์–ด๋ฅผ ์œ„ํ•œ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ํ”„๋กœํ† ์ฝœ ๋…๋ฆฝ์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๋งŒ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

ํ•„ํ„ฐ๋ง ๊ทœ์น™๊ณผ ํ”„๋กœํ† ์ฝœ๋ณ„ ํ•ธ๋“ค๋Ÿฌ๋Š” ์‚ฌ์šฉ์ž ๊ณต๊ฐ„์—์„œ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผ๋œ ํ›„ ์ด ๋ฐ”์ดํŠธ์ฝ”๋“œ๊ฐ€ Netlink ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปค๋„์— ๋กœ๋“œ๋˜๊ณ  BPF(Berkeley Packet Filters)๋ฅผ ์—ฐ์ƒ์‹œํ‚ค๋Š” ํŠน์ˆ˜ ๊ฐ€์ƒ ๋จธ์‹ ์˜ ์ปค๋„์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์ด ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ์ปค๋„ ์ˆ˜์ค€์—์„œ ์‹คํ–‰๋˜๋Š” ํ•„ํ„ฐ๋ง ์ฝ”๋“œ์˜ ํฌ๊ธฐ๋ฅผ ํฌ๊ฒŒ ์ค„์ด๊ณ  ํ”„๋กœํ† ์ฝœ ์ž‘์—…์„ ์œ„ํ•œ ๊ตฌ๋ฌธ ๋ถ„์„ ๊ทœ์น™ ๋ฐ ๋…ผ๋ฆฌ์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉ์ž ๊ณต๊ฐ„์œผ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ :

  • "-o/โ€”optimize" ์˜ต์…˜์ด ์ง€์ •๋˜๋ฉด ํ˜ธ์ถœ๋˜๋Š” ๊ทœ์น™ ์ตœ์ ํ™” ํ”„๋กœ๊ทธ๋žจ์€ ๊ทœ์น™์„ ๊ฒฐํ•ฉํ•˜๊ณ  ์ด๋ฅผ ๋งต ๋ฐ ์„ธํŠธ ๋ชฉ๋ก์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ž๋™์œผ๋กœ ํŒจํ‚ค์ง•ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ทœ์น™ # cat ruleset.nft table ip x { chain y { type filter Hook input Priority filter; ์ •์ฑ… ํ•˜๋ฝ; ๋ฉ”ํƒ€ iifname eth1 ip saddr 1.1.1.1 ip Daddr 2.2.2.3 ์ˆ˜๋ฝ ๋ฉ”ํƒ€ iifname eth1 ip saddr 1.1.1.2 ip Daddr 2.2.2.4 ์ˆ˜๋ฝ ๋ฉ”ํƒ€ iifname eth1 ip saddr 1.1.1.2 ip Daddr 2.2.3.0/24 ์ˆ˜๋ฝ ๋ฉ”ํƒ€ iifname eth1 ip saddr 1.1.1.2 .2.2.4.0 ip Daddr 2.2.4.10-2 accept Meta iifname eth1.1.1.3 ip saddr 2.2.2.5 ip Daddr 4 accept } } "nft -o -c -f ruleset.nft"๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ทœ์น™ ์„ธํŠธ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค. .nft:17:74-1: ๋ฉ”ํƒ€ iifname eth1.1.1.1 ip saddr 2.2.2.3 ip Daddr 5 ์ˆ˜๋ฝ ruleset.nft:17:74-1: ๋ฉ”ํƒ€ iifname eth1.1.1.2 ip saddr 2.2.2.4 ip Daddr 6 ์ˆ˜๋ฝ ruleset.nft : 17:77-1: ๋ฉ”ํƒ€ iifname eth1.1.1.2 ip saddr 2.2.3.0 ip Daddr 24/7 accept ruleset.nft:17:83-1: Meta iifname eth1.1.1.2 ip saddr 2.2.4.0 ip Daddr 2.2.4.10-8 ruleset.nft:17:74-2 ์ˆ˜๋ฝ: ๋ฉ”ํƒ€ iifname eth1.1.1.3 ip saddr 2.2.2.5 ip Daddr 1 ์ˆ˜๋ฝ: iifname . IP ์Šฌํ”ˆ ์‚ฌ๋žŒ. IP Daddr { eth1.1.1.1 . 2.2.2.3. 1, eth1.1.1.2 . 2.2.2.4. 1, eth1.1.1.2 . 2.2.3.0. 24/1, eth1.1.1.2 . 2.2.4.0. 2.2.4.10-2, eth1.1.1.3. 2.2.2.5. XNUMX } ์ˆ˜๋ฝ
  • ์˜ตํ‹ฐ๋งˆ์ด์ €๋Š” ์ด๋ฏธ ๊ฐ„๋‹จํ•œ ์„ธํŠธ ๋ชฉ๋ก์„ ์‚ฌ์šฉํ•˜๋Š” ๊ทœ์น™์„ ๋ณด๋‹ค ๊ฐ„๊ฒฐํ•œ ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ทœ์น™์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. # cat ruleset.nft table ip filter { chain input { type filter Hook input Priority filter; ์ •์ฑ… ํ•˜๋ฝ; iifname "lo" accept ct ์ƒํƒœ ์„ค์ •, ๊ด€๋ จ accept comment "์šฐ๋ฆฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ํŠธ๋ž˜ํ”ฝ์—์„œ ์šฐ๋ฆฌ๋Š” ์‹ ๋ขฐํ•ฉ๋‹ˆ๋‹ค" iifname "enp0s31f6" ip saddr { 209.115.181.102, 216.197.228.230 } ip Daddr 10.0.0.149 udp sport 123 udp dport 32768-65535 accept iifname "enp0s31f6" ip saddr { 64.59.144.17, 64.59.150.133 } ip Daddr 10.0.0.149 udp sport 53 udp dport 32768-65535 accept } } "nft -o -c -f ruleset.nft"๋ฅผ ์‹คํ–‰ํ•œ ํ›„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํŒจํ‚ค์ง•๋ฉ๋‹ˆ๋‹ค. : ruleset.nft:6:22-149: iifname "enp0s31f6" ip saddr { 209.115.181.102, 216.197.228.230 } ip Daddr 10.0.0.149 udp sport 123 udp dport 32768-65535 accept ruleset.nft:7:22- 143: iifname "enp0s31f6" ip saddr { 64.59.144.17, 64.59.150.133 } ip Daddr 10.0.0.149 udp sport 53 udp dport 32768-65535 ์ˆ˜๋ฝ: iifname . IP ์Šฌํ”ˆ ์‚ฌ๋žŒ. IP ์•„๋น . UDP ์Šคํฌ์ธ . UDP dport { enp0s31f6 . 209.115.181.102. 10.0.0.149. 123. 32768-65535, enp0s31f6. 216.197.228.230. 10.0.0.149. 123. 32768-65535, enp0s31f6. 64.59.144.17. 10.0.0.149. 53. 32768-65535, enp0s31f6. 64.59.150.133. 10.0.0.149. 53. 32768-65535 } ์ˆ˜๋ฝ
  • IPv4(๋„คํŠธ์›Œํฌ ๋ฐ”์ดํŠธ ์ˆœ์„œ) ๋ฐ ๋ฉ”ํƒ€ ๋งˆํฌ(์‹œ์Šคํ…œ ๋ฐ”์ดํŠธ ์ˆœ์„œ)์™€ ๊ฐ™์ด ๋ฐ”์ดํŠธ ์ˆœ์„œ๊ฐ€ ๋‹ค๋ฅธ ์œ ํ˜•์„ ์‚ฌ์šฉํ•˜๋Š” ๋ณ‘ํ•ฉ ๊ฐ„๊ฒฉ์— ๋Œ€ํ•œ ๋ฐ”์ดํŠธ ์ฝ”๋“œ ์ƒ์„ฑ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ…Œ์ด๋ธ” ip x { ์ง€๋„ w { ip saddr ์œ ํ˜•. ๋ฉ”ํƒ€ ๋งˆํฌ : ํŒ์ • ํ”Œ๋ž˜๊ทธ ๊ฐ„๊ฒฉ ์นด์šดํ„ฐ ์š”์†Œ = { 127.0.0.1-127.0.0.4 . 0x123434-0xb00122 : ์ˆ˜๋ฝ, 192.168.0.10-192.168.1.20 . 0x0000aa00-0x0000aaff : ์ˆ˜๋ฝ, } } chain k { ์œ ํ˜• ํ•„ํ„ฐ ํ›„ํฌ ์ž…๋ ฅ ์šฐ์„ ์ˆœ์œ„ ํ•„ํ„ฐ; ์ •์ฑ… ํ•˜๋ฝ; IP ์Šฌํ”ˆ ์‚ฌ๋žŒ. ๋ฉ”ํƒ€ ๋งˆํฌ vmap @w } }
  • ์›์‹œ ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•  ๋•Œ ํฌ๊ท€ ํ”„๋กœํ† ์ฝœ์˜ ๋น„๊ต๊ฐ€ ๊ฐœ์„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: metal l4proto 91 @th,400,16 0x0 accept).
  • ๊ฐ„๊ฒฉ์— ๋”ฐ๋ผ ๊ทœ์น™์„ ํ™œ์„ฑํ™”ํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์‚ฝ์ž… ๊ทœ์น™ xy tcp sport { 3478-3497, 16384-16387 } ์นด์šดํ„ฐ ์ˆ˜๋ฝ
  • ์„ธํŠธ ๋ฐ ๋งต ๋ชฉ๋ก์˜ ํ‘œํ˜„์‹ ์ง€์›์„ ํฌํ•จํ•˜๋„๋ก JSON API๊ฐ€ ๊ฐœ์„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • nftables Python ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ™•์žฅ์„ ์‚ฌ์šฉํ•˜๋ฉด ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋ชจ๋“œ("-c")์—์„œ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๊ทœ์น™ ์„ธํŠธ๋ฅผ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ๊ณ  ๋ณ€์ˆ˜์˜ ์™ธ๋ถ€ ์ •์˜์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.
  • ์„ธํŠธ๋ฆฌ์ŠคํŠธ ์š”์†Œ์—๋Š” ์ฝ”๋ฉ˜ํŠธ ์ถ”๊ฐ€๊ฐ€ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ๋ฐ”์ดํŠธ ์†๋„ ์ œํ•œ์„ ์‚ฌ์šฉํ•˜๋ฉด XNUMX ๊ฐ’์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

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