内核中的防火墙子模块

1、链路层的防火墙模块,对应协议栈是在软桥(bridge)中对报文进行处理。对应用户空间的配置工具是ebtables

2、网络层中ipv4的防火墙模块,对应协议栈是在Ipv4协议栈中对报文进行处理,对应用户空间的配置工具是iptables

3、网络层中ipv6的防火墙模块,对应协议栈是在Ipv6协议栈中对报文进行处理,对应用户空间的配置工具是ip6tables

4、对ARP处理的防火墙模块,该处理是在协议栈的IPv4部分,但是自己有独立的表来存放自己的配置,对应用户空间的配置工具是arptables

ebtables

  • ebtables就是以太网桥防火墙,以太网桥工作在数据链路层,ebtables主要用来过滤数据链路层数据包。
  • ebtables 能过滤桥接流量

ebtables/iptables
数据包从进入到离开系统,要经过PreRoute,Input,Forward,Output,PostRoute这五个阶段。每个阶段中包括了一些节点,每个节点就是一个过滤时机。当数据包行进到某个节点时,系统就是检测对应节点的过滤规则并进行过滤。从图中还可以发现,对于每个阶段,ebtables的过滤时机都比iptables要早

ebtables配置

ebtables的配置分为表->链->规则

表是内置且固定的,共有三种: filter, nat, broute,用-t选项指定。最常用的就是filter了,所以不设-t时默认就是这个表。

filter过滤本机流入流出的数据包是默认使用的表
nat用于地址转换-mac地址
broute用于以太网桥-产生一个桥路器。用于决定是route还是bridge的表

链(chains)

链有内置和自定义两种 。不同的表内置的链不同,这个从数据包的流程图中就可以看出来。所谓自定义的链也是挂接在对应的内置链内的,使用-j让其跳转到新的链中。如果以太网帧没有匹配到当前的规则,就会去检查下一个规则。

filter: INPUT (接收的帧), OUTPUT(发出去的帧), FORWARD(要转发的帧)
nat: PREROUTING(帧进来前处理,filter的INPUT之前), POSTROUTING(帧发出去时处理,OUTPUT之后), OUTPUT(要发出去的帧)
broute:只有一个BROUTING, 这个处理比较早。 只有两个targets.一个是DROP(要路由), 另一个是ACCEPT(要桥接)。

规则也叫目标(targets)

每个链中有一系列规则,每个规则定义了一些过滤选项。每个数据包都会匹配这些项,一但匹配成功就会执行对应的动作。
所谓动作,就是过滤的行为了。有四种,ACCEPT,DROP,RETURN和CONTINUE。

ACCEPT:意味着让一个帧通过
DROP:意味着帧已经被dropped。注意:在BROUTING chain中,1、2有特殊的意思
CONTINUE:意味着下一个规则(rule)将被检查
RETURN:意味着停止遍历此链,并在前一个调用链的下一条规则中恢复。其实就是退出,和代码中的continue差不多,这里就是退出在此链继续遍历,直接进行后续操作

ebtables 命令

ebtables -t filter -L 显示filter表中的规则
参数

-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:输入interface
-o:输出interface

ebtables -N 新建链
ebtables -X 删除链

示例

ebtables -P FORWARD ACCEPT 设置转发表默认动作为接受
ebtables -A FORWARD -i eth1 -p ipv4 –ip-proto tcp –ip-sport 8899 -j DROP 将eth1入方向原端口为8899的丢弃规则
ebtables -t broute -N ebmacfilter_chain 创建一条新的链 ebmacfilter_chain
ebtables -t broute -A ebmacfilter_chain -j BROUTING 将自定义链jump到标准链下
ebtables -t broute -X ebmacfilter_chain 删除自定义链

文档更新时间: 2021-01-22 05:12   作者:周国强