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

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

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

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

  • ์‹œ๊ฐ„๋ณ„ ํŒจํ‚ท ์ผ์น˜๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๊ทœ์น™์ด ํŠธ๋ฆฌ๊ฑฐ๋˜๋Š” ์‹œ๊ฐ„๊ณผ ๋‚ ์งœ ๋ฒ”์œ„๋ฅผ ๋ชจ๋‘ ์ •์˜ํ•˜๊ณ  ๊ฐ ์š”์ผ์— ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ํš๊ธฐ์ ์ธ ์‹œ๊ฐ„์„ ์ดˆ ๋‹จ์œ„๋กœ ํ‘œ์‹œํ•˜๋Š” ์ƒˆ๋กœ์šด ์˜ต์…˜ "-T"๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

    ๋ฉ”ํƒ€ ํƒ€์ž„ \>2019-12-24 16:00\" โ€” \>2020-01-02 7:00\"
    ๋ฉ”ํƒ€ ์‹œ๊ฐ„ \"17:00\" - \"19:00\"
    ๋ฉ”ํƒ€๋ฐ์ด \"๊ธˆ์š”์ผ\"

  • SELinux ํ‘œ์‹œ(secmark) ๋ณต๊ตฌ ๋ฐ ์ €์žฅ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

    ct secmark๋Š” ๋ฉ”ํƒ€ secmark๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    ๋ฉ”ํƒ€ secmark ์„ธํŠธ ct secmark

  • Synproxy ๋งต ๋ชฉ๋ก์„ ์ง€์›ํ•˜๋ฏ€๋กœ ๋ฐฑ์—”๋“œ๋‹น ๋‘˜ ์ด์ƒ์˜ ๊ทœ์น™์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ํ…Œ์ด๋ธ” IP ํ‘ธ {
    ์‹ ํ”„๋ก์‹œ https-synproxy {
    ๋ฉ”์‹œ์ง€ 1460
    wscale 7
    ํƒ€์ž„์Šคํƒฌํ”„ ์ž๋ฃจ ํŒŒ๋งˆ
    }

    synproxy ๊ธฐํƒ€-synproxy {
    ๋ฉ”์‹œ์ง€ 1460
    wscale 5
    }

    ์ฒด์ธ ์‚ฌ์ „ {
    ์œ ํ˜• ํ•„ํ„ฐ ํ›„ํฌ ์‚ฌ์ „ ๋ผ์šฐํŒ… ์šฐ์„  ์ˆœ์œ„ ์›์‹œ; ์ •์ฑ… ๋™์˜;
    tcp dport 8888 tcp ํ”Œ๋ž˜๊ทธ syn notrack
    }

    ์ฒด์ธ ๋ฐ” {
    ์œ ํ˜• ํ•„ํ„ฐ ํ›„ํฌ ์ˆœ๋ฐฉํ–ฅ ์šฐ์„  ์ˆœ์œ„ ํ•„ํ„ฐ; ์ •์ฑ… ๋™์˜;
    ct ์ƒํƒœ๊ฐ€ ์ž˜๋ชป๋˜์–ด ์ถ”์ ๋˜์ง€ ์•Š๋Š” synproxy ์ด๋ฆ„ ip saddr map { 192.168.1.0/24 : "https-synproxy", 192.168.2.0/24 : "other-synproxy" }
    }
    }

  • ํŒจํ‚ท ์ฒ˜๋ฆฌ ๊ทœ์น™์—์„œ ์„ค์ •๋œ ์š”์†Œ๋ฅผ ๋™์ ์œผ๋กœ ์ œ๊ฑฐํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

    nft ์ถ”๊ฐ€ ๊ทœ์น™ ... ์‚ญ์ œ @set5 { ip6 saddr . IP6 ์•„๋น }

  • ๋„คํŠธ์›Œํฌ ๋ธŒ๋ฆฌ์ง€ ์ธํ„ฐํŽ˜์ด์Šค ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ์ •์˜๋œ ID ๋ฐ ํ”„๋กœํ† ์ฝœ๋ณ„ VLAN ๋งคํ•‘ ์ง€์›

    ๋ฉ”ํƒ€ ibrpvid 100
    ๋ฉ”ํƒ€ irvproto VLAN

  • ๊ทœ์น™์„ ํ‘œ์‹œํ•  ๋•Œ ์„ธํŠธ ์„ธํŠธ์˜ ์š”์†Œ๋ฅผ ์ œ์™ธํ•˜๋Š” ์˜ต์…˜ "-t"("--terse")์ž…๋‹ˆ๋‹ค. "nft -t list ruleset"์„ ์‹คํ–‰ํ•˜๋ฉด ๋‹ค์Œ์ด ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.

    ํ…Œ์ด๋ธ” IP x {
    ์„ธํŠธ y {
    ipv4_addr์„ ์ž…๋ ฅํ•˜์„ธ์š”.
    }
    }

    ๊ทธ๋ฆฌ๊ณ  "nft ๋ชฉ๋ก ๊ทœ์น™ ์„ธํŠธ"๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด

    ํ…Œ์ด๋ธ” IP x {
    ์„ธํŠธ y {
    ipv4_addr์„ ์ž…๋ ฅํ•˜์„ธ์š”.
    ์š”์†Œ = { 192.168.10.2, 192.168.20.1,
    192.168.4.4, 192.168.2.34 }
    }
    }

  • ๊ณตํ†ต ํ•„ํ„ฐ๋ง ๊ทœ์น™์„ ๊ฒฐํ•ฉํ•˜๊ธฐ ์œ„ํ•ด netdev ์ฒด์ธ์—์„œ ๋‘˜ ์ด์ƒ์˜ ์žฅ์น˜๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ธฐ๋Šฅ(์ปค๋„ 5.5์—์„œ๋งŒ ์ž‘๋™)

    ํ…Œ์ด๋ธ” netdev x ์ถ”๊ฐ€
    ์ฒด์ธ ์ถ”๊ฐ€ netdev x y { \
    ์œ ํ˜• ํ•„ํ„ฐ ํ›„ํฌ ์ˆ˜์‹  ์žฅ์น˜ = { eth0, eth1 } ์šฐ์„ ์ˆœ์œ„ 0;
    }

  • ๋ฐ์ดํ„ฐ ์œ ํ˜•์— ๋Œ€ํ•œ ์„ค๋ช…์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ธฐ๋Šฅ.

    # nft๋Š” ipv4_addr์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.
    ๋ฐ์ดํ„ฐ ์œ ํ˜• ipv4_addr(IPv4 ์ฃผ์†Œ)(๊ธฐ๋ณธ ์œ ํ˜• ์ •์ˆ˜), 32๋น„ํŠธ

  • libreadline ๋Œ€์‹  linenoise ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ CLI ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ธฐ๋Šฅ.

    ./configure --with-cli=linenoise

์ถœ์ฒ˜ : opennet.ru

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