nftables基本使用规则【新手教程】

nftablesLearning

Knowledge——nftables 的基础使用

参考资料:
https://www.linode.com/docs/guides/how-to-use-nftables/
https://wiki.nftables.org/wiki-nftables/index.php/Configuring_chains

启用并启动nftables服务

sudo systemctl enable nftables
sudo systemctl start nftables

将iptables规则翻译后导入nftables (需要安装 iptables-nftables-compat 工具

sudo apt install iptables-nftables-compat
#导出iptables规则
sudo iptables-save > iptables.dump
#翻译成nftables可以解析的规则
sudo iptables-restore-translate -f iptables.dump > ruleset.nft
#导入至nftables中
sudo nft -f ruleset.nft
#获取表的列表验证是否导入
sudo nft list tables

关于nftables中表的使用

  • 简介:表是 nftables 层次结构的最高级别。 给定表对应于单个地址系列,并包含过滤该地址系列中数据包的链

  • 注意点:nftables不附带预定义的表

    #创建表example_table
    sudo nft add table inet example_table
    #获取表的列表验证是否导入
    sudo nft list tables
    #删除表
    sudo nft delete table inet example_table
    #“刷新”表。这将删除附加到表的每个链中的每个规则。对于较旧的 Linux 内核(3.18 之前),必须先运行以下命令,然后才能删除表。
    sudo nft flush table inet example_table
    #每次引用表时,都应在表名之前包含表的地址系列inet,以此来标识表。
    

关于nftables中链的使用

  • 简介:链位于表下并过滤数据包。

  • 注意点:链条可以有两种。基本链充当来自网络堆栈的数据包的入口点。常规链不充当过滤器,但可以充当跳转目标。

  • 基本链创建

    • 配置规则与例子:

      nft add chain [] <table_name> <chain_name> { type hook priority ; [policy ;] [comment “text comment” ;] }

    • type:

      • filter: 过滤
      • route: 修改任何相关 IP 标头字段或数据包标记时重新路由
      • nat: 执行网络地址转换 (NAT)。只有给定流的第一个数据包命中此链;后续数据包会绕过它
    • hook:

      • ingress: 在数据包从 NIC 驱动程序传递后立即看到数据包
      • prerouting: 在做出任何路由决策之前查看所有传入数据包。数据包可以寻址到本地或远程系统。
      • input: 查看寻址到并已路由到本地系统和在那里运行的进程的传入数据包。
      • forward: 查看未发送到本地系统的传入数据包.
      • output: 查看源自本地计算机中进程的数据包。
      • postrouting: 在路由后查看所有数据包,就在它们离开本地系统之前。
    • policy

      • accept(default): 接受
      • drop: 丢弃
      #创建基本链example_chain,类型是filter过滤匹配上的数据包,挂钩匹配寻址到input即本地系统的传入数据包,优先级为0。
      #“优先级”(上文)决定了链在给定钩子上处理的顺序;优先级值较低的链首先被处理。
      sudo nft add chain inet example_table example_chain '{type filter hook input priority 0; }'
      
      #创建foo表中的基本链output,过滤本地进程生成的流量
      sudo nft 'add chain ip foo output { type filter hook output priority 0 ; }'
      
      #从 nftables 0.5 开始,可以像在 iptables 中一样为基本链指定默认策略:接收or丢弃
      sudo nft 'add chain ip foo output { type filter hook output priority 0 ; policy accept; }'
      
      #在output入口挂钩上添加链条时,必须指定链条将连接的设备:
      nft 'add chain netdev foo dev0filter { type filter hook ingress device eth0 priority 0 ; }'
      
  • 常规链创建

    • 注意点:添加常规链时不包含钩子关键字。但是一个或多个基本链可以包含跳转或转到该链的规则之后,常规链以与调用基本链完全相同的方式处理数据包

    • 配置规则与例子:

      > # nft -i
      nft> add chain [family] <table_name> <chain_name> [{ [policy <policy> ;] [comment "text comment about this chain" ;] }]
      
  • 链的其他操作

    #删除链
    sudo nft delete chain inet example_table example_chain
    #刷新链(与表一样,可能需要先刷新链,然后才能在较旧的 Linux 内核上将其删除。
    sudo nft flush chain inet example_table example_chain
    

关于nftables中规则的使用

  • 简介:规则接收按链过滤的数据包,并根据它们是否与特定条件匹配对其执行操作。

    #创建规则,此规则从example_chain中获取数据包,允许端口22上的tcp流量数据包
    sudo nft add rule inet example_table example_chain tcp dport 22 counter accept
    #表达式1 tcp dport 22:匹配tcp中22端口号; counter accept:首先,匹配的数据包添加到规则的计数器中,保持与规则匹配的数据包的运行计数。其次,然后接受匹配的数据包
    
    #列出位于example_table中的所有链和规则
    sudo nft list table inet example_table
    #列出位于example_chain中的所有规则
    sudo nft list chain inet example_table example_chain
    
    #删除规则
    sudo nft delete rule inet example_table example_chain handle 2
    #在这里,句柄是要删除的规则的标识符。运行列表规则命令时,可以使用-a选项获取规则的句柄
    sudo -a nft list table inet example_table 
    
  • 将规则添加到链的合适位置

    • 必要性:数据包从头到尾通过链的规则,并在匹配并被处理时停止处理

    • 注意点:默认 nft add rule 是将规则添加到链的末尾

      #将规则添加到链的开头,使用命令add insert
      sudo nft add insert rule inet example_table example_chain tcp dport 22 counter accept
      
      #指定规则在链中的位置。下面将规则添加到位置 3 中的现有规则之后。
      # 要在位置 3 之前添加新规则,则替换为addinsert
      sudo nft add rule inet example_table example_chain position 3 tcp dport 22 counter accept
      
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值