ebtables官方文档翻译

官方文档:http://ebtables.netfilter.org/misc/ebtables-man.html

非权威翻译,大家辩证查阅。

描述:

ebtables是一个创建和维护内核 嗅探Ethernet frame规则表格的应用程序,它类似iptables,但是没有它复杂,因为Ethernet协议相比ip协议更简单一点

CHAINS

Linux内核内置了三种ebtables 表。这些表用来区分不同的功能规则,每一种规则的集合就叫做一个chain,每一个chain都是一个用来匹配Ethernet frame的有序规则链表,如果一条规则匹配匹配上了一个Ethernet 帧,则有一条处理说明规格来表示如何处理这个匹配上的帧,这个处理说明规格被叫做一个target。如果frame没有匹配上当前这条规则,chain里面的下一条规则就会被检查,以此类推。用户可以自定义被用来作为target规则chains,用户自定义的chains非常有用,在线性处理规则可以达到更好的性能,同时也可以更好的组织和维护规则。

TARGETS

一个防火墙规则标明的一个Ethernet帧处理标准,一个帧的处理说明规格叫做一个target。当一个帧匹配上一条规则,那么下一步内核要做的动作则是由target来约定的,target可以是如下的值:

ACCEPT,DROP,CONTINUE,RETURN,’extension‘,或者到用户自定义chain的一个跳转。

ACCEPT指的是让这个帧通过;

DROP指的是这个帧丢掉,在BROUTINGchain里面,ACCEPT和DROP有不同的意义(参见-t选项)

CONTINUE指的是执行下一条规则,这个可能很有用,比如:在这个chain上一个特定的点上可以知道通过了多少帧,输出对应日志,或者在一个帧上应用更多元的target

RETURN指的是停止在这个chain上处理,恢复到之前调用这个chain的规则的下一条规则上。

对于扩展targets,可以参考下面的TARGET EXTENSIONS

TABLES

就像之前陈述的,内核有三张ebtables 表。这些表的名字叫filter,nat,和broute,在这三种表格里面,这个filter表是默认的表格。如果你想操作的就是filter表格,那么在执行ebtables命令行时就不要添加-t filter参数,对于另外两个表格,是需要通过-t指定的,如果要用-t,则-t参数必须是ebtables命令行的第一个参数。

-t,--table

filter是默认的表,有三个内置的chains(注意有两处提到3个,但是意义不一样),INPUT(帧的目的地址是bridge自己,在MAC目的地址这一个level),OUTPUT(locally生成的或者路由桥接的帧)FORWARD(被bridge转发的帧)

nat大多数情况都是用来修改mac地址,同时也包含3个内置的chains。PREROUTING(处理调整进来的帧)OUTPUT(处理locally生成的或者在被桥接之前的要被路由的帧;POSTROUTING(处理将要发送出去的帧)。对于PREROUTING和POSTROUTING这两个chain的名字有个小说明:其实PREFORWARDING和POSTFORWARDING这两个名字更准确,iptables更早一点,他们的名字都是这样叫,所以用了相同的名字。如果你不喜欢,可以使用—E参数修改名字。

broute是用来做一个broute,只有一个内置的chain:BROUTING,DROP和ACCEPT target有不同的意义,DROP指的是这个帧必须被路由,ACCEPT 指的是这个帧必须被桥接,BROUTINGchain是很早就会进入的,然而。。。。没有很明白

EBTABLES命令行参数

在-t table命令行参数之后,这些保留的参数可以被分成几组。这些组是:命令,其它杂项命令,规则说明,匹配扩展项,watcher扩展项,target扩展项。

COMMANDS

ebtables的命令行参数是用来定义-t表的动作行为。COMMANDS只能在命令行出现一次,不包含如下:-L和-Z结合起来,-N和-P结合起来,或者有--atomic-file参数

-A,--append

在选择的chain后面加一条规则

-D,--delete

在选择的chain上删除一条或者几条规则,有两种方法使用这个规则,第一种是显示指定要删除的区域(直接跟在-D后面),语法是:起始:结束。可以使用-L或者--Ln来列出规则的序号。当end_nr被忽略的时候,所有大于开始序号的规则都会被删除,使用负数也是被允许的,更多关于负数的细节,参见-l命令,第二种方法是显示的指定所跟添加时候一样的规则,第一个被匹配上的会被删除。

-C,--change-counters

改变一个规则或者一些规则的计数,有两种方法使用这个命令,第一种是指定一个间隔,和—D一样。第二种是指定和添加的时候一样的规则,匹配到的第一条规则被改变。第一种方法,计数是在间隔那显示声明。第二种直接跟在-C后面的使用说明,首先包计数是显示指定的,接下来是字节计数,如果这个计数是以+开始,计数值会在对应规则上加这个值,如果是-,则是减。

-I,--insert

把特定的指定了序号的规则插入选择的chain,如果rule序号没有指定,则被加在头部,如果当前的rule序号是N,那么加的这个序号可以是-N到N+1之间,序号0标明插入到最后一条。

-P,--policy

为chain设置policy,policy可以是accept,drop return

-F,--flush

冲掉选择的chain,如果没有指定,每一个chain都会冲掉,但是不改变这个chain的policy

-Z --zero

设置选择的chain的计数为0,如果没有选择chain,所有的都设置为0,-Z可以和-L结合使用,如果-Z和-L都用了,先把计数打印出来再设置为0

-L,--list

列出选择的chain的所有规则,如果没有选择,所有的chain都列出来,如下的选项改变-L命令的输出

--Ln

在每条rule之前,列出规则数字,这个选项和--Lx是不兼容的

--Lc

在每条规则后面显示计数,这里计数指的是帧计数和字节计数。这个选项如果和--Lx结合,会按照-c pcnt bcnt格式输出

--Lx

没有看懂

--Lmac2

以固定长度显示所有的MAC地址,

-N --new-chain

创建一个以指定名字的用户定义chain,自定义chain只能最多有31个字符,用户自定义chain的标准策略是ACCEPT。可以用-P命令行来初始化一个不一样的target,和-N命令一起,这种情况,chain名字不是必须要跟在-P之后。

-X,--delete-chian

删除自定义chain,一定不能有其它chain对该chain的引用,如果有引用,则ebtables不会删除它,如果没有指定的chain,所有的没有被引用的chain都会被删除掉

-E,--rename-chain

对chain重命名,也可以对标准chain重命名,尽量不要重命名标准chain

--init-table

用initial表的数据来替换当前table

--atomic-init

拷贝table的内核初始化数据到特定文件,当规则被加到文件后,这个可以用作第一个action,这个可以通过--atomic-file命令行或者EBTABLES_ATOMIC_FILE环境变量来指定。

--atomic-save

拷贝table的内核当前正在用的数据到特定文件,其它类似--atomic-init

--atomic-commit

用特定文件的数据替换内核table数据,可以一次性load所有的数据到内核,节省了内核的时间。这个初始的文件,可以是用--atomic-save或者--atomic-init创建的。

MISCELLANOUS  COMMANDS

杂项命令行

-V,--version

显示ebtables用户空间程序版本

-h,--help

帮助

-j,--jump target

规则的target,可以是如下几个值:accept,drop,continue,return,a target extension或者一个用户自定义的chain名字

--atomic-file file

让这个命令操作在指定的文件,table操作的数据从文件提取,结果会被写回文件,如果指定,这个选项应该在command 命令之前,

-M,--modprobe program

load缺失的内核模块

--concurrent

用文件锁支持并发脚本更新ebtables内核表

RULE specification

下面的命令行参数组成了rule规范。!选项对那条规则取反。

-p --protocol [!] protocol

协议是用来创建frame,可以是十六进制数字,像大于 0x0600,可以是名字,像ARP,或者长度,ethernet的帧的协议字段可以用来指示头部长度。当-p的值是小于或者等于0x0600,这个值等于头部长度,而不应该用作协议值字段。对于length其实也可以看做是一种协议,这种协议就叫做LENGTH。

/etc/ethertypes可以用来查看可读的协议名字,而不是枯燥的十六进制。例如:0x0800可以用来指示IPV4

-i,--in-interface

用来指示用哪个接口来收包,这个选项在INPUT,FORWARD,PREROUTING和BROUTING 这几个chain有用,如果网卡名字使用+结尾,则任何一个使用该名字开头的都会match

--logical-in name

用来指示接收帧的逻辑网桥接口,这个选项在INPUT,FORWARD,PREROUTING和BROUTING 这几个chain有用,如果网卡名字使用+结尾,则任何一个使用该名字开头的都会match

-o,--out-interface name

用来指示帧要从哪个接口(网桥端口)发送出去,这个选项在OUTPUT,FORWARD,POSTROUTING这几个chain有用,如果网卡名字使用+结尾,则任何一个使用该名字开头的都会match

--logical-out name

用来指示发送帧的逻辑网桥接口,这个选项在OUTPUT,FORWARD,POSTROUTING这几个chain有用,如果网卡名字使用+结尾,则任何一个使用该名字开头的都会match

-s,--source address[/mask]

源MAC地址,mask和地址都以6个十六进制数字以分号分开,也可以是其它格式,比如Unicast,Multicast,Broadcast,or BGA

-d --destination address[mask]

目的MAC地址,跟-s类似

-c,--set-counter pcnt bcnt

如果结合-A或者-l使用,规则的packet和byte计数会被设置成pcnt,后面没看懂

MATCH EXTENSIONS

ebtables扩展是被动态的加载到用户空间的工具,所以没有必要显示的使用-m选项来加载,这些扩展处理功能被内核核心ebtables代码支持。

802_3

可能用的比较少。

among

匹配一个MAC地址或者MAC/IP对,一组MAC地址或者MAC/IP对。list entry用如下格式:

xx:xx:xx:xx:xx:xx[=ip.ip.ip.ip][,],多个list项用逗号分开,指定IP地址和MAC地址对应关系是可选的,相同的MAC地址对应不同的IP地址可以被显示指定,如果MAC地址不匹配list里面的任何地址,frame则不匹配rule,如果用了!

--among-dst list

--among-srt list

--among-dst-file file

--among-src-file file

ARP

用来指定ARP或者RARP字段,这个协议必须是ARP或者RARP

--arp-opcode opcode

The (R)ARP opcode

--arp-htype hardware type

硬件类型,可以是十六进制或者ethernet字符串,

--arp-ip-src

--arp-ip-dst

--arp-mac-src

--arp-mac-dst

--arp-gratuitous

ip

ip6

limit

限速相关

mark-m

--mark[!][value][/mask]

用给定的mark value来匹配帧,如果value和mask都被指定,value和mask先计算逻辑与,再用来和指定的参数value mask比较,当只指定了value,则value相等就匹配成功,如果只指定了mask,则计算逻辑与,并且结果不能为0.

pkttype

--pkttype-type type

用来匹配帧的ethernet class,这个是通用网络code,可能的值是:broadcast,multicast,host

stp

用来指定stp的BPTU字段,目的地址-d必须被指定为bridget group address(BGA),对于所有的options。。。。

vlan

watcher extensions

只是用来监视passingby的帧,他们不会修改或者决定接收还是不接收这些帧,监视是在执行之前。

log

log watcher写一个帧的描述性的数据到syslog

。。。

nflog

tnflog监视是用来把packet传到已经加载的后端,这个通常是用来和nfnetlink_log一起协同工作,这个通常会通过一个网络链路socket把数据包传到多播的一个组,一个或者多个用户空间进程可以向这个组订阅数据包

--nflog

用默认的log参数

--nflog-group 

指定组,默认是1

--nflog-prefix prefix

log前面加前缀,最多30个字符,用来区分不同的messages

--nflog-range size

定义拷贝到用户空间字节数,这个值会重写nfnetlink_log指定的值。

--nflog-threshold

设置内核队列大小,设置大了,到用户空间的包延迟会变大,同时也会减少每个数据包的开销

ulog

ulog监视器传递数据包到用户空间通过多播socket的logging守护,这个和logwatcher的不同在于:通过使用multicast socket把完整的数据包会发送到用户空间,这个监视器允许用户空间的程序分析数据包,物理网桥输入输出端口也被包含在netlink messages里面,当被加载到内核,ulog监视器模块接受2个参数:nlbufsiz指定每个netling 多播组的buffer,最多可以到128KB,这个buffer size是对每一个nlgroup设置的参数值,默认是4k,flushtimeout 表示一秒的几百分之一时间,这个队列会flushed一次,即使队列没有满,默认是10。

--ulog

用ulog的默认值

 ulog-prefix="", ulog-nlgroup=1, ulog-cprange=4096, ulog-qthreshold=1.

--ulog-prefix

--ulog-nlgroup

--ulog-cprange range

定义拷贝到用户空间最大的数量

--ulog-qthreshold threshold

发送到用户空间之前最多缓存的包数,如果队列满了也会触发发送,时间到也会发送

TARGT EXTENSION

arpreply

arreply target可以用在nat表的PREROUTING chain里面,如果有arp请求,则会自动发RARP,可以指定MAC地址,协议必须是ARP,当ARP消息不是一个ARP请求或者ARP请求对应的ip地址不是以太网地址,则会忽略,如果ARP请求是畸形的,则会drop掉。

--arpreply-mac address

指定回复的MAC地址,以太网的源MAC和ARP的负载源MAC将会填这个address

--arpreply-target target

在发送了RARP之后,这个请求包接下来如何处理,默认是丢掉。

dnat

dnat只能用在:broute表的BROUTINGchain,nat表的PREROUTING和OUTPUTchain。用来指明目的MAC地址必须被改变。

--to-destination address

改变address的目的MAC地址

--dnat-target target

指定接下来怎么做

mark

mark target可以用在任何表的任何chain里面,mark可以用在ebtables和iptables,如果bridge-nf code被编进了内核,在同一个地方做mark,这个是ebtables和iptables通信的一种方式。

--mark-set value

对帧用value做mark

--mark-or value

对frame做Or运算,是对原有的mark值做or还是对包做or?

--mark-and value

--makr-xor value

--mark-target

指定规则,默认是accept。

redirect

redirect target会改变MAC target地址为帧到来的网桥地址。

snat

snat target只能用在nat表的POSTROUTNG chain,它指明sourceMAC地址被改变

--to-source address

改变source mac地址为指定的地址

--snat-target target

--snat-arp

同时改变arp头的源地址

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值