nftables配置参考资料_第1页
nftables配置参考资料_第2页
nftables配置参考资料_第3页
nftables配置参考资料_第4页
nftables配置参考资料_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、nftables 配置一、概述nftables包过滤框架历史小解:配置详解:此文档的内容是根据上面的nftables配置详解的链接进行翻译整理的,有些地方可能有错误,对于有问题的地方,可以去上面的英文网站查询,同时对于一些不需要了解 的内容,在文中只给出了链接。nftables配置分为表、链、规则三个层次,示例如下:table ip filter64 bytes from icmp_req=1 ttl=64 time= ms然后,如果我们列出规则集,我们获得:% nft -nn list table filtertable ip filter chain input type filter h

2、ook input priority 0;chain output type filter hook output priority 0;ip daddr counter packets 1 bytes 84tcp dport 22 counter packets 0 bytes 0 请注意,计数器已更新、在给定位置添加规则如果要在给定位置添加规则,则必须使用句柄作为参考:% nft list table filter -n -atable filter chain output type filter hook output priority 0;ip protocol tcp counte

3、r packets 82 bytes 9680 # handle 8ip saddr ip daddr drop # handle 7)如果要在处理程序编号为8的规则之后添加规则,则必须键入:% nft add rule filter output position 8 ip daddr drop现在,您可以通过列出规则集来检查该命令的效果:% nft list table filter -n -atable filter chain output type filter hook output priority 0;ip protocol tcp counter packets 190 by

4、tes 21908 # handle 8ip daddr drop # handle 10ip saddr ip daddr drop # handle 7)如果要在具有处理程序编号8的规则之前插入规则,则必须键入:% nft insert rule filter output position 8 ip daddr drop、删除规则您必须通过-a选项获取删除规则的句柄。句柄由内核自动分配,它唯一地标识规则% nft list table filter -atable ip filter chain input type filter hook input priority 0;)chain

5、 output type filter hook output priority 0;ip daddr counter packets 1 bytes 84 # handle 5)可以使用以下命令删除句柄为5的规则:% nft delete rule filter output handle 5注意:有计划通过传递以支持删除规则:% nft delete rule filter output ip saddr counter但这还没有实现。因此,您必须使用句柄来删除规则,直到实现该特性。、删除一条链中的所有规则您可以使用以下命令删除链中的所有规则:% nft delete rule filte

6、r output您还可以使用以下命令删除表中的所有规则:% nft flush table filter、在最前面添加新规则要通过insert命令预先添加新规则:% nft insert rule filter output ip daddr counter这预先附加了一个规则,该规则将针对寻址到的流量更新每个规则包和字节计数器。在iptables中的等价是:% iptables -I OUTPUT -t filter -d请注意,iptables总是提供每个规则的计数器。、替换规则您可以通过指定规则句柄通过replace命令替换任何规则。因此,首先必须列出带有选项-a的规则集,以获取规则句柄

7、。nft list ruleset -atable ip filter chain input type filter hook input priority 0; policy accept;ip protocol tcp counter packets 0 bytes 0 # handle 2然后,假设您想要使用句柄号2替换规则,则必须指定此句柄号和要放置的新规则,而不是它:nft replace rule filter input handle 2 counter然后,当列出规则集时:nft list ruleset -atable ip filter chain input count

8、er packets 0 bytes 0您可以有效地注意到,该规则已被替代为计数任何数据包的简单规则,而不是如前面 的规则那样计数TCP数据包。、原子规则替换您可以使用-f选项自动更新规则集:% nft -f file其中file包含您的规则集您可以通过将现有列表存储在文件中来保存规则集,即。% nft list table filter filter-table然后,您可以使用-f选项恢复它:% nft -f filter-table如果您在过滤器表文件的最开始处预置flush表过滤器行,您将实现原子规则集替换,等同于iptables-restore提供的内容。注意,内核在一个事务中处理文件

9、中的规则命 令,因此基本上新规则的刷新和加载发生在一个单独的事务中。有些人喜欢用规则集来维护一个 shell脚本文件。注意这种方法,你不能使用shell脚本文件来实现原子规则集更新。因此,最好的方法是使用本机 nftables脚本功能,并通过nft -f恢复规则集。、从命令行报告错误当您使用错误的数据类型时,nft命令行实用程序会尝试帮助您。以下示例显示如果将IPv4地址作为TCP端口传递,则错误输出。% nft add rule filter input tcp dport counter drop:1:33-39: Error: Could not resolve service: Ser

10、vname not supported for ai_socktypeadd rule filter input tcp dport counter drop如果命令不完整,典型输出如下:% nft add rule filter input tcp dport:1:32-32: Error: syntax error, unexpected end of fileadd rule filter input tcp dport、通过表达式构建规则nftables提供以下内置操作:NE表示不相等,或者你可以使用!=LT表示小于,或者你可以使用 LE表示小于等于,或者你可以使用二注意:如果您使用来

11、自shell的符号,因为它会将它们分别解释为标准输入和输出 重定向。你需要逃避他们,例如。 = 1024、规则集级别的操作、使用原生nft语法Linux Kernel包括一些有关管理您的规则集作为一个整体的可用操作的改进。1、查看规则集清单列出完整的规则集% nft list ruleset列出每个系列的规则集% nft list ruleset arp% nft list ruleset ip% nft list ruleset ip6% nft list ruleset bridge% nft list ruleset inet这些命令将打印给定系列的所有表/链/集/规则。2、删除规则集此

12、外,您还可以冲洗(擦除,删除,擦除)完整的规则集:% nft flush ruleset也适用于每个系列:% nft flush ruleset arp% nft flush ruleset ip% nft flush ruleset ip6% nft flush ruleset bridge% nft flush ruleset inet3、备份和还原您可以组合以上两个命令来备份您的规则集:% echo nft flush ruleset % nft list ruleset 并原子加载:% nft -f4、以 XML 或 JSON&式您还可以以XML或JSON&式导出规则集。% nft e

13、xport xml % nft export json 注意,导出操作输出所有家庭(ip, ip6, inet, arp, bridge)的所有表、监视规则集更新nft可以通过以下方式显示规则集更新的通知:% nft monitor这将订阅任何种类的规则集更新。您可以按以下类型过滤掉事件:object: tables, chains, rules, sets and elements.event: new and destroy.输出格式可以是:plain text (ie. native nft format)xmljson以下示例显示了如何跟踪规则更新:% nft monitor rule

14、s如果您只想接收新规则:% nft monitor new rules有点更发达的例子在终端中键入以下内容:term1% nft monitor从不同的终端,如果你键入:term2% nft add table inet filterterm2% nft add chain inet filter forwardterm2% nft add rule inet filter forward counter acceptterm2% nft flush table inet filter forwardterm2% nft flush ruleset然后,如果你回到term1,你会看到:term

15、1% nft monitoradd table inet filteradd chain inet filter forwardadd rule inet filter forward counter packets 0 bytes 0 acceptdelete rule inet filter forward handle 4delete chain inet filter forward delete table inet filter、脚本三、数据包匹配支持的选项、匹配数据包报头字段nft命令行实用程序支持以下的第4层协议:AH, ESR UDP, UDPlite, TCP, DCCRS

16、CTP IPComp。、匹配传输协议以下规则显示如何匹配任何类型的TCP流量:% nft add rule filter output ip protocol tcp、匹配以太网头字段如果要匹配目标地址为 ff: ff: ff: ff: ff: ff的以太网流量,可以键入以下命令:% nft add rule filter input ether daddr ff:ff:ff:ff:ff:ff counter不要忘记,第2层头信息仅在input路径中可用。、匹配IPv4报头字段您还可以根据IPv4源和目标匹配流量,以下示例显示如何计入来自并且发往的所有流量:% nft add rule fil

17、ter input ip saddr ip daddr counter请注意,由于规则附加到输入链,本地机器需要使用地址,否则您将看不到任何匹配的;-)。要过滤像TCP这样的第4层协议,可以使用protocol关键字:% nft add rule filter input protocol tcp counter、匹配Ipv6标头字段如果要计算寻址到 abdc二100的IPv6流量,可以键入以下命令:% nft add rule filter output ip6 daddr abcd:100 counter要过滤像TCP这样的第4层协议,可以使用nexthdr关键字:% nft add ru

18、le filter input ip6 nexthdr tcp counter不要忘记创建一个ip6表并注册相应的链来运行下面的例子:、匹配 TCP / UDP / UDPlite流量以下示例显示如何丢弃低TCP端口( 1-1024)的所有tcp流量:% nft add rule filter input tcp dport 1-1024 counter drop请注意,此规则使用间隔(从 1到1024)要匹配TCP标志,需要使用二进制操作。例如,要计数非SYNC的数据包:% nft add rule filter input tcp flags != syn counter可以使用更复杂的过

19、滤器。例如,要计数和记录标志SYN和ACK设置的TCP数据包:% nft -inft add rule filter output tcp flags & (syn | ack) = syn | ack counter log、匹配ICMP流量您可以通过以下方式删除所有ICMP回显请求(通常称为 ping):% nft add rule filter input icmp type echo-request counter drop这里是可用的icmp类型的列表:名称说明echo-reply回声应答destination-unreachable目的地不可达source-quench来源淬火re

20、direct重定向echo-requesttime-exceeded时间超过parameter-problem参数问题timestamp-request时间戳请求timestamp-reply时间戳回复info-request信息请求info-reply信息回复address-mask-request地址掩码请求address-mask-reply地址掩码回复、匹配数据包元信息nftables附带了分组元信息选择器,您可以使用它来匹配存储在网络数据包中的元信 息。、元选择器您可以匹配的当前元信息是:接口设备名称和接口设备索引:iifname, oifname, iif and oif.接 口类

21、型:iiftyte and oiftype.TC 手柄:priority.socket user and group 标识:skuid and skgid.包长度:length.、按接口名称匹配数据包您可以使用以下选择器来匹配接名称:iifname,用来匹配输入网络接口名称。oifname,用来匹配输出网络接口名称。IIF,用来匹配网络接口名称的接口索引。这比iifname快,因为它只需要比较一个32位无符号整数而不是一个字符串。接口索引是动态分配的,因此不要将其用于动态创建和销毁的接口,例如。 ppp0oOIF,像iif,但它匹配输出网络接口索引。接口名称的示例用法如下:% nft add

22、rule filter input meta oifname lo accept此规则接受环回伪设备lo的所有流量。、按包标记匹配数据包您可以使用以下规则匹配标记为123的数据包:nft add rule filter output meta mark 123 counter、匹配数据包的套接字UID您可以使用您的用户名来匹配流量,例如。% nft add rule filter output meta skuid pablo counter或者在给定用户的/ etc / passwd中没有条目的情况下,使用 32位无符号整数 (UID)。% nft add rule filter outpu

23、t meta skuid 1000 counter让我们只是生成一些HTTP流量来测试此规则:% wget -spider然后,如果检查计数器,您可以验证数据包是否匹配该规则。% nft list table filtertable ip filter chain output type filter hook output priority 0;skuid pablo counter packets 7 bytes 510)chain input type filter hook input priority 0;)重要:请注意,如果您使用ping测试,通常使用suid安装,以便流量匹配ro

24、ot用户(uid = 0)。、匹配连接跟踪状态元信息正如在iptables中一样,您可以匹配 Netfilter通过连接跟踪系统收集的状态跟踪信息 (有时称为conntrack或ct信息)以部署状态防火墙。、匹酉己conntrack信息nftables提供了 ct选择器,可以用来匹配:1、状态信息:new, established, related and invalid.在这方面,与 iptables 没有改变;2、 conntrack 的标志;、匹配状态信息以下示例说明如何使用nftables部署极为简单的状态防火墙:nft add rule filter input ct state e

25、stablished,related counter accept #1nft add rule filter input counter drop #2规则# 1允许作为与网络已经建立的通信的一部分的分组。因此,从网络中的计算机到达您的计算机的任何尝试将被删除。但是,作为您已启动的流的一部分的流量将被接受。请注意,上面的示例使用逗号分隔的您要匹配的状态列表。如果你不熟悉Netfilter数据流状态机,可以快速阅读一下:、匹酉己conntrack标t己以下示例显示如何根据conntrack标记匹配数据包:nft add rule filter input ct mark 123 counter

26、要了解更多的关于链接跟踪标记和标记数据包,请查阅下面链接:、速率限制匹配您可以通过限速对流量进行限制。以下示例显示如何每秒接受最多10个ICMP回显请求数据包:% nft add rule filter input icmp type echo-request limit rate 10/second accept从Linux内核,你也可以ratelimit每个字节:% nft add rule filter input limit rate 10 mbytes/second accept以上规则接受低于10 mbytes /秒速率的流量。您还可以使用burst参数指示可以超过速率限制的数据包

27、/字节数:% nft add rule filter input limit rate 10 mbytes/second burst 9000 kbytes accept这表示您可以超过9000 kbytes的时候进行速率限制。您还可以将其用于数据包:% nft add rule filter input icmp type echo-request limit rate 10/second burst 2 packets counter accept所以你可以超过2包每秒后进行速率限制。限制表达式,您可以将其用于来自入口的流量监管,作为来自新netdev系列的tc的替代。四、对数据包支持的处

28、理措施、接受和丢弃数据包、丢弃数据包您可以使用drop选项丢弃数据包。请注意,drop是一个终止操作,因此您无法在其后添加任何其他操作(此操作放在其他所有操作之后)。nft add rule filter output drop请注意,当测试这个,你可能会失去任何互联网连接:-)。、接受包接受任何类型流量的简单规则是:nft add rule filter output accept您可以向该规则添加计数器:nft add rule filter output counter accept因此,您可以观看所有流量实际接受:nft list table filtertable ip filter

29、 chain output type filter hook output priority 0;counter packets 1 bytes 84 accept、跳到链像iptables 一样,你可以使用链的树来构造你的规则集。为此,您首先需要通过以下方式创建自定义链:% nft add chain ip filter tcp-chain上面的示例创建了tcp链,将用于添加规则以过滤 tcp流量,例如。% nft add rule ip filter input ip protocol tcp jump tcp-chain我们可以添加一个简单的规则到tcp-chain来计算包和字节:% n

30、ft add rule ip filter tcp-chain counter列表应该显示:% nft list table filtertable ip filter chain input type filter hook input priority 0;ip protocol tcp jump tcp-chainchain tcp-chain counter packets 8 bytes 2020)计数器应通过生成简单的 TCP流量来更新。注意:您只能跳转到非基本链。、jump 与 goto请注意jump和goto之间的区别。1、如果使用jump来获取在另一个链中处理的数据包,数据包

31、将在结束后返回到调用 规则的链。2、但是,如果使用goto,数据包将在另一个链中处理,但它们不会返回到调用规则的 链。在这种情况下,应用于数据包的默认策略将是开始处理数据包的原始基础链的默 认策略。jump示例:分组是:SRC = DST = TCP 口 111 运动 222table ip filter chain input type filter hook input priority 0; policy accept;this is the 1o matching ruleip saddr ip daddr tcp dport 111 tcp dport 222 jump other-

32、chainthis is the 3o matching ruleip saddr ip daddr tcp dport 111 tcp dport 222 accept)chain other-chain this is the 2o matching rulecounter packets 8 bytes 2020) goto示例:分组是:SRC = DST = T的口 111运动222table ip filter chain input ype filter hook input priority 0; policy accept;this is the 1o matching rul

33、edefault policy accept will be applied after other-chain ends processingip saddr ip daddr tcp dport 111 tcp dport 222 goto other-chainthis rule will never be reached by this packet!ip saddr ip daddr tcp dport 111 tcp dport 222 acceptchain other-chain this is the 2o matching rulecounter packets 8 byt

34、es 2020、拒绝流量注意:完全拒绝支持可用,在 Linux内核。以下规则显示如何拒绝来自网络的所有流量:% nft add rule filter input reject如果不指定任何原因,则会在 ICMP / ICMPv6端口发送不可达报文到源。您可以通过ct选择器缩小此范围,因此这只会拒绝来自本地计算机的流量,而不是源 自我们的流量。% nft add rule filter input ct state new reject您还可以指定拒绝原因。例如:% nft add rule filter input reject with icmp type host-unreachable

35、对于ICMP,您可以使用以下拒绝原因:net-unreachable:目标网络不可达host-unreachable:目标主机不可访问prot-unreachable:目标协议不可访问port-unreachable:目的端口不可达net-prohibited:网络管理方式禁止host-prohibited:主机管理方式禁止admin-prohibited:通讯管理方式禁止您还可以拒绝指示拒绝原因的IPv6流量,例如:% nft add rule ip6 filter input reject with icmpv6 type no-route对于ICMPv6,您可以使用以下原因:no-rou

36、te:没有到目的地址的路由admin-prohibited:与目的地的通信方式禁止addr-unreachable:地址不可达port-unreachable:端口不可达从inet系列,您可以使用一个抽象,即所谓的icmpx,使用一个单一的规则来拒绝IPv4和IPv6流量。例如:% nft add rule inet filter input reject with icmpx type no-route此规则拒绝原因为net unreachable ”的IPv4流量和原因为no route ”的IPv6流量 映射如下表所示:ICMPX REASON ICMPv6ICMPv4admin-prohibitedadmin-prohibitedadmin

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论