nft(8) - wariua/manpages-ko GitHub Wiki

NAME

nft - ํŒจํ‚ท ํ•„ํ„ฐ๋ง ๋ฐ ๋ถ„๋ฅ˜๋ฅผ ์œ„ํ•œ nftables ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๊ด€๋ฆฌ ๋„๊ตฌ

SYNOPSIS

nft [ -nNscaeSupyjt ] [ -I directory ] [ -f filename | -i | cmd ...]
nft -h
nft -v

DESCRIPTION

nft๋Š” ๋ฆฌ๋ˆ…์Šค ์ปค๋„ nftables ํ”„๋ ˆ์ž„์›Œํฌ์˜ ํŒจํ‚ท ํ•„ํ„ฐ๋ง ๋ฐ ๋ถ„๋ฅ˜ ๊ทœ์น™์„ ์„ค์ •ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๊ณ  ์กฐ์‚ฌํ•˜๋Š” ๋ฐ ์“ฐ๋Š” ๋ช…๋ นํ–‰ ๋„๊ตฌ๋‹ค. ๊ทธ ๋ฆฌ๋ˆ…์Šค ์ปค๋„ ์„œ๋ธŒ์‹œ์Šคํ…œ์„ nf_tables๋ผ๊ณ  ํ•˜๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ 'nf'๋Š” Netfilter๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

OPTIONS

์˜ต์…˜ ์š”์•ฝ ์ „์ฒด๋ฅผ ๋ณด๋ ค๋ฉด nft --help๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋œ๋‹ค.

-h, --help
๋„์›€๋ง ๋ฉ”์‹œ์ง€์™€ ์ „์ฒด ์˜ต์…˜์„ ๋ณด์—ฌ ์ค€๋‹ค.
-v, --version
๋ฒ„์ „์„ ๋ณด์—ฌ ์ค€๋‹ค.
-n, --numeric
์ถœ๋ ฅ์„ ์™„์ „ํžˆ ์ˆซ์ž๋กœ๋งŒ ์ฐ๋Š”๋‹ค.
-s, --stateless
๊ทœ์น™๊ณผ ์ƒํƒœ ๊ฐ์ฒด์˜ ์ƒํƒœ ์ •๋ณด๋ฅผ ์ƒ๋žตํ•œ๋‹ค.
-N, --reversedns
DNS ์—ญ์งˆ์˜๋ฅผ ํ†ตํ•ด IP ์ฃผ์†Œ๋ฅผ ์ด๋ฆ„์œผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค. ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ์„ ๋ฐœ์ƒ์‹œํ‚ค๋ฏ€๋กœ ๋ชฉ๋ก ํ‘œ์‹œ๊ฐ€ ๋А๋ ค์งˆ ์ˆ˜ ์žˆ๋‹ค.
-S, --service
/etc/services์— ์ •์˜๋œ ๋Œ€๋กœ ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ์„œ๋น„์Šค ์ด๋ฆ„์œผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.
-u, --guid
/etc/passwd ๋ฐ /etc/group์— ์ •์˜๋œ ๋Œ€๋กœ ์ˆซ์ž๋กœ ๋œ UID/GID๋ฅผ ์ด๋ฆ„์œผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.
-p, --numeric-protocol
์ œ4๊ณ„์ธต ํ”„๋กœํ† ์ฝœ์„ ์ˆซ์ž๋กœ ํ‘œ์‹œํ•œ๋‹ค.
-y, --numeric-priority
๊ธฐ๋ณธ ์ฒด์ธ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ˆซ์ž๋กœ ํ‘œ์‹œํ•œ๋‹ค.
-c, --check
๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์‹ค์ œ ์ ์šฉํ•˜์ง€ ์•Š๊ณ  ๋ช…๋ น ์œ ํšจ์„ฑ๋งŒ ํ™•์ธํ•œ๋‹ค.
-a, --handle
์ถœ๋ ฅ ๋‚ด์šฉ์—์„œ ๊ฐ์ฒด ํ•ธ๋“ค์„ ๋ณด์—ฌ ์ค€๋‹ค.
-e, --echo
add๋‚˜ insert, replace ๋ช…๋ น์œผ๋กœ ๋ฃฐ์…‹์— ํ•ญ๋ชฉ์„ ์ง‘์–ด๋„ฃ์„ ๋•Œ nft monitor์ฒ˜๋Ÿผ ์•Œ๋ฆผ์„ ์ฐ๋Š”๋‹ค.
-j, --json
JSON ํ˜•์‹์œผ๋กœ ์ถœ๋ ฅํ•œ๋‹ค. ์Šคํ‚ค๋งˆ ์„ค๋ช…์€ libnftables-json(5)์„ ๋ณด๋ผ.
-I, --includepath directory
ํฌํ•จ ํŒŒ์ผ์„ ์ฐพ์„ ๋””๋ ‰ํ„ฐ๋ฆฌ ๋ชฉ๋ก์— ๋””๋ ‰ํ„ฐ๋ฆฌ directory๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. ์ด ์˜ต์…˜์€ ์—ฌ๋Ÿฌ ๋ฒˆ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
-f, --file filename

filename์—์„œ ์ž…๋ ฅ์„ ์ฝ์–ด ๋“ค์ธ๋‹ค. filename์ด -์ด๋ฉด stdin์—์„œ ์ฝ๋Š”๋‹ค.

-i, --interactive
๋Œ€ํ™”ํ˜• readline CLI์—์„œ ์ž…๋ ฅ์„ ์ฝ์–ด ๋“ค์ธ๋‹ค. quit์œผ๋กœ ๋น ์ ธ๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๋‹ค. EOF ํ‘œ์‹œ๋ฅผ ์“ธ ์ˆ˜๋„ ์žˆ๋Š”๋ฐ, ๋ณดํ†ต CTRL-D์ด๋‹ค.
-T, --numeric-time
์‹œ๊ฐ, ์š”์ผ, ์‹œ๊ฐ„ ๊ฐ’์„ ์ˆซ์ž๋กœ ๋ณด์ธ๋‹ค.
-t, --terse
์ถœ๋ ฅ์—์„œ ์ง‘ํ•ฉ ๋‚ด์šฉ๋ฌผ์„ ์ƒ๋žตํ•œ๋‹ค.

์ž…๋ ฅ ํŒŒ์ผ ํ˜•์‹

๊ตฌ๋ฌธ ๊ทœ์•ฝ

ํ–‰ ๋‹จ์œ„๋กœ ์ž…๋ ฅ์„ ํŒŒ์‹ฑ ํ•œ๋‹ค. ๊ฐœํ–‰ ๋ฌธ์ž ๋ฐ”๋กœ ์•ž์˜ ํ–‰ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž๊ฐ€ ๋”ฐ์˜ดํ‘œ๋กœ ๊ฐ์‹ธ์ง€ ์•Š์€ ๋ฐฑ์Šฌ๋ž˜์‹œ(\)์ผ ๋•Œ๋Š” ๋‹ค์Œ ํ–‰์„ ๊ณ„์† ์ด์–ด์ง„ ๊ฒƒ์ฒ˜๋Ÿผ ์ฒ˜๋ฆฌํ•œ๋‹ค. ํ•œ ํ–‰์—์„œ ์—ฌ๋Ÿฌ ๋ช…๋ น์„ ์„ธ๋ฏธ์ฝœ๋ก (;)์œผ๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•ด์‹œ ๊ธฐํ˜ธ(#)๋กœ ์ฃผ์„์ด ์‹œ์ž‘๋œ๋‹ค. ๊ทธ ํ–‰์˜ ๋‚˜๋จธ์ง€ ๋ฌธ์ž๋“ค์„ ๋ชจ๋‘ ๋ฌด์‹œํ•œ๋‹ค.

์‹๋ณ„์ž๋Š” ์•ŒํŒŒ๋ฒณ ๋ฌธ์ž(a-z,A-Z)๋กœ ์‹œ์ž‘ํ•ด์„œ 0๊ฐœ ์ด์ƒ์˜ ์•ŒํŒŒ๋ฒณ ๋ฌธ์ž(a-z,A-Z), ์ˆซ์ž(0-9), ์Šฌ๋ž˜์‹œ(/), ๋ฐฑ์Šฌ๋ž˜์‹œ(\), ๋ฐ‘์ค„(_), ๋งˆ์นจํ‘œ(.) ๋ฌธ์ž๊ฐ€ ์˜จ๋‹ค. ๋‹ค๋ฅธ ๋ฌธ์ž๋ฅผ ์“ฐ๊ฑฐ๋‚˜ ํ‚ค์›Œ๋“œ์™€ ์ถฉ๋Œํ•˜๋Š” ์‹๋ณ„์ž๋Š” ํฐ๋”ฐ์˜ดํ‘œ(")๋กœ ๊ฐ์‹ธ ์ค˜์•ผ ํ•œ๋‹ค.

ํŒŒ์ผ ํฌํ•จํ•˜๊ธฐ

include filename

include ๋ฌธ์„ ์จ์„œ ๋‹ค๋ฅธ ํŒŒ์ผ์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋‹ค. ํฌํ•จ ํŒŒ์ผ์„ ์ฐพ์„ ๋””๋ ‰ํ„ฐ๋ฆฌ๋“ค์„ -I/--includepath ์˜ต์…˜์œผ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ ๊ฒฝ๋กœ ์•ž์— './'๋ฅผ ๋ถ™์—ฌ์„œ ํ˜„์žฌ ์ž‘์—… ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์œ„์น˜ํ•œ ํŒŒ์ผ์„ (์ฆ‰ ์ƒ๋Œ€ ๊ฒฝ๋กœ๋กœ) ํฌํ•จํ•˜๋„๋ก ๊ฐ•์ œํ•˜๊ฑฐ๋‚˜ '/'๋ฅผ ์จ์„œ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋กœ ํŒŒ์ผ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ผ ์ˆ˜๋„ ์žˆ๋‹ค.

-I/--includepath๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด nft๋Š” ์ปดํŒŒ์ผ ์‹œ์ ์— ์ง€์ •๋œ ๊ธฐ๋ณธ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ด์šฉํ•œ๋‹ค. -h/--help ์˜ต์…˜์„ ํ†ตํ•ด ๊ทธ ๊ธฐ๋ณธ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

include ๋ฌธ์€ ์ผ๋ฐ˜์ ์ธ ์…ธ ์™€์ผ๋“œ์นด๋“œ ๊ธฐํ˜ธ(*,?,[])๋ฅผ ์ง€์›ํ•œ๋‹ค. include ๋ฌธ์— ์™€์ผ๋“œ์นด๋“œ ๊ธฐํ˜ธ๋ฅผ ์“ด ๊ฒฝ์šฐ์—๋Š” include ๋ฌธ์— ์ผ์น˜ํ•˜๋Š” ํŒŒ์ผ์ด ์—†์–ด๋„ ์˜ค๋ฅ˜๊ฐ€ ์•„๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ include "/etc/firewall/rules/*" ๊ฐ™์€ ๋ฌธ์œผ๋กœ ํฌํ•จํ•œ ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ๋น„์–ด ์žˆ์„ ์ˆ˜๋„ ์žˆ๋‹ค. ์™€์ผ๋“œ์นด๋“œ์— ๊ฑธ๋ฆฐ ํ•ญ๋ชฉ๋“ค์€ ์•ŒํŒŒ๋ฒณ ์ˆœ์„œ๋กœ ์˜ฌ๋ผ์˜จ๋‹ค. ๋งˆ์นจํ‘œ(.)๋กœ ์‹œ์ž‘ํ•˜๋Š” ํŒŒ์ผ์€ include ๋ฌธ์— ๊ฑธ๋ฆฌ์ง€ ์•Š๋Š”๋‹ค.

์‹ฌ๋ณผ ๋ณ€์ˆ˜

define variable = expr
$variable

define ๋ฌธ์„ ์จ์„œ ์‹ฌ๋ณผ ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ณ€์ˆ˜ ์ฐธ์กฐ๋Š” ์‹์ด๋ฉฐ ์ด๋ฅผ ์ด์šฉํ•ด ๋‹ค๋ฅธ ๋ณ€์ˆ˜๋ฅผ ์ดˆ๊ธฐํ™” ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ •์˜ ์œ ํšจ ๋ฒ”์œ„๋Š” ํ˜„์žฌ ๋ธ”๋ก๊ณผ ๊ทธ ์•ˆ์— ํฌํ•จ๋œ ๋ชจ๋“  ๋ธ”๋ก์ด๋‹ค.

์‹ฌ๋ณผ ๋ณ€์ˆ˜ ์‚ฌ์šฉํ•˜๊ธฐ
define int_if1 = eth0
define int_if2 = eth1
define int_ifs = { $int_if1, $int_if2 }

filter input iif $int_ifs accept

์ฃผ์†Œ ํŒจ๋ฐ€๋ฆฌ

์ฃผ์†Œ ํŒจ๋ฐ€๋ฆฌ์— ๋”ฐ๋ผ ์–ด๋–ค ์ข…๋ฅ˜์˜ ํŒจํ‚ท์ด ์ฒ˜๋ฆฌ๋˜๋Š”์ง€ ์ •ํ•ด์ง„๋‹ค. ๊ฐ ์ฃผ์†Œ ํŒจ๋ฐ€๋ฆฌ๋ณ„๋กœ ์ปค๋„ ํŒจํ‚ท ์ฒ˜๋ฆฌ ๊ฒฝ๋กœ์˜ ํŠน์ • ์ง€์ ๋“ค์— ์†Œ์œ„ ํ›…์ด ์žˆ์–ด์„œ ๊ทธ ํ›…์— ๋Œ€ํ•œ ๊ทœ์น™์ด ์กด์žฌํ•˜๋ฉด nftables๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

ip
IPv4 ์ฃผ์†Œ ํŒจ๋ฐ€๋ฆฌ
ip6
IPv6 ์ฃผ์†Œ ํŒจ๋ฐ€๋ฆฌ
inet
์ธํ„ฐ๋„ท(IPv4/IPv6) ์ฃผ์†Œ ํŒจ๋ฐ€๋ฆฌ
arp
ARP ์ฃผ์†Œ ํŒจ๋ฐ€๋ฆฌ, IPv4 ARP ํŒจํ‚ท ์ฒ˜๋ฆฌ
bridge
๋ธŒ๋ฆฌ์ง€ ์ฃผ์†Œ ํŒจ๋ฐ€๋ฆฌ, ๋ธŒ๋ฆฌ์ง€ ์žฅ์น˜๋ฅผ ํ†ต๊ณผํ•˜๋Š” ํŒจํ‚ท ์ฒ˜๋ฆฌ
netdev
netdev ์ฃผ์†Œ ํŒจ๋ฐ€๋ฆฌ, ์ง„์ž…์ ์—์„œ ํŒจํ‚ท ์ฒ˜๋ฆฌ

๋ชจ๋“  nftables ๊ฐ์ฒด๋Š” ์ฃผ์†Œ ํŒจ๋ฐ€๋ฆฌ๋ณ„ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์•ˆ์— ์กด์žฌํ•˜๋ฉฐ, ๊ทธ๋ž˜์„œ ๋ชจ๋“  ์‹๋ณ„์ž์—๋Š” ์ฃผ์†Œ ํŒจ๋ฐ€๋ฆฌ๊ฐ€ ํฌํ•จ๋ผ ์žˆ๋‹ค. ์ฃผ์†Œ ํŒจ๋ฐ€๋ฆฌ ์—†์ด ์‹๋ณ„์ž๋ฅผ ์ง€์ •ํ•˜๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ip ํŒจ๋ฐ€๋ฆฌ๋ฅผ ์“ด๋‹ค.

IPv4/IPv6/Inet ์ฃผ์†Œ ํŒจ๋ฐ€๋ฆฌ

IPv4/IPv6/Inet ์ฃผ์†Œ ํŒจ๋ฐ€๋ฆฌ๋Š” IPv4 ํŒจํ‚ท, IPv6 ํŒจํ‚ท, ๊ทธ๋ฆฌ๊ณ  ๋‘ ์ข…๋ฅ˜ ๋ชจ๋‘๋ฅผ ๋‹ค๋ฃฌ๋‹ค. ๋„คํŠธ์›Œํฌ ์Šคํƒ์˜ ํŒจํ‚ท ์ฒ˜๋ฆฌ ๋‹จ๊ณ„ ๋‹ค์„ฏ ๊ณณ์— ํ›…์ด ์žˆ๋‹ค.

ํ‘œ 1: IPv4/IPv6/Inet ์ฃผ์†Œ ํŒจ๋ฐ€๋ฆฌ ํ›…

ํ›… ์„ค๋ช…
prerouting ์‹œ์Šคํ…œ์— ๋“ค์–ด์˜ค๋Š” ๋ชจ๋“  ํŒจํ‚ท์ด prerouting ํ›…์—์„œ ์ฒ˜๋ฆฌ๋œ๋‹ค. ๋ผ์šฐํŒ… ์ฒ˜๋ฆฌ ์ „์— ํ˜ธ์ถœ๋˜๋ฉฐ ์ด๋ฅด๊ฒŒ ํ•„ํ„ฐ๋ง์„ ํ•˜๊ฑฐ๋‚˜ ๋ผ์šฐํŒ…์— ์˜ํ–ฅ์„ ์ฃผ๋Š” ํŒจํ‚ท ์†์„ฑ์„ ๋ฐ”๊พธ๋Š” ๋ฐ ์“ฐ์ธ๋‹ค.
input ๋กœ์ปฌ ์‹œ์Šคํ…œ์œผ๋กœ ์ „๋‹ฌ๋˜๋Š” ํŒจํ‚ท์ด input ํ›…์—์„œ ์ฒ˜๋ฆฌ๋œ๋‹ค.
forward ๋‹ค๋ฅธ ํ˜ธ์ŠคํŠธ๋กœ ์ „๋‹ฌ๋˜๋Š” ํŒจํ‚ท์ด forward ํ›…์—์„œ ์ฒ˜๋ฆฌ๋œ๋‹ค.
output ๋กœ์ปฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ณด๋‚ด๋Š” ํŒจํ‚ท์ด output ํ›…์—์„œ ์ฒ˜๋ฆฌ๋œ๋‹ค.
postrouting ์‹œ์Šคํ…œ์„ ๋– ๋‚˜๋Š” ๋ชจ๋“  ํŒจํ‚ท์ด postrouting ํ›…์—์„œ ์ฒ˜๋ฆฌ๋œ๋‹ค.

ARP ์ฃผ์†Œ ํŒจ๋ฐ€๋ฆฌ

ARP ์ฃผ์†Œ ํŒจ๋ฐ€๋ฆฌ๋Š” ์‹œ์Šคํ…œ์ด ๋ฐ›๊ณ  ๋ณด๋‚ด๋Š” ARP ํŒจํ‚ท๋“ค์„ ๋‹ค๋ฃฌ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ๋ง์„ ์œ„ํ•ด ARP ํŒจํ‚ท์„ ์กฐ์ž‘ํ•˜๋Š” ๋ฐ ํ”ํžˆ ์“ด๋‹ค.

ํ‘œ 2: ARP ์ฃผ์†Œ ํŒจ๋ฐ€๋ฆฌ ํ›…

ํ›… ์„ค๋ช…
input ๋กœ์ปฌ ์‹œ์Šคํ…œ์œผ๋กœ ์ „๋‹ฌ๋˜๋Š” ํŒจํ‚ท์ด input ํ›…์—์„œ ์ฒ˜๋ฆฌ๋œ๋‹ค.
output ๋กœ์ปฌ ์‹œ์Šคํ…œ์—์„œ ๋ณด๋‚ด๋Š” ํŒจํ‚ท์ด output ํ›…์—์„œ ์ฒ˜๋ฆฌ๋œ๋‹ค.

๋ธŒ๋ฆฌ์ง€ ์ฃผ์†Œ ํŒจ๋ฐ€๋ฆฌ

๋ธŒ๋ฆฌ์ง€ ์ฃผ์†Œ ํŒจ๋ฐ€๋ฆฌ๋Š” ๋ธŒ๋ฆฌ์ง€ ์žฅ์น˜๋ฅผ ํ†ต๊ณผํ•˜๋Š” ์ด๋”๋„ท ํŒจํ‚ท์„ ๋‹ค๋ฃฌ๋‹ค.

์ง€์›ํ•˜๋Š” ํ›… ๋ชฉ๋ก์€ ์œ„์˜ IPv4/IPv6/Inet ์ฃผ์†Œ ํŒจ๋ฐ€๋ฆฌ์™€ ๋™์ผํ•˜๋‹ค.

Netdev ์ฃผ์†Œ ํŒจ๋ฐ€๋ฆฌ

Netdev ์ฃผ์†Œ ํŒจ๋ฐ€๋ฆฌ๋Š” ์ง„์ž…์ (ingress)์—์„œ ํŒจํ‚ท์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

ํ‘œ 3: Netdev ์ฃผ์†Œ ํŒจ๋ฐ€๋ฆฌ ํ›…

ํ›… ์„ค๋ช…
ingress ์‹œ์Šคํ…œ์— ๋“ค์–ด์˜ค๋Š” ๋ชจ๋“  ํŒจํ‚ท์ด ์ด ํ›…์—์„œ ์ฒ˜๋ฆฌ๋œ๋‹ค. ์ œ3๊ณ„์ธต ํ”„๋กœํ† ์ฝœ ํ•ธ๋“ค๋Ÿฌ ์ „์— ํ˜ธ์ถœ๋˜๋ฉฐ ์ด๋ฅธ ํ•„ํ„ฐ๋ง์ด๋‚˜ ํด๋ฆฌ์‹ฑ์— ์“ธ ์ˆ˜ ์žˆ๋‹ค.

๋ฃฐ์…‹

{list | flush} ruleset [family]

ํ˜„์žฌ ์ปค๋„ ๋‚ด์— ์œ„์น˜ํ•œ ํ…Œ์ด๋ธ”, ์ฒด์ธ ๋“ฑ์˜ ์„ธํŠธ ์ „์ฒด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐ ruleset ํ‚ค์›Œ๋“œ๋ฅผ ์“ด๋‹ค. ๋‹ค์Œ ruleset ๋ช…๋ น์ด ์žˆ๋‹ค.

list
์‚ฌ๋žŒ์ด ์ฝ๊ธฐ ์ข‹์€ ํ˜•์‹์œผ๋กœ ๋ฃฐ์…‹์„ ์ถœ๋ ฅํ•œ๋‹ค.
flush
๋ฃฐ์…‹ ์ „์ฒด๋ฅผ ๋น„์šด๋‹ค. iptables์™€ ๋‹ฌ๋ฆฌ ๋ชจ๋“  ํ…Œ์ด๋ธ”๊ณผ ๊ทธ ์•ˆ์— ๋‹ด๊ธด ๋ชจ๋“  ๊ฑธ ์ œ๊ฑฐํ•œ๋‹ค๋Š” ์ ์— ์œ ์˜ํ•ด์•ผ ํ•œ๋‹ค. ์‹ค์งˆ์ ์œผ๋กœ ๋นˆ ๋ฃฐ์…‹์ด ๋˜๋ฉฐ, ์–ด๋–ค ํŒจํ‚ท ํ•„ํ„ฐ๋ง๋„ ์ผ์–ด๋‚˜์ง€ ์•Š๊ฒŒ ๋˜๋ฏ€๋กœ ์ปค๋„์—์„œ๋Š” ์ˆ˜์‹ ํ•œ ๋ชจ๋“  ์œ ํšจ ํŒจํ‚ท์„ ๋ฐ›์•„๋“ค์ธ๋‹ค.

list์™€ flush๋ฅผ ํŠน์ • ์ฃผ์†Œ ํŒจ๋ฐ€๋ฆฌ๋กœ ํ•œ์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์œ ํšจํ•œ ํŒจ๋ฐ€๋ฆฌ ์ด๋ฆ„์˜ ๋ชฉ๋ก์€ ์œ„์˜ "์ฃผ์†Œ ํŒจ๋ฐ€๋ฆฌ" ์ ˆ์„ ๋ณด๋ผ.

์„ค๊ณ„์ƒ list ruleset ๋ช…๋ น์˜ ์ถœ๋ ฅ์„ nft -f ์ž…๋ ฅ์œผ๋กœ ์“ธ ์ˆ˜ ์žˆ๋‹ค. ์‹ค์งˆ์ ์œผ๋กœ iptables-save์™€ iptables-restore์— ๋Œ€์‘ํ•œ๋‹ค.

ํ…Œ์ด๋ธ”

{add | create} table [family] table [{ flags flags ; }]
{delete | list | flush} table [family] table
list tables [tables]
delete table [family] handle handle

ํ…Œ์ด๋ธ”์€ ์ฒด์ธ, ์ง‘ํ•ฉ, ์ƒํƒœ ๊ฐ์ฒด๋ฅผ ๋‹ด๋Š” ์ปจํ…Œ์ด๋„ˆ๋‹ค. ์ฃผ์†Œ ํŒจ๋ฐ€๋ฆฌ์™€ ์ด๋ฆ„์œผ๋กœ ์‹๋ณ„๋œ๋‹ค. ์ฃผ์†Œ ํŒจ๋ฐ€๋ฆฌ๋Š” ip, ip6, inet, arp, bridge, netdev ์ค‘ ํ•˜๋‚˜์—ฌ์•ผ ํ•œ๋‹ค. inet ์ฃผ์†Œ ํŒจ๋ฐ€๋ฆฌ๋Š” ํ•˜์ด๋ธŒ๋ฆฌ๋“œ IPv4/IPv6 ํ…Œ์ด๋ธ”์„ ๋งŒ๋“œ๋Š” ๋ฐ ์“ฐ๋Š” ๊ฐ€์ƒ ํŒจ๋ฐ€๋ฆฌ๋‹ค. meta expression nfproto ํ‚ค์›Œ๋“œ๋ฅผ ์“ฐ๋ฉด ํŒจํ‚ท์ด (IPv4์™€ IPv6 ์ค‘) ์–ด๋А ํŒจ๋ฐ€๋ฆฌ ๋งฅ๋ฝ์— ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฃผ์†Œ ํŒจ๋ฐ€๋ฆฌ๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ์œผ๋กœ ip๋ฅผ ์“ด๋‹ค. add์™€ create์˜ ์œ ์ผํ•œ ์ฐจ์ด๋Š” ์ง€์ •ํ•œ ํ…Œ์ด๋ธ”์ด ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ์— ์ „์ž๋Š” ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๋Š” ๋ฐ˜๋ฉด create์€ ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค๋Š” ์ ์ด๋‹ค.

ํ‘œ 4: ํ…Œ์ด๋ธ” ํ”Œ๋ž˜๊ทธ

ํ”Œ๋ž˜๊ทธ ์„ค๋ช…
dormant ํ…Œ์ด๋ธ”์„ ๋” ์ด์ƒ ํ‰๊ฐ€ํ•˜์ง€ ์•Š๋Š”๋‹ค. (๊ธฐ๋ณธ ์ฒด์ธ๋“ค์„ ๋“ฑ๋ก ํ•ด์ œํ•œ๋‹ค.)
ํ…Œ์ด๋ธ” ์ถ”๊ฐ€, ๋ณ€๊ฒฝ, ์‚ญ์ œ
# ๋Œ€ํ™”ํ˜•์œผ๋กœ nft ์‹œ์ž‘
nft --interactive

# ์ƒˆ ํ…Œ์ด๋ธ” ์ƒ์„ฑ
create table inet mytable

# ์ƒˆ ๊ธฐ๋ณธ ์ฒด์ธ ์ถ”๊ฐ€: ์ž…๋ ฅ ํŒจํ‚ท ๋ฐ›๊ธฐ
add chain inet mytable myin { type filter hook input priority 0; }

# ์ฒด์ธ์— ์นด์šดํ„ฐ ํ•˜๋‚˜ ์ถ”๊ฐ€
add rule inet mytable myin counter

# ํ…Œ์ด๋ธ”์„ ์ž ์‹œ ๋น„ํ™œ์„ฑํ™” -- ๋”๋Š” ๊ทœ์น™๋“ค์ด ํ‰๊ฐ€๋˜์ง€ ์•Š์Œ
add table inet mytable { flags dormant; }

# ํ…Œ์ด๋ธ”์„ ๋‹ค์‹œ ํ™œ์„ฑํ™”
add table inet mytable
add
์ง€์ •ํ•œ ์ด๋ฆ„์œผ๋กœ ์ง€์ •ํ•œ ํŒจ๋ฐ€๋ฆฌ์— ์ƒˆ ํ…Œ์ด๋ธ” ์ถ”๊ฐ€.
delete
์ง€์ •ํ•œ ํ…Œ์ด๋ธ” ์‚ญ์ œ.
list
์ง€์ •ํ•œ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ์ฒด์ธ ๋ฐ ๊ทœ์น™ ๋‚˜์—ด.
flush
์ง€์ •ํ•œ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ์ฒด์ธ ๋ฐ ๊ทœ์น™ ๋น„์šฐ๊ธฐ.

์ฒด์ธ

{add | create} chain [family] table chain [{ type type hook hook [device device] priority priority ; [policy policy ;] }]
{delete | list | flush} chain [family] table chain
list chains [family]
delete chain [family] table handle handle
rename chain [family] table chain newname

์ฒด์ธ์€ ๊ทœ์น™๋“ค์„ ๋‹ด๋Š” ์ปจํ…Œ์ด๋„ˆ๋‹ค. ๋‘ ๊ฐ€์ง€ ์ข…๋ฅ˜๊ฐ€ ์žˆ๋Š”๋ฐ, ๊ธฐ๋ณธ ์ฒด์ธ๊ณผ ์ผ๋ฐ˜ ์ฒด์ธ์ด๋‹ค. ๊ธฐ๋ณธ ์ฒด์ธ์€ ๋„คํŠธ์›Œํ‚น ์Šคํƒ์—์„œ ํŒจํ‚ท์ด ์ง„์ž…ํ•˜๋Š” ์ง€์ ์ด๋‹ค. ์ผ๋ฐ˜ ์ฒด์ธ์€ ์ ํ”„ ๋Œ€์ƒ์œผ๋กœ ์“ธ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ทœ์น™๋“ค๋กœ ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ์“ด๋‹ค.

add
์ง€์ •ํ•œ ํ…Œ์ด๋ธ”์— ์ƒˆ ์ฒด์ธ ์ถ”๊ฐ€. ํ›…๊ณผ ์šฐ์„ ์ˆœ์œ„ ๊ฐ’์„ ์ง€์ •ํ•˜๋ฉด ๊ธฐ๋ณธ ์ฒด์ธ์œผ๋กœ ๋งŒ๋“ค์–ด์„œ ๋„คํŠธ์›Œํ‚น ์Šคํƒ์— ์—ฐ๊ฒฐํ•œ๋‹ค.
create
add ๋ช…๋ น๊ณผ ๋น„์Šทํ•˜๋˜ ์ฒด์ธ์ด ์ด๋ฏธ ์กด์žฌํ•˜๋ฉด ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
delete
์ง€์ •ํ•œ ์ฒด์ธ ์‚ญ์ œ. ์ฒด์ธ์— ์–ด๋–ค ๊ทœ์น™๋„ ์—†์–ด์•ผ ํ•˜๊ณ  ์ ํ”„ ๋Œ€์ƒ์œผ๋กœ ์“ฐ์ด๊ณ  ์žˆ์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.
rename
์ง€์ •ํ•œ ์ฒด์ธ์˜ ์ด๋ฆ„ ๋ณ€๊ฒฝ.
list
์ง€์ •ํ•œ ์ฒด์ธ์˜ ๋ชจ๋“  ๊ทœ์น™ ๋‚˜์—ด.
flush
์ง€์ •ํ•œ ์ฒด์ธ์˜ ๋ชจ๋“  ๊ทœ์น™ ๋น„์šฐ๊ธฐ.

๊ธฐ๋ณธ ์ฒด์ธ์—์„  type, hook, priority ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ํ•„์ˆ˜๋‹ค.

ํ‘œ 5: ์ง€์›ํ•˜๋Š” ์ฒด์ธ ํƒ€์ž…

ํƒ€์ž… ํŒจ๋ฐ€๋ฆฌ ํ›… ์„ค๋ช…
filter ๋ชจ๋‘ ๋ชจ๋‘ ๊ธด๊ฐ€๋ฏผ๊ฐ€ํ•  ๋•Œ ์“ฐ๋ฉด ๋˜๋Š” ํ‘œ์ค€ ์ฒด์ธ ํƒ€์ž….
nat ip, ip6, inet prerouting, input, output, postrouting ์ด ์ฒด์ธ ํƒ€์ž…์—์„œ๋Š” conntrack ํ•ญ๋ชฉ์— ๋”ฐ๋ผ ๋„คํŠธ์›Œํฌ ์ฃผ์†Œ ๋ณ€ํ™˜์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์—ฐ๊ฒฐ์˜ ์ฒซ ๋ฒˆ์งธ ํŒจํ‚ท๋งŒ ์‹ค์ œ๋กœ ์ด ์ฒด์ธ์„ ๊ฑฐ์นœ๋‹ค. ์ฒด์ธ ๊ทœ์น™์—์„œ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” conntrack ํ•ญ๋ชฉ์˜ ์„ธ๋ถ€ ์‚ฌํ•ญ(์˜ˆ๋ฅผ ๋“ค์–ด NAT ๋ฌธ)์„ ๊ทœ์ •ํ•œ๋‹ค.
route ip, ip6 output ํŒจํ‚ท์ด ์ด ์ฒด์ธ ํƒ€์ž…์„ ๊ฑฐ์น˜๊ณ ์„œ ํ—ˆ์šฉ๋˜๋Š” ๊ฒฝ์šฐ์— IP ํ—ค๋”์˜ ๊ด€๋ จ ๋ถ€๋ถ„์ด ๋ณ€๊ฒฝ๋์œผ๋ฉด ๋ผ์šฐํŠธ ๊ฒ€์ƒ‰์„ ์ƒˆ๋กœ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์ด๋ฅผ ์ด์šฉํ•ด ๊ฐ€๋ น nftables์—์„œ ์ •์ฑ… ๋ผ์šฐํŒ…์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

์œ„์— ์„ค๋ช…ํ•œ ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ๋“ค(๊ฐ€๋ น nat์—์„œ forward ํ›…์„ ์ง€์›ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ route์—์„œ output ํ›…๋งŒ ์ง€์›ํ•˜๋Š” ๊ฒƒ) ์™ธ์—๋„ ์‹ ๊ฒฝ ์จ์•ผ ํ•  ํŠน์ด ์‚ฌํ•ญ์ด ๋‘ ๊ฐ€์ง€ ๋” ์žˆ๋‹ค.

  • netdev ํŒจ๋ฐ€๋ฆฌ๋Š” ํ•œ ๊ฐ€์ง€ ์กฐํ•ฉ, ์ฆ‰ filter ํƒ€์ž…์— ingress ํ›…๋งŒ ์ง€์›ํ•œ๋‹ค. ๋˜ ์ด ํŒจ๋ฐ€๋ฆฌ์˜ ๊ธฐ๋ณธ ์ฒด์ธ์—๋Š” device ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๊ผญ ์žˆ์–ด์•ผ ํ•˜๋Š”๋ฐ, ์ž…๋ ฅ ์ธํ„ฐํŽ˜์ด์Šค๋ณ„๋กœ ์ฒด์ธ์ด ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

  • arp ํŒจ๋ฐ€๋ฆฌ๋Š” input ํ›…๊ณผ output ํ›…๋งŒ ์ง€์›ํ•˜๋ฉฐ ๋‘˜ ๋ชจ๋‘ filter ํƒ€์ž…์—์„œ๋‹ค.

priority ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๊ฐ™์€ hook ๊ฐ’์˜ ์ฒด์ธ๋“ค์„ ๊ฑฐ์น˜๋Š” ์ˆœ์„œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ถ€ํ˜ธ ์žˆ๋Š” ์ •์ˆ˜ ๊ฐ’ ๋˜๋Š” ํ‘œ์ค€ ์šฐ์„ ์ˆœ์œ„ ์ด๋ฆ„์„ ๋ฐ›๋Š”๋‹ค. ์ˆœ์„œ๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ์ด๋‹ค. ์ฆ‰ ๋‚ฎ์€ ์šฐ์„ ์ˆœ์œ„ ๊ฐ’์ด ๋†’์€ ๊ฐ’๋ณด๋‹ค ์šฐ์„ ๋„๊ฐ€ ๋†’๋‹ค.

ํ‘œ์ค€ ์šฐ์„ ์ˆœ์œ„ ๊ฐ’๋“ค ๋Œ€์‹  ์‰ฝ๊ฒŒ ๊ธฐ์–ตํ•  ์ˆ˜ ์žˆ๋Š” ์ด๋ฆ„์„ ์“ธ ์ˆ˜ ์žˆ๋‹ค. ๋ชจ๋“  ์ด๋ฆ„์ด ๊ฐ ํŒจ๋ฐ€๋ฆฌ์˜ ๋ชจ๋“  ํ›…์—์„œ ํ†ตํ•˜๋Š” ๊ฑด ์•„๋‹ˆ์ง€๋งŒ (์•„๋ž˜ ํ˜ธํ™˜์„ฑ ํ‘œ ์ฐธ๊ณ ) ๊ทธ๋ž˜๋„ ๊ทธ ์ˆซ์ž ๊ฐ’์€ ์ฒด์ธ ์šฐ์„ ์ˆœ์œ„ ์ง€์ •์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ ์ด๋ฆ„๊ณผ ๊ฐ’๋“ค์€ ๊ธฐ๋ณธ ์ฒด์ธ ๋“ฑ๋ก ๋•Œ xtables์—์„œ ์“ฐ๋Š” ์šฐ์„ ์ˆœ์œ„์— ๋”ฐ๋ผ ์ •์˜๋˜๊ณ  ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ ํŒจ๋ฐ€๋ฆฌ์—์„œ ๊ฐ™์€ ๊ฐ’์„ ์“ฐ์ง€๋งŒ ๋ธŒ๋ฆฌ์ง€๋Š” ๋‹ค๋ฅธ ๊ฐ’์„ ์“ด๋‹ค. ๊ฐ’๊ณผ ํ˜ธํ™˜์„ฑ์„ ๊ธฐ์ˆ ํ•˜๋Š” ๋‹ค์Œ ๋‘ ํ‘œ๋ฅผ ์ฐธ๊ณ ํ•˜๋ผ.

ํ‘œ 6: ํ‘œ์ค€ ์šฐ์„ ์ˆœ์œ„ ์ด๋ฆ„, ํŒจ๋ฐ€๋ฆฌ, ํ›… ํ˜ธํ™˜์„ฑ ํ‘œ

์ด๋ฆ„ ๊ฐ’ ํŒจ๋ฐ€๋ฆฌ ํ›…
raw -300 ip, ip6, inet ๋ชจ๋‘
mangle -150 ip, ip6, inet ๋ชจ๋‘
dstnat -100 ip, ip6, inet prerouting
filter 0 ip, ip6, inet, arp, netdev ๋ชจ๋‘
security 50 ip, ip6, inet ๋ชจ๋‘
srcnat 100 ip, ip6, inet postrouting

ํ‘œ 7: ๋ธŒ๋ฆฌ์ง€ ํŒจ๋ฐ€๋ฆฌ์˜ ํ‘œ์ค€ ์šฐ์„ ์ˆœ์œ„ ์ด๋ฆ„๊ณผ ํ›… ํ˜ธํ™˜์„ฑ

์ด๋ฆ„ ๊ฐ’ ํ›…
dstnat -300 prerouting
filter -200 ๋ชจ๋‘
out 100 output
srcnat 300 postrouting

์ด ํ‘œ์ค€ ์ด๋ฆ„์— ๊ฐ„๋‹จํ•œ ์‚ฐ์ˆ  ์—ฐ์‚ฐ(๋”ํ•˜๊ธฐ์™€ ๋นผ๊ธฐ)์„ ํ•ด์„œ ์ƒ๋Œ€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์‰ฝ๊ฒŒ ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ๊ฐ€๋ น mangle - 5๋Š” -155๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ๊ฐ’์„ ์ฐ์„ ๋•Œ๋„ ํ‘œ์ค€ ๊ฐ’์—์„œ 10 ๋„˜๊ฒŒ ์ฐจ์ด๊ฐ€ ๋‚˜์ง€ ์•Š์œผ๋ฉด ๊ทธ๋Ÿฐ ์‹์œผ๋กœ ์ฐ๋Š”๋‹ค.

๊ธฐ๋ณธ ์ฒด์ธ์—๋Š” ์ฒด์ธ policy๋ฅผ ์„ค์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์ฆ‰ ์•ˆ์— ๋‹ด๊ธด ๊ทœ์น™๋“ค์—์„œ ๋ช…์‹œ์ ์œผ๋กœ ํ—ˆ์šฉํ•˜์ง€๋„ ์•Š๊ณ  ๊ฑฐ๋ถ€ํ•˜์ง€๋„ ์•Š์€ ํŒจํ‚ท์ด ์–ด๋–ป๊ฒŒ ๋˜๋Š”๊ฐ€์ด๋‹ค. ์ง€์›ํ•˜๋Š” ์ •์ฑ… ๊ฐ’์€ accept(๊ธฐ๋ณธ)์™€ drop์ด๋‹ค.

๊ทœ์น™

{add | insert} rule [family] table chain [handle handle | index index] statement ... [comment comment]
replace rule [family] table chain handle handle statement ... [comment comment]
delete rule [family] table chain handle handle

์ง€์ •ํ•œ ํ…Œ์ด๋ธ”์˜ ์ฒด์ธ์— ๊ทœ์น™์ด ์ถ”๊ฐ€๋œ๋‹ค. ํŒจ๋ฐ€๋ฆฌ๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ip ํŒจ๋ฐ€๋ฆฌ๋ฅผ ์“ด๋‹ค. ์ผ๊ตฐ์˜ ๋ฌธ๋ฒ• ๊ทœ์น™์— ๋”ฐ๋ผ ์‹(expression)๊ณผ ๋ฌธ(statement)์ด๋ผ๋Š” ๋‘ ๊ฐ€์ง€ ์š”์†Œ๋กœ ๊ทœ์น™์ด ๊ตฌ์„ฑ๋œ๋‹ค.

add์™€ insert ๋ช…๋ น์—์„œ๋Š” ์„ ํƒ์ ์œผ๋กœ ์œ„์น˜ ์ง€์ •์ด ๊ฐ€๋Šฅํ•œ๋ฐ, ๊ธฐ์กด ๊ทœ์น™์˜ handle์ด๋‚˜ (0์—์„œ ์‹œ์ž‘ํ•˜๋Š”) index๋กœ ์ง€์ •ํ•œ๋‹ค. ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ํ•ญ์ƒ handle๋กœ ๊ทœ์น™ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ index์—์„œ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฑด ์‚ฌ์šฉ์ž ๊ณต๊ฐ„์—์„œ ์ด๋ค„์ง„๋‹ค. ๋•Œ๋ฌธ์— ๋ณ€ํ™˜์ด ์ด๋ค„์ง„ ํ›„ ๋™์‹œ์— ๋ฃฐ์…‹ ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚˜๋Š” ๊ฒฝ์šฐ ์˜ํ–ฅ์ด ์žˆ์„ ์ˆ˜๋„ ์žˆ๋‹ค. ์ฆ‰ ์ฐธ์กฐ ๋Œ€์ƒ ๊ทœ์น™ ์•ž์—์„œ ๊ทœ์น™์ด ์‚ฝ์ž… ๋‚ด์ง€ ์‚ญ์ œ๋˜๋ฉด ์‹ค์ œ ๊ทœ์น™ ์ธ๋ฑ์Šค๊ฐ€ ๋ฐ”๋€” ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ฐธ์กฐ ๋Œ€์ƒ ๊ทœ์น™์ด ์‚ญ์ œ๋˜๋ฉด ์œ ํšจํ•˜์ง€ ์•Š์€ handle์„ ์ค€ ๊ฒฝ์šฐ์ฒ˜๋Ÿผ ๋ช…๋ น์„ ์ปค๋„์—์„œ ๊ฑฐ๋ถ€ํ•œ๋‹ค.

comment๋Š” ํ•œ ๋‹จ์–ด๊ฑฐ๋‚˜ ํฐ ๋”ฐ์˜ดํ‘œ(")๋กœ ๊ฐ์‹ผ ์—ฌ๋Ÿฌ ๋‹จ์–ด ๋ฌธ์ž์—ด์ด๋ฉฐ ์‹ค์ œ ๊ทœ์น™๊ณผ ๊ด€๋ จ๋œ ๋ฉ”๋ชจ๋ฅผ ํ•˜๋Š” ๋ฐ ์“ธ ์ˆ˜ ์žˆ๋‹ค. ์ฃผ์˜: ๊ทœ์น™ ์ถ”๊ฐ€ ์‹œ bash๋ฅผ ์“ด๋‹ค๋ฉด ๋”ฐ์˜ดํ‘œ์— ์ด์Šค์ผ€์ดํ”„๋ฅผ ํ•ด ์ค˜์•ผ ํ•œ๋‹ค. ์˜ˆ: \"enable ssh for servers\".

add
๋ฌธ ๋ชฉ๋ก์œผ๋กœ ๋‚˜ํƒ€๋‚ธ ์ƒˆ ๊ทœ์น™์„ ์ถ”๊ฐ€. ์œ„์น˜๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์ง€์ •ํ•œ ์ฒด์ธ์— ๊ทœ์น™์„ ๋ง๋ถ™์ด๊ณ , ์ง€์ •ํ•œ ๊ฒฝ์šฐ์—๋Š” ์ง€์ •ํ•œ ๊ทœ์น™ ๋’ค์— ๊ทœ์น™์„ ์‚ฝ์ž…ํ•œ๋‹ค.
insert
add์™€ ๊ฐ™๋˜ ์ฒด์ธ์˜ ์ฒ˜์Œ์ด๋‚˜ ์ง€์ •ํ•œ ๊ทœ์น™ ์•ž์— ๊ทœ์น™์„ ์‚ฝ์ž….
replace
add์™€ ๋น„์Šทํ•˜๋˜ ์ง€์ •ํ•œ ๊ทœ์น™์„ ๊ต์ฒด.
delete
์ง€์ •ํ•œ ๊ทœ์น™ ์‚ญ์ œ.
ip ํ…Œ์ด๋ธ” input ์ฒด์ธ์— ๊ทœ์น™ ์ถ”๊ฐ€
nft add rule filter output ip daddr 192.168.0.0/24 accept # 'ip filter' ์ƒ์ •
# ๊ฐ™์€ ๋ช…๋ น์„ ์ข€ ๋” ๊ธธ๊ฒŒ ์“ฐ๊ธฐ
nft add rule ip filter output ip daddr 192.168.0.0/24 accept
inet ํ…Œ์ด๋ธ”์—์„œ ๊ทœ์น™ ์‚ญ์ œ
# nft -a list ruleset
table inet filter {
        chain input {
                type filter hook input priority 0; policy accept;
                ct state established,related accept # handle 4
                ip saddr 10.1.1.1 tcp dport ssh accept # handle 5
          ...
# ํ•ธ๋“ค์ด 5์ธ ๊ทœ์น™ ์‚ญ์ œํ•˜๊ธฐ
# nft delete rule inet filter input handle 5

์ง‘ํ•ฉ

nftables์—๋Š” ๋‘ ๊ฐ€์ง€ ์ง‘ํ•ฉ ๊ฐœ๋…์ด ์žˆ๋‹ค. ์ต๋ช… ์ง‘ํ•ฉ์€ ๋”ฐ๋กœ ์ด๋ฆ„์ด ์—†๋Š” ์ง‘ํ•ฉ์ด๋‹ค. ์ง‘ํ•ฉ์„ ์“ฐ๋Š” ๊ทœ์น™์„ ๋งŒ๋“ค ๋•Œ ์ง‘ํ•ฉ ๋ฉค๋ฒ„๋“ค์„ ์ค‘๊ด„ํ˜ธ๋กœ ๊ฐ์‹ธ๊ณ  ์‰ผํ‘œ๋กœ ์›์†Œ๋“ค์„ ๊ตฌ๋ถ„ํ•œ๋‹ค. ๊ทธ ๊ทœ์น™์ด ์ œ๊ฑฐ๋˜๋ฉด ์ง‘ํ•ฉ๋„ ์ œ๊ฑฐ๋œ๋‹ค. ์ด ์ง‘ํ•ฉ์€ ๊ฐฑ์‹ ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ์ฆ‰ ์ต๋ช… ์ง‘ํ•ฉ์€ ์ผ๋‹จ ์„ ์–ธํ•˜๊ณ  ๋‚˜๋ฉด ๊ทธ ์ต๋ช… ์ง‘ํ•ฉ์„ ์“ฐ๋Š” ๊ทœ์น™์„ ์ œ๊ฑฐ/๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ ๋Š” ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค.

์ต๋ช… ์ง‘ํ•ฉ ์ด์šฉํ•ด ํŠน์ • ์„œ๋ธŒ๋„ท ๋ฐ ํฌํŠธ ํ—ˆ์šฉํ•˜๊ธฐ
nft add rule filter input ip saddr { 10.0.0.0/8, 192.168.0.0/16 } tcp dport { 22, 443 } accept

๊ธฐ๋ช… ์ง‘ํ•ฉ์€ ๊ทœ์น™์—์„œ ์ฐธ์กฐํ•˜๊ธฐ ์ „์— ๋จผ์ € ์ •์˜ํ•ด์•ผ ํ•œ๋‹ค. ์ต๋ช… ์ง‘ํ•ฉ๊ณผ ๋‹ฌ๋ฆฌ ์–ธ์ œ๋“  ๊ธฐ๋ช… ์ง‘ํ•ฉ์˜ ์›์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทœ์น™์—์„œ ์ง‘ํ•ฉ ์ด๋ฆ„ ์•ž์— @๋ฅผ ๋ถ™์—ฌ์„œ ์ง‘ํ•ฉ์„ ์ฐธ์กฐํ•œ๋‹ค.

๊ธฐ๋ช… ์ง‘ํ•ฉ ์ด์šฉํ•ด ์ฃผ์†Œ ๋ฐ ํฌํŠธ ํ—ˆ์šฉํ•˜๊ธฐ
nft add rule filter input ip saddr @allowed_hosts tcp dport @allowed_ports accept

์ง‘ํ•ฉ allowed_hosts์™€ allowed_ports๊ฐ€ ๋จผ์ € ๋งŒ๋“ค์–ด์ ธ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ๋‹ค์Œ ์ ˆ์—์„œ nft set ๋ฌธ๋ฒ•์„ ๋” ์ž์„ธํžˆ ์„ค๋ช…ํ•œ๋‹ค.

add set [family] table set { type type ; [flags flags ;] [timeout timeout ;] [gc-interval gc-interval ;] [elements = { element[, ...] } ;] [size size ;] [policy policy ;] [auto-merge ;] }
{delete | list | flush} set [family] table set
list sets [family]
delete set [family] table handle handle
{add | delete} element [family] table set { element[, ...] }

์ง‘ํ•ฉ์€ ์‚ฌ์šฉ์ž ์ •์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ธ ์›์†Œ ์ปจํ…Œ์ด๋„ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ง€์ • ์ด๋ฆ„์œผ๋กœ ์œ ์ผํ•˜๊ฒŒ ์‹๋ณ„๋˜๋ฉฐ ํ…Œ์ด๋ธ”์— ๋ถ™๋Š”๋‹ค. ์ง‘ํ•ฉ ์ƒ์„ฑ ์‹œ์ ์— ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” ํ”Œ๋ž˜๊ทธ๋“ค๋กœ ๋™์ž‘์„ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

add
์ง€์ •ํ•œ ํ…Œ์ด๋ธ”์— ์ƒˆ ์ง‘ํ•ฉ ์ถ”๊ฐ€. ์ง‘ํ•ฉ ์†์„ฑ์„ ์ง€์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„  ์•„๋ž˜์˜ ์ง‘ํ•ฉ ์ง€์ • ํ‘œ ์ฐธ๊ณ .
delete
์ง€์ •ํ•œ ์ง‘ํ•ฉ ์‚ญ์ œ.
list
์ง€์ •ํ•œ ์ง‘ํ•ฉ์˜ ์›์†Œ ํ‘œ์‹œ.
flush
์ง€์ •ํ•œ ์ง‘ํ•ฉ์˜ ๋ชจ๋“  ์›์†Œ ์ œ๊ฑฐ.
add element
์ง€์ •ํ•œ ์ง‘ํ•ฉ์— ์‰ฝํ‘œ ๊ตฌ๋ถ„ ๋ชฉ๋ก์˜ ์›์†Œ๋“ค์„ ์ถ”๊ฐ€.
delete element
์ง€์ •ํ•œ ์ง‘ํ•ฉ์—์„œ ์‰ผํ‘œ ๊ตฌ๋ถ„ ๋ชฉ๋ก์˜ ์›์†Œ๋“ค์„ ์‚ญ์ œ.

ํ‘œ 8: ์ง‘ํ•ฉ ์ง€์ •

ํ‚ค์›Œ๋“œ ์„ค๋ช… ํƒ€์ž…
type ์ง‘ํ•ฉ ์›์†Œ์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž… ๋ฌธ์ž์—ด: ipv4_addr, ipv6_addr, ether_addr, inet_proto, inet_service, mark
flags ์ง‘ํ•ฉ ํ”Œ๋ž˜๊ทธ ๋ฌธ์ž์—ด: constant, dynamic, interval, timeout
timeout ์ง‘ํ•ฉ์—์„œ ์›์†Œ๊ฐ€ ์œ ์ง€๋˜๋Š” ์‹œ๊ฐ„. ์ง‘ํ•ฉ์ด ํŒจํ‚ท ๊ฒฝ๋กœ(๋ฃฐ์…‹)๋กœ๋ถ€ํ„ฐ ์ถ”๊ฐ€๋˜๋Š” ๊ฒฝ์šฐ ํ•„์ˆ˜. ๋ฌธ์ž์—ด, ์‹ญ์ง„์ˆ˜์— ๋‹จ์œ„ ๋ถ™์Œ. ๋‹จ์œ„: d, h, m, s
gcโ€‘interval ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ๊ฐ„๊ฒฉ. timeout์ด๋‚˜ timeout ํ”Œ๋ž˜๊ทธ๊ฐ€ ํ™œ์„ฑ์ผ ๋•Œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ. ๋ฌธ์ž์—ด, ์‹ญ์ง„์ˆ˜์— ๋‹จ์œ„ ๋ถ™์Œ. ๋‹จ์œ„: d, h, m, s
elements ์ง‘ํ•ฉ์— ๋‹ด๊ธฐ๋Š” ์›์†Œ๋“ค ์ง‘ํ•ฉ ๋ฐ์ดํ„ฐ ํƒ€์ž…
size ์ง‘ํ•ฉ์˜ ์ตœ๋Œ€ ์›์†Œ ์ˆ˜. ์ง‘ํ•ฉ์ด ํŒจํ‚ท ๊ฒฝ๋กœ(๋ฃฐ์…‹)๋กœ๋ถ€ํ„ฐ ์ถ”๊ฐ€๋˜๋Š” ๊ฒฝ์šฐ ํ•„์ˆ˜. ๋ถ€ํ˜ธ ์—†๋Š” ์ •์ˆ˜ (64๋น„ํŠธ)
policy ์ง‘ํ•ฉ ์ •์ฑ… ๋ฌธ์ž์—ด: performance [๊ธฐ๋ณธ], memory
autoโ€‘merge ์ธ์ ‘/์ค‘์ฒฉ ์ง‘ํ•ฉ ์›์†Œ ์ž๋™ ๋ณ‘ํ•ฉ (interval ์ง‘ํ•ฉ์—๋งŒ)

๋งต

add map [family] table map { type type [flags flags ;] [elements = { element[, ...] } ;] [size size ;] [policy policy ;] }
{delete | list | flush} map [family] table map
list maps [family]
{add | delete} element [family] table map { elements = { element[, ...] } ; }

๋งต์€ ์ž…๋ ฅ์œผ๋กœ ํ•˜๋Š” ์–ด๋–ค ํŠน์ • ํ‚ค์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค. ์‚ฌ์šฉ์ž ์ง€์ • ์ด๋ฆ„์œผ๋กœ ์œ ์ผํ•˜๊ฒŒ ์‹๋ณ„๋˜๋ฉฐ ํ…Œ์ด๋ธ”์— ๋ถ™๋Š”๋‹ค.

add
์ง€์ •ํ•œ ํ…Œ์ด๋ธ”์— ์ƒˆ ๋งต ์ถ”๊ฐ€.
delete
์ง€์ •ํ•œ ๋งต ์‚ญ์ œ.
list
์ง€์ •ํ•œ ๋งต์˜ ์›์†Œ ํ‘œ์‹œ.
flush
์ง€์ •ํ•œ ๋งต์˜ ๋ชจ๋“  ์›์†Œ ์ œ๊ฑฐ.
add element
์ง€์ •ํ•œ ๋งต์— ์‰ผํ‘œ ๊ตฌ๋ถ„ ๋ชฉ๋ก์˜ ์›์†Œ๋“ค์„ ์ถ”๊ฐ€.
delete element
์ง€์ •ํ•œ ๋งต์—์„œ ์‰ผํ‘œ ๊ตฌ๋ถ„ ๋ชฉ๋ก์˜ ์›์†Œ๋“ค์„ ์‚ญ์ œ.

ํ‘œ 9: ๋งต ์ง€์ •

ํ‚ค์›Œ๋“œ ์„ค๋ช… ํƒ€์ž…
type ๋งต ์›์†Œ์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž… ๋ฌธ์ž์—ด ':' ๋ฌธ์ž์—ด: ipv4_addr, ipv6_addr, ether_addr, inet_proto, inet_service, mark, counter, quota. counter๊ณผ quota๋Š” ํ‚ค๋กœ ์“ธ ์ˆ˜ ์—†์Œ
flags ๋งต ํ”Œ๋ž˜๊ทธ ๋ฌธ์ž์—ด: constant, interval
elements ๋งต์— ๋‹ด๊ธฐ๋Š” ์›์†Œ๋“ค ๋งต ๋ฐ์ดํ„ฐ ํƒ€์ž…
size ๋งต์˜ ์ตœ๋Œ€ ์›์†Œ ์ˆ˜ ๋ถ€ํ˜ธ ์—†๋Š” ์ •์ˆ˜ (64๋น„ํŠธ)
policy ๋งต ์ •์ฑ… ๋ฌธ์ž์—ด: performance [๊ธฐ๋ณธ], memory

ํ”Œ๋กœํ…Œ์ด๋ธ”

{add | create} flowtable [family] table flowtable { hook hook priority priority ; devices = { device[, ...] } ; }
list flowtables [family]
{delete | list} flowtable {family] table flowtable
delete flowtable [family] table handle handle

ํ”Œ๋กœํ…Œ์ด๋ธ”์„ ํ†ตํ•ด ์†Œํ”„ํŠธ์›จ์–ด์—์„œ ํŒจํ‚ท ํฌ์›Œ๋”ฉ ์†๋„๋ฅผ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค. ์ž…๋ ฅ ์ธํ„ฐํŽ˜์ด์Šค, ์ถœ๋ฐœ ๋ฐ ๋ชฉ์  ์ฃผ์†Œ, ์ถœ๋ฐœ ๋ฐ ๋ชฉ์  ํฌํŠธ, ์ œ3/4๊ณ„์ธต ํ”„๋กœํ† ์ฝœ๋กœ ์ด๋ค„์ง„ ํŠœํ”Œ์„ ํ†ตํ•ด ํ”Œ๋กœํ…Œ์ด๋ธ” ํ•ญ๋ชฉ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. ๊ฐ ํ•ญ๋ชฉ์—๋Š” ๋˜ํ•œ ํŒจํ‚ท์„ ํฌ์›Œ๋”ฉ ํ•˜๊ธฐ ์œ„ํ•œ ๋ชฉ์  ์ธํ„ฐํŽ˜์ด์Šค์™€ (๋งํฌ ๊ณ„์ธต ๋ชฉ์  ์ฃผ์†Œ๋ฅผ ๊ฐฑ์‹ ํ•˜๊ธฐ ์œ„ํ•œ) ๊ฒŒ์ดํŠธ์›จ์ด ์ฃผ์†Œ๋ฅผ ์บ์‹ฑ ํ•œ๋‹ค. ttl ๋ฐ hoplimit ํ•„๋“œ๋„ ์ค„์–ด๋“ ๋‹ค. ๊ทธ๋ž˜์„œ ํ”Œ๋กœํ…Œ์ด๋ธ”์€ ํŒจํ‚ท์ด ์ „ํ†ต์  ํฌ์›Œ๋”ฉ ๊ฒฝ๋กœ๋ฅผ ์šฐํšŒํ•  ์ˆ˜ ์žˆ๋Š” ๋˜ ๋‹ค๋ฅธ ๊ฒฝ๋กœ๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ํ”Œ๋กœํ…Œ์ด๋ธ”์€ prerouting ํ›… ์ „์— ์žˆ๋Š” ingress ํ›…์— ์œ„์น˜ํ•œ๋‹ค. forward ์ฒด์ธ์—์„œ flow ์‹์„ ํ†ตํ•ด ์˜คํ”„๋กœ๋“œ ํ•˜๊ณ  ์‹ถ์€ ํ๋ฆ„์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค. ํ”Œ๋กœํ…Œ์ด๋ธ”์€ ์ฃผ์†Œ ํŒจ๋ฐ€๋ฆฌ์™€ ์ด๋ฆ„์œผ๋กœ ์‹๋ณ„๋œ๋‹ค. ์ฃผ์†Œ ํŒจ๋ฐ€๋ฆฌ๋Š” ip, ip6, inet ์ค‘ ํ•˜๋‚˜์—ฌ์•ผ ํ•œ๋‹ค. inet ์ฃผ์†Œ ํŒจ๋ฐ€๋ฆฌ๋Š” ํ•˜์ด๋ธŒ๋ฆฌ๋“œ IPv4/IPv6 ํ…Œ์ด๋ธ”์„ ๋งŒ๋“œ๋Š” ๋ฐ ์“ฐ๋Š” ๊ฐ€์ƒ์˜ ํŒจ๋ฐ€๋ฆฌ๋‹ค. ํŒจ๋ฐ€๋ฆฌ๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ์œผ๋กœ ip๋ฅผ ์“ด๋‹ค.

priority๋Š” ๋ถ€ํ˜ธ ์žˆ๋Š” ์ •์ˆ˜๋‚˜ (0์„ ๋‚˜ํƒ€๋‚ด๋Š”) filter์ผ ์ˆ˜ ์žˆ๋‹ค. ๋”ํ•˜๊ธฐ์™€ ๋นผ๊ธฐ๋ฅผ ์จ์„œ ์ƒ๋Œ€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ€๋ น filter + 5๋Š” 5๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

add
์ง€์ •ํ•œ ํŒจ๋ฐ€๋ฆฌ์— ์ง€์ •ํ•œ ์ด๋ฆ„์œผ๋กœ ์ƒˆ ํ”Œ๋กœํ…Œ์ด๋ธ” ์ถ”๊ฐ€.
delete
์ง€์ •ํ•œ ํ”Œ๋กœํ…Œ์ด๋ธ” ์‚ญ์ œ.
list
๋ชจ๋“  ํ”Œ๋กœํ…Œ์ด๋ธ” ๋‚˜์—ด.

์ƒํƒœ ๊ฐ์ฒด

{add | delete | list | reset} type [family] table object
delete type [family] table handle handle
list counters [family]
list quotas [family]

์ƒํƒœ ๊ฐ์ฒด๋Š” ํ…Œ์ด๋ธ”์— ๋ถ™์œผ๋ฉฐ ์œ ์ผํ•œ ์ด๋ฆ„์œผ๋กœ ์‹๋ณ„๋œ๋‹ค. ๊ทœ์น™๋“ค์—์„œ ์ƒํƒœ ์ •๋ณด๋ฅผ ๋ชจ์€ ๊ฒƒ์ด๋ฉฐ ๊ทœ์น™์—์„œ ์ฐธ์กฐํ•˜๋ ค๋ฉด "ํƒ€์ž… ์ด๋ฆ„" ํ‚ค์›Œ๋“œ๋ฅผ ์“ด๋‹ค. ๊ฐ€๋ น "counter ์ด๋ฆ„"์œผ๋กœ ์“ด๋‹ค.

add
์ง€์ •ํ•œ ํ…Œ์ด๋ธ”์— ์ƒˆ ์ƒํƒœ ๊ฐ์ฒด ์ถ”๊ฐ€.
delete
์ง€์ •ํ•œ ๊ฐ์ฒด ์‚ญ์ œ.
list
๊ฐ์ฒด๊ฐ€ ๋‹ด์€ ์ƒํƒœ ์ •๋ณด ํ‘œ์‹œ.
reset
์ƒํƒœ ๊ฐ์ฒด ๋‚˜์—ด ๋ฐ ์žฌ์„ค์ •.

ct helper

ct helper helper { type type protocol protocol ; [l3proto family ;] }

ct helper๋กœ ์—ฐ๊ฒฐ ์ถ”์  ํ—ฌํผ๋ฅผ ์ •์˜ํ•˜๋ฉฐ, ๊ทธ๊ฑธ ct helper set ๋ฌธ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. type๊ณผ protocol์€ ํ•„์ˆ˜๊ณ  l3proto๋Š” ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ํ…Œ์ด๋ธ” ํŒจ๋ฐ€๋ฆฌ๋กœ ์ •ํ•œ๋‹ค. ์ฆ‰ inet ํ…Œ์ด๋ธ”์—์„œ๋Š” ์ปค๋„์—์„œ ์ง€์›ํ•˜๋ฉด ipv4 ๋ฐ ipv6 ํ—ฌํผ ๋ฐฑ์—”๋“œ๋ฅผ ๋ชจ๋‘ ์ ์žฌํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๊ฒŒ ๋œ๋‹ค.

ํ‘œ 10: conntrack ํ—ฌํผ ์ง€์ •

ํ‚ค์›Œ๋“œ ์„ค๋ช… ํƒ€์ž…
type ํ—ฌํผ ํƒ€์ž… ์ด๋ฆ„ ๋”ฐ์˜ดํ‘œ ์นœ ๋ฌธ์ž์—ด (์˜ˆ: "ftp")
protocol ํ—ฌํผ์˜ ์ œ4๊ณ„์ธต ํ”„๋กœํ† ์ฝœ ๋ฌธ์ž์—ด (์˜ˆ: tcp)
l3proto ํ—ฌํผ์˜ ์ œ3๊ณ„์ธต ํ”„๋กœํ† ์ฝœ ์ฃผ์†Œ ํŒจ๋ฐ€๋ฆฌ (์˜ˆ: ip)
ftp ํ—ฌํผ ์ •์˜ํ•˜๊ณ  ํ• ๋‹นํ•˜๊ธฐ

iptables์™€ ๋‹ฌ๋ฆฌ conntrack ๊ฒ€์ƒ‰์ด ์™„๋ฃŒ๋œ ํ›„์—, ์˜ˆ๋ฅผ ๋“ค์–ด ๊ธฐ๋ณธ ํ›… ์šฐ์„ ์ˆœ์œ„ 0์œผ๋กœ ํ—ฌํผ ํ• ๋‹น์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค.

table inet myhelpers {
    ct helper ftp-standard {
        type "ftp" protocol tcp
    }
    chain prerouting {
        type filter hook prerouting priority 0;
        tcp dport 21 ct helper set "ftp-standard"
    }
}

ct timeout

ct timeout name { protocol protocol ; policy = { state: value [, ...] } ; [l3proto family ;] }

ct timeout์œผ๋กœ ์—ฐ๊ฒฐ ์ถ”์  ํƒ€์ž„์•„์›ƒ ๊ฐ’์„ ๋ณ€๊ฒฝํ•œ๋‹ค. ct timeout set ๋ฌธ์œผ๋กœ ํƒ€์ž„์•„์›ƒ ์ •์ฑ…์„ ํ• ๋‹นํ•œ๋‹ค. protocol๊ณผ policy๋Š” ํ•„์ˆ˜๊ณ  l3proto๋Š” ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ํ…Œ์ด๋ธ” ํŒจ๋ฐ€๋ฆฌ๋กœ ์ •ํ•œ๋‹ค.

ํ‘œ 11: conntrack ํƒ€์ž„์•„์›ƒ ์ง€์ •

ํ‚ค์›Œ๋“œ ์„ค๋ช… ํƒ€์ž…
protocol ํƒ€์ž„์•„์›ƒ ๊ฐ์ฒด์˜ ์ œ4๊ณ„์ธต ํ”„๋กœํ† ์ฝœ ๋ฌธ์ž์—ด (์˜ˆ: tcp)
state ์—ฐ๊ฒฐ ์ƒํƒœ ์ด๋ฆ„ ๋ฌธ์ž์—ด (์˜ˆ: "established")
value ์—ฐ๊ฒฐ ์ƒํƒœ์˜ ํƒ€์ž„์•„์›ƒ ๊ฐ’ ๋ถ€ํ˜ธ ์—†๋Š” ์ •์ˆ˜
l3proto ํƒ€์ž„์•„์›ƒ ๊ฐ์ฒด์˜ ์ œ3๊ณ„์ธต ํ”„๋กœํ† ์ฝœ ์ฃผ์†Œ ํŒจ๋ฐ€๋ฆฌ (์˜ˆ: ip)
ct ํƒ€์ž„์•„์›ƒ ์ •์ฑ… ์ •์˜ํ•˜๊ณ  ํ• ๋‹นํ•˜๊ธฐ
table ip filter {
        ct timeout customtimeout {
                protocol tcp;
                l3proto ip
                policy = { established: 120, close: 20 }
        }

        chain output {
                type filter hook output priority filter; policy accept;
                ct timeout set "customtimeout"
        }
}
๊ฐฑ์‹ ๋œ ํƒ€์ž„์•„์›ƒ ์ •์ฑ… ํ™•์ธํ•˜๊ธฐ
% conntrack -E

๋‹ค์Œ์ฒ˜๋Ÿผ ๋‚˜์™€์•ผ ํ•œ๋‹ค.

[UPDATE] tcp      6 120 ESTABLISHED src=172.16.19.128 dst=172.16.19.1
sport=22 dport=41360 [UNREPLIED] src=172.16.19.1 dst=172.16.19.128
sport=41360 dport=22

ct expectation

ct expectation name { protocol protocol ; dport dport ; timeout timeout ; size size ; [l3proto family ;] }

ct expectation์œผ๋กœ ์—ฐ๊ฒฐ ์˜ˆ์ƒ์„ ๋งŒ๋“ ๋‹ค. ct expectation set ๋ฌธ์œผ๋กœ ์˜ˆ์ƒ์„ ํ• ๋‹นํ•œ๋‹ค. protocol, dport, timeout, size๋Š” ํ•„์ˆ˜๊ณ  l3proto๋Š” ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ํ…Œ์ด๋ธ” ํŒจ๋ฐ€๋ฆฌ๋กœ ์ •ํ•œ๋‹ค.

ํ‘œ 12: ์—ฐ๊ฒฐ ์˜ˆ์ƒ ์ง€์ •

ํ‚ค์›Œ๋“œ ์„ค๋ช… ํƒ€์ž…
protocol ์˜ˆ์ƒ ๊ฐ์ฒด์˜ ์ œ4๊ณ„์ธต ํ”„๋กœํ† ์ฝœ ๋ฌธ์ž์—ด (์˜ˆ: tcp)
dport ์˜ˆ์ƒ ์—ฐ๊ฒฐ์˜ ๋ชฉ์  ํฌํŠธ ๋ถ€ํ˜ธ ์—†๋Š” ์ •์ˆ˜
timeout ์˜ˆ์ƒ์˜ ํƒ€์ž„์•„์›ƒ ๊ฐ’ ๋ถ€ํ˜ธ ์—†๋Š” ์ •์ˆ˜
size ์˜ˆ์ƒ์˜ ํฌ๊ธฐ ๊ฐ’ ๋ถ€ํ˜ธ ์—†๋Š” ์ •์ˆ˜
l3proto ์˜ˆ์ƒ ๊ฐ์ฒด์˜ ์ œ3๊ณ„์ธต ํ”„๋กœํ† ์ฝœ ์ฃผ์†Œ ํŒจ๋ฐ€๋ฆฌ (์˜ˆ: ip)
ct ์˜ˆ์ƒ ์ •์ฑ… ์ •์˜ํ•˜๊ณ  ํ• ๋‹นํ•˜๊ธฐ
table ip filter {
        ct expectation expect {
                protocol udp
                dport 9876
                timeout 2m
                size 8
                l3proto ip
        }

        chain input {
                type filter hook input priority filter; policy accept;
                ct expectation set "expect"
        }
}

counter

counter [packets bytes]

ํ‘œ 13: ์นด์šดํ„ฐ ์ง€์ •

ํ‚ค์›Œ๋“œ ์„ค๋ช… ํƒ€์ž…
packets ์‹œ์ž‘ ํŒจํ‚ท ์นด์šดํŠธ ๋ถ€ํ˜ธ ์—†๋Š” ์ •์ˆ˜ (64๋น„ํŠธ)
bytes ์‹œ์ž‘ ๋ฐ”์ดํŠธ ์นด์šดํŠธ ๋ถ€ํ˜ธ ์—†๋Š” ์ •์ˆ˜ (64๋น„ํŠธ)

quota

quota [over | until] [used]

ํ‘œ 14: ์ฟผํ„ฐ ์ง€์ •

ํ‚ค์›Œ๋“œ ์„ค๋ช… ํƒ€์ž…
quota ์ฟผํ„ฐ ์ œํ•œ, ์ฟผํ„ฐ ์ด๋ฆ„์œผ๋กœ ์‚ฌ์šฉ ์ธ์ž ๋‘˜. ๋ถ€ํ˜ธ ์—†๋Š” ์ •์ˆ˜(64๋น„ํŠธ)์™€ ๋ฌธ์ž์—ด: bytes, kbytes, mbytes. ๊ทธ ์ธ์ž ์•ž์— "over"์™€ "until"์ด ์˜ด.
used ์ฟผํ„ฐ์˜ ์‹œ์ž‘ ๊ฐ’ ์ธ์ž ๋‘˜. ๋ถ€ํ˜ธ ์—†๋Š” ์ •์ˆ˜(64๋น„ํŠธ)์™€ ๋ฌธ์ž์—ด: bytes, kbytes, mbytes

์‹

์‹์€ ๊ฐ’์„ ๋‚˜ํƒ€๋‚ด๋Š”๋ฐ, ๋„คํŠธ์›Œํฌ ์ฃผ์†Œ๋‚˜ ํฌํŠธ ๋ฒˆํ˜ธ ๊ฐ™์€ ์ƒ์ˆ˜์ผ ์ˆ˜๋„ ์žˆ๊ณ  ๋ฃฐ์…‹์„ ํ‰๊ฐ€ํ•˜๋ฉด์„œ ํŒจํ‚ท์—์„œ ์ˆ˜์ง‘ํ•œ ๋ฐ์ดํ„ฐ์ผ ์ˆ˜๋„ ์žˆ๋‹ค. ์ด์ง„์‹, ๋…ผ๋ฆฌ์‹, ๊ด€๊ณ„์‹ ๋“ฑ์œผ๋กœ ์‹๋“ค์„ ๊ฒฐํ•ฉํ•ด์„œ (๊ฒ€์‚ฌ๋ฅผ ์œ„ํ•œ) ๋ณตํ•ฉ์‹ ๋‚ด์ง€ ๊ด€๊ณ„์‹์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. NAT๋‚˜ ํŒจํ‚ท ๋งˆํ‚น ๊ฐ™์€ ํŠน์ • ๋™์ž‘์— ์ธ์ž๋กœ ์“ฐ๊ธฐ๋„ ํ•œ๋‹ค.

๊ฐ ์‹์—๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ์žˆ๊ณ , ๊ทธ์— ๋”ฐ๋ผ ํฌ๊ธฐ, ์‹ฌ๋ณผ ๊ฐ’์˜ ํŒŒ์‹ฑ ๋ฐ ํ‘œํ˜„ ๋ฐฉ๋ฒ•, ๋‹ค๋ฅธ ์‹๊ณผ์˜ ํƒ€์ž… ํ˜ธํ™˜์„ฑ์ด ๊ฒฐ์ •๋œ๋‹ค.

describe ๋ช…๋ น

describe expression | data type

describe ๋ช…๋ น์€ ์‹์˜ ์ข…๋ฅ˜์™€ ๊ทธ ๋ฐ์ดํ„ฐ ํƒ€์ž…์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋ณด์—ฌ ์ค€๋‹ค. ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์ค„ ์ˆ˜๋„ ์žˆ์œผ๋ฉฐ, ๊ทธ ๊ฒฝ์šฐ nft๋Š” ๊ทธ ํƒ€์ž…์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ •๋ณด๋ฅผ ํ‘œ์‹œํ•œ๋‹ค.

describe ๋ช…๋ น
$ nft describe tcp flags
payload expression, datatype tcp_flag (TCP flag) (basetype bitmask, integer), 8 bits

predefined symbolic constants:
fin                           0x01
syn                           0x02
rst                           0x04
psh                           0x08
ack                           0x10
urg                           0x20
ecn                           0x40
cwr                           0x80

๋ฐ์ดํ„ฐ ํƒ€์ž…

๋ฐ์ดํ„ฐ ํƒ€์ž…์— ๋”ฐ๋ผ ํฌ๊ธฐ, ์‹ฌ๋ณผ ๊ฐ’์˜ ํŒŒ์‹ฑ ๋ฐ ํ‘œํ˜„ ๋ฐฉ๋ฒ•, ์‹์˜ ํƒ€์ž… ํ˜ธํ™˜์„ฑ์ด ๊ฒฐ์ •๋œ๋‹ค. ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ „์—ญ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ์žˆ์œผ๋ฉฐ, ์ถ”๊ฐ€๋กœ ์–ด๋–ค ์‹๋“ค์—์„œ ๊ทธ ์‹ ์ข…๋ฅ˜์— ํ•œ์ •๋œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์ถ”๊ฐ€๋กœ ์ •์˜ํ•œ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์€ ํฌ๊ธฐ๊ฐ€ ๊ณ ์ •๋ผ ์žˆ์ง€๋งŒ ์ผ๋ถ€๋Š” ํฌ๊ธฐ๊ฐ€ ๋™์ ์ผ ์ˆ˜ ์žˆ๋Š”๋ฐ, ๊ฐ€๋ น ๋ฌธ์ž์—ด ํƒ€์ž…์ด ๊ทธ๋ ‡๋‹ค.

์–ด๋–ค ํƒ€์ž…์—๋Š” ๋ฏธ๋ฆฌ ์ •์˜๋œ ์‹ฌ๋ณผ ์ƒ์ˆ˜๋“ค์ด ์žˆ๋‹ค. nft describe ๋ช…๋ น์œผ๋กœ ๊ทธ ์ƒ์ˆ˜๋“ค์„ ๋‚˜์—ดํ•  ์ˆ˜ ์žˆ๋‹ค.

$ nft describe ct_state
datatype ct_state (conntrack state) (basetype bitmask, integer), 32 bits

pre-defined symbolic constants (in hexadecimal):
invalid                         0x00000001
new ...

ํ•˜์œ„ ํƒ€์ž…์—์„œ ๋‹ค๋ฅธ ํƒ€์ž…์ด ํŒŒ์ƒ๋  ์ˆ˜๋„ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด IPv4 ์ฃผ์†Œ ํƒ€์ž…์€ ์ •์ˆ˜ ํƒ€์ž…์—์„œ ํŒŒ์ƒ๋œ ๊ฒƒ์ธ๋ฐ, IPv4 ์ฃผ์†Œ๋ฅผ ์ •์ˆ˜ ๊ฐ’์œผ๋กœ๋„ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค๋Š” ๋œป์ด๋‹ค.

ํŠน์ • ๋งฅ๋ฝ(์ง‘ํ•ฉ ๋ฐ ๋งต ์ •์˜)์—์„œ๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค. ํƒ€์ž…๋งˆ๋‹ค ์žˆ๋Š” ์ด๋ฆ„์„ ๊ฑฐ๊ธฐ ์“ด๋‹ค.

์ •์ˆ˜ ํƒ€์ž…

์ด๋ฆ„ ํ‚ค์›Œ๋“œ ํฌ๊ธฐ ๊ธฐ๋ฐ˜ ํƒ€์ž…
์ •์ˆ˜ integer ๊ฐ€๋ณ€ -

์ •์ˆ˜ ํƒ€์ž…์€ ์ˆ˜ ๊ฐ’์— ์“ด๋‹ค. 10์ง„์ˆ˜, 16์ง„์ˆ˜, 8์ง„์ˆ˜๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ์ •์ˆ˜ ํƒ€์ž…์—๋Š” ์ •ํ•ด์ง„ ํฌ๊ธฐ๊ฐ€ ์—†์œผ๋ฉฐ ์“ฐ์ด๋Š” ์‹์— ๋”ฐ๋ผ ๊ทธ ํฌ๊ธฐ๊ฐ€ ๊ฒฐ์ •๋œ๋‹ค.

๋น„ํŠธ๋งˆ์Šคํฌ ํƒ€์ž…

์ด๋ฆ„ ํ‚ค์›Œ๋“œ ํฌ๊ธฐ ๊ธฐ๋ฐ˜ ํƒ€์ž…
๋น„ํŠธ๋งˆ์Šคํฌ bitmask ๊ฐ€๋ณ€ integer

๋น„ํŠธ๋งˆ์Šคํฌ ํƒ€์ž…(bitmask)์€ ๋น„ํŠธ๋งˆ์Šคํฌ์— ์“ด๋‹ค.

๋ฌธ์ž์—ด ํƒ€์ž…

์ด๋ฆ„ ํ‚ค์›Œ๋“œ ํฌ๊ธฐ ๊ธฐ๋ฐ˜ ํƒ€์ž…
๋ฌธ์ž์—ด string ๊ฐ€๋ณ€ -

๋ฌธ์ž์—ด ํƒ€์ž…์€ ๋ฌธ์ž์—ด์— ์“ด๋‹ค. ๋ฌธ์ž์—ด์€ ์•ŒํŒŒ๋ฒณ ๋ฌธ์ž(a-zA-Z)๋กœ ์‹œ์ž‘ํ•˜๊ณ  0๊ฐœ ์ด์ƒ์˜ ์•ŒํŒŒ๋ฒณ์ด๋‚˜ ์ˆซ์ž, /, -, _, . ๋ฌธ์ž๊ฐ€ ์˜จ๋‹ค. ์ถ”๊ฐ€๋กœ ํฐ๊ด„ํ˜ธ(")๋กœ ๊ฐ์‹ผ ๊ฑด ๋ญ๋“  ๋ฌธ์ž์—ด๋กœ ์ธ์‹ํ•œ๋‹ค.

๋ฌธ์ž์—ด ํ‘œ์‹œ
# ์ธํ„ฐํŽ˜์ด์Šค ์ด๋ฆ„
filter input iifname eth0

# ๊ธฐ์ดํ•œ ์ธํ„ฐํŽ˜์ด์Šค ์ด๋ฆ„
filter input iifname "(eth0)"

๋งํฌ ๊ณ„์ธต ์ฃผ์†Œ ํƒ€์ž…

์ด๋ฆ„ ํ‚ค์›Œ๋“œ ํฌ๊ธฐ ๊ธฐ๋ฐ˜ ํƒ€์ž…
๋งํฌ ๊ณ„์ธต ์ฃผ์†Œ lladdr ๊ฐ€๋ณ€ integer

๋งํฌ ๊ณ„์ธต ์ฃผ์†Œ ํƒ€์ž…์€ ๋งํฌ ๊ณ„์ธต ์ฃผ์†Œ์— ์“ด๋‹ค. ๋งํฌ ๊ณ„์ธต ์ฃผ์†Œ๋Š” ๊ฐ€๋ณ€ ๊ฐœ์ˆ˜์˜ 16์ง„์ˆ˜ ์ˆซ์ž ๋‘๊ฐœ ๋ฌถ์Œ์„ ์ฝœ๋ก (:)์œผ๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ๋‚˜ํƒ€๋‚ธ๋‹ค.

๋งํฌ ๊ณ„์ธต ์ฃผ์†Œ ํ‘œ์‹œ
# ์ด๋”๋„ท ๋ชฉ์  MAC ์ฃผ์†Œ
filter input ether daddr 20:c9:d0:43:12:d9

IPv4 ์ฃผ์†Œ ํƒ€์ž…

์ด๋ฆ„ ํ‚ค์›Œ๋“œ ํฌ๊ธฐ ๊ธฐ๋ฐ˜ ํƒ€์ž…
IPv4 ์ฃผ์†Œ ipv4_addr 32๋น„ํŠธ integer

IPv4 ์ฃผ์†Œ ํƒ€์ž…์€ IPv4 ์ฃผ์†Œ์— ์“ด๋‹ค. ์  ์ฐ์€ 10์ง„์ˆ˜, ์  ์ฐ์€ 16์ง„์ˆ˜, ์  ์ฐ์€ 8์ง„์ˆ˜, 10์ง„์ˆ˜, 16์ง„์ˆ˜, 8์ง„์ˆ˜ ํ‘œ๊ธฐ, ๋˜๋Š” ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์œผ๋กœ ์ฃผ์†Œ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์€ ํ‘œ์ค€ ์‹œ์Šคํ…œ ๋ฆฌ์กธ๋ฒ„๋ฅผ ์ด์šฉํ•ด ํ•ด์„ํ•œ๋‹ค.

IPv4 ์ฃผ์†Œ ํ‘œ์‹œ
# ์  ์ฐ์€ 10์ง„์ˆ˜ ํ‘œ๊ธฐ
filter output ip daddr 127.0.0.1

# ํ˜ธ์ŠคํŠธ ์ด๋ฆ„
filter output ip daddr localhost

IPv6 ์ฃผ์†Œ ํƒ€์ž…

์ด๋ฆ„ ํ‚ค์›Œ๋“œ ํฌ๊ธฐ ๊ธฐ๋ฐ˜ ํƒ€์ž…
IPv6 ์ฃผ์†Œ ipv6_addr 128๋น„ํŠธ integer

IPv6 ์ฃผ์†Œ ํƒ€์ž…์€ IPv6 ์ฃผ์†Œ์— ์“ด๋‹ค. ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์ด๋‚˜ ์ฝœ๋ก ์œผ๋กœ ๊ตฌ๋ถ„๋œ 16์ง„์ˆ˜ ํ•˜ํ”„์›Œ๋“œ๋“ค๋กœ ๋‚˜ํƒ€๋‚ธ๋‹ค. ํฌํŠธ ๋ฒˆํ˜ธ์™€ ๊ตฌ๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด ์ฃผ์†Œ๋ฅผ ๋Œ€๊ด„ํ˜ธ("[]")๋กœ ๊ฐ์Œ€ ์ˆ˜๋„ ์žˆ๋‹ค.

IPv6 ์ฃผ์†Œ ํ‘œ์‹œ
# ์ถ•์•ฝ๋œ ๋ฃจํ”„๋ฐฑ ์ฃผ์†Œ
filter output ip6 daddr ::1
๋Œ€๊ด„ํ˜ธ ํ‘œ๊ธฐ๋ฒ•์„ ์“ด IPv6 ์ฃผ์†Œ ํ‘œ์‹œ
# []๊ฐ€ ์—†์œผ๋ฉด ํฌํŠธ ๋ฒˆํ˜ธ(22)๊ฐ€ ipv6 ์ฃผ์†Œ์˜ ์ผ๋ถ€์ธ ๊ฒƒ์œผ๋กœ
# ํŒŒ์‹ฑ ๋จ
ip6 nat prerouting tcp dport 2222 dnat to [1ce::d0]:22

๋ถˆ๋ฆฌ์–ธ ํƒ€์ž…

์ด๋ฆ„ ํ‚ค์›Œ๋“œ ํฌ๊ธฐ ๊ธฐ๋ฐ˜ ํƒ€์ž…
๋ถˆ๋ฆฌ์–ธ boolean 1๋น„ํŠธ integer

๋ถˆ๋ฆฌ์–ธ ํƒ€์ž…์€ ํŽธ์˜๋ฅผ ์œ„ํ•œ ์‚ฌ์šฉ์ž ๊ณต๊ฐ„์˜ ๋ฌธ๋ฒ•์  ํƒ€์ž…์ด๋‹ค. (๋ณดํ†ต ์•”๋ฌต์ ์ธ) ๊ด€๊ณ„ ์‹์˜ ์˜ค๋ฅธ์ชฝ์— ์“ฐ์—ฌ์„œ ์™ผ์ชฝ ์‹์„ ๋ถˆ๋ฆฌ์–ธ (์ผ๋ฐ˜์ ์œผ๋กœ ์กด์žฌ ์—ฌ๋ถ€) ๊ฒ€์‚ฌ๋กœ ๋ฐ”๊พผ๋‹ค.

ํ‘œ 15: ๋‹ค์Œ ํ‚ค์›Œ๋“œ๋“ค์€ ์ž๋™์œผ๋กœ ํ•ด๋‹น ๊ฐ’์˜ ๋ถˆ๋ฆฌ์–ธ ํƒ€์ž…์œผ๋กœ ๊ฒฐ์ •๋œ๋‹ค.

ํ‚ค์›Œ๋“œ ๊ฐ’
exists 1
missing 0

ํ‘œ 16: ๋ถˆ๋ฆฌ์–ธ ๋น„๊ต๋ฅผ ์ง€์›ํ•˜๋Š” ์‹๋“ค

์‹ ๋™์ž‘
fib ๋ผ์šฐํŠธ ์กด์žฌ ํ™•์ธ.
exthdr IPv6 ํ™•์žฅ ํ—ค๋” ์กด์žฌ ํ™•์ธ.
tcp option TCP ์˜ต์…˜ ํ—ค๋” ์กด์žฌ ํ™•์ธ.
๋ถˆ๋ฆฌ์–ธ ์ง€์ •
# ๋ผ์šฐํŠธ ์กด์žฌํ•˜๋ฉด ์ผ์น˜
filter input fib daddr . iif oif exists

# IPv6 ํŠธ๋ž˜ํ”ฝ ์ค‘ ๋‹จํŽธํ™” ์•ˆ ๋œ ํŒจํ‚ท์— ์ผ์น˜
filter input exthdr frag missing

# TCP ํƒ€์ž„์Šคํƒฌํ”„ ์˜ต์…˜์ด ์žˆ์œผ๋ฉด ์ผ์น˜
filter input tcp option timestamp exists

ICMP ํƒ€์ž… ํƒ€์ž…

์ด๋ฆ„ ํ‚ค์›Œ๋“œ ํฌ๊ธฐ ๊ธฐ๋ฐ˜ ํƒ€์ž…
ICMP ํƒ€์ž… icmp_type 8๋น„ํŠธ integer

ICMP ํƒ€์ž… ํƒ€์ž…์€ ICMP ํ—ค๋”์˜ type ํ•„๋“œ๋ฅผ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ง€์ •ํ•˜๋Š” ๋ฐ ์“ด๋‹ค.

ํ‘œ 17: ICMP ํƒ€์ž… ์ง€์ • ์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ‚ค์›Œ๋“œ

ํ‚ค์›Œ๋“œ ๊ฐ’
echo-reply 0
destination-unreachable 3
source-quench 4
redirect 5
echo-request 8
router-advertisement 9
router-solicitation 10
time-exceeded 11
parameter-problem 12
timestamp-request 13
timestamp-reply 14
info-request 15
info-reply 16
address-mask-request 17
address-mask-reply 18
ICMP ํƒ€์ž… ์ง€์ •
# ํ•‘ ํŒจํ‚ท ์ผ์น˜
filter output icmp type { echo-request, echo-reply }

ICMP ์ฝ”๋“œ ํƒ€์ž…

์ด๋ฆ„ ํ‚ค์›Œ๋“œ ํฌ๊ธฐ ๊ธฐ๋ฐ˜ ํƒ€์ž…
ICMP ์ฝ”๋“œ icmp_code 8๋น„ํŠธ integer

ICMP ์ฝ”๋“œ ํƒ€์ž…์€ ICMP ํ—ค๋”์˜ code ํ•„๋“œ๋ฅผ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ง€์ •ํ•˜๋Š” ๋ฐ ์“ด๋‹ค.

ํ‘œ 18: ICMP ์ฝ”๋“œ ์ง€์ • ์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ‚ค์›Œ๋“œ

ํ‚ค์›Œ๋“œ ๊ฐ’
net-unreachable 0
host-unreachable 1
prot-unreachable 2
port-unreachable 3
net-prohibited 9
host-prohibited 10
admin-prohibited 13

ICMPv6 ํƒ€์ž… ํƒ€์ž…

์ด๋ฆ„ ํ‚ค์›Œ๋“œ ํฌ๊ธฐ ๊ธฐ๋ฐ˜ ํƒ€์ž…
ICMPv6 ํƒ€์ž… icmpv6_type 8๋น„ํŠธ integer

ICMPv6 ํƒ€์ž… ํƒ€์ž…์€ ICMPv6 ํ—ค๋”์˜ type ํ•„๋“œ๋ฅผ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ง€์ •ํ•˜๋Š” ๋ฐ ์“ด๋‹ค.

ํ‘œ 19: ICMPv6 ํƒ€์ž… ์ง€์ • ์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ‚ค์›Œ๋“œ

ํ‚ค์›Œ๋“œ ๊ฐ’
destination-unreachable 1
packet-too-big 2
time-exceeded 3
parameter-problem 4
echo-request 128
echo-reply 129
mld-listener-query 130
mld-listener-report 131
mld-listener-done 132
mld-listener-reduction 132
nd-router-solicit 133
nd-router-advert 134
nd-neighbor-solicit 135
nd-neighbor-advert 136
nd-redirect 137
router-renumbering 138
ind-neighbor-solicit 141
ind-neighbor-advert 142
mld2-listener-report 143
ICMPv6 ํƒ€์ž… ์ง€์ •
# ICMPv6 ํ•‘ ํŒจํ‚ท ์ผ์น˜
filter output icmpv6 type { echo-request, echo-reply }

ICMPv6 ์ฝ”๋“œ ํƒ€์ž…

์ด๋ฆ„ ํ‚ค์›Œ๋“œ ํฌ๊ธฐ ๊ธฐ๋ฐ˜ ํƒ€์ž…
ICMPv6 ์ฝ”๋“œ icmpv6_code 8๋น„ํŠธ integer

ICMPv6 ์ฝ”๋“œ ํƒ€์ž…์€ ICMPv6 ํ—ค๋”์˜ code ํ•„๋“œ๋ฅผ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ง€์ •ํ•˜๋Š” ๋ฐ ์“ด๋‹ค.

ํ‘œ 20: ICMPv6 ์ฝ”๋“œ ์ง€์ • ์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ‚ค์›Œ๋“œ

ํ‚ค์›Œ๋“œ ๊ฐ’
no-route 0
admin-prohibited 1
addr-unreachable 3
port-unreachable 4
policy-fail 5
reject-route 6

ICMPvX ์ฝ”๋“œ ํƒ€์ž…

์ด๋ฆ„ ํ‚ค์›Œ๋“œ ํฌ๊ธฐ ๊ธฐ๋ฐ˜ ํƒ€์ž…
ICMPvX ์ฝ”๋“œ icmpv6_type 8๋น„ํŠธ integer

ICMPvX ์ฝ”๋“œ ํƒ€์ž…์€ ICMP์™€ ICMPv6์˜ ์ฝ”๋“œ ํƒ€์ž…์—์„œ ๊ฒน์น˜๋Š” ๊ฐ’๋“ค์„ ์ถ”์ถœํ•œ ๊ฒƒ์ด๋ฉฐ inet ํŒจ๋ฐ€๋ฆฌ์—์„œ ์“ฐ๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด๋‹ค.

ํ‘œ 21: ICMPvX ์ฝ”๋“œ ์ง€์ • ์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ‚ค์›Œ๋“œ

ํ‚ค์›Œ๋“œ ๊ฐ’
no-route 0
port-unreachable 1
host-unreachable 2
admin-prohibited 3

conntrack ํƒ€์ž…

ํ‘œ 22: ct ์‹๊ณผ ๋ฌธ์— ์“ฐ๋Š” ํƒ€์ž…๋“ค

์ด๋ฆ„ ํ‚ค์›Œ๋“œ ํฌ๊ธฐ ๊ธฐ๋ฐ˜ ํƒ€์ž…
conntrack ์ƒํƒœ ct_state 4๋ฐ”์ดํŠธ bitmask
conntrack ๋ฐฉํ–ฅ ct_dir 8๋น„ํŠธ integer
conntrack ์ƒํ™ฉ ct_status 4๋ฐ”์ดํŠธ bitmask
conntrack ์ด๋ฒคํŠธ ๋น„ํŠธ ct_event 4๋ฐ”์ดํŠธ bitmask
conntrack ๋ ˆ์ด๋ธ” ct_label 128๋น„ํŠธ bitmask

์œ„์˜ ํƒ€์ž…๋“ค ๊ฐ๊ฐ์— ๋Œ€ํ•ด ํŽธ์˜๋ฅผ ์œ„ํ•œ ํ‚ค์›Œ๋“œ๋“ค์ด ์žˆ๋‹ค.

ํ‘œ 23: conntrack ์ƒํƒœ (ct_state)

ํ‚ค์›Œ๋“œ ๊ฐ’
invalid 1
established 2
related 4
new 8
untracked 64

ํ‘œ 24: conntrack ๋ฐฉํ–ฅ (ct_dir)

ํ‚ค์›Œ๋“œ ๊ฐ’
original 0
reply 1

ํ‘œ 25: conntrack ์ƒํ™ฉ (ct_status)

ํ‚ค์›Œ๋“œ ๊ฐ’
expected 1
seen-reply 2
assured 4
confirmed 8
snat 16
dnat 32
dying 512

ํ‘œ 26: conntrack ์ด๋ฒคํŠธ ๋น„ํŠธ (ct_event)

ํ‚ค์›Œ๋“œ ๊ฐ’
new 1
related 2
destroy 4
reply 8
assured 16
protoinfo 32
helper 64
mark 128
seqadj 256
secmark 512
label 1024

conntrack ๋ ˆ์ด๋ธ” ํƒ€์ž…(ct_label)์— ๊ฐ€๋Šฅํ•œ ํ‚ค์›Œ๋“œ๋“ค์€ ๋Ÿฐํƒ€์ž„์— /etc/connlabel.conf์—์„œ ์ฝ์–ด ๋“ค์ธ๋‹ค.

๊ธฐ๋ณธ ์‹

๊ฐ€์žฅ ํ•˜์œ„์˜ ์‹์ด ๊ธฐ๋ณธ ์‹์ด๋ฉฐ ์ƒ์ˆ˜, ๋˜๋Š” ํŒจํ‚ท ํŽ˜์ด๋กœ๋“œ๋‚˜ ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ, ์ƒํƒœ ๋ชจ๋“ˆ์—์„œ ์˜จ ๋ฐ์ดํ„ฐ ํ•˜๋‚˜๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

meta ์‹

meta {length | nfproto | l4proto | protocol | priority}
[meta] {mark | iif | iifname | iiftype | oif | oifname | oiftype | skuid | skgid | nftrace | rtclassid | ibrname | obrname | pkttype | cpu | iifgroup | oifgroup | cgroup | random | ipsec | iifkind | oifkind | time | hour | day}

meta ์‹์€ ํŒจํ‚ท๊ณผ ์—ฐ๊ด€๋œ ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์‹์ด๋‹ค.

meta ์‹์—๋Š” ์ง€์ • meta ์‹๊ณผ ๋น„์ง€์ • meta ์‹ ๋‘ ์ข…๋ฅ˜๊ฐ€ ์žˆ๋‹ค. ์ง€์ • meta ์‹์—์„  ๋ฉ”ํƒ€ ํ‚ค ์•ž์— meta ํ‚ค์›Œ๋“œ๊ฐ€ ํ•„์š”ํ•˜๊ณ  ๋น„์ง€์ • meta ์‹์€ ๋ฉ”ํƒ€ ํ‚ค๋ฅผ ๋ฐ”๋กœ ์“ฐ๊ฑฐ๋‚˜ ์ง€์ • meta ์‹์œผ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. meta l4proto๋Š” IPv4๋‚˜ IPv6 ํŒจํ‚ท์— ํฌํ•จ๋œ ํŠน์ • ์ „์†ก ํ”„๋กœํ† ์ฝœ์„ ๋งž์ถฐ ๋ณด๋Š” ๋ฐ ์œ ์šฉํ•˜๋‹ค. IPv6 ํŒจํ‚ท์— IPv6 ํ™•์žฅ ํ—ค๋”๊ฐ€ ์žˆ์œผ๋ฉด ๊ทธ ์—ญ์‹œ ๊ฑด๋„ˆ๋›ฐ๊ฒŒ ๋œ๋‹ค.

meta iif, oif, iifname, oifname๋Š” ํŒจํ‚ท์ด ๋„์ฐฉํ•œ ์ธํ„ฐํŽ˜์ด์Šค์™€ ๋‚˜๊ฐˆ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งž์ถฐ ๋ณด๋Š” ๋ฐ ์“ด๋‹ค.

iif์™€ oif๋Š” ์ธํ„ฐํŽ˜์ด์Šค ๋ฒˆํ˜ธ๋กœ ๋งž์ถฐ ๋ณด๋Š” ๋ฐ˜๋ฉด iifname๊ณผ oifname์€ ์ธํ„ฐํŽ˜์ด์Šค ์ด๋ฆ„์œผ๋กœ ๋งž์ถฐ ๋ณธ๋‹ค. ์ด ๋‘˜์€ ๊ฐ™์ง€ ์•Š๋‹ค. ๊ฐ€๋ น ๋‹ค์Œ ๊ทœ์น™์„ ์ƒ๊ฐํ•ด ๋ณด๋ฉด,

filter input meta iif "foo"

์ธํ„ฐํŽ˜์ด์Šค "foo"๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ด ๊ทœ์น™์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ ๊ทธ ๊ทœ์น™์€ ์ธํ„ฐํŽ˜์ด์Šค "foo"์˜ ์ด๋ฆ„์ด "bar"๋กœ ๋ฐ”๋€ ๊ฒฝ์šฐ์—๋„ ๊ณ„์† ์ผ์น˜ํ•˜๊ฒŒ ๋œ๋‹ค.

๊ทธ๋ ‡๊ฒŒ ๋˜๋Š” ์ด์œ ๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ์ธํ„ฐํŽ˜์ด์Šค ๋ฒˆํ˜ธ๋ฅผ ์“ฐ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. tun/tap์ด๋‚˜ ๋‹ค์ด์–ผ์—… ์ธํ„ฐํŽ˜์ด์Šค(์˜ˆ๋ฅผ ๋“ค์–ด ppp)์ฒ˜๋Ÿผ ๋™์ ์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ธ ๊ฒฝ์šฐ iifname๊ณผ oifname์„ ์“ฐ๋Š” ๊ฒŒ ๋” ๋‚˜์„ ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋Ÿฐ ๊ฒฝ์šฐ์— ์ด๋ฆ„์„ ์“ฐ๋ฉด ๊ทœ์น™์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๊ผญ ์กด์žฌํ•  ํ•„์š”๊ฐ€ ์—†๊ณ , ์ธํ„ฐํŽ˜์ด์Šค ์ด๋ฆ„์ด ๋ฐ”๋€Œ๋ฉด ์ผ์น˜ํ•˜์ง€ ์•Š๊ฒŒ ๋๋‹ค๊ฐ€ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์‚ญ์ œ๋˜๊ณ  ๊ฐ™์€ ์ด๋ฆ„์˜ ์ƒˆ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์ƒ๊ธฐ๋ฉด ๋‹ค์‹œ ์ผ์น˜ํ•˜๊ฒŒ ๋œ๋‹ค.

ํ‘œ 27: meta ์‹ ํƒ€์ž…

ํ‚ค์›Œ๋“œ ์„ค๋ช… ํƒ€์ž…
length ๋ฐ”์ดํŠธ ๋‹จ์œ„ ํŒจํ‚ท ๊ธธ์ด integer (32๋น„ํŠธ)
nfproto ์‹ค์ œ ํ›… ํ”„๋กœํ† ์ฝœ ํŒจ๋ฐ€๋ฆฌ, inet ํ…Œ์ด๋ธ”์—์„œ๋งŒ ์œ ์šฉ integer (32๋น„ํŠธ)
l4proto ์ œ4๊ณ„์ธต ํ”„๋กœํ† ์ฝœ, ipv6 ํ™•์žฅ ํ—ค๋” ๊ฑด๋„ˆ๋œ€ integer (8๋น„ํŠธ)
protocol EtherType ํ”„๋กœํ† ์ฝœ ๊ฐ’ ether_type
priority TC ํŒจํ‚ท ์šฐ์„ ์ˆœ์œ„ tc_handle
mark ํŒจํ‚ท ๋งˆํฌ mark
iif ์ž…๋ ฅ ์ธํ„ฐํŽ˜์ด์Šค ๋ฒˆํ˜ธ iface_index
iifname ์ž…๋ ฅ ์ธํ„ฐํŽ˜์ด์Šค ์ด๋ฆ„ ifname
iiftype ์ž…๋ ฅ ์ธํ„ฐํŽ˜์ด์Šค ํƒ€์ž… iface_type
oif ์ถœ๋ ฅ ์ธํ„ฐํŽ˜์ด์Šค ๋ฒˆํ˜ธ iface_index
oifname ์ถœ๋ ฅ ์ธํ„ฐํŽ˜์ด์Šค ์ด๋ฆ„ ifname
oiftype ์ถœ๋ ฅ ์ธํ„ฐํŽ˜์ด์Šค ํ•˜๋“œ์›จ์–ด ํƒ€์ž… iface_type
skuid ๋ฐœ์‹  ์†Œ์ผ“์— ์—ฐ๊ณ„๋œ UID uid
skgid ๋ฐœ์‹  ์†Œ์ผ“์— ์—ฐ๊ณ„๋œ GID gid
rtclassid ๋ผ์šฐํŒ… realm realm
ibrname ์ž…๋ ฅ ๋ธŒ๋ฆฌ์ง€ ์ธํ„ฐํŽ˜์ด์Šค ์ด๋ฆ„ ifname
obrname ์ถœ๋ ฅ ๋ธŒ๋ฆฌ์ง€ ์ธํ„ฐํŽ˜์ด์Šค ์ด๋ฆ„ ifname
pkttype ํŒจํ‚ท ํƒ€์ž… pkt_type
cpu ํŒจํ‚ท ์ฒ˜๋ฆฌ ์ค‘์ธ cpu ๋ฒˆํ˜ธ integer (32๋น„ํŠธ)
iifgroup ์ž…๋ ฅ ์žฅ์น˜ ๊ทธ๋ฃน devgroup
oifgroup ์ถœ๋ ฅ ์žฅ์น˜ ๊ทธ๋ฃน devgroup
cgroup ์ œ์–ด ๊ทธ๋ฃน ID integer (32๋น„ํŠธ)
random ์œ ์‚ฌ ๋‚œ์ˆ˜ integer (32๋น„ํŠธ)
ipsec ๋ถˆ๋ฆฌ์–ธ boolean (1๋น„ํŠธ)
iifkind ์ž…๋ ฅ ์ธํ„ฐํŽ˜์ด์Šค ์ข…๋ฅ˜
oifkind ์ถœ๋ ฅ ์ธํ„ฐํŽ˜์ด์Šค ์ข…๋ฅ˜
time ํŒจํ‚ท์„ ์ˆ˜์‹ ํ•œ ์ ˆ๋Œ€ ์‹œ๊ฐ„ integer (32๋น„ํŠธ) ๋˜๋Š” string
day ์ฃผ ์ค‘ ์š”์ผ integer (8๋น„ํŠธ) ๋˜๋Š” string
hour ํ•˜๋ฃจ ์ค‘ ์‹œ๊ฐ„ string

ํ‘œ 28: meta ์‹ ํ•œ์ • ํƒ€์ž…

ํƒ€์ž… ์„ค๋ช…
iface_index ์ธํ„ฐํŽ˜์ด์Šค ๋ฒˆํ˜ธ (32๋น„ํŠธ ์ˆ˜). ์ˆซ์ž๋กœ ๋˜๋Š” ๊ธฐ์กด ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ด๋ฆ„์œผ๋กœ ์ง€์ • ๊ฐ€๋Šฅ.
ifname ์ธํ„ฐํŽ˜์ด์Šค ์ด๋ฆ„ (16๋ฐ”์ดํŠธ ๋ฌธ์ž์—ด). ์กด์žฌํ•˜์ง€ ์•Š์•„๋„ ๋จ.
iface_type ์ธํ„ฐํŽ˜์ด์Šค ํƒ€์ž… (16๋น„ํŠธ ์ˆ˜).
uid ์‚ฌ์šฉ์ž ID (32๋น„ํŠธ ์ˆ˜). ์ˆซ์ž๋กœ ๋˜๋Š” ์‚ฌ์šฉ์ž ์ด๋ฆ„์œผ๋กœ ์ง€์ • ๊ฐ€๋Šฅ.
gid ๊ทธ๋ฃน ID (32๋น„ํŠธ ์ˆ˜). ์ˆซ์ž๋กœ ๋˜๋Š” ๊ทธ๋ฃน ์ด๋ฆ„์œผ๋กœ ์ง€์ • ๊ฐ€๋Šฅ.
realm ๋ผ์šฐํŒ… realm (32๋น„ํŠธ ์ˆ˜). ์ˆซ์ž๋กœ ๋˜๋Š” /etc/iproute2/rt_realms์— ์ •์˜๋œ ์‹ฌ๋ณผ ์ด๋ฆ„์œผ๋กœ ์ง€์ • ๊ฐ€๋Šฅ.
devgroup_type ์žฅ์น˜ ๊ทธ๋ฃน (32๋น„ํŠธ ์ˆ˜). ์ˆซ์ž๋กœ ๋˜๋Š” /etc/iproute2/group์— ์ •์˜๋œ ์‹ฌ๋ณผ ์ด๋ฆ„์œผ๋กœ ์ง€์ • ๊ฐ€๋Šฅ.
pkt_type ํŒจํ‚ท ์ข…๋ฅ˜: host (๋กœ์ปฌ ํ˜ธ์ŠคํŠธ ํ–ฅํ•จ), broadcast (๋ชจ๋‘์—๊ฒŒ), multicast (๊ทธ๋ฃน์—๊ฒŒ), other (๋‹ค๋ฅธ ํ˜ธ์ŠคํŠธ ํ–ฅํ•จ).
ifkind ์ธํ„ฐํŽ˜์ด์Šค ์ข…๋ฅ˜ (16๋ฐ”์ดํŠธ ๋ฌธ์ž์—ด). ์กด์žฌํ•˜์ง€ ์•Š์•„๋„ ๋จ.
time ์ •์ˆ˜ ๋˜๋Š” ISO ํ˜•์‹ ๋‚ ์งœ. ์˜ˆ๋ฅผ ๋“ค์–ด "2019-06-06 17:00". ์‹œ๊ฐ„๊ณผ ์ดˆ๋Š” ์„ ํƒ์ ์ด๋ฉฐ ์›ํ•˜๋Š” ์ƒ๋žต ๊ฐ€๋Šฅ. ์ƒ๋žต ์‹œ ์ž์ •์„ ์ƒ์ •ํ•จ. ์ฆ‰ "2019-06-06", "2019-06-06 00:00", "2019-06-06 00:00:00"์€ ๋™๋“ฑํ•จ. ์ •์ˆ˜๋ฅผ ์ฃผ๋Š” ๊ฒฝ์šฐ ์œ ๋‹‰์Šค ํƒ€์ž„์Šคํƒฌํ”„๋ผ๊ณ  ์ƒ์ •ํ•จ.
day ์ฃผ ์ค‘ ์š”์ผ("Monday", "Tuesday", ๋“ฑ) ๋˜๋Š” 0์—์„œ 6 ์‚ฌ์ด ์ •์ˆ˜. ๋ฌธ์ž์—ด ์ผ์น˜ ์—ฌ๋ถ€์— ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ณ„ํ•˜์ง€ ์•Š์œผ๋ฉฐ ์™„์ „ํžˆ ์ผ์น˜ํ•  ํ•„์š” ์—†์Œ. (๊ฐ€๋ น "Mon"์ด๋ผ๊ณ  ํ•˜๋ฉด "Monday"์— ์ผ์น˜ํ•จ.) ์ •์ˆ˜๋ฅผ ์ฃผ๋Š” ๊ฒฝ์šฐ 0์ด ์ผ์š”์ผ์ด๊ณ  6์ด ํ† ์š”์ผ์ž„.
hour 24์‹œ๊ฐ„ ํ˜•์‹์œผ๋กœ ์‹œ๊ฐ„์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด. ์ดˆ๋ฅผ ์„ ํƒ์ ์œผ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Œ. ์˜ˆ๋ฅผ ๋“ค์–ด 17:00๊ณผ 17:00:00์ด ๋™๋“ฑํ•จ.
meta ์‹ ์‚ฌ์šฉํ•˜๊ธฐ
# ์ง€์ • meta ์‹
filter output meta oif eth0

# ๋น„์ง€์ • meta ์‹
filter output oif eth0

# ํŒจํ‚ท์ด ipsec ์ฒ˜๋ฆฌ ๋Œ€์ƒ์ด์—ˆ์Œ
raw prerouting meta ipsec exists accept

socket ์‹

socket {transparent | mark}

socket ์‹์„ ์‚ฌ์šฉํ•ด ๊ธฐ์กด์˜ ์—ด๋ฆฐ TCP/UDP ์†Œ์ผ“์ด๋‚˜ ํŒจํ‚ท์— ์—ฐ๊ณ„๋  ์ˆ˜ ์žˆ๋Š” ์†Œ์ผ“ ์†์„ฑ์„ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ˆ˜๋ฆฝ ์ƒํƒœ์ด๊ฑฐ๋‚˜ 0 ์•„๋‹Œ ์ฃผ์†Œ์— (๊ฐ€๋Šฅํ•˜๋ฉด ๋กœ์ปฌ ์•„๋‹Œ ์ฃผ์†Œ์—) ๊ฒฐ์†๋œ ๋ฆฌ์Šค๋‹ ์†Œ์ผ“์„ ์ฐพ๋Š”๋‹ค.

ํ‘œ 29: ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์†Œ์ผ“ ์†์„ฑ

์ด๋ฆ„ ์„ค๋ช… ํƒ€์ž…
transparent ์ฐพ์€ ์†Œ์ผ“์˜ IP_TRANSPARENT ์†Œ์ผ“ ์˜ต์…˜ ๊ฐ’. 0 ๋˜๋Š” 1์ผ ์ˆ˜ ์žˆ์Œ. boolean (1๋น„ํŠธ)
mark ์†Œ์ผ“ ๋งˆํฌ(SOL_SOCKET, SO_MARK) ๊ฐ’. mark
์†Œ์ผ“ ์‹ ์‚ฌ์šฉํ•˜๊ธฐ
# ํˆฌ๋ช… ์†Œ์ผ“์— ๋Œ€์‘ํ•˜๋Š” ํŒจํ‚ท์— ํ‘œ์‹œ
table inet x {
    chain y {
        type filter hook prerouting priority -150; policy accept;
        socket transparent 1 mark set 0x00000001 accept
    }
}

# mark ๊ฐ’์ด 15์ธ ์†Œ์ผ“์— ๋Œ€์‘ํ•˜๋Š” ํŒจํ‚ท ์ถ”์ 
table inet x {
    chain y {
        type filter hook prerouting priority -150; policy accept;
        socket mark 0x0000000f nftrace set 1
    }
}

# ํŒจํ‚ท mark๋ฅผ ์†Œ์ผ“ mark๋กœ ์„ค์ •
table inet x {
    chain y {
        type filter hook prerouting priority -150; policy accept;
        tcp dport 8080 mark set socket mark
    }
}

osf ์‹

osf [ttl {loose | skip}] {name | version}

osf ์‹์€ ์ˆ˜๋™์  ์šด์˜ ์ฒด์ œ ๊ฐ์‹์„ ํ•œ๋‹ค. ์ด ์‹์€ SYN ๋น„ํŠธ๊ฐ€ ์„ค์ •๋œ ํŒจํ‚ท์—์„œ ๊ฐ€์ ธ์˜จ ๋ช‡ ๊ฐ€์ง€ ๋ฐ์ดํ„ฐ(์œˆ๋„ ํฌ๊ธฐ, MSS, ์˜ต์…˜ ๋ฐ ์ˆœ์„œ, DF ๋“ฑ)๋ฅผ ๋น„๊ตํ•œ๋‹ค.

ํ‘œ 30: ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ osf ์†์„ฑ

์ด๋ฆ„ ์„ค๋ช… ํƒ€์ž…
ttl ์šด์˜ ์ฒด์ œ๋ฅผ ํŒ๋‹จํ•˜๊ธฐ ์œ„ํ•ด ํŒจํ‚ท์˜ TTL ๊ฒ€์‚ฌ๋ฅผ ํ•˜๊ธฐ. string
version ํŒจํ‚ท์—์„œ OS ๋ฒ„์ „ ๊ฒ€์‚ฌ ํ•˜๊ธฐ.
name ๋งž์ถฐ ๋ณผ OS ์‹œ๊ทธ๋„ˆ์ฒ˜ ์ด๋ฆ„. pf.os ํŒŒ์ผ์— ์ „์ฒด ์‹œ๊ทธ๋„ˆ์ฒ˜๋“ค์ด ์žˆ์Œ. ์‹์—์„œ ํƒ์ง€ํ•  ์ˆ˜ ์—†์—ˆ๋˜ OS ์‹œ๊ทธ๋„ˆ์ฒ˜์—” "unknown" ์‚ฌ์šฉ. string
์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ttl ๊ฐ’

TTL ์†์„ฑ์„ ์ฃผ์ง€ ์•Š์œผ๋ฉด IP ํ—ค๋”์˜ ๊ฐ’๊ณผ ํ•‘๊ฑฐํ”„๋ฆฐํŠธ TTL ๊ฐ’์ด ๊ฐ™์€์ง€ ๋น„๊ตํ•œ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ LAN์—์„œ ์ž˜ ๋™์ž‘ํ•œ๋‹ค.

  • loose: IP ํ—ค๋”์˜ TTL์ด ํ•‘๊ฑฐํ”„๋ฆฐํŠธ ๊ฐ’๋ณด๋‹ค ์ž‘์€์ง€ ๊ฒ€์‚ฌํ•œ๋‹ค. ์ „์—ญ ๋ผ์šฐํŒ… ๊ฐ€๋Šฅ ์ฃผ์†Œ์— ์ž˜ ๋™์ž‘ํ•œ๋‹ค.
  • skip: TTL์„ ์•„์˜ˆ ๋น„๊ตํ•˜์ง€ ์•Š๋Š”๋‹ค.
osf ์‹ ์‚ฌ์šฉํ•˜๊ธฐ
# TTL ๋น„๊ต ์—†์ด "Linux" OS ๊ณ„์—ด ์‹œ๊ทธ๋„ˆ์ฒ˜์— ์ผ์น˜ํ•˜๋Š” ํŒจํ‚ท ํ—ˆ์šฉํ•˜๊ธฐ
table inet x {
    chain y {
        type filter hook input priority 0; policy accept;
        osf ttl skip name "Linux"
    }
}

fib ์‹

fib {saddr | daddr | mark | iif | oif} [. ...] {oif | oifname | type}

fib ์‹์€ fib(forwarding information base)๋ฅผ ์กฐํšŒํ•ด์„œ ํŠน์ • ์ฃผ์†Œ๊ฐ€ ์‚ฌ์šฉํ•˜๊ฒŒ ๋  ์ถœ๋ ฅ ์ธํ„ฐํŽ˜์ด์Šค ๋ฒˆํ˜ธ ๊ฐ™์€ ์ •๋ณด๋ฅผ ์–ป๋Š”๋‹ค. ์ž…๋ ฅ์€ fib ๊ฒ€์ƒ‰ ํ•จ์ˆ˜ ์ž…๋ ฅ์œผ๋กœ ์“ธ ์š”์†Œ๋“ค์˜ ํŠœํ”Œ์ด๋‹ค.

ํ‘œ 31: fib ์‹ ํ•œ์ • ํƒ€์ž…

ํ‚ค์›Œ๋“œ ์„ค๋ช… ํƒ€์ž…
oif ์ถœ๋ ฅ ์ธํ„ฐํŽ˜์ด์Šค ๋ฒˆํ˜ธ integer (32๋น„ํŠธ)
oifname ์ถœ๋ ฅ ์ธํ„ฐํŽ˜์ด์Šค ์ด๋ฆ„ string
type ์ฃผ์†Œ ํƒ€์ž… fib_addrtype

๋ชจ๋“  ์ฃผ์†Œ ํƒ€์ž…๋“ค์˜ ๋ชฉ๋ก์„ ๋ณด๋ ค๋ฉด nft describe fib_addrtype.

fib ์‹ ์‚ฌ์šฉํ•˜๊ธฐ
# ์—ญ๊ฒฝ๋กœ ์—†๋Š” ํŒจํ‚ท ๋ฒ„๋ฆฌ๊ธฐ
filter prerouting fib saddr . iif oif missing drop

์ด ์˜ˆ์—์„œ saddr . iif๋Š” ์ถœ๋ฐœ ์ฃผ์†Œ์™€ ์ž…๋ ฅ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ๋ผ์šฐํŒ… ์ •๋ณด๋ฅผ ๊ฒ€์ƒ‰ํ•œ๋‹ค. oif๋Š” ๊ทธ ๋ผ์šฐํŒ… ์ •๋ณด์—์„œ ์ถœ๋ ฅ ์ธํ„ฐํŽ˜์ด์Šค ๋ฒˆํ˜ธ๋ฅผ ๋ฝ‘์•„๋‚ธ๋‹ค. ๊ทธ ์ถœ๋ฐœ ์ฃผ์†Œ/์ž…๋ ฅ ์ธํ„ฐํŽ˜์ด์Šค ์กฐํ•ฉ์— ๋Œ€ํ•œ ๋ผ์šฐํŠธ๋ฅผ ์ฐพ์ง€ ๋ชปํ–ˆ์œผ๋ฉด ์ถœ๋ ฅ ์ธํ„ฐํŽ˜์ด์Šค ๋ฒˆํ˜ธ๊ฐ€ 0์ด๋‹ค. ์ž…๋ ฅ ํ‚ค ์ค‘ ์ผ๋ถ€๋กœ ์ž…๋ ฅ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ง€์ •ํ•œ ๊ฒฝ์šฐ ์ถœ๋ ฅ ์ธํ„ฐํŽ˜์ด์Šค ๋ฒˆํ˜ธ๋Š” ์–ธ์ œ๋‚˜ ์ž…๋ ฅ ์ธํ„ฐํŽ˜์ด์Šค ๋ฒˆํ˜ธ์™€ ๊ฐ™๊ฑฐ๋‚˜ 0์ด๋‹ค. saddr oif๋งŒ ์ค€ ๊ฒฝ์šฐ์—๋Š” oif๊ฐ€ ์•„๋ฌด ์ธํ„ฐํŽ˜์ด์Šค ๋ฒˆํ˜ธ ๋˜๋Š” 0์ผ ์ˆ˜ ์žˆ๋‹ค.

# ์ธํ„ฐํŽ˜์ด์Šค์— ์„ค์ • ์•ˆ ๋œ ์ฃผ์†Œ๋ฅผ ํ–ฅํ•œ ํŒจํ‚ท ๋ฒ„๋ฆฌ๊ธฐ
filter prerouting fib daddr . iif type != { local, broadcast, multicast } drop

# ํŠน์ • '๋ธ”๋ž™ํ™€' ํ…Œ์ด๋ธ”(0xdead, ์ ์ ˆํ•œ ip rule ํ•„์š”)์—์„œ ๊ฒ€์ƒ‰ ์ˆ˜ํ–‰ํ•˜๊ธฐ
filter prerouting meta mark set 0xdead fib daddr . mark type vmap { blackhole : drop, prohibit : jump prohibited, unreachable : drop }

๋ผ์šฐํŒ… ์‹

rt [ip | ip6] {classid | nexthop | mtu | ipsec}

๋ผ์šฐํŒ… ์‹์€ ํŒจํ‚ท์— ์—ฐ๊ณ„๋œ ๋ผ์šฐํŒ… ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

ํ‘œ 32: ๋ผ์šฐํŒ… ์‹ ํƒ€์ž…

ํ‚ค์›Œ๋“œ ์„ค๋ช… ํƒ€์ž…
classid ๋ผ์šฐํŒ… realm realm
nexthop ๋ผ์šฐํŒ… nexthop ipv4_addr/ipv6_addr
mtu ๋ผ์šฐํŠธ์˜ TCP ์ตœ๋Œ€ ์„ธ๊ทธ๋จผํŠธ ํฌ๊ธฐ integer (16๋น„ํŠธ)
ipsec ipsec ํ„ฐ๋„ ๋˜๋Š” ํŠธ๋žœ์ŠคํฌํŠธ๋ฅผ ํ†ตํ•œ ๋ผ์šฐํŠธ boolean

ํ‘œ 33: ๋ผ์šฐํŒ… ์‹ ํ•œ์ • ํƒ€์ž…

ํƒ€์ž… ์„ค๋ช…
realm ๋ผ์šฐํŒ… realm (32๋น„ํŠธ ์ˆ˜). ์ˆซ์ž๋กœ ๋˜๋Š” /etc/iproute2/rt_realms์— ์ •์˜๋œ ์‹ฌ๋ณผ ์ด๋ฆ„์œผ๋กœ ์ง€์ • ๊ฐ€๋Šฅ.
๋ผ์šฐํŒ… ์‹ ์‚ฌ์šฉํ•˜๊ธฐ
# IP ํŒจ๋ฐ€๋ฆฌ์™€ ๋ฌด๊ด€ํ•œ rt ์‹
filter output rt classid 10
filter output rt ipsec missing

# IP ํŒจ๋ฐ€๋ฆฌ์— ์˜์กด์ ์ธ rt ์‹
ip filter output rt nexthop 192.168.0.1
ip6 filter output rt nexthop fd00::1
inet filter output rt ip nexthop 192.168.0.1
inet filter output rt ip6 nexthop fd00::1

ipsec ์‹

ipsec {in | out} [ spnum NUM ] {reqid | spi}
ipsec {in | out} [ spnum NUM ] {ip | ip6} {saddr | daddr}

ipsec ์‹์€ ํŒจํ‚ท์— ์—ฐ๊ณ„๋œ ipsec ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

์‹์—์„œ ์ž…๋ ฅ ๋˜๋Š” ์ถœ๋ ฅ ๋ฐฉํ–ฅ ์ •์ฑ…์„ ๊ฒ€์‚ฌํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ in ๋˜๋Š” out ํ‚ค์›Œ๋“œ๋ฅผ ์จ์„œ ๋ฐฉํ–ฅ์„ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค. in ํ‚ค์›Œ๋“œ๋Š” prerouting, input, forward ํ›…์—์„œ ์“ธ ์ˆ˜ ์žˆ๋‹ค. out ํ‚ค์›Œ๋“œ๋Š” forward, output, postrouting ํ›…์— ํ•ด๋‹นํ•œ๋‹ค. ์„ ํƒ์ ์ธ spnum ํ‚ค์›Œ๋“œ๋ฅผ ์จ์„œ ์ฒด์ธ ๋‚ด์˜ ํŠน์ • ์ƒํƒœ์— ๋งž์ถฐ ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ธฐ๋ณธ์€ 0์ด๋‹ค.

ํ‘œ 34: ipsec ์‹ ํƒ€์ž…

ํ‚ค์›Œ๋“œ ์„ค๋ช… ํƒ€์ž…
reqid ์š”์ฒญ ID integer (32๋น„ํŠธ)
spi ๋ณด์•ˆ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ƒ‰์ธ integer (32๋น„ํŠธ)
saddr ํ„ฐ๋„์˜ ์ถœ๋ฐœ ์ฃผ์†Œ ipv4_addr/ipv6_addr
daddr ํ„ฐ๋„์˜ ๋ชฉ์  ์ฃผ์†Œ ipv4_addr/ipv6_addr

numgen ์‹

numgen {inc | random} mod NUM [ offset NUM ]

์ˆ˜ ์ƒ์„ฑ๊ธฐ๋ฅผ ๋งŒ๋“ ๋‹ค. inc ๋ฐ random ํ‚ค์›Œ๋“œ๊ฐ€ ๋™์ž‘ ๋ฐฉ์‹์„ ๊ฒฐ์ •ํ•œ๋‹ค. inc ๋ฐฉ์‹์—์„œ๋Š” ๋งˆ์ง€๋ง‰ ๋ฐ˜ํ™˜ ๊ฐ’์„ ์ฆ๊ฐ€์‹œํ‚ฌ ๋ฟ์ด๋‹ค. random ๋ฐฉ์‹์—์„  ์ƒˆ ๋‚œ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. mod ํ‚ค์›Œ๋“œ ๋’ค์˜ ๊ฐ’์€ ๋ฐ˜ํ™˜๋˜๋Š” ์ˆ˜๊ฐ€ ๋„๋‹ฌํ•  ์ˆ˜ ์—†๋Š” ์ƒํ•œ์„ (๋ชจ๋“ˆ๋กœ ์—ฐ์‚ฐ) ์ง€์ •ํ•œ๋‹ค. ์„ ํƒ์ ์ธ offset๋ฅผ ํ†ตํ•ด ๋ฐ˜ํ™˜ ๊ฐ’์„ ๊ณ ์ •๋œ ๊ฐ„๊ฒฉ๋งŒํผ ์ฆ๊ฐ€์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

numgen์˜ ์ผ๋ฐ˜์ ์ธ ์šฉ๋„๋Š” ๋ถ€ํ•˜ ๋ถ„์‚ฐ์ด๋‹ค.

numgen ์‹ ์‚ฌ์šฉํ•˜๊ธฐ
# 192.168.10.100๊ณผ 192.168.20.200 ์ค‘ ํ•˜๋‚˜๋กœ ๋ผ์šด๋“œ ๋กœ๋นˆ:
add rule nat prerouting dnat to numgen inc mod 2 map \
        { 0 : 192.168.10.100, 1 : 192.168.20.200 }

# ๊ตฌ๊ฐ„์„ ์ด์šฉํ•ด ๋ถˆ๊ท ์ผํ•˜๊ฒŒ ํ™•๋ฅ  ๊ธฐ๋ฐ˜ ๋ถ„์‚ฐ:
add rule nat prerouting dnat to numgen random mod 10 map \
        { 0-2 : 192.168.10.100, 3-9 : 192.168.20.200 }

ํŽ˜์ด๋กœ๋“œ ์‹

ํŽ˜์ด๋กœ๋“œ ์‹์€ ํŒจํ‚ท ํŽ˜์ด์ฝ”๋“œ์—์„œ ์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

์ด๋”๋„ท ํ—ค๋” ์‹

ether {daddr | saddr | type}

ํ‘œ 35: ์ด๋”๋„ท ํ—ค๋” ์‹ ํƒ€์ž…

ํ‚ค์›Œ๋“œ ์„ค๋ช… ํƒ€์ž…
daddr ๋ชฉ์  MAC ์ฃผ์†Œ ether_addr
saddr ์ถœ๋ฐœ MAC ์ฃผ์†Œ ether_addr
type EtherType ether_type

VLAN ํ—ค๋” ์‹

vlan {id | cfi | pcp | type}

ํ‘œ 36: VLAN ํ—ค๋” ์‹

ํ‚ค์›Œ๋“œ ์„ค๋ช… ํƒ€์ž…
id VLAN ID (VID) integer (12๋น„ํŠธ)
cfi Canonical Format Indicator integer (1๋น„ํŠธ)
pcp Priority Code Point integer (3๋น„ํŠธ)
type EtherType ether_type

ARP ํ—ค๋” ์‹

arp {htype | ptype | hlen | plen | operation | saddr { ip | ether } | daddr { ip | ether }}

ํ‘œ 37: ARP ํ—ค๋” ์‹

ํ‚ค์›Œ๋“œ ์„ค๋ช… ํƒ€์ž…
htype ARP ํ•˜๋“œ์›จ์–ด ํƒ€์ž… integer (16๋น„ํŠธ)
ptype EtherType ether_type
hlen ํ•˜๋“œ์›จ์–ด ์ฃผ์†Œ ๊ธธ์ด integer (8๋น„ํŠธ)
plen ํ”„๋กœํ† ์ฝœ ์ฃผ์†Œ ๊ธธ์ด integer (8๋น„ํŠธ)
operation ๋™์ž‘ arp_op
saddr ether ์ด๋”๋„ท ์†ก์‹ ์ž ์ฃผ์†Œ ether_addr
daddr ether ์ด๋”๋„ท ๋Œ€์ƒ ์ฃผ์†Œ ether_addr
saddr ip IPv4 ์†ก์‹ ์ž ์ฃผ์†Œ ipv4_addr
daddr ip IPv4 ๋Œ€์ƒ ์ฃผ์†Œ ipv4_addr

IPv4 ํ—ค๋” ์‹

ip {version | hdrlength | dscp | ecn | length | id | frag-off | ttl | protocol | checksum | saddr | daddr }

ํ‘œ 38: IPv4 ํ—ค๋” ์‹

ํ‚ค์›Œ๋“œ ์„ค๋ช… ํƒ€์ž…
version IP ํ—ค๋” ๋ฒ„์ „ (4) integer (4๋น„ํŠธ)
hdrlength ์˜ต์…˜ ํฌํ•จ IP ํ—ค๋” ๊ธธ์ด integer (4๋น„ํŠธ) FIXME ๋‹จ์œ„
dscp Differentiated Services Code Point dscp
ecn Explicit Congestion Notification ecn
length ํŒจํ‚ท ์ด ๊ธธ์ด integer (16๋น„ํŠธ)
id IP ID integer (16๋น„ํŠธ)
frag-off ๋‹จํŽธ ์˜คํ”„์…‹ integer (16๋น„ํŠธ)
ttl Time to live integer (8๋น„ํŠธ)
protocol ์ƒ์œ„ ๊ณ„์ธต ํ”„๋กœํ† ์ฝœ inet_proto
checksum IP ํ—ค๋” ์ฒดํฌ์„ฌ integer (16๋น„ํŠธ)
saddr ์ถœ๋ฐœ ์ฃผ์†Œ ipv4_addr
daddr ๋ชฉ์  ์ฃผ์†Œ ipv4_addr

ICMP ํ—ค๋” ์‹

icmp {type | code | checksum | id | sequence | gateway | mtu}

ํ‘œ 39: ICMP ํ—ค๋” ์‹

ํ‚ค์›Œ๋“œ ์„ค๋ช… ํƒ€์ž…
type ICMP type ํ•„๋“œ icmp_type
code ICMP code ํ•„๋“œ integer (8๋น„ํŠธ)
checksum ICMP checksum ํ•„๋“œ integer (16๋น„ํŠธ)
id echo request/response์˜ ID integer (16๋น„ํŠธ)
sequence echo request/response์˜ ์ผ๋ จ ๋ฒˆํ˜ธ integer (16๋น„ํŠธ)
gateway redirect์˜ ๊ฒŒ์ดํŠธ์›จ์ด integer (32๋น„ํŠธ)
mtu ๊ฒฝ๋กœ MTU ํƒ์ƒ‰์˜ MTU integer (16๋น„ํŠธ)

IGMP ํ—ค๋” ์‹

igmp {type | mrt | checksum | group}

์ด ์‹์€ IGMP ํ—ค๋” ํ•„๋“œ๋“ค์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค. inet, bridge, netdev ํŒจ๋ฐ€๋ฆฌ์—์„œ ์“ธ ๋•Œ๋Š” IPv4์— ๋Œ€ํ•œ ์•”๋ฌต์  ์˜์กด์„ฑ์ด ์ƒ๊ธฐ๊ฒŒ ๋œ๋‹ค. IPv6 ์ƒ์˜ IGMP ๊ฐ™์€ ํŠน์ดํ•œ ๊ฒฝ์šฐ์— ์ผ์น˜ํ•˜๊ฒŒ ํ•˜๋ ค๋ฉด ๊ทœ์น™์— ๋”ฐ๋กœ meta protocol ip6๋ฅผ ์ถ”๊ฐ€ํ•ด ์ค˜์•ผ ํ•œ๋‹ค.

ํ‘œ 40: ICMP ํ—ค๋” ์‹

ํ‚ค์›Œ๋“œ ์„ค๋ช… ํƒ€์ž…
type IGMP type ํ•„๋“œ igmp_type
mrt IGMP maximum response time ํ•„๋“œ integer (8๋น„ํŠธ)
checksum IGMP checksum ํ•„๋“œ integer (16๋น„ํŠธ)
group ๊ทธ๋ฃน ์ฃผ์†Œ integer (32๋น„ํŠธ)

IPv6 ํ—ค๋” ์‹

ip6 {version | dscp | ecn | flowlabel | length | nexthdr | hoplimit | saddr | daddr}

์ด ์‹์€ IPv6 ํ—ค๋” ํ•„๋“œ๋“ค์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ip6 nexthdr ์‚ฌ์šฉ ์‹œ ์กฐ์‹ฌํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ ๊ฐ’์€ ๋‹ค์Œ ํ—ค๋”๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ๋ฟ์ด๋‹ค. ์ฆ‰ ip6 nexthdr tcp๋Š” IPv6 ํŒจํ‚ท์— ํ™•์žฅ ํ—ค๋”๊ฐ€ ํ•˜๋‚˜๋„ ์—†๋Š” ๊ฒฝ์šฐ์—๋งŒ ๊ฑธ๋ฆฐ๋‹ค. ๋‹จํŽธํ™” ๋ผ ์žˆ๊ฑฐ๋‚˜ ๊ฐ€๋ น ๋ผ์šฐํŒ… ํ™•์žฅ ํ—ค๋”๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ํŒจํ‚ท์€ ๊ฑธ๋ฆฌ์ง€ ์•Š๊ฒŒ ๋œ๋‹ค. ์‹ค์ œ ์ „์†ก ํ—ค๋”๋ฅผ ํ™•์ธํ•˜๊ณ  ์‹ถ๊ณ  ํ™•์žฅ ํ—ค๋”๋Š” ๋ฌด์‹œํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด meta l4proto๋ฅผ ์จ ๋‹ฌ๋ผ.

ํ‘œ 41: IPv6 ํ—ค๋” ์‹

ํ‚ค์›Œ๋“œ ์„ค๋ช… ํƒ€์ž…
version IP ํ—ค๋” ๋ฒ„์ „ (6) integer (4๋น„ํŠธ)
dscp Differentiated Services Code Point dscp
ecn Explicit Congestion Notification ecn
flowlabel Flow label integer (20๋น„ํŠธ)
length ํŽ˜์ด๋กœ๋“œ ๊ธธ์ด integer (16๋น„ํŠธ)
nexthdr nexthdr ํ”„๋กœํ† ์ฝœ inet_proto
hoplimit Hop limit integer (8๋น„ํŠธ)
saddr ์ถœ๋ฐœ ์ฃผ์†Œ ipv6_addr
daddr ๋ชฉ์  ์ฃผ์†Œ ipv6_addr
ip6 ํ—ค๋” ์‹ ์‚ฌ์šฉํ•˜๊ธฐ
# ์ฒซ ๋ฒˆ์งธ ํ™•์žฅ ํ—ค๋”๊ฐ€ ๋‹จํŽธ์„ ๋‚˜ํƒ€๋‚ด๋ฉด ์ผ์น˜
ip6 nexthdr ipv6-frag

ICMPv6 ํ—ค๋” ์‹

icmpv6 {type | code | checksum | parameter-problem | packet-too-big | id | sequence | max-delay}

์ด ์‹์€ ICMPv6 ํ—ค๋” ํ•„๋“œ๋“ค์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค. inet, bridge, netdev ํŒจ๋ฐ€๋ฆฌ์—์„œ ์“ธ ๋•Œ๋Š” IPv6์— ๋Œ€ํ•œ ์•”๋ฌต์  ์˜์กด์„ฑ์ด ์ƒ๊ธฐ๊ฒŒ ๋œ๋‹ค. IPv4 ์ƒ์˜ ICMPv6 ๊ฐ™์€ ํŠน์ดํ•œ ๊ฒฝ์šฐ์— ์ผ์น˜ํ•˜๊ฒŒ ํ•˜๋ ค๋ฉด ๊ทœ์น™์— ๋”ฐ๋กœ meta protocol ip๋ฅผ ์ถ”๊ฐ€ํ•ด ์ค˜์•ผ ํ•œ๋‹ค.

ํ‘œ 42: ICMPv6 ํ—ค๋” ์‹

ํ‚ค์›Œ๋“œ ์„ค๋ช… ํƒ€์ž…
type ICMPv6 type ํ•„๋“œ icmpv6_type
code ICMPv6 code ํ•„๋“œ integer (8๋น„ํŠธ)
checksum ICMPv6 checksum ํ•„๋“œ integer (16๋น„ํŠธ)
parameter-problem ๋ฌธ์ œ ํฌ์ธํ„ฐ integer (32๋น„ํŠธ)
packet-too-big ์ดˆ๊ณผํ•œ MTU integer (32๋น„ํŠธ)
id echo request/response์˜ ID integer (16๋น„ํŠธ)
sequence echo request/response์˜ ์ผ๋ จ ๋ฒˆํ˜ธ integer (16๋น„ํŠธ)
max-delay MLD ์งˆ์˜ ์‘๋‹ต ์ตœ๋Œ€ ์ง€์—ฐ integer (16๋น„ํŠธ)

TCP ํ—ค๋” ์‹

tcp {sport | dport | sequence | ackseq | doff | reserved | flags | window | checksum | urgptr}

ํ‘œ 43: TCP ํ—ค๋” ์‹

ํ‚ค์›Œ๋“œ ์„ค๋ช… ํƒ€์ž…
sport ์ถœ๋ฐœ ํฌํŠธ inet_service
dport ๋ชฉ์  ํฌํŠธ inet_service
sequence ์ผ๋ จ ๋ฒˆํ˜ธ integer (32๋น„ํŠธ)
ackseq ํ™•์ธ ๋ฒˆํ˜ธ integer (32๋น„ํŠธ)
doff ๋ฐ์ดํ„ฐ ์˜คํ”„์…‹ integer (4๋น„ํŠธ) FIXME ๋‹จ์œ„
reserved ์˜ˆ๋น„ ์˜์—ญ integer (4๋น„ํŠธ)
flags TCP ํ”Œ๋ž˜๊ทธ tcp_flag
window ์œˆ๋„ integer (16๋น„ํŠธ)
checksum ์ฒดํฌ์„ฌ integer (16๋น„ํŠธ)
urgptr ๊ธด๊ธ‰ ํฌ์ธํ„ฐ integer (16๋น„ํŠธ)

UDP ํ—ค๋” ์‹

udp {sport | dport | length | checksum}

ํ‘œ 44: UDP ํ—ค๋” ์‹

ํ‚ค์›Œ๋“œ ์„ค๋ช… ํƒ€์ž…
sport ์ถœ๋ฐœ ํฌํŠธ inet_service
dport ๋ชฉ์  ํฌํŠธ inet_service
length ํŒจํ‚ท ์ด ๊ธธ์ด integer (16๋น„ํŠธ)
checksum ์ฒดํฌ์„ฌ integer (16๋น„ํŠธ)

UDP-Lite ํ—ค๋” ์‹

udplite {sport | dport | checksum}

ํ‘œ 45: UDP-Lite ํ—ค๋” ์‹

ํ‚ค์›Œ๋“œ ์„ค๋ช… ํƒ€์ž…
sport ์ถœ๋ฐœ ํฌํŠธ inet_service
dport ๋ชฉ์  ํฌํŠธ inet_service
checksum ์ฒดํฌ์„ฌ integer (16๋น„ํŠธ)

SCTP ํ—ค๋” ์‹

sctp {sport | dport | vtag | checksum}

ํ‘œ 46: SCTP ํ—ค๋” ์‹

ํ‚ค์›Œ๋“œ ์„ค๋ช… ํƒ€์ž…
sport ์ถœ๋ฐœ ํฌํŠธ inet_service
dport ๋ชฉ์  ํฌํŠธ inet_service
vtag ๊ฒ€์ฆ ํƒœ๊ทธ integer (32๋น„ํŠธ)
checksum ์ฒดํฌ์„ฌ integer (32๋น„ํŠธ)

DCCP ํ—ค๋” ์‹

dccp {sport | dport}

ํ‘œ 47: DCCP ํ—ค๋” ์‹

ํ‚ค์›Œ๋“œ ์„ค๋ช… ํƒ€์ž…
sport ์ถœ๋ฐœ ํฌํŠธ inet_service
dport ๋ชฉ์  ํฌํŠธ inet_service

์ธ์ฆ ํ—ค๋” ์‹

ah {nexthdr | hdrlength | reserved | spi | sequence}

ํ‘œ 48: AH ํ—ค๋” ์‹

ํ‚ค์›Œ๋“œ ์„ค๋ช… ํƒ€์ž…
nexthdr ๋‹ค์Œ ํ—ค๋” ํ”„๋กœํ† ์ฝœ inet_proto
hdrlength AH ํ—ค๋” ๊ธธ์ด integer (8๋น„ํŠธ)
reserved ์˜ˆ๋น„ ์˜์—ญ integer (16๋น„ํŠธ)
spi ๋ณด์•ˆ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ƒ‰์ธ integer (32๋น„ํŠธ)
sequence ์ผ๋ จ ๋ฒˆํ˜ธ integer (32๋น„ํŠธ)

๋ณด์•ˆ ํŽ˜์ด๋กœ๋“œ ์บก์Аํ™” ํ—ค๋” ์‹

esp {spi | sequence}

ํ‘œ 49: ESP ํ—ค๋” ์‹

ํ‚ค์›Œ๋“œ ์„ค๋ช… ํƒ€์ž…
spi ๋ณด์•ˆ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ƒ‰์ธ integer (32๋น„ํŠธ)
sequence ์ผ๋ จ ๋ฒˆํ˜ธ integer (32๋น„ํŠธ)

IPCOMP ํ—ค๋” ์‹

comp {nexthdr | flags | cpi}

ํ‘œ 50: IPComp ํ—ค๋” ์‹

ํ‚ค์›Œ๋“œ ์„ค๋ช… ํƒ€์ž…
nexthdr ๋‹ค์Œ ํ—ค๋” ํ”„๋กœํ† ์ฝœ inet_proto
flags ํ”Œ๋ž˜๊ทธ bitmask
cpi ์••์ถ• ๋งค๊ฐœ๋ณ€์ˆ˜ ์ƒ‰์ธ integer (16๋น„ํŠธ)

๋น„๊ฐ€๊ณต ํŽ˜์ด๋กœ๋“œ ์‹

@base,offset,length

๋น„๊ฐ€๊ณต ํŽ˜์ด๋กœ๋“œ ์‹์€ offset ๋ฒˆ์งธ ๋น„ํŠธ๋ถ€ํ„ฐ length ๊ฐœ ๋น„ํŠธ๋ฅผ ์ฝ์–ด ์˜จ๋‹ค. 0๋ฒˆ์งธ ๋น„ํŠธ๋Š” ์ œ์ผ ์ฒซ ๋น„ํŠธ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. C ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ๋Š” ์ตœ์ƒ์œ„ ๋น„ํŠธ, ์ฆ‰ ์˜ฅํ…Ÿ์ด๋ผ๋ฉด 0x80์— ํ•ด๋‹นํ•œ๋‹ค. ์•„์ง ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ํ…œํ”Œ๋ฆฟ ์‹์ด ์—†๋Š” ํ—ค๋”์— ๋งž์ถฐ ๋ณด๋Š” ๋ฐ ์œ ์šฉํ•˜๋‹ค. ์ฐธ๊ณ ๋กœ nft์—์„œ ๋น„๊ฐ€๊ณต ํŽ˜์ด๋กœ๋“œ ์‹์— ์ž๋™์œผ๋กœ ์˜์กด ์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ•ด ์ฃผ์ง€ ์•Š๋Š”๋‹ค. ๊ฐ€๋ น ํ”„๋กœํ† ์ฝœ ๋ฒˆํ˜ธ 5์ธ ์ „์†ก ํ—ค๋”์˜ ํ”„๋กœํ† ์ฝœ ํ•„๋“œ์— ๋งž์ถฐ ๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด ๊ทธ ๋น„๊ฐ€๊ณต ์‹ ์•ž์— meta l4proto 5์ฒ˜๋Ÿผ ์จ์„œ ๋‹ค๋ฅธ ์ „์†ก ํ—ค๋”์˜ ํŒจํ‚ท๋“ค์„ ์ง์ ‘ ์ œ์™ธํ•ด ์ค˜์•ผ ํ•œ๋‹ค.

ํ‘œ 51: ์ง€์›ํ•˜๋Š” ํŽ˜์ด๋กœ๋“œ ํ”„๋กœํ† ์ฝœ base

base ์„ค๋ช…
ll ๋งํฌ ๊ณ„์ธต. ์˜ˆ๋ฅผ ๋“ค์–ด ์ด๋”๋„ท ํ—ค๋”
nh ๋„คํŠธ์›Œํฌ ํ—ค๋”. ์˜ˆ๋ฅผ ๋“ค์–ด IPv4๋‚˜ IPv6
th ์ „์†ก ํ—ค๋”. ์˜ˆ๋ฅผ ๋“ค์–ด TCP
UDP์™€ TCP ๋ชจ๋‘์˜ ๋ชฉ์  ํฌํŠธ ํ™•์ธํ•˜๊ธฐ
inet filter input meta l4proto {tcp, udp} @th,16,16 { 53, 80 }

์œ„๋ฅผ ๋‹ค์Œ์ฒ˜๋Ÿผ ์“ธ ์ˆ˜๋„ ์žˆ๋‹ค.

inet filter input meta l4proto {tcp,udp} th dport { 53, 80 }

๋” ํŽธ๋ฆฌํ•˜๊ธด ํ•˜์ง€๋งŒ ๋น„๊ฐ€๊ณต ์‹ ํ‘œ๊ธฐ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์–ด๋–ค ์˜์กด ์กฐ๊ฑด๋„ ๋งŒ๋“ค๊ฑฐ๋‚˜ ํ™•์ธํ•˜์ง€ ์•Š๋Š”๋‹ค. ํฌํŠธ ๊ฐœ๋…์ด ์žˆ๋Š” ํ—ค๋” ์ข…๋ฅ˜๋“ค๋กœ๋งŒ ๊ฒ€์‚ฌ๋ฅผ ํ•œ์ •ํ•˜๋Š” ๊ฑด ์‚ฌ์šฉ์ž์˜ ์ฑ…์ž„์ด๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•ด ์ฃผ์ง€ ์•Š์œผ๋ฉด ๊ฐ€๋ น ESP ํŒจํ‚ท์˜ SPI ํ•„๋“œ๋ฅผ ํฌํŠธ๋กœ ์ž˜๋ชป ํ•ด์„ํ•ด์„œ ์‹๊ณผ ๋ฌด๊ด€ํ•œ ํŒจํ‚ท์ด ์ž˜๋ชป ๊ฑธ๋ฆฌ๊ฒŒ ๋œ๋‹ค.

ARP ํŒจํ‚ท ๋ชฉ์  ํ”„๋กœํ† ์ฝœ ์ฃผ์†Œ๊ฐ€ ์ง€์ • ์ฃผ์†Œ์™€ ์ผ์น˜ํ•˜๋ฉด ๋Œ€์ƒ ํ•˜๋“œ์›จ์–ด ์ฃผ์†Œ ๋‹ค์‹œ ์“ฐ๊ธฐ
input meta iifname enp2s0 arp ptype 0x0800 arp htype 1 arp hlen 6 arp plen 4 @nh,192,32 0xc0a88f10 @nh,144,48 set 0x112233445566 accept

ํ™•์žฅ ํ—ค๋” ์‹

ํ™•์žฅ ํ—ค๋” ์‹์€ IPv6 ํ™•์žฅ ํ—ค๋”, TCP ์˜ต์…˜, IPv4 ์˜ต์…˜ ๊ฐ™์€ ๊ฐ€๋ณ€ ํฌ๊ธฐ ํ”„๋กœํ† ์ฝœ ํ—ค๋”์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

nftables์—์„œ๋Š” ํ˜„์žฌ IPv6 ํ™•์žฅ ํ—ค๋”, TCP ์˜ต์…˜, IPv4 ์˜ต์…˜ ๊ฒ€์‚ฌ(์ฐพ๊ธฐ)๋ฅผ ์ง€์›ํ•œ๋‹ค.

hbh {nexthdr | hdrlength}
frag {nexthdr | frag-off | more-fragments | id}
rt {nexthdr | hdrlength | type | seg-left}
dst {nexthdr | hdrlength}
mh {nexthdr | hdrlength | checksum | type}
srh {flags | tag | sid | seg-left}
tcp option {eol | noop | maxseg | window | sack-permitted | sack | sack0 | sack1 | sack2 | sack3 | timestamp} tcp_option_field
ip option {lsrr | ra | rr | ssrr} ip_option_field

๋‹ค์Œ ๋ฌธ๋ฒ•์€ ์‹ ์˜ค๋ฅธํŽธ์ด ํ—ค๋” ์กด์žฌ ์—ฌ๋ถ€๋งŒ ํ™•์ธํ•˜๋Š” ๋ถˆ๋ฆฌ์–ธ ํƒ€์ž…์ธ ๊ด€๊ณ„ ์‹์—์„œ๋งŒ ์œ ํšจํ•˜๋‹ค.

exthdr {hbh | frag | rt | dst | mh}
tcp option {eol | noop | maxseg | window | sack-permitted | sack | sack0 | sack1 | sack2 | sack3 | timestamp}
ip option {lsrr | ra | rr | ssrr}

ํ‘œ 52: IPv6 ํ™•์žฅ ํ—ค๋”

ํ‚ค์›Œ๋“œ ์„ค๋ช…
hbh Hop by Hop
rt Routing Header
frag Fragmentation Header
dst dst ์˜ต์…˜
mh Mobility Header
srh Segment Routing Header

ํ‘œ 53: TCP ์˜ต์…˜

ํ‚ค์›Œ๋“œ ์„ค๋ช… TCP ์˜ต์…˜ ํ•„๋“œ
eol ์˜ต์…˜ ๋ชฉ๋ก ๋ kind
noop 1 ๋ฐ”์ดํŠธ TCP no-op ์˜ต์…˜ kind
maxseg TCP ์„ธ๊ทธ๋จผํŠธ ์ตœ๋Œ€ ํฌ๊ธฐ kind, length, size
window TCP ์œˆ๋„ ์Šค์ผ€์ผ๋ง kind, length, count
sack-permitted TCP SACK ํ—ˆ์šฉ kind, length
sack TCP ์„ ํƒ์  ํ™•์ธ (0๋ฒˆ ๋ธ”๋ก ๋ณ„์นญ) kind, length, left, right
sack0 TCP ์„ ํƒ์  ํ™•์ธ (0๋ฒˆ ๋ธ”๋ก) kind, length, left, right
sack1 TCP ์„ ํƒ์  ํ™•์ธ (1๋ฒˆ ๋ธ”๋ก) kind, length, left, right
sack2 TCP ์„ ํƒ์  ํ™•์ธ (2๋ฒˆ ๋ธ”๋ก) kind, length, left, right
sack3 TCP ์„ ํƒ์  ํ™•์ธ (3๋ฒˆ ๋ธ”๋ก) kind, length, left, right
timestamp TCP ํƒ€์ž„์Šคํƒฌํ”„ kind, elngth, tsval, tsecr

ํ‘œ 54: IP ์˜ต์…˜

ํ‚ค์›Œ๋“œ ์„ค๋ช… IP ์˜ต์…˜ ํ•„๋“œ
lsrr Loose Source Route type, length, ptr, addr
ra Router Alert type, length, value
rr Record Route type, length, ptr, addr
ssrr Strict Source Route type, length, ptr, addr
TCP ์˜ต์…˜ ์ฐพ๊ธฐ
filter input tcp option sack-permitted kind 1 counter
IPv6 exthdr ํ™•์ธํ•˜๊ธฐ
ip6 filter input frag more-fragments 1 counter
IP ์˜ต์…˜ ์ฐพ๊ธฐ
filter input ip option lsrr exists counter

conntrack ์‹

conntrack ์‹์€ ํŒจํ‚ท๊ณผ ์—ฐ๊ณ„๋œ ์—ฐ๊ฒฐ ์ถ”์  ํ•ญ๋ชฉ์˜ ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

์„ธ ๊ฐ€์ง€ conntrack ์‹์ด ์žˆ๋‹ค. ์–ด๋–ค conntrack ์‹์—์„  conntrack ํ‚ค ์•ž์— ํ๋ฆ„ ๋ฐฉํ–ฅ์ด ํ•„์š”ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ์‹์€ ๋ฐฉํ–ฅ๊ณผ ๋ฌด๊ด€ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ”๋กœ ์“ธ ์ˆ˜๋„ ์žˆ๋‹ค. packets, bytes, avgpkt ํ‚ค์›Œ๋“œ๋Š” ๋ฐฉํ–ฅ๊ณผ ํ•จ๊ป˜ ์“ธ ์ˆ˜๋„ ์žˆ๊ณ  ์—†์ด ์“ธ ์ˆ˜๋„ ์žˆ๋‹ค. ๋ฐฉํ–ฅ์„ ์ƒ๋žตํ•˜๋ฉด original ๋ฐฉํ–ฅ๊ณผ reply ๋ฐฉํ–ฅ์˜ ํ•ฉ์„ ๋‚ด๋†“๋Š”๋‹ค. zone๋„ ๋งˆ์ฐฌ๊ฐ€์ง„๋ฐ, ๋ฐฉํ–ฅ์„ ์ฃผ๋ฉด ๊ทธ ์กด ID๊ฐ€ ํ•ด๋‹น ๋ฐฉํ–ฅ์— ๊ฒฐ์†๋ผ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ์กด์ด ์ผ์น˜ํ•œ๋‹ค.

ct {state | direction | status | mark | expiration | helper | label}
ct [original | reply] {l3proto | protocol | bytes | packets | avgpkt | zone}
ct {original | reply} {proto-src | proto-dst}
ct {original | reply} {ip | ip6} {saddr | daddr}

ํ‘œ 55: conntrack ์‹

ํ‚ค์›Œ๋“œ ์„ค๋ช… ํƒ€์ž…
state ์—ฐ๊ฒฐ์˜ ์ƒํƒœ ct_state
direction ์—ฐ๊ฒฐ ๊ธฐ์ค€ ํŒจํ‚ท ๋ฐฉํ–ฅ ct_dir
status ์—ฐ๊ฒฐ์˜ ์ƒํ™ฉ ct_status
mark ์—ฐ๊ฒฐ ๋งˆํฌ mark
expiration ์—ฐ๊ฒฐ ๋งŒ๋ฃŒ ์‹œ๊ฐ„ time
helper ์—ฐ๊ฒฐ์— ์—ฐ๊ณ„๋œ ํ—ฌํผ string
label ์—ฐ๊ฒฐ ์ถ”์  ๋ ˆ์ด๋ธ” ๋น„ํŠธ ๋˜๋Š” nftables include ๊ฒฝ๋กœ์˜ connlabel.conf์— ์ •์˜๋œ ์‹ฌ๋ณผ ์ด๋ฆ„ ct_label
l3proto ์—ฐ๊ฒฐ์˜ ์ œ3๊ณ„์ธต ํ”„๋กœํ† ์ฝœ nf_proto
saddr ํ•ด๋‹น ๋ฐฉํ–ฅ์˜ ์—ฐ๊ฒฐ์˜ ์ถœ๋ฐœ ์ฃผ์†Œ ipv4_addr/ipv6_addr
daddr ํ•ด๋‹น ๋ฐฉํ–ฅ์˜ ์—ฐ๊ฒฐ์˜ ๋ชฉ์  ์ฃผ์†Œ ipv4_addr/ipv6_addr
protocol ํ•ด๋‹น ๋ฐฉํ–ฅ์˜ ์—ฐ๊ฒฐ์˜ ์ œ4๊ณ„์ธต ํ”„๋กœํ† ์ฝœ inet_proto
proto-src ํ•ด๋‹น ๋ฐฉํ–ฅ์˜ ์ œ4๊ณ„์ธต ํ”„๋กœํ† ์ฝœ ์ถœ๋ฐœ ์ฃผ์†Œ integer (16๋น„ํŠธ)
proto-dst ํ•ด๋‹น ๋ฐฉํ–ฅ์˜ ์ œ4๊ณ„์ธต ํ”„๋กœํ† ์ฝœ ๋ชฉ์  ์ฃผ์†Œ integer (16๋น„ํŠธ)
packets ํ•ด๋‹น ๋ฐฉํ–ฅ ๋˜๋Š” original๊ณผ reply ๋ชจ๋‘์—์„œ ์ง€๋‚˜๊ฐ„ ํŒจํ‚ท ์ˆ˜ integer (64๋น„ํŠธ)
bytes ์ง€๋‚˜๊ฐ„ ๋ฐ”์ดํŠธ ์ˆ˜. packets ํ‚ค์›Œ๋“œ ์„ค๋ช… ์ฐธ๊ณ  integer (64๋น„ํŠธ)
avgpkt ํŒจํ‚ท๋‹น ํ‰๊ท  ๋ฐ”์ดํŠธ. packets ํ‚ค์›Œ๋“œ ์„ค๋ช… ์ฐธ๊ณ  integer (64๋น„ํŠธ)
zone conntrack ์กด integer (16๋น„ํŠธ)

์œ„์— ๋‚˜์—ด๋œ conntrack ํ•œ์ • ํƒ€์ž…๋“ค์— ๋Œ€ํ•œ ์„ค๋ช…์„ ์œ„์˜ conntrack ํƒ€์ž… ์ ˆ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์„œ๋ฒ„๋กœ ๋™์‹œ์— ํ–ฅํ•˜๋Š” ์—ฐ๊ฒฐ ์ˆ˜ ์ œํ•œํ•˜๊ธฐ
filter input tcp dport 22 meter test { ip saddr ct count over 2 } reject

๋ฌธ

ํŒ์ • ๋ฌธ

ํŽ˜์ด๋กœ๋“œ ๋ฌธ

ํ™•์žฅ ํ—ค๋” ๋ฌธ

๋กœ๊ทธ ๋ฌธ

๊ฑฐ์ ˆ ๋ฌธ

์นด์šดํ„ฐ ๋ฌธ

conntrack ๋ฌธ

meta ๋ฌธ

์ œํ•œ ๋ฌธ

NAT ๋ฌธ

TPROXY ๋ฌธ

SYNPROXY ๋ฌธ

flow ๋ฌธ

queue ๋ฌธ

dup ๋ฌธ

fwd ๋ฌธ

set ๋ฌธ

map ๋ฌธ

vmap ๋ฌธ

์ถ”๊ฐ€ ๋ช…๋ น

monitor

์˜ค๋ฅ˜ ๋ณด๊ณ 

์ข…๋ฃŒ ์ƒํƒœ

SEE ALSO

libnftables(3), libnftables-json(5), iptables(8), ip6tables(8), arptables(8), ebtables(8), ip(8), tc(8)

๊ณต์‹ ์œ„ํ‚ค: https://wiki.nftables.org

AUTHORS

Patrick McHardy์™€ Pablo Neira Ayuso๊ฐ€ Netfilter ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ์—ฌ๋Ÿฌ ๋‹ค๋ฅธ ๊ณตํ—Œ์ž๋“ค๊ณผ ํ•จ๊ป˜ nftables๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค.

COPYRIGHT

Copyright ยฉ 2008-2014 Patrick McHardy [email protected] Copyright ยฉ 2013-2018 Pablo Neira Ayuso [email protected]

nftables is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation.

This documentation is licensed under the terms of the Creative Commons Attribution-ShareAlike 4.0 license, CC BY-SA 4.0 http://creativecommons.org/licenses/by-sa/4.0/.


12/06/2019 a8347553

โš ๏ธ **GitHub.com Fallback** โš ๏ธ