์ปค๋ ์์ค์์๋ ํจํท์์ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๊ณ ๋ฐ์ดํฐ์ ๋ํ ์์ ์ ์ํํ๋ฉฐ ํ๋ฆ์ ์ ์ดํ๊ธฐ ์ํ ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ์ผ๋ฐ ํ๋กํ ์ฝ ๋ ๋ฆฝ์ ์ธํฐํ์ด์ค๋ง ์ ๊ณต๋ฉ๋๋ค. ํํฐ๋ง ๊ท์น ์์ฒด์ ํ๋กํ ์ฝ๋ณ ํธ๋ค๋ฌ๋ ์ฌ์ฉ์ ๊ณต๊ฐ ๋ฐ์ดํธ์ฝ๋๋ก ์ปดํ์ผ๋ ํ ์ด ๋ฐ์ดํธ์ฝ๋๊ฐ Netlink ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ปค๋์ ๋ก๋๋๊ณ BPF(Berkeley Packet Filters)์ ์ ์ฌํ ํน์ ๊ฐ์ ๋จธ์ ์ ์ปค๋์์ ์คํ๋ฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ์ปค๋ ์์ค์์ ์คํ๋๋ ํํฐ๋ง ์ฝ๋์ ํฌ๊ธฐ๋ฅผ ํฌ๊ฒ ์ค์ด๊ณ ๊ตฌ๋ฌธ ๋ถ์ ๊ท์น์ ๋ชจ๋ ๊ธฐ๋ฅ๊ณผ ํ๋กํ ์ฝ ์์ ๋ ผ๋ฆฌ๋ฅผ ์ฌ์ฉ์ ๊ณต๊ฐ์ผ๋ก ์ด๋ํ ์ ์์ต๋๋ค.
์ฃผ์ ํ์ :
- ์กฐ์ธ์ ๋ฒ์ ์ง์(์ฐ๊ฒฐ, ์ผ์น๋ฅผ ๋จ์ํํ๋ ์ฃผ์ ๋ฐ ํฌํธ์ ํน์ ๋ฐ์ธ๋ฉ). ์๋ฅผ ๋ค์ด ์์๊ฐ ์ฒจ๋ถ ํ์ผ์ธ "ํ์ดํธ๋ฆฌ์คํธ" ์งํฉ์ ๊ฒฝ์ฐ "๊ฐ๊ฒฉ" ํ๋๊ทธ๋ฅผ ์ง์ ํ๋ฉด ์งํฉ์ด ์ฒจ๋ถ ํ์ผ์ ๋ฒ์๋ฅผ ํฌํจํ ์ ์์์ ๋ํ๋
๋๋ค(์ฒจ๋ถ ํ์ผ "ipv4_addr . ipv4_addr . inet_service"์ ๊ฒฝ์ฐ ์ด์ ์๋ ์ ํํ "192.168.10.35"๊ณผ ๊ฐ์ด ์ผ์นํ๋ฉฐ ์ด์ "192.68.11.123-80-192.168.10.35" ์ฃผ์ ๊ทธ๋ฃน์ ์ง์ ํ ์ ์์ต๋๋ค.
ํ ์ด๋ธ IP ํธ {
ํ์ดํธ๋ฆฌ์คํธ ์ค์ {
ipv4_addr ์ ์ ๋ ฅํฉ๋๋ค. ipv4_addr . inet_service
ํ๋๊ทธ ๊ฐ๊ฒฉ
์์ = { 192.168.10.35-192.168.10.40 . 192.68.11.123-192.168.11.125 . 80}
}์ฒด์ธ ๋ฐ {
์ ํ ํํฐ ํํฌ ์ฌ์ ๋ผ์ฐํ ์ฐ์ ์์ ํํฐ; ์ ์ฑ ์ญ์ ;
์์ดํผ ์ฌ๋๋ฅด. ์์ดํผ ์๋น . tcp dport@whitelist ์๋ฝ
}
} - ์งํฉ ๋ฐ ๋งต ๋ชฉ๋ก์์ ๋งคํํ ๋ ์์์ ํ์์ ๊ฒฐ์ ํ๋ "typeof" ์ง์๋ฌธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋คํ ์ด๋ธ IP ํธ {
ํ์ดํธ๋ฆฌ์คํธ ์ค์ {
์ ํ์ ip saddr
์์ = {192.168.10.35, 192.168.10.101, 192.168.10.135}
}์ฒด์ธ ๋ฐ {
์ ํ ํํฐ ํํฌ ์ฌ์ ๋ผ์ฐํ ์ฐ์ ์์ ํํฐ; ์ ์ฑ ์ญ์ ;
ip daddr @whitelist ์๋ฝ
}
}ํ ์ด๋ธ IP ํธ {
์ง๋ addr2mark {
typeof ip saddr : ๋ฉํ ๋งํฌ
์์ = { 192.168.10.35 : 0x00000001, 192.168.10.135 : 0x00000002 }
}
} - NAT ๋ฐ์ธ๋ฉ์์ ์ฒจ๋ถ ํ์ผ์ ์ฌ์ฉํ๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ฌ ๋งต ๋ชฉ๋ก ๋๋ ๋ช
๋ช
๋ ์งํฉ์ ๊ธฐ๋ฐ์ผ๋ก NAT ๋ณํ์ ์ ์ํ ๋ ์ฃผ์์ ํฌํธ๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.
nft ์ถ๊ฐ ๊ท์น ip nat pre dnat ip addr . ํฌํธ to ip saddr map {1.1.1.1: 2.2.2.2. ์๋ฅธ }
nft add map ip nat ๋ชฉ์ ์ง { type ipv4_addr . inet_service : ipv4_addr . inet_service\\; }
nft ์ถ๊ฐ ๊ท์น ip nat pre dnat ip addr . ip saddr๋ก ํฌํธ. tcp dport ๋งต @destinations - ๋คํธ์ํฌ ์นด๋ ์ด๊นจ์์ ์ผ๋ถ ํํฐ๋ง ์์
์ ์ ๊ฑฐํ์ฌ ํ๋์จ์ด ๊ฐ์์ ์ง์ํฉ๋๋ค. ๊ฐ์์ ethtool ์ ํธ๋ฆฌํฐ("ethtool -K eth0 hw-tc-offload on")๋ฅผ ํตํด ํ์ฑํ๋ ํ "offload" ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ์ธ ์ฒด์ธ์ nftables์์ ํ์ฑํ๋ฉ๋๋ค. Linux 5.6 ์ปค๋์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์์ , ์ญ์ , ๋ณต์ (dup) ๋ฐ ์ ๋ฌ(fwd) ํจํท๊ณผ ํจ๊ป ํค๋ ํ๋ ์ผ์น ๋ฐ ์์ ์ธํฐํ์ด์ค ๊ฒ์ฌ๋ฅผ ์ํด ํ๋์จ์ด ๊ฐ์์ด ์ง์๋ฉ๋๋ค. ์๋ ์์์ ์ฃผ์ 192.168.30.20์์ ์ค๋ ํจํท์ ์ญ์ ํ๋ ์์
์ ํจํท์ ์ปค๋๋ก ์ ๋ฌํ์ง ์๊ณ ๋คํธ์ํฌ ์นด๋ ์์ค์์ ์ํ๋ฉ๋๋ค.
# ๊ณ ์์ด ํ์ผ.nft
ํ ์ด๋ธ netdev x {
์ฒด์ธ y {
์ ํ ํํฐ ํํฌ ์ง์ ์ฅ์น eth0 ์ฐ์ ์์ 10; ํ๋๊ทธ ์คํ๋ก๋;
ip saddr 192.168.30.20 ๋๋กญ
}
}
# nft -f ํ์ผ.nft - ๊ท์น์ ์ค๋ฅ ์์น์ ๋ํ ์ ๋ณด๊ฐ ๊ฐ์ ๋์์ต๋๋ค.
# nft ์ญ์ ๊ท์น ip yz ํธ๋ค 7
์ค๋ฅ: ๊ท์น์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค: ํด๋น ํ์ผ ๋๋ ๋๋ ํฐ๋ฆฌ๊ฐ ์์ต๋๋ค.
์ญ์ ๊ท์น ip yz ํธ๋ค 7
^# nft ์ญ์ ๊ท์น ip xx ํธ๋ค 7
์ค๋ฅ: ๊ท์น์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค: ํด๋น ํ์ผ ๋๋ ๋๋ ํฐ๋ฆฌ๊ฐ ์์ต๋๋ค.
์ญ์ ๊ท์น ip xx ํธ๋ค 7
^# nft ์ญ์ ํ ์ด๋ธ twst
์ค๋ฅ: ํด๋น ํ์ผ์ด๋ ๋๋ ํฐ๋ฆฌ๊ฐ ์์ต๋๋ค. ๊ฐ์กฑ IP์์ 'ํ ์คํธ' ํ ์ด๋ธ์ ์๋ฏธํ์ต๋๊น?
ํ ์ด๋ธ ํธ์์คํธ ์ญ์
^^^^์ฒซ ๋ฒ์งธ ์๋ ํ ์ด๋ธ 'y'๊ฐ ์์คํ ์ ์กด์ฌํ์ง ์์์ ๋ณด์ฌ์ฃผ๊ณ , ๋ ๋ฒ์งธ๋ '7' ํธ๋ค๋ฌ๊ฐ ๋๋ฝ๋์์์ ๋ณด์ฌ์ฃผ๋ฉฐ, ์ธ ๋ฒ์งธ๋ ํ ์ด๋ธ ์ด๋ฆ์ ์ ๋ ฅํ ๋ ์คํ ํํธ๋ฅผ ๋ณด์ฌ์ค๋๋ค.
- "meta sdif" ๋๋ "meta sdifname"์ ์ง์ ํ์ฌ ์ฌ๋ ์ด๋ธ ์ธํฐํ์ด์ค๋ฅผ ํ์ธํ๊ธฐ ์ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
โฆ ๋ฉํ sdifname vrf1 โฆ
- ์ค๋ฅธ์ชฝ ๋๋ ์ผ์ชฝ ์ด๋ ์์
์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๊ธฐ์กด ํจํท ๋ ์ด๋ธ์ ์ผ์ชฝ์ผ๋ก 1๋นํธ ์ด๋ํ๊ณ ํ์ ๋นํธ๋ฅผ 1๋ก ์ค์ ํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํ์ญ์์ค.
โฆ ๋ฉํ ๋งํฌ ์ธํธ ๋ฉํ ๋งํฌ lshift 1 ๋๋ 0x1 โฆ
- ํ์ฅ๋ ๋ฒ์ ์ ๋ณด๋ฅผ ํ์ํ๋ "-V" ์ต์
์ ๊ตฌํํ์ต๋๋ค.
#nft -V
nftables v0.9.4(Jive at Five)
cli:readline
json:์
minigmp:์๋์ค
libxtables: ์ - ๋ช
๋ น์ค ์ต์
์ ์ด์ ๋ช
๋ น ์ ์ ํ์์
๋๋ค. ์๋ฅผ ๋ค์ด "nft -a list ruleset"๋ฅผ ์ง์ ํด์ผ ํ๋ฉฐ "nft list ruleset -a"๋ฅผ ์คํํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
์ถ์ฒ : opennet.ru