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