Linux 3.13 带来了很多特性。nftables也是第一次正式发布。nftables是一个致力于替换现有的{ip,ip6,arp,eb}tables框架(也就是大家熟知的iptables)的项目。然而,Linux3.13中的nftables版本还是不完整的,还缺少一些重要的特性。这些特性会在后续的Linux版本中发布。大多数场景下nftables已经可以使用,但是完整的支持(即,nftables优先级高于iptables)应该在Linux 3.15。

nftables引入了一个新的命令行工具nft。nft是iptables及其衍生指令(ip6tables,arptables)的超集。同时,nft拥有完全不同的语法。是的,如果你习惯于iptables,这是个不好的消息。但是有一个兼容层允许你使用iptables,而过滤是由内核中的nftables完成的。

到目前为止,只有非常少的文档资料。你可以找到我的nftables快速开始,其他的一些初步文档很快就会公开。

一些命令行例子

一行多个目标

加入你想用iptables记录并丢弃一个包,你必须写两条规则,一条记录,一条丢弃:

iptables -A FORWARD -p tcp --dport 22 -j LOG

iptables -A FORWARD -p tcp --dport 22 -j DROP

使用nft,你可以把两个目标合并到一起:

nft add rule filter forward tcp dport 22 log drop

方便创建集合

假如你想针对不同的端口允许包并且允许不同的icmpv6类型。使用iptables,你需要使用类似如下的规则:

ip6tables -A INPUT -p tcp -m multiport --dports 23,80,443 -j ACCEPT

ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbor-solicitation -j ACCEPT

ip6tables -A INPUT -p icmpv6 --icmpv6-type echo-request -j ACCEPT

ip6tables -A INPUT -p icmpv6 --icmpv6-type router-advertisement -j ACCEPT

ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbor-advertisement -j ACCEPT

使用nft,集合可以用在规则中任一元素:

nft add rule ip6 filter input tcp dport {telnet, http, https} accept

nft add rule ip6 filter input icmpv6 type { nd-neighbor-solicit, echo-request, nd-router-advert, nd-neighbor-advert } accept

这样更容易编写,而且对于过滤方更加高效,因为对每一种协议只需要添加一个规则。

你也可以给集合命名,以便在其他地方使用:

# nft -i # use interactive mode

nft> add set global ipv4_ad { type ipv4_address;}

nft> add element global ipv4_ad { 192.168.1.4, 192.168.1.5 }

nft> add rule ip global filter ip saddr @ipv4_ad drop

之后,当检测到一个新的破坏者时:

# nft -i

nft> add element global ipv4_ad { 192.168.3.4 }

映射

nftables的一个高级特性就是映射。可以使用不同类型的数据并映射它们。例如,我们可以映射网络端口到专用的规则集合(之前创建的存储在一个链中)。在这个例子中,链的名称为low_sec和high_sec:

# nft -i

nft> add map filter jump_map { type ifindex : verdict; }

nft> add element filter jump_map { eth0 : jump low_sec; }

nft> add element filter jump_map { eth1 : jump high_sec; }

nft> add rule filter input iif vmap @jump_map

现在,比如说你有一个新的动态端口ppp1,对它做过滤非常简单,仅仅把它加到jump_map映射中就可以了。

nft> add element filter jump_map { ppp1 : jump low_sec; }

运维和内核方面

更新速度更快

在iptables中添加一条规则,会随着规则数量增多而变得非常慢,这也就解释了为什么调用iptables的脚本需要花很久才完成。这种状况对nftables而言就不存在了。nftables使用原子的快速操作来更新规则集合。

内核更新更少

使用iptables,每一个匹配或投递都需要内核模块的支持。因此,如果你忘记一些东西或者要添加新的功能时都需要重新编译内核。nftables就不存在这种状况了。在nftables中,大部分工作是在用户态完成的,内核只知道一些基本指令(过滤是用伪状态机实现的)。例如,icmpv6 支持是通过nft工具的一个简单的补丁实现的。在iptables中这种类型的更改需要内核和iptables都升级才可以。

linux添加理由,Linux 首次引入 nftables,你可能会喜欢 nftables 的理由相关推荐

  1. linux添加cfg,Linux安装详解-配置ks.cfg实现自动安装过程

    Linux安装详解-配置ks.cfg实现自动安装过程 之前发过一篇关于通过PXE实现Linux批量无人值守自动安装的文章(可以参考),不过写的只是具体的配置和操作,对于原理部分没有说明,最近通过一段时 ...

  2. 深度linux添加xp,Linux和Windos XP下向路由表添加路由

    Linux和Windos XP下向路由表添加路由 查看Linux服务器的路由表:netstat -r 和 route -e 添加默认的路由:route add default gw X.X.X.X(下 ...

  3. linux添加nginx,linux下安装Nginx1.16.0的教程详解

    因为最近在倒腾linux,想安装新版本的nginx,找了一圈教程没有找到对应的教程,在稍微倒腾了一会之后终于成功的安装了最新版. 服务器环境为centos,接下来是详细步骤: 安装必要依赖插件 ? 创 ...

  4. 全国战争linux添加eth0,linux服务器双线路接入配置

    linux服务器双线路接入配置 现在有两个专线外接进来分别是移动IP:218.204.242.XXX和电信IP:124.172.245.XXX 服务器的地址eth0和eth1的地址分别是:移动IP:2 ...

  5. Linux 添加alisa,Linux/shell命令的实际应用——alias增加自定义命令

    在使用Linux过程中,有些一大长串的命令频繁的敲难免会厌烦-- 调用某些可执行文件时不得不记下一长串参数-- 我们可以通过修改/etc/bash.bashrc文件(其他用户在各自目录中),使得我们登 ...

  6. 深度linux添加xp,Linux和Windos XP下向路由表添加路由

    Centos 5.4 x64 查看Linux服务器的路由表:netstat -r  和  route -e 添加默认的路由:route add default gw X.X.X.X(下一跳路由器地址) ...

  7. linux添加group,Linux添加用户(user)到用户组(group)的方法

    在linux中,将一个用户添加到用户组中,不要直接用: usermod -G groupA 这样操作的缺点在于: 将会使你离开其他用户组,仅仅做为 这个用户组 groupA 的成员. 正确的方法,应该 ...

  8. linux添加驱动模块,Linux驱动模块添加

    一.Makefile ifeq ($(KERNELRELEASE),) // 内核路径 #KERNELDIR ?= /home/lht/kernel2.6/linux-2.6.14 KERNELDIR ...

  9. linux 添加定时器,linux 添加定时任务

    1.crontab参数 基本格式 : * * * * * command 分 时 日 月 周        命令 2.使用crontab -e编辑(crontab -l查看) 1 18 * * * / ...

最新文章

  1. 【Qt】调用Python函数:无参数、单个参数、多个参数、数组参数
  2. Java 项目UML反向工程转化工具
  3. python编程案例教程书籍-清华大学出版社-图书详情-《Python案例教程》
  4. opnet中的例子模型
  5. vivado开发编译流程
  6. c语言topk函数并获取下标,C语言函数语法大全(一)
  7. python不同颜色的代码_python日志通过不同的等级打印不同的颜色(示例代码)
  8. 自定义iOS UIPickerView
  9. 【每日算法Day 75】字节跳动面试题:手撕困难题,看过我Day 71的人都会做了!...
  10. 机器学习实战笔记1-机器学习基础
  11. NodeJS笔记: 文件操作大全
  12. dcm4che操作dcm文件
  13. Studio 3T for MongoDB
  14. 微服务实战之高可用性
  15. vivo x9s支持html,vivo X9s屏幕材质_vivo X9s屏幕分辨率-太平洋IT百科
  16. 如何搭建OpenOCD环境基于Window10+Cygwin?
  17. 泡芙噶的计算机网络(3)-扑朔迷离的Cisco Packet Tracer实验
  18. mt管理器主题修改教程_领不了的QQ画图红包教程
  19. 国家企业信用信息公示系统每年申报登录提示账号不存在【山东】
  20. HIT-哈工大数据结构-作业5(C++)

热门文章

  1. math函数常用操作
  2. 联发科(MTK)MT6765 核心板 安卓主板
  3. 计算机网络:IPv6
  4. 暴力破解键盘上所有组合的密码需要多久?
  5. DirectShow资料
  6. stanford-corenlp 中各词性含义标注
  7. Linux超级强大的十六进制dump工具:XXD命令,我教你应该如何使用!
  8. vue3:父子组件传值
  9. Linux mmap
  10. 大小不一样的图片随着盒子大小自适应