ebtables介绍【转】

时间:2024-03-20 15:47:57

(转自:https://blog.csdn.net/kv110/article/details/47919913

ebtables是与iptables类似的命令, 区别在于ebtables用于对以太网帧的过滤,iptables用于对ip数据包的过滤。

过滤流程见图

ebtables介绍【转】

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