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

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

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

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

  • Linux ์ปค๋„ 6.2 ์ด์ƒ์„ ์‹คํ–‰ํ•˜๋Š” ์‹œ์Šคํ…œ์˜ ๊ฒฝ์šฐ vxlan, geneve, gre ๋ฐ gretap ํ”„๋กœํ† ์ฝœ ๋งคํ•‘์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์–ด ๊ฐ„๋‹จํ•œ ํ‘œํ˜„์‹์œผ๋กœ ์บก์Šํ™”๋œ ํŒจํ‚ท์˜ ํ—ค๋”๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด VxLAN์˜ ์ค‘์ฒฉ๋œ ํŒจํ‚ท ํ—ค๋”์—์„œ IP ์ฃผ์†Œ๋ฅผ ํ™•์ธํ•˜๋ ค๋ฉด ์ด์ œ ๋‹ค์Œ ๊ทœ์น™์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๋จผ์ € VxLAN ํ—ค๋”๋ฅผ ์บก์Šํ™” ํ•ด์ œํ•˜๊ณ  ํ•„ํ„ฐ๋ฅผ vxlan0 ์ธํ„ฐํŽ˜์ด์Šค์— ๋ฐ”์ธ๋”ฉํ•  ํ•„์š” ์—†์Œ). ... udp dport 4789 vxlan ip ํ”„๋กœํ† ์ฝœ udp ... udp dport 4789 vxlan ip saddr 1.2.3.0/24 ... udp dport 4789 vxlan ip saddr . vxlan IP Daddr { 1.2.3.4 . 4.3.2.1 }
  • ์„ธํŠธ ๋ชฉ๋ก ์š”์†Œ์˜ ๋ถ€๋ถ„ ์‚ญ์ œ ํ›„ ๋‚˜๋จธ์ง€ ์ž๋™ ๋ณ‘ํ•ฉ ์ง€์›์ด ๊ตฌํ˜„๋˜์–ด ๊ธฐ์กด ๋ฒ”์œ„์—์„œ ์š”์†Œ ๋˜๋Š” ๋ฒ”์œ„์˜ ์ผ๋ถ€๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ด์ „์—๋Š” ๋ฒ”์œ„๋ฅผ ์™„์ „ํžˆ ์‚ญ์ œํ•  ์ˆ˜๋งŒ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค). ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฒ”์œ„๊ฐ€ 25-24 ๋ฐ 30-40์ธ ์„ธํŠธ ๋ชฉ๋ก์—์„œ ์š”์†Œ 50๋ฅผ ์ œ๊ฑฐํ•œ ํ›„ ๋ชฉ๋ก์€ 24, 26-30 ๋ฐ 40-50์œผ๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ์ž๋™ ๋ณ‘ํ•ฉ์ด ์ž‘๋™ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ˆ˜์ • ์‚ฌํ•ญ์€ 5.10+ ์ปค๋„์˜ ์•ˆ์ •์ ์ธ ๋ถ„๊ธฐ ์œ ์ง€ ๊ด€๋ฆฌ ๋ฆด๋ฆฌ์Šค์—์„œ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. # nft ๋ชฉ๋ก ๊ทœ์น™ ์„ธํŠธ ํ…Œ์ด๋ธ” ip x { set y { typeof tcp dport ํ”Œ๋ž˜๊ทธ ๊ฐ„๊ฒฉ ์ž๋™ ๋ณ‘ํ•ฉ ์š”์†Œ = { 24-30, 40-50 } } } # nft ์‚ญ์ œ ์š”์†Œ ip xy { 25 } # nft ๋ชฉ๋ก ๊ทœ์น™ ์„ธํŠธ table ip x { set y { tcp dport ํ”Œ๋ž˜๊ทธ ๊ฐ„๊ฒฉ ์ž๋™ ๋ณ‘ํ•ฉ ์š”์†Œ ์œ ํ˜• = { 24, 26-30, 40-50 } } }
  • NAT(์ฃผ์†Œ ๋ณ€ํ™˜) ๋งคํ•‘ ์‹œ ์—ฐ๋ฝ์ฒ˜ ๋ฐ ๋ฒ”์œ„๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. table ip nat { ์ฒด์ธ ์‚ฌ์ „ ๋ผ์šฐํŒ… { type nat ํ›„ํฌ ์‚ฌ์ „ ๋ผ์šฐํŒ… ์šฐ์„  ์ˆœ์œ„ dstnat; ์ •์ฑ… ๋™์˜; ์•„๋น ์˜ IP๋กœ dnat. tcp dport ๋งต { 10.1.1.136 . 80: 1.1.2.69. 1024, 10.1.1.10-10.1.1.20. 8888-8889: 1.1.2.69. 2048-2049 } ์ง€์†์  } }
  • ๊ทœ์น™ ์š”์†Œ ๋˜๋Š” ์„ธํŠธ ๋ชฉ๋ก์„ ๋งˆ์ง€๋ง‰์œผ๋กœ ์‚ฌ์šฉํ•œ ์‹œ๊ฐ„์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” "๋งˆ์ง€๋ง‰" ํ‘œํ˜„์‹์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์€ Linux ์ปค๋„ 5.14๋ถ€ํ„ฐ ์ง€์›๋ฉ๋‹ˆ๋‹ค. ํ…Œ์ด๋ธ” ip x { set y { ip Daddr ์œ ํ˜•. tcp dport ํฌ๊ธฐ 65535 ํ”Œ๋ž˜๊ทธ ๋™์ , ์‹œ๊ฐ„ ์ดˆ๊ณผ ๋งˆ์ง€๋ง‰ ์‹œ๊ฐ„ ์ดˆ๊ณผ 1h } chain z { ์œ ํ˜• ํ•„ํ„ฐ ํ›„ํฌ ์ถœ๋ ฅ ์šฐ์„  ์ˆœ์œ„ ํ•„ํ„ฐ; ์ •์ฑ… ๋™์˜; ์—…๋ฐ์ดํŠธ @y { IP Daddr . tcp dport } } } # nft ๋ชฉ๋ก set ip xy table ip x { set y { typeof ip Daddr . tcp dport ํฌ๊ธฐ 65535 ํ”Œ๋ž˜๊ทธ ๋™์ , ์‹œ๊ฐ„ ์ดˆ๊ณผ ๋งˆ์ง€๋ง‰ ์‹œ๊ฐ„ ์ดˆ๊ณผ 1h ์š”์†Œ = { 172.217.17.14 . 443 ๋งˆ์ง€๋ง‰ ์‚ฌ์šฉ 1s591ms ์‹œ๊ฐ„ ์ดˆ๊ณผ 1h๊ฐ€ 59m58s409ms, 172.67.69.19 ๋งŒ๋ฃŒ๋ฉ๋‹ˆ๋‹ค. 443 ๋งˆ์ง€๋ง‰ ์‚ฌ์šฉ 4s636ms ์ œํ•œ ์‹œ๊ฐ„ 1์‹œ๊ฐ„์ด 59m55s364ms, 142.250.201.72 ๋งŒ๋ฃŒ๋ฉ๋‹ˆ๋‹ค. 443 ๋งˆ์ง€๋ง‰ ์‚ฌ์šฉ 4s748ms ์‹œ๊ฐ„ ์ดˆ๊ณผ 1h๊ฐ€ 59m55s252ms, 172.67.70.134 ๋งŒ๋ฃŒ๋ฉ๋‹ˆ๋‹ค. 443 ๋งˆ์ง€๋ง‰ ์‚ฌ์šฉ 4s688ms ์ œํ•œ ์‹œ๊ฐ„ 1์‹œ๊ฐ„์ด 59m55s312ms, 35.241.9.150 ๋งŒ๋ฃŒ๋ฉ๋‹ˆ๋‹ค. 443 ๋งˆ์ง€๋ง‰ ์‚ฌ์šฉ 5s204ms ์ œํ•œ ์‹œ๊ฐ„ 1์‹œ๊ฐ„์ด 59m54s796ms, 138.201.122.174 ๋งŒ๋ฃŒ๋ฉ๋‹ˆ๋‹ค. 443 ๋งˆ์ง€๋ง‰ ์‚ฌ์šฉ 4s537ms ์ œํ•œ ์‹œ๊ฐ„ 1์‹œ๊ฐ„์ด 59m55s463ms, 34.160.144.191 ๋งŒ๋ฃŒ๋ฉ๋‹ˆ๋‹ค. 443 ๋งˆ์ง€๋ง‰ ์‚ฌ์šฉ 5s205ms ์ œํ•œ ์‹œ๊ฐ„ 1์‹œ๊ฐ„์ด 59m54s795ms, 130.211.23.194 ๋งŒ๋ฃŒ๋ฉ๋‹ˆ๋‹ค. 443 ๋งˆ์ง€๋ง‰ ์‚ฌ์šฉ 4s436ms ์‹œ๊ฐ„ ์ดˆ๊ณผ 1์‹œ๊ฐ„ ๋งŒ๋ฃŒ 59m55s564ms } } }
  • ์„ธํŠธ ๋ชฉ๋ก์— ํ• ๋‹น๋Ÿ‰์„ ์ •์˜ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ฐ ๋Œ€์ƒ IP ์ฃผ์†Œ์— ๋Œ€ํ•œ ํŠธ๋ž˜ํ”ฝ ํ• ๋‹น๋Ÿ‰์„ ๊ฒฐ์ •ํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. table netdev x { set y { typeof ip Daddr size 65535 quota over 10000MB } chain y { type filter Hook egress device "eth0" Priority filter; ์ •์ฑ… ๋™์˜; ip Daddr @y drop } } # nft ์š”์†Œ ์ถ”๊ฐ€ inet xy { 8.8.8.8 } # ping -c 2 8.8.8.8 # nft ๋ชฉ๋ก ๊ทœ์น™ ์„ธํŠธ table netdev x { set y { type ipv4_addr size 65535 quota over 10000 mbytes elements = { 8.8.8.8. 10000 196MB ์ด์ƒ์˜ ํ• ๋‹น๋Ÿ‰ 0๋ฐ”์ดํŠธ ์‚ฌ์šฉ } } chain y { ์œ ํ˜• ํ•„ํ„ฐ ํ›„ํฌ ์†ก์‹  ์žฅ์น˜ โ€œethXNUMXโ€ ์šฐ์„  ์ˆœ์œ„ ํ•„ํ„ฐ; ์ •์ฑ… ๋™์˜; IP Daddr @y drop } }
  • ์„ธํŠธ ๋ชฉ๋ก์— ์ƒ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋Œ€์ƒ ์ฃผ์†Œ์™€ VLAN ID๋ฅผ ๋ชฉ๋ก ํ‚ค๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ VLAN ๋ฒˆํ˜ธ(daddr . 123)๋ฅผ ์ง์ ‘ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. table netdev t { set s { typeof ether saddr . vlan id ํฌ๊ธฐ 2048 ํ”Œ๋ž˜๊ทธ ๋™์ , ์‹œ๊ฐ„ ์ดˆ๊ณผ ์‹œ๊ฐ„ ์ดˆ๊ณผ 1m } chain c { ์œ ํ˜• ํ•„ํ„ฐ ํ›„ํฌ ์ˆ˜์‹  ์žฅ์น˜ eth0 ์šฐ์„  ์ˆœ์œ„ 0; ์ •์ฑ… ๋™์˜; ์—ํ…Œ๋ฅด ์œ ํ˜• != 8021q ์—…๋ฐ์ดํŠธ @s { ์—ํ…Œ๋ฅด Daddr . 123 } ์นด์šดํ„ฐ } }
  • ๊ฐ์ฒด๋ฅผ ๋ฌด์กฐ๊ฑด ์‚ญ์ œํ•˜๋Š” ์ƒˆ๋กœ์šด "destroy" ๋ช…๋ น์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค(delete ๋ช…๋ น๊ณผ ๋‹ฌ๋ฆฌ ๋ˆ„๋ฝ๋œ ๊ฐ์ฒด๋ฅผ ์‚ญ์ œํ•˜๋ ค๊ณ  ํ•  ๋•Œ ENOENT๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค). ์ž‘๋™ํ•˜๋ ค๋ฉด ์ตœ์†Œํ•œ Linux ์ปค๋„ 6.3-rc๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ํ…Œ์ด๋ธ” IP ํ•„ํ„ฐ ํŒŒ๊ดด

์ถœ์ฒ˜ : opennet.ru

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