数据链路层包过滤系统-ebtables


ebtables即是以太网桥防火墙,以太网桥工作在数据链路层,ebtables来过滤数据链路层数据包。从2.6内核开始内置了ebtables,要使用它必须先安装ebtables的用户空间工具,安装完成后就可以使用ebtables来过滤网桥的数据包。ebtables和iptables类似,都是Linux系统下网络数据包过滤的配置工具。既然称之为配置工具,就是说过滤功能是由内核底层提供支持的,这两个工具只是负责制定过滤的rules。它在功能上和iptables相似(主要就是对以太网包进行操作)。它的出现为网桥设备设置防火墙带来了便利。在后文我们可以看到etables一般不会单独使用而在内核开启bridge-nf功能后和iptables一起工作。采用C语言开发并在GPLv2协议下授权。
The ebtables program is a filtering tool for a Linux-based bridging firewall. It enables transparent filtering of network traffic passing through a Linux bridge. The filtering possibilities are limited to link layer filtering and some basic filtering on higher network layers. Advanced logging, MAC DNAT/SNAT and brouter facilities are also included.
The ebtables tool can be combined with the other Linux filtering tools (iptables, ip6tables and arptables) to make a bridging firewall that is also capable of filtering these higher network layers. This is enabled through the bridge-netfilter architecture which is a part of the standard Linux kernel.
参照用户实际要求,设置ebtables规则如下:
1:对所有的数据包默认通过
2:分清楚源地址和目的地址和源端口和目的端口
3:对TCP,UDPP数据包分别过滤
ebtables 是主要是控制数据链路层的,在内核中,ebtables 的数据截获点比 iptables 更“靠前”,它获得的数据更“原始”,ebtables 多用于桥模式,比如控制 VLAN ID 等。 ebtables 就像以太网桥的 iptables。iptables 不能过滤桥接流量,而 ebtables 可以。ebtables 不适合作为 Internet 防火墙。
首先在进入bridge之前会进行判定,此报文是不是需要进行bridge,当这个包不需要做bridge时刻,就直接走到ip层的路由处理了。

只有以太网帧需要做bridging是才会进入到网桥内部,此时ebtable才会生效。
1、主要功能(表):
过滤(filter),nat和brouting
2、brouting
brouting是网桥的一种特殊工作模式,它指对于某些满足以太网包直接送入ip层(由ip层进行路由),而对于其他包继续送入到网桥内部进行以太网报文的处理。
当brouting决定送给ip 层进行routing时,routing使用的ip地址是网桥下属的物理端口的ip地址。
默认的brouting动作就是让数据包进入到bridge。
brouting是ebtable处理包的第一步。
2.1 brout表支持的链
brout表只支持brouting链,brouting链的动作有:accept,drop,redirect,return。
注意:accept表示数据包送入bridge,drop表示数据包进入brouting的route。
2.2brouting 的brouting链的redirect动作和 prerouting的prerouting链redirect动作
brouting 的redirect是将目的mac地址设置为数据包接入接口的物理mac地址;nat表的prerouting链中redirect是将数据包目标mac地址设置为虚拟网桥的mac地址。
3、filter
ebtable的filter由三个链:input(帧发送给网桥自己的),output(网桥自己发出的或者route的),forward(网桥内部转发的)
4、nat
ebtable的nat由三个链:prerouting output(网桥自己发出或route的包) postrouting
下图总结了ebtable的所有链。

5、bridge-nf
ebtable最重要的应用是当内核开启了bridge-nf功能后,将iptables和ebtables都整合到二层处理里。后文将详细描述。
过滤时机
要了解过滤时机,首先得了解网络数据包进入网卡后,在系统中的转换流程,见下图:

从上图可以看到数据包从进入到离开系统,要经过PreRoute,Input,Forward,Output,PostRoute这五个阶段。每个阶段中包括了一些节点,每个节点就是一个过滤时机。当数据包行进到某个节点时,系统就是检测对应节点的过滤规则并进行过滤。从图中还可以发现,对于每个阶段,ebtables的过滤时机都比iptables要早。
配置
ebtables的配置分为表、链和规则三级。
1.表
表是内置且固定的,共有三种: filter, nat, broute,用-t选项指定。最常用的就是filter了,所以不设-t时默认就是这个表。nat用于地址转换,broute用于以太网桥。
2.链
链有内置和自定义两种 。不同的表内置的链不同,这个从数据包的流程图中就可以看出来。所谓自定义的链也是挂接在对应的内置链内的,使用-j让其跳转到新的链中。
3.规则
每个链中有一系列规则,每个规则定义了一些过滤选项。每个数据包都会匹配这些项,一但匹配成功就会执行对应的动作。所谓动作,就是过滤的行为了。有四种,ACCEPT,DROP,RETURN和CONTINUE。常用的就是ACCEPT和DROP,另两种就不细述了。
ebtables使用规则如下:
ebtables [-t table] -[ADI] chain rule-specification [match-extensions] [watcher-extensions]
-t table :一般为FORWARD链。
-ADI:A添加到现有链的末尾;D删除规则链(必须指明规则链号);I插入新的规则链(必须指明规则链号)。
-P:规则表的默认规则的设置。可以DROP,ACCEPT,RETURN。
-F:对所有的规则表的规则链清空。
-L:指明规则表。可加参数,--Lc,--Ln
-p:指明使用的协议类型,ipv4,arp等可选(使用时必选)详情见/etc/ethertypes
--ip-proto:IP包的类型,1为ICMP包,6为TCP包,17为UDP包,在/etc/protocols下有详细说明
--ip-src:IP包的源地址
--ip-dst:IP包的目的地址
--ip-sport:IP包的源端口
--ip-dport:IP包的目的端口
-i:指明从那片网卡进入
-o:指明从那片网卡出去
基本命令
有了上面的简单介绍,再熟悉一些基本命令就可以使用了。
1. 列表:
ebtables -L
ebtables -L –Lc , 查看各rule的匹配次数以及字节数
2. 新建/删除链
ebtables -N <chain_name>
ebtables -X <chain_name>
3. 新建规则
ebtables -A <chain_name> [ rules ]
[rules]有几种
-s 源MAC -d 目标MAC -i 入接口 -o 出接口
网友总结的比较详细的手册页
Targets:
(1)ACCEPT: 让帧通过
(2)DROP: 丢弃帧。
(3)CONTINUE:让帧继续走下面的规则(rule)
(4)RETURN: 停止当前链的过滤规则,进而去走前面链的下一条规则
注意:在BROUTING链中ACCEPT和DROP有不同的含义:
TABLES:
内置三个表(tables):
(1)filter : 默认使用此表,并且无需使用 -t 或 -table参数
(2)nat
(3)broute
filter内置三个链(chain),分别为 INPUT 、OUTPUT、 FORWARD.
(1)INPUT:帧的目的地址为设备
(2)OUTPUT:从设备为源地址的帧
(3)FORWARD:由设备进行转发的帧
nat:用来更改mac地址,包含三个内置链,分别为 PREROUTING 、OUTPUT、 POSTROUTING
(1)PREROUTING: for altering frames as soon as they come in
(2)OUTPUT: for altering locally generated or (b)routed frames before they are bridged
(3)POSTROUTING: for altering frames as they are about to go out
broute:is used to make a brouter, 只有一个内置链(chain) BROUTING
(1)BROUTING: 此处的target (DROP /ACCEPT)有不同的含义。
DROP actually means the frame has to be routed, while ACCEPT means the frame has to be bridged.
参数简介:
(1)-A
在选定的链后面加一条规则
eg:ebtables -A INPUT(在filter表中添加INPUT链)
(2)-D
从选定的链中删除一条或多条规则。
eg:ebtables -D INPUT 1:2(将filter表中INPUT链的第1到第2条规则删除掉)
ebtables -D OUTPUT 1
(3)-I
从选定的链中插入规则,默认插入到头部。如果指定
eg:ebtables -I INPUT 1 -p ipv4 --ip-src 192.168.1.1 -j DROP
(4)-P, --policy
指定策略,可以为ACCEPT、DROP或 RETURN
(5)-F,--flush
删掉所有的链
eg:ebtables -F
(6)-Z,--zero
设置选定的链的计数为0
(7)-L,--list
列出所有的规则
eg:ebtables -L
-Ln 列出所有规则,并且前面有规则的编码
-Lc 列出所有规则,并且有匹配的统计。其中pcnt为帧数统计,bcnt为字节统计
(8)-N,--new-chain
创建新的链路,默认的位ACCEPT,可以通过命令-P来进行更改。
最新版本:
项目主页:http://ebtables.netfilter.org/
The ebtables program is a filtering tool for a Linux-based bridging firewall. It enables transparent filtering of network traffic passing through a Linux bridge. The filtering possibilities are limited to link layer filtering and some basic filtering on higher network layers. Advanced logging, MAC DNAT/SNAT and brouter facilities are also included.
The ebtables tool can be combined with the other Linux filtering tools (iptables, ip6tables and arptables) to make a bridging firewall that is also capable of filtering these higher network layers. This is enabled through the bridge-netfilter architecture which is a part of the standard Linux kernel.
参照用户实际要求,设置ebtables规则如下:
1:对所有的数据包默认通过
2:分清楚源地址和目的地址和源端口和目的端口
3:对TCP,UDPP数据包分别过滤
ebtables 是主要是控制数据链路层的,在内核中,ebtables 的数据截获点比 iptables 更“靠前”,它获得的数据更“原始”,ebtables 多用于桥模式,比如控制 VLAN ID 等。 ebtables 就像以太网桥的 iptables。iptables 不能过滤桥接流量,而 ebtables 可以。ebtables 不适合作为 Internet 防火墙。
首先在进入bridge之前会进行判定,此报文是不是需要进行bridge,当这个包不需要做bridge时刻,就直接走到ip层的路由处理了。

只有以太网帧需要做bridging是才会进入到网桥内部,此时ebtable才会生效。
1、主要功能(表):
过滤(filter),nat和brouting
2、brouting
brouting是网桥的一种特殊工作模式,它指对于某些满足以太网包直接送入ip层(由ip层进行路由),而对于其他包继续送入到网桥内部进行以太网报文的处理。
当brouting决定送给ip 层进行routing时,routing使用的ip地址是网桥下属的物理端口的ip地址。
默认的brouting动作就是让数据包进入到bridge。
brouting是ebtable处理包的第一步。
2.1 brout表支持的链
brout表只支持brouting链,brouting链的动作有:accept,drop,redirect,return。
注意:accept表示数据包送入bridge,drop表示数据包进入brouting的route。
2.2brouting 的brouting链的redirect动作和 prerouting的prerouting链redirect动作
brouting 的redirect是将目的mac地址设置为数据包接入接口的物理mac地址;nat表的prerouting链中redirect是将数据包目标mac地址设置为虚拟网桥的mac地址。
3、filter
ebtable的filter由三个链:input(帧发送给网桥自己的),output(网桥自己发出的或者route的),forward(网桥内部转发的)
4、nat
ebtable的nat由三个链:prerouting output(网桥自己发出或route的包) postrouting
下图总结了ebtable的所有链。

5、bridge-nf
ebtable最重要的应用是当内核开启了bridge-nf功能后,将iptables和ebtables都整合到二层处理里。后文将详细描述。
过滤时机
要了解过滤时机,首先得了解网络数据包进入网卡后,在系统中的转换流程,见下图:

从上图可以看到数据包从进入到离开系统,要经过PreRoute,Input,Forward,Output,PostRoute这五个阶段。每个阶段中包括了一些节点,每个节点就是一个过滤时机。当数据包行进到某个节点时,系统就是检测对应节点的过滤规则并进行过滤。从图中还可以发现,对于每个阶段,ebtables的过滤时机都比iptables要早。
配置
ebtables的配置分为表、链和规则三级。
1.表
表是内置且固定的,共有三种: filter, nat, broute,用-t选项指定。最常用的就是filter了,所以不设-t时默认就是这个表。nat用于地址转换,broute用于以太网桥。
2.链
链有内置和自定义两种 。不同的表内置的链不同,这个从数据包的流程图中就可以看出来。所谓自定义的链也是挂接在对应的内置链内的,使用-j让其跳转到新的链中。
3.规则
每个链中有一系列规则,每个规则定义了一些过滤选项。每个数据包都会匹配这些项,一但匹配成功就会执行对应的动作。所谓动作,就是过滤的行为了。有四种,ACCEPT,DROP,RETURN和CONTINUE。常用的就是ACCEPT和DROP,另两种就不细述了。
ebtables使用规则如下:
ebtables [-t table] -[ADI] chain rule-specification [match-extensions] [watcher-extensions]
-t table :一般为FORWARD链。
-ADI:A添加到现有链的末尾;D删除规则链(必须指明规则链号);I插入新的规则链(必须指明规则链号)。
-P:规则表的默认规则的设置。可以DROP,ACCEPT,RETURN。
-F:对所有的规则表的规则链清空。
-L:指明规则表。可加参数,--Lc,--Ln
-p:指明使用的协议类型,ipv4,arp等可选(使用时必选)详情见/etc/ethertypes
--ip-proto:IP包的类型,1为ICMP包,6为TCP包,17为UDP包,在/etc/protocols下有详细说明
--ip-src:IP包的源地址
--ip-dst:IP包的目的地址
--ip-sport:IP包的源端口
--ip-dport:IP包的目的端口
-i:指明从那片网卡进入
-o:指明从那片网卡出去
基本命令
有了上面的简单介绍,再熟悉一些基本命令就可以使用了。
1. 列表:
ebtables -L
ebtables -L –Lc , 查看各rule的匹配次数以及字节数
2. 新建/删除链
ebtables -N <chain_name>
ebtables -X <chain_name>
3. 新建规则
ebtables -A <chain_name> [ rules ]
[rules]有几种
-s 源MAC -d 目标MAC -i 入接口 -o 出接口
网友总结的比较详细的手册页
Targets:
(1)ACCEPT: 让帧通过
(2)DROP: 丢弃帧。
(3)CONTINUE:让帧继续走下面的规则(rule)
(4)RETURN: 停止当前链的过滤规则,进而去走前面链的下一条规则
注意:在BROUTING链中ACCEPT和DROP有不同的含义:
TABLES:
内置三个表(tables):
(1)filter : 默认使用此表,并且无需使用 -t 或 -table参数
(2)nat
(3)broute
filter内置三个链(chain),分别为 INPUT 、OUTPUT、 FORWARD.
(1)INPUT:帧的目的地址为设备
(2)OUTPUT:从设备为源地址的帧
(3)FORWARD:由设备进行转发的帧
nat:用来更改mac地址,包含三个内置链,分别为 PREROUTING 、OUTPUT、 POSTROUTING
(1)PREROUTING: for altering frames as soon as they come in
(2)OUTPUT: for altering locally generated or (b)routed frames before they are bridged
(3)POSTROUTING: for altering frames as they are about to go out
broute:is used to make a brouter, 只有一个内置链(chain) BROUTING
(1)BROUTING: 此处的target (DROP /ACCEPT)有不同的含义。
DROP actually means the frame has to be routed, while ACCEPT means the frame has to be bridged.
参数简介:
(1)-A
在选定的链后面加一条规则
eg:ebtables -A INPUT(在filter表中添加INPUT链)
(2)-D
从选定的链中删除一条或多条规则。
eg:ebtables -D INPUT 1:2(将filter表中INPUT链的第1到第2条规则删除掉)
ebtables -D OUTPUT 1
(3)-I
从选定的链中插入规则,默认插入到头部。如果指定
eg:ebtables -I INPUT 1 -p ipv4 --ip-src 192.168.1.1 -j DROP
(4)-P, --policy
指定策略,可以为ACCEPT、DROP或 RETURN
(5)-F,--flush
删掉所有的链
eg:ebtables -F
(6)-Z,--zero
设置选定的链的计数为0
(7)-L,--list
列出所有的规则
eg:ebtables -L
-Ln 列出所有规则,并且前面有规则的编码
-Lc 列出所有规则,并且有匹配的统计。其中pcnt为帧数统计,bcnt为字节统计
(8)-N,--new-chain
创建新的链路,默认的位ACCEPT,可以通过命令-P来进行更改。
最新版本:
项目主页:http://ebtables.netfilter.org/