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

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

nftables ํŒจํ‚ค์ง€์—๋Š” ์‚ฌ์šฉ์ž ๊ณต๊ฐ„์—์„œ ์‹คํ–‰๋˜๋Š” ํŒจํ‚ท ํ•„ํ„ฐ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉฐ, ์ปค๋„ ์ˆ˜์ค€ ์ž‘์—…์€ ๋ฆด๋ฆฌ์Šค 3.13๋ถ€ํ„ฐ Linux ์ปค๋„์˜ ์ผ๋ถ€์˜€๋˜ nf_tables ํ•˜์œ„ ์‹œ์Šคํ…œ์—์„œ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ์ปค๋„ ์ˆ˜์ค€์€ ํŒจํ‚ท์—์„œ ๋ฐ์ดํ„ฐ ์ถ”์ถœ, ๋ฐ์ดํ„ฐ ์ž‘์—… ์ˆ˜ํ–‰ ๋ฐ ํ๋ฆ„ ์ œ์–ด๋ฅผ ์œ„ํ•œ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ํ”„๋กœํ† ์ฝœ ๋…๋ฆฝ์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๋งŒ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

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

์ฃผ์š” ํ˜์‹ :

  • ๊ทœ์น™ ์ตœ์ ํ™” ๋ชจ๋“œ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์œผ๋ฉฐ ์ƒˆ๋กœ์šด "-o"("--optimize") ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ํ™œ์„ฑํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์€ "--check" ์˜ต์…˜๊ณผ ๊ฒฐํ•ฉํ•˜์—ฌ ์‹ค์ œ๋กœ ๋กœ๋“œํ•˜์ง€ ์•Š๊ณ ๋„ ๊ทœ์น™ ์„ธํŠธ ํŒŒ์ผ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ™•์ธํ•˜๊ณ  ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. . ์ตœ์ ํ™”๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ ๊ทœ์น™๊ณผ ๊ฐ™์€ ์œ ์‚ฌํ•œ ๊ทœ์น™์„ ๊ฒฐํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Meta iifname eth1 ip saddr 1.1.1.1 ip Daddr 2.2.2.3 accept Meta iifname eth1 ip saddr 1.1.1.2 ip Daddr 2.2.2.5 accept ip saddr 1.1.1.1 ip Daddr 2.2.2.2 .2.2.2.2 IP Saddr ์ˆ˜๋ฝ 3.3.3.3 IP Daddr XNUMX ์‚ญ์ œ

    ๋ฉ”ํƒ€ iifname ์œผ๋กœ ๊ฒฐํ•ฉ๋ฉ๋‹ˆ๋‹ค. IP ์Šฌํ”ˆ ์‚ฌ๋žŒ. IP Daddr { eth1 . 1.1.1.1. 2.2.2.3, eth1 . 1.1.1.2. 2.2.2.5 } IP saddr์„ ์ˆ˜๋ฝํ•ฉ๋‹ˆ๋‹ค. IP Daddr vmap { 1.1.1.1 . 2.2.2.2 : ์ˆ˜๋ฝ, 2.2.2.2 . 3.3.3.3 : ์‚ญ์ œ }

    ์‚ฌ์šฉ ์˜ˆ: # nft -c -o -f ruleset.test ๋ณ‘ํ•ฉ: ruleset.nft:16:3-37: ip Daddr 192.168.0.1 counter accept ruleset.nft:17:3-37: ip Daddr 192.168.0.2 counter accept ruleset.nft:18:3-37: ip Daddr 192.168.0.3 ์นด์šดํ„ฐ ์Šน์ธ ๋Œ€์ƒ: ip Daddr { 192.168.0.1, 192.168.0.2, 192.168.0.3 } ์นด์šดํ„ฐ ํŒจํ‚ท 0๋ฐ”์ดํŠธ 0 ์Šน์ธ

  • ์„ธํŠธ ๋ชฉ๋ก์€ sctp ์ฒญํฌ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ip ๋ฐ tcp ์˜ต์…˜์„ ์ง€์ •ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. set s5 { typeof ip option ra value elements = { 1, 1024 } } set s7 { typeof sctp Chunk init num-inbound-streams elements = { 1, 4 } } chain c5 { ip option ra value @s5 accept } chain c7 { sctp Chunk init num-inbound-streams @s7 accept }
  • TCP ์˜ต์…˜ fastopen, md5sig ๋ฐ mptcp์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๋งคํ•‘์—์„œ mp-tcp ํ•˜์œ„ ์œ ํ˜• ์‚ฌ์šฉ์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. tcp ์˜ต์…˜ mptcp ํ•˜์œ„ ์œ ํ˜• 1
  • ์ปค๋„ ์ธก ํ•„ํ„ฐ๋ง ์ฝ”๋“œ๊ฐ€ ๊ฐœ์„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • Flowtable์€ ์ด์ œ JSON ํ˜•์‹์„ ์™„๋ฒฝํ•˜๊ฒŒ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • ์ด๋”๋„ท ํ”„๋ ˆ์ž„ ์ผ์น˜ ์ž‘์—…์—์„œ "๊ฑฐ๋ถ€" ์ž‘์—…์„ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ œ๊ณต๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์—ํ…Œ๋ฅด saddr aa:bb:cc:dd:ee:ff ip Daddr 192.168.0.1 ๊ฑฐ๋ถ€

์ถœ์ฒ˜ : opennet.ru

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