nftables的简单使用

前言

平时在工作中,接触到的还基本是 iptables

nftablesiptables的继任者。自 Linux 内核 3.13 开始,nftables即得到了支持,现在已经挺成熟的了。

所以,在日常工作中,当遇到需要 iptables的时候,或许应该优先使用 nftables

关于 nftables的使用文档可参考:nftables wiki

我翻看了下文档,可能仅仅知道点简单的操作。工作用到了时候再说呗,用不到就先放放。

简单使用

名称概念

Reluset:规则集,是一个笼统的概念,表示内核中设置的所有表,链。

Table:表,chains、sets、stateful objects 的容器。它通过address family 和 名称来标识。address family 必须是 ip, ip6, inet, arp, bridge, netdev 之一。

Chains:链,rules 的容器。一个链属于一个表。

  • 链的种类有filter、nat、route。
  • 链挂载的 hook 点有prerouting, input, output, postrouting。一个 hook 点可能挂多个链。
  • 每个链都有个优先级。优先级参数接受一个有符号整数值或标准优先级名称,用于指定具有相同钩子值的链的遍历顺序。排序是升序的,即较低的优先级值优先于较高的优先级值。
  • Standard priority names: raw 表示 -300;mangle 表示 -150;filter 表示 0;

Rules:规则,添加到给定表的给定链中。

使用示例

# 添加一个新表,协议族是inet(同时支持ip和ip6),表名是filter
nft add table inet filter

# 表中添加一个新的链
## inet协议簇中,添加到filter表中;链名为input;链类型为filter;hook点是input;优先级为0;默认策略是接收流量
nft add chain inet filter input \{ type filter hook input priority 0 \; policy accept \; \}

# inet协议簇中,filter表中,input链中,添加放行指定tcp port的规则
nft add rule inet filter input tcp dport \{ telnet, ssh, http, https \} accept

一个数据包进来,它将经历下面流程:

  1. 数据包从网口进来,路由决定是本地的包,进入 input hook 点。
  2. input hook 点上可能挂载了多个链(目前上面仅仅挂了一个链)。每个链都有一个数字表示的优先级。数字越小,这个链的优先级越高。
  3. 按照链优先级的高低,判断优先使用的链。对包应用链中的规则,命中则执行对应的动作。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇