ebtables是与iptables类似的命令, 区别在于ebtables用于对以太网帧的过滤,iptables用于对ip数据包的过滤。
过滤流程见图
(原图来源于 http://blog.csdn.net/wuruixn/article/details/8107862)
图片不太清晰, 我分成两部分
1. 命令格式
ebtables [-t table ] -[ACDI] chain rule specification [match extensions] [watcher extensions] target
ebtables [-t table ] -P chain ACCEPT | DROP | RETURN
ebtables [-t table ] -F [chain]
ebtables [-t table ] -Z [chain]
ebtables [-t table ] -L [-Z] [chain] [ [--Ln] | [--Lx] ] [--Lc] [--Lmac2]
ebtables [-t table ] -N chain [-P ACCEPT| DROP| RETURN]
ebtables [-t table ] -X [chain]
ebtables [-t table ] -E old-chain-name new-chain-name
ebtables [-t table ] --init-table
ebtables [-t table ] [--atomic-file file]--atomic-commit
ebtables [-t table ] [--atomic-file file]--atomic-init
ebtables [-t table ] [--atomic-file file]--atomic-save
2. table
filter: 默认表,处理帧的过滤的表。没有-t就指filter表
nat: 用于改变Mac地址的表(network address translation)
broute: 用于决定是route还是bridge的表。
3. Chain Rule的集合,通常跟帧流向有关
默认的Chain:
filter: INPUT (接收的帧), OUTPUT(发出去的帧), FORWARD(要转发的帧)
nat: PREROUTING(帧进来前处理,filter的INPUT之前), POSTROUTING(帧发出去时处理,OUTPUT之后), OUTPUT(要发出去的帧)
broute:只有一个BROUTING, 这个处理比较早。 只有两个targets.一个是DROP(要路由), 另一个是ACCEPT(要桥接)。
4. 命令
4.1 Chain命令
-N, --new-chain 新建chain
-X, --delete-chain 删除chain
-E, --rename-chain 重命名chain
-P, --policy 设置chain的default规则。如默认是ACCEPT, DROP 或RETURN.
-F, --flush 清空chain的规则
-Z, --zero 设置chain的counters为0. 如没有指定chain, 则所有chains的counter都置为0
-L, --list 列出chain的规则(rules), 如没有指定chain, 则指有chains.
4.2 rule命令
-A, --append 新加指定chain的一条rule在后面
-D, --delete 删除指定chain的一条rule
-I, --insert 插入指定chain的一条rule
-C, --change-counters 改变指定chain的rule的counters
4.3 table命令
--init-table 用init_table数据替换当前table的数据
--atomic-init 拷贝kernel的table的init data到指定文件
--atomic-save 拷贝kernel的table的当前data到指定文件
--atomic-commit 用指定文件的数据替换当前的kernel table数据
4.4 其他命令
-V, --version 显示版本信息
-h, --help
-j, --jump target target指ACCEPT, DROP, CONTINUE, RETURN。
--atomic-file file command来源于一个指定文件
-M, --modprobe program 如果某个module没有load, 则在kernel里load
--concurrent 在update kernel表时使用文件锁来进行并行操作
5. target 指的是要做什么操作。
通常指ACCEPT(接受,允许通过, BROUTE指bridge), DROP(不允许通过,放弃, BROUTE指route), CONTINUE(继续下一个检查), RETURN(这个检查停止,进行上一个检查调用的地方进行下一个检查)。
target也可以用一个表达式,也可以是自定义的chain.
6. 规则匹配
-p, --protocol [!] protocol 协议匹配
-i, --in-interface [!] name 输入接口匹配
-o, --out-interface [!] name 输出接口匹配
-
--logical-in [!] name 逻辑输入bridge接口
--logical-out [!] name 逻辑输出bridge接口
-s, --source [!] address[/mask] 源地址(MAC)
-
-
-d, --destination [!] address[/mask] 目的地址(MAC)
-
-c, --set-counter pcnt bcnt
更多匹配规则详见http://ebtables.netfilter.org/misc/ebtables-man.html
参考文档
http://ebtables.netfilter.org/misc/ebtables-man.html
http://blog.csdn.net/wuruixn/article/details/8107862
external/ebtables/docs/how_it_works.html