nft(8) - wariua/manpages-ko GitHub Wiki
nft - ํจํท ํํฐ๋ง ๋ฐ ๋ถ๋ฅ๋ฅผ ์ํ nftables ํ๋ ์์ํฌ์ ๊ด๋ฆฌ ๋๊ตฌ
nft [ -nNscaeSupyjt ] [ -I directory ] [ -f filename | -i | cmd ...] nft -h nft -v
nft๋ ๋ฆฌ๋ ์ค ์ปค๋ nftables ํ๋ ์์ํฌ์ ํจํท ํํฐ๋ง ๋ฐ ๋ถ๋ฅ ๊ท์น์ ์ค์ ํ๊ณ ๊ด๋ฆฌํ๊ณ ์กฐ์ฌํ๋ ๋ฐ ์ฐ๋ ๋ช ๋ นํ ๋๊ตฌ๋ค. ๊ทธ ๋ฆฌ๋ ์ค ์ปค๋ ์๋ธ์์คํ ์ nf_tables๋ผ๊ณ ํ๋๋ฐ, ์ฌ๊ธฐ์ 'nf'๋ Netfilter๋ฅผ ๋ํ๋ธ๋ค.
์ต์
์์ฝ ์ ์ฒด๋ฅผ ๋ณด๋ ค๋ฉด 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 ํจํท, ๊ทธ๋ฆฌ๊ณ ๋ ์ข ๋ฅ ๋ชจ๋๋ฅผ ๋ค๋ฃฌ๋ค. ๋คํธ์ํฌ ์คํ์ ํจํท ์ฒ๋ฆฌ ๋จ๊ณ ๋ค์ฏ ๊ณณ์ ํ ์ด ์๋ค.
ํ 1: IPv4/IPv6/Inet ์ฃผ์ ํจ๋ฐ๋ฆฌ ํ
ํ | ์ค๋ช |
---|---|
prerouting | ์์คํ ์ ๋ค์ด์ค๋ ๋ชจ๋ ํจํท์ด prerouting ํ ์์ ์ฒ๋ฆฌ๋๋ค. ๋ผ์ฐํ ์ฒ๋ฆฌ ์ ์ ํธ์ถ๋๋ฉฐ ์ด๋ฅด๊ฒ ํํฐ๋ง์ ํ๊ฑฐ๋ ๋ผ์ฐํ ์ ์ํฅ์ ์ฃผ๋ ํจํท ์์ฑ์ ๋ฐ๊พธ๋ ๋ฐ ์ฐ์ธ๋ค. |
input | ๋ก์ปฌ ์์คํ ์ผ๋ก ์ ๋ฌ๋๋ ํจํท์ด input ํ ์์ ์ฒ๋ฆฌ๋๋ค. |
forward | ๋ค๋ฅธ ํธ์คํธ๋ก ์ ๋ฌ๋๋ ํจํท์ด forward ํ ์์ ์ฒ๋ฆฌ๋๋ค. |
output | ๋ก์ปฌ ํ๋ก์ธ์ค๊ฐ ๋ณด๋ด๋ ํจํท์ด output ํ ์์ ์ฒ๋ฆฌ๋๋ค. |
postrouting | ์์คํ ์ ๋ ๋๋ ๋ชจ๋ ํจํท์ด postrouting ํ ์์ ์ฒ๋ฆฌ๋๋ค. |
ARP ์ฃผ์ ํจ๋ฐ๋ฆฌ๋ ์์คํ ์ด ๋ฐ๊ณ ๋ณด๋ด๋ ARP ํจํท๋ค์ ๋ค๋ฃฌ๋ค. ํด๋ฌ์คํฐ๋ง์ ์ํด ARP ํจํท์ ์กฐ์ํ๋ ๋ฐ ํํ ์ด๋ค.
ํ 2: ARP ์ฃผ์ ํจ๋ฐ๋ฆฌ ํ
ํ | ์ค๋ช |
---|---|
input | ๋ก์ปฌ ์์คํ ์ผ๋ก ์ ๋ฌ๋๋ ํจํท์ด input ํ ์์ ์ฒ๋ฆฌ๋๋ค. |
output | ๋ก์ปฌ ์์คํ ์์ ๋ณด๋ด๋ ํจํท์ด output ํ ์์ ์ฒ๋ฆฌ๋๋ค. |
๋ธ๋ฆฌ์ง ์ฃผ์ ํจ๋ฐ๋ฆฌ๋ ๋ธ๋ฆฌ์ง ์ฅ์น๋ฅผ ํต๊ณผํ๋ ์ด๋๋ท ํจํท์ ๋ค๋ฃฌ๋ค.
์ง์ํ๋ ํ ๋ชฉ๋ก์ ์์ IPv4/IPv6/Inet ์ฃผ์ ํจ๋ฐ๋ฆฌ์ ๋์ผํ๋ค.
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
- ์ง์ ํ ๊ท์น ์ญ์ .
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
# 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 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) |
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 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) |
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 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) |
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 [packets bytes]
ํ 13: ์นด์ดํฐ ์ง์
ํค์๋ | ์ค๋ช | ํ์ |
---|---|---|
packets | ์์ ํจํท ์นด์ดํธ | ๋ถํธ ์๋ ์ ์ (64๋นํธ) |
bytes | ์์ ๋ฐ์ดํธ ์นด์ดํธ | ๋ถํธ ์๋ ์ ์ (64๋นํธ) |
quota [over | until] [used]
ํ 14: ์ฟผํฐ ์ง์
ํค์๋ | ์ค๋ช | ํ์ |
---|---|---|
quota | ์ฟผํฐ ์ ํ, ์ฟผํฐ ์ด๋ฆ์ผ๋ก ์ฌ์ฉ | ์ธ์ ๋. ๋ถํธ ์๋ ์ ์(64๋นํธ)์ ๋ฌธ์์ด: bytes, kbytes, mbytes. ๊ทธ ์ธ์ ์์ "over"์ "until"์ด ์ด. |
used | ์ฟผํฐ์ ์์ ๊ฐ | ์ธ์ ๋. ๋ถํธ ์๋ ์ ์(64๋นํธ)์ ๋ฌธ์์ด: bytes, kbytes, mbytes |
์์ ๊ฐ์ ๋ํ๋ด๋๋ฐ, ๋คํธ์ํฌ ์ฃผ์๋ ํฌํธ ๋ฒํธ ๊ฐ์ ์์์ผ ์๋ ์๊ณ ๋ฃฐ์ ์ ํ๊ฐํ๋ฉด์ ํจํท์์ ์์งํ ๋ฐ์ดํฐ์ผ ์๋ ์๋ค. ์ด์ง์, ๋ ผ๋ฆฌ์, ๊ด๊ณ์ ๋ฑ์ผ๋ก ์๋ค์ ๊ฒฐํฉํด์ (๊ฒ์ฌ๋ฅผ ์ํ) ๋ณตํฉ์ ๋ด์ง ๊ด๊ณ์์ ๋ง๋ค ์ ์๋ค. NAT๋ ํจํท ๋งํน ๊ฐ์ ํน์ ๋์์ ์ธ์๋ก ์ฐ๊ธฐ๋ ํ๋ค.
๊ฐ ์์๋ ๋ฐ์ดํฐ ํ์ ์ด ์๊ณ , ๊ทธ์ ๋ฐ๋ผ ํฌ๊ธฐ, ์ฌ๋ณผ ๊ฐ์ ํ์ฑ ๋ฐ ํํ ๋ฐฉ๋ฒ, ๋ค๋ฅธ ์๊ณผ์ ํ์ ํธํ์ฑ์ด ๊ฒฐ์ ๋๋ค.
describe expression | data type
describe
๋ช
๋ น์ ์์ ์ข
๋ฅ์ ๊ทธ ๋ฐ์ดํฐ ํ์
์ ๋ํ ์ ๋ณด๋ฅผ ๋ณด์ฌ ์ค๋ค. ๋ฐ์ดํฐ ํ์
์ ์ค ์๋ ์์ผ๋ฉฐ, ๊ทธ ๊ฒฝ์ฐ nft๋ ๊ทธ ํ์
์ ๋ํ ์ถ๊ฐ ์ ๋ณด๋ฅผ ํ์ํ๋ค.
$ 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_addr | 32๋นํธ | integer |
IPv4 ์ฃผ์ ํ์ ์ IPv4 ์ฃผ์์ ์ด๋ค. ์ ์ฐ์ 10์ง์, ์ ์ฐ์ 16์ง์, ์ ์ฐ์ 8์ง์, 10์ง์, 16์ง์, 8์ง์ ํ๊ธฐ, ๋๋ ํธ์คํธ ์ด๋ฆ์ผ๋ก ์ฃผ์๋ฅผ ๋ํ๋ธ๋ค. ํธ์คํธ ์ด๋ฆ์ ํ์ค ์์คํ ๋ฆฌ์กธ๋ฒ๋ฅผ ์ด์ฉํด ํด์ํ๋ค.
# ์ ์ฐ์ 10์ง์ ํ๊ธฐ
filter output ip daddr 127.0.0.1
# ํธ์คํธ ์ด๋ฆ
filter output ip daddr localhost
์ด๋ฆ | ํค์๋ | ํฌ๊ธฐ | ๊ธฐ๋ฐ ํ์ |
---|---|---|---|
IPv6 ์ฃผ์ | ipv6_addr | 128๋นํธ | integer |
IPv6 ์ฃผ์ ํ์ ์ IPv6 ์ฃผ์์ ์ด๋ค. ํธ์คํธ ์ด๋ฆ์ด๋ ์ฝ๋ก ์ผ๋ก ๊ตฌ๋ถ๋ 16์ง์ ํํ์๋๋ค๋ก ๋ํ๋ธ๋ค. ํฌํธ ๋ฒํธ์ ๊ตฌ๋ณํ๊ธฐ ์ํด ์ฃผ์๋ฅผ ๋๊ดํธ("[]")๋ก ๊ฐ์ ์๋ ์๋ค.
# ์ถ์ฝ๋ ๋ฃจํ๋ฐฑ ์ฃผ์
filter output ip6 daddr ::1
# []๊ฐ ์์ผ๋ฉด ํฌํธ ๋ฒํธ(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_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 |
# ํ ํจํท ์ผ์น
filter output icmp type { echo-request, echo-reply }
์ด๋ฆ | ํค์๋ | ํฌ๊ธฐ | ๊ธฐ๋ฐ ํ์ |
---|---|---|---|
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_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 ํ ํจํท ์ผ์น
filter output icmpv6 type { echo-request, echo-reply }
์ด๋ฆ | ํค์๋ | ํฌ๊ธฐ | ๊ธฐ๋ฐ ํ์ |
---|---|---|---|
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 ์ฝ๋ | icmpv6_type | 8๋นํธ | integer |
ICMPvX ์ฝ๋ ํ์ ์ ICMP์ ICMPv6์ ์ฝ๋ ํ์ ์์ ๊ฒน์น๋ ๊ฐ๋ค์ ์ถ์ถํ ๊ฒ์ด๋ฉฐ inet ํจ๋ฐ๋ฆฌ์์ ์ฐ๊ธฐ ์ํ ๊ฒ์ด๋ค.
ํ 21: ICMPvX ์ฝ๋ ์ง์ ์ ์ฌ์ฉํ ์ ์๋ ํค์๋
ํค์๋ | ๊ฐ |
---|---|
no-route | 0 |
port-unreachable | 1 |
host-unreachable | 2 |
admin-prohibited | 3 |
ํ 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 {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 ์
filter output meta oif eth0
# ๋น์ง์ meta ์
filter output oif eth0
# ํจํท์ด ipsec ์ฒ๋ฆฌ ๋์์ด์์
raw prerouting meta ipsec exists accept
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 [ttl {loose | skip}] {name | version}
osf ์์ ์๋์ ์ด์ ์ฒด์ ๊ฐ์์ ํ๋ค. ์ด ์์ SYN ๋นํธ๊ฐ ์ค์ ๋ ํจํท์์ ๊ฐ์ ธ์จ ๋ช ๊ฐ์ง ๋ฐ์ดํฐ(์๋ ํฌ๊ธฐ, MSS, ์ต์ ๋ฐ ์์, DF ๋ฑ)๋ฅผ ๋น๊ตํ๋ค.
ํ 30: ์ฌ์ฉ ๊ฐ๋ฅํ osf ์์ฑ
์ด๋ฆ | ์ค๋ช | ํ์ |
---|---|---|
ttl | ์ด์ ์ฒด์ ๋ฅผ ํ๋จํ๊ธฐ ์ํด ํจํท์ TTL ๊ฒ์ฌ๋ฅผ ํ๊ธฐ. | string |
version | ํจํท์์ OS ๋ฒ์ ๊ฒ์ฌ ํ๊ธฐ. | |
name | ๋ง์ถฐ ๋ณผ OS ์๊ทธ๋์ฒ ์ด๋ฆ. pf.os ํ์ผ์ ์ ์ฒด ์๊ทธ๋์ฒ๋ค์ด ์์. ์์์ ํ์งํ ์ ์์๋ OS ์๊ทธ๋์ฒ์ "unknown" ์ฌ์ฉ. | string |
TTL ์์ฑ์ ์ฃผ์ง ์์ผ๋ฉด IP ํค๋์ ๊ฐ๊ณผ ํ๊ฑฐํ๋ฆฐํธ TTL ๊ฐ์ด ๊ฐ์์ง ๋น๊ตํ๋ค. ์ผ๋ฐ์ ์ผ๋ก LAN์์ ์ ๋์ํ๋ค.
- loose: IP ํค๋์ TTL์ด ํ๊ฑฐํ๋ฆฐํธ ๊ฐ๋ณด๋ค ์์์ง ๊ฒ์ฌํ๋ค. ์ ์ญ ๋ผ์ฐํ ๊ฐ๋ฅ ์ฃผ์์ ์ ๋์ํ๋ค.
- skip: TTL์ ์์ ๋น๊ตํ์ง ์๋๋ค.
# TTL ๋น๊ต ์์ด "Linux" OS ๊ณ์ด ์๊ทธ๋์ฒ์ ์ผ์นํ๋ ํจํท ํ์ฉํ๊ธฐ
table inet x {
chain y {
type filter hook input priority 0; policy accept;
osf ttl skip name "Linux"
}
}
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
.
# ์ญ๊ฒฝ๋ก ์๋ ํจํท ๋ฒ๋ฆฌ๊ธฐ
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 {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 {inc | random} mod NUM [ offset NUM ]
์ ์์ฑ๊ธฐ๋ฅผ ๋ง๋ ๋ค. inc
๋ฐ random
ํค์๋๊ฐ ๋์ ๋ฐฉ์์ ๊ฒฐ์ ํ๋ค. inc
๋ฐฉ์์์๋ ๋ง์ง๋ง ๋ฐํ ๊ฐ์ ์ฆ๊ฐ์ํฌ ๋ฟ์ด๋ค. random
๋ฐฉ์์์ ์ ๋์๋ฅผ ๋ฐํํ๋ค. mod
ํค์๋ ๋ค์ ๊ฐ์ ๋ฐํ๋๋ ์๊ฐ ๋๋ฌํ ์ ์๋ ์ํ์ (๋ชจ๋๋ก ์ฐ์ฐ) ์ง์ ํ๋ค. ์ ํ์ ์ธ offset
๋ฅผ ํตํด ๋ฐํ ๊ฐ์ ๊ณ ์ ๋ ๊ฐ๊ฒฉ๋งํผ ์ฆ๊ฐ์ํฌ ์ ์๋ค.
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 {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 {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 |
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 {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 {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๋นํธ) |
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 nexthdr ipv6-frag
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 {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 {sport | dport | length | checksum}
ํ 44: UDP ํค๋ ์
ํค์๋ | ์ค๋ช | ํ์ |
---|---|---|
sport | ์ถ๋ฐ ํฌํธ | inet_service |
dport | ๋ชฉ์ ํฌํธ | inet_service |
length | ํจํท ์ด ๊ธธ์ด | integer (16๋นํธ) |
checksum | ์ฒดํฌ์ฌ | integer (16๋นํธ) |
udplite {sport | dport | checksum}
ํ 45: UDP-Lite ํค๋ ์
ํค์๋ | ์ค๋ช | ํ์ |
---|---|---|
sport | ์ถ๋ฐ ํฌํธ | inet_service |
dport | ๋ชฉ์ ํฌํธ | inet_service |
checksum | ์ฒดํฌ์ฌ | integer (16๋นํธ) |
sctp {sport | dport | vtag | checksum}
ํ 46: SCTP ํค๋ ์
ํค์๋ | ์ค๋ช | ํ์ |
---|---|---|
sport | ์ถ๋ฐ ํฌํธ | inet_service |
dport | ๋ชฉ์ ํฌํธ | inet_service |
vtag | ๊ฒ์ฆ ํ๊ทธ | integer (32๋นํธ) |
checksum | ์ฒดํฌ์ฌ | integer (32๋นํธ) |
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๋นํธ) |
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 |
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 |
filter input tcp option sack-permitted kind 1 counter
ip6 filter input frag more-fragments 1 counter
filter input ip option lsrr exists counter
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
libnftables(3)
, libnftables-json(5)
, iptables(8)
, ip6tables(8)
, arptables(8)
, ebtables(8)
, ip(8)
, tc(8)
๊ณต์ ์ํค: https://wiki.nftables.org
Patrick McHardy์ Pablo Neira Ayuso๊ฐ Netfilter ์ปค๋ฎค๋ํฐ์ ์ฌ๋ฌ ๋ค๋ฅธ ๊ณตํ์๋ค๊ณผ ํจ๊ป nftables๋ฅผ ์์ฑํ๋ค.
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