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

IPv0.9.9, IPv4, ARP ๋ฐ ๋„คํŠธ์›Œํฌ ๋ธŒ๋ฆฌ์ง€์— ๋Œ€ํ•œ ํŒจํ‚ท ํ•„ํ„ฐ๋ง ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ฉํ•˜๋Š” ํŒจํ‚ท ํ•„ํ„ฐ nftables 6 ๋ฆด๋ฆฌ์Šค๊ฐ€ ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค(iptables, ip6table, arptables ๋ฐ ebtables๋ฅผ ๋Œ€์ฒดํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•จ). ๋™์‹œ์— nf_tables ํ•˜์œ„ ์‹œ์Šคํ…œ๊ณผ ์ƒํ˜ธ ์ž‘์šฉํ•˜๊ธฐ ์œ„ํ•œ ํ•˜์œ„ ์ˆ˜์ค€ API๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋™๋ฐ˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ libnftnl 1.2.0์ด ์ถœ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. nftables 0.9.9 ๋ฆด๋ฆฌ์Šค๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ Linux ์ปค๋„ 5.13-rc1์— ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

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

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

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

  • ํ๋ฆ„ ํ…Œ์ด๋ธ” ์ฒ˜๋ฆฌ๋ฅผ ๋„คํŠธ์›Œํฌ ์–ด๋Œ‘ํ„ฐ ์ธก์œผ๋กœ ์ด๋™ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ๊ตฌํ˜„๋˜์—ˆ์œผ๋ฉฐ 'offload' ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ™œ์„ฑํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Flowtable์€ ๋ชจ๋“  ๊ทœ์น™ ์ฒ˜๋ฆฌ ์ฒด์ธ์˜ ์™„์ „ํ•œ ํ†ต๊ณผ๊ฐ€ ์ฒซ ๋ฒˆ์งธ ํŒจํ‚ท์—๋งŒ ์ ์šฉ๋˜๊ณ  ํ๋ฆ„์˜ ๋‹ค๋ฅธ ๋ชจ๋“  ํŒจํ‚ท์€ ์ง์ ‘ ์ „๋‹ฌ๋˜๋Š” ํŒจํ‚ท ๋ฆฌ๋””๋ ‰์…˜ ๊ฒฝ๋กœ๋ฅผ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค. table ip global { flowtable f { ํ›„ํฌ ์ˆ˜์‹  ์šฐ์„  ์ˆœ์œ„ ํ•„ํ„ฐ + 1 ์žฅ์น˜ = { lan3, lan0, wan } ํ”Œ๋ž˜๊ทธ ์˜คํ”„๋กœ๋“œ } ์ฒด์ธ ์ „๋‹ฌ { ์œ ํ˜• ํ•„ํ„ฐ ํ›„ํฌ ์ „๋‹ฌ ์šฐ์„  ์ˆœ์œ„ ํ•„ํ„ฐ; ์ •์ฑ… ๋™์˜; ip ํ”„๋กœํ† ์ฝœ { tcp, udp } ํ๋ฆ„ ์ถ”๊ฐ€ @f } ์ฒด์ธ ํฌ์ŠคํŠธ { ์œ ํ˜• nat ํ›„ํฌ ํฌ์ŠคํŠธ๋ผ์šฐํŒ… ์šฐ์„ ์ˆœ์œ„ ํ•„ํ„ฐ; ์ •์ฑ… ๋™์˜; oifname "wan" ๊ฐ€์žฅ ๋ฌด๋„ํšŒ } }
  • ํ”„๋กœ์„ธ์Šค์—์„œ ํ…Œ์ด๋ธ”์„ ๋…์ ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ…Œ์ด๋ธ”์— ์†Œ์œ ์ž ํ”Œ๋ž˜๊ทธ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค์™€ ์—ฐ๊ฒฐ๋œ ํ…Œ์ด๋ธ”์ด ์ž๋™์œผ๋กœ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•œ ์ •๋ณด๋Š” ๊ทœ์น™ ๋คํ”„์— ์ฃผ์„ ํ˜•์‹์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. table ip x { # progname nft flags owner chain y { type filter Hook input Priority filter; ์ •์ฑ… ๋™์˜; ์นด์šดํ„ฐ ํŒจํ‚ท 1๋ฐ”์ดํŠธ 309 } }
  • ์—ฌ๋Ÿฌ VLAN ํƒœ๊ทธ๋ฅผ ๋‹จ์ผ ์ด๋”๋„ท ํ”„๋ ˆ์ž„์œผ๋กœ ๋Œ€์ฒดํ•˜๋Š” ์ˆ˜๋‹จ์„ ์ •์˜ํ•˜๋Š” IEEE 802.1ad ์‚ฌ์–‘(VLAN ์Šคํƒœํ‚น ๋˜๋Š” QinQ)์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์™ธ๋ถ€ ์ด๋”๋„ท ํ”„๋ ˆ์ž„ 8021ad ๋ฐ vlan id=342์˜ ์œ ํ˜•์„ ํ™•์ธํ•˜๋ ค๋ฉด ... ether type 802.1ad vlan id 342 ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋”๋„ท ํ”„๋ ˆ์ž„ 8021ad/vlan id=1, ์ค‘์ฒฉ๋œ 802.1์˜ ์™ธ๋ถ€ ์œ ํ˜•์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. q/vlan id=2 ๋ฐ ์ถ”๊ฐ€ IP ํŒจํ‚ท ์บก์Šํ™”: ... ์ด๋”๋„ท ์œ ํ˜• 8021ad vlan id 1 vlan ์œ ํ˜• 8021q vlan id 2 vlan ์œ ํ˜• ip ์นด์šดํ„ฐ
  • ํ†ตํ•ฉ ๊ณ„์ธต cgroups v2๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. cgroups v2์™€ v1์˜ ์ฃผ์š” ์ฐจ์ด์ ์€ CPU ๋ฆฌ์†Œ์Šค ํ• ๋‹น, ๋ฉ”๋ชจ๋ฆฌ ์†Œ๋น„ ์กฐ์ ˆ ๋ฐ I/O๋ฅผ ์œ„ํ•ด ๋ณ„๋„์˜ ๊ณ„์ธต ๊ตฌ์กฐ ๋Œ€์‹  ๋ชจ๋“  ์œ ํ˜•์˜ ๋ฆฌ์†Œ์Šค์— ๊ณตํ†ต cgroups ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ฒซ ๋ฒˆ์งธ ์ˆ˜์ค€ cgroupv2์— ์žˆ๋Š” ์†Œ์ผ“์˜ ์กฐ์ƒ์ด "system.slice" ๋งˆ์Šคํฌ์™€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด ๋‹ค์Œ ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ... ์†Œ์ผ“ cgroupv2 ์ˆ˜์ค€ 1 "system.slice"
  • SCTP ํŒจํ‚ท์˜ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ํ™•์ธํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค(์ด์— ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์€ Linux 5.14 ์ปค๋„์— ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค). ์˜ˆ๋ฅผ ๋“ค์–ด, ํŒจํ‚ท์— ์œ ํ˜•์ด 'data'์ด๊ณ  ํ•„๋“œ๊ฐ€ 'type'์ธ ์ฒญํฌ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•˜์‹ญ์‹œ์˜ค. ... sctp ์ฒญํฌ ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค ... sctp ์ฒญํฌ ๋ฐ์ดํ„ฐ ์œ ํ˜• 0
  • "-f" ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ทœ์น™ ๋กœ๋“œ ์ž‘์—… ์‹คํ–‰์ด ์•ฝ XNUMX๋ฐฐ ๊ฐ€์†ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทœ์น™ ๋ชฉ๋ก ์ถœ๋ ฅ๋„ ๊ฐ€์†ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ํ”Œ๋ž˜๊ทธ ๋น„ํŠธ๊ฐ€ ์„ค์ •๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ„๋‹จํ•œ ํ˜•์‹์ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, snat ๋ฐ dnat ์ƒํƒœ ๋น„ํŠธ๊ฐ€ ์„ค์ •๋˜์ง€ ์•Š์•˜๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ... ct status ! snat,dnat๋Š” syn ๋น„ํŠธ๊ฐ€ ๋น„ํŠธ๋งˆ์Šคํฌ์— ์„ค์ •๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. syn,ack: ... tcp๋Š” syn / syn,ack์— ํ”Œ๋ž˜๊ทธ๋ฅผ ์ง€์ •ํ•˜์—ฌ fin ๋ฐ rst ๋น„ํŠธ๊ฐ€ ๋น„ํŠธ๋งˆ์Šคํฌ์— ์„ค์ •๋˜์–ด ์žˆ์ง€ ์•Š์€์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. syn,ack,fin,rst: ... tcp ํ”Œ๋ž˜๊ทธ! = fin,rst / syn,ack,fin,rst
  • set/map typeof ์ •์˜์—์„œ "verdict" ํ‚ค์›Œ๋“œ๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. map xm { typeof iifname ์„ ์ถ”๊ฐ€ํ•˜์„ธ์š”. IP ํ”„๋กœํ† ์ฝœ th dport : ํ‰๊ฒฐ ;}

์ถœ์ฒ˜ : opennet.ru

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