注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

itoedr的it学苑

记录从IT文盲学到专家的历程

 
 
 

日志

 
 

nftables学习与应用  

2014-05-18 08:28:30|  分类: nftables防火墙 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
nftables终于发出.根据介绍功能水平大大提高.以后我们一起来分析其功能与应用方案.
一、概要说明
nftables学习与应用 - itoedr - itoedr的it学苑
这是nftables的依赖关系
nftables学习与应用 - itoedr - itoedr的it学苑
二、核心要求
三、应用语法

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


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

一些命令行例子


一行多个目标

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

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

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



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

1. nft add rule filter forward tcp dport 22 log drop

方便创建集合



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

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

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

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

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

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


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


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

2.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_sechigh_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都升级才可以。


四、使用案例
1)映射命令
nft add rule ip nat prerouting dnat tcp dport map { 80 : 192.168.1.100, 8888 : 192.168.1.101 }
验证:
nftables学习与应用 - itoedr - itoedr的it学苑
 2)段地址处理

The following example show how to drop the traffic coming the range 192.168.0.1 to 192.168.0.250:

# nft add rule filter input ip daddr 192.168.0.1-192.168.0.250 drop

You can also use it with TCP ports:

# nft add rule filter input tcp ports 1-1024 drop

And any sort of constant value.

You can also use intervals from sets, the following example shows how to blacklist two interval of IP addresses:

# nft add rule ip filter input ip saddr { 192.168.1.1-192.168.1.200, 192.168.2.1-192.168.2.200 } drop

And you can also use them in dictionaries:

# nft add rule ip filter forward ip daddr vmap { 192.168.1.1-192.168.1.200 : jump chain-dmz, 192.168.2.1-192.168.20.250 : jump chain-desktop }

 
  评论这张
 
阅读(361)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017