浅析ebtables的概念和一些基本应用
一、ebtables 是什么?
ebtables和iptables类似,都是Linux系统下网络数据包过滤的配置工具。
为什么叫配置工具呢?
是因为他们只制定规则,具体的实施者是内核!也就是说过滤功能是由内核底层提供支持的,这两个工具只是负责制定过滤的rules。
二、ebtables 的用途?
ebtables就是以太网桥防火墙,以太网桥工作在数据链路层,ebtables主要用来过滤数据链路层数据包。
ebtables 能过滤桥接流量。
三、ebtables 的工作原理
ps : ebtables的主要工作的就是过滤,同iptables,ebtables也有多个过滤节点,通过过滤节点来说明工作原理
1. 过滤时机
数据包从进入到离开系统,要经过PreRoute,Input,Forward,PostRoute,Output这五个阶段。每个阶段中包括了一些节点,每个节点就是一个过滤时机。当数据包行进到某个节点时,系统就是检测对应节点的过滤规则并进行过滤。
- prerouting:数据进来还未查询路由表之前的规则。
- input:由外部发往用户空间内部的规则。(
说直白点就是负责过滤目标地址是本机的数据包) - forward:不进入用户空间,进行路由转发的规则。(负责转发流经主机但不进入本机的数据包)
- postrouting:查询完路由表后,将要转发的规则。
- output:由用户空间内部发往外部的规则。(负责处理本机发出的数据包)
注意:ebtables每个阶段的的过滤时机都比iptables要早。(这个不是绝对的从本机上层下来的报文经过postrouting是先ip再eb)
2、使用方法
ps : 主要讲解过滤原理与配置
ebtables的配置分为表、链和规则三级。
- 表
表是内置且固定的,共有三种: filter, nat, broute,用-t选项指定。最常用的就是filter了,所以不设-t时默认就是这个表。
filter过滤本机流入流出的数据包是默认使用的表,nat用于地址转换-mac地址,broute用于以太网桥-产生一个桥路器。 - 链(chains)
链有内置和自定义两种 。不同的表内置的链不同,这个从数据包的流程图中就可以看出来。所谓自定义的链也是挂接在对应的内置链内的,使用-j让其跳转到新的链中。如果以太网帧没有匹配到当前的规则,就会去检查下一个规则。(实例见使用场景介绍) 规则也叫目标(targets)
每个链中有一系列规则,每个规则定义了一些过滤选项。每个数据包都会匹配这些项,一但匹配成功就会执行对应的动作。
所谓动作,就是过滤的行为了。有四种,ACCEPT,DROP,RETURN和CONTINUE。
详解一下:
当帧匹配一个规则(rule)时,下一个动作(action)由target指定。targets由四个:
- ACCEPT:意味着让一个帧通过
- DROP:意味着帧已经被dropped。注意:在BROUTING chain中,1、2有特殊的意思
- CONTINUE:意味着下一个规则(rule)将被检查
- RETURN:意味着停止遍历此链,并在前一个调用链的下一条规则中恢复。其实就是退出,和代码中的
continue差不多,这里就是退出在此链继续遍历,直接进行后续操作 (详见下文使用场景中的ruturn使用)
四、ebtables 的使用场景
ps:这里主要是对ANDI设备使用ebtables的场景进行分析,以便于能更清晰明了的理解过滤的概念
1. 在后台输入命令:ebtables nat -t 查看nat表
详细分析:
- -p:指明使用的协议类型
- --vlan-encap 0806 带vlan的arp
VLAN Tag中的一个字段,IEEE 802.1q协议规定该字段的取值为0x8100
0806:0806指的是后面的数据是属于arp包的所以上述命令的意思就是:
- 允许带vlan的qrp包通过
- 允许arp包通过
2、自建链讲解
详细分析:
上述指令就是将sat0出的且标记不为0x1的报文转到自建链SENSE_BUS_CHAIN中处理
-o:指明从那片网卡出去
注意:这也就是我们前面提到的自定义的链也是挂接在对应的内置链内,此处自建链“SENSE_BUS_CHAIN”就挂载内置链POSTROUTING中。
3、return的使用
详细分析:
说明:报文从POSTROUTING链转到自建链处理,先阅读一下指令
- IP协议的报文执行return
- 带VLAN的IP协议执行return
- 执行return
分析:3个retrun 一眼看过去,毫无意义。所有报文即使不走前两个也会在第三个return。为什么要这么做呢?这里主要是为了计数区分IP和非IP报文
附:以太网帧结构的TYPE字段为:0x0800, 表示该帧是IP协议
五、ebtables 的常用命令
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:指明从那片网卡出去
Ebtables基本命令
有了上面的简单介绍,再熟悉一些基本命令就可以使用了。
1. 列表:
ebtables -L
ebtables -L –Lc , 查看各rule的匹配次数以及字节数
2. 新建/删除链
ebtables -N
ebtables -X
3. 新建规则
ebtables -A [ rules ]
[rules]有几种
-s 源MAC -d 目标MAC -i 入接口 -o 出接口
命令示例:
ebtables -P FORWARD ACCEPT
ebtables -P INPUT ACCEPT
ebtables -P OUTPUT ACCEPT
ebtables -F
ebtables -A FORWARD -p ipv4 -i eth0/eth1 --ip-proto (6/17) --ip-dst(目的IP) --ip-dport(目的端口) -j DROP
ebtables -A FPRWARD -p ipv4 -i eth0/eth1 --ip-proto (7/17) --ip-src(源IP) --ip-sport(源端口) -j DROP
参考文档:
https://www.xuebuyuan.com/3242711.html
https://www.cnblogs.com/balance/p/8711264.html
https://www.jianshu.com/p/79bcf09aed25
浅析ebtables的概念和一些基本应用的更多相关文章
- InnoDB的锁机制浅析(一)—基本概念/兼容矩阵
InnoDB锁的基本概念 文章总共分为五个部分: InnoDB的锁机制浅析(一)-基本概念/兼容矩阵 InnoDB的锁机制浅析(二)-探索InnoDB中的锁(Record锁/Gap锁/Next-key ...
- InnoDB的锁机制浅析(五)—死锁场景(Insert死锁)
可能的死锁场景 文章总共分为五个部分: InnoDB的锁机制浅析(一)-基本概念/兼容矩阵 InnoDB的锁机制浅析(二)-探索InnoDB中的锁(Record锁/Gap锁/Next-key锁/插入意 ...
- InnoDB的锁机制浅析(四)—不同SQL的加锁状况
不同SQL的加锁状况 文章总共分为五个部分: InnoDB的锁机制浅析(一)-基本概念/兼容矩阵 InnoDB的锁机制浅析(二)-探索InnoDB中的锁(Record锁/Gap锁/Next-key锁/ ...
- InnoDB的锁机制浅析(三)—幻读
文章总共分为五个部分: InnoDB的锁机制浅析(一)-基本概念/兼容矩阵 InnoDB的锁机制浅析(二)-探索InnoDB中的锁(Record锁/Gap锁/Next-key锁/插入意向锁) Inno ...
- InnoDB的锁机制浅析(二)—探索InnoDB中的锁(Record锁/Gap锁/Next-key锁/插入意向锁)
Record锁/Gap锁/Next-key锁/插入意向锁 文章总共分为五个部分: InnoDB的锁机制浅析(一)-基本概念/兼容矩阵 InnoDB的锁机制浅析(二)-探索InnoDB中的锁(Recor ...
- InnoDB的锁机制浅析(All in One)
目录 InnoDB的锁机制浅析 1. 前言 2. 锁基本概念 2.1 共享锁和排它锁 2.2 意向锁-Intention Locks 2.3 锁的兼容性 3. InnoDB中的锁 3.1 准备工作 3 ...
- Python爬取CSDN博客文章
0 url :http://blog.csdn.net/youyou1543724847/article/details/52818339Redis一点基础的东西目录 1.基础底层数据结构 2.win ...
- influxdb的命令们
InfluxDB是一个开源的时序数据库,使用GO语言开发,特别适合用于处理和分析资源监控数据这种时序相关数据.而InfluxDB自带的各种特殊函数如求标准差,随机取样数据,统计数据变化比等,使数据统计 ...
- influxdb基础那些事儿
InfluxDB是一个开源的时序数据库,使用GO语言开发,特别适合用于处理和分析资源监控数据这种时序相关数据.而InfluxDB自带的各种特殊函数如求标准差,随机取样数据,统计数据变化比等,使数据统计 ...
随机推荐
- 初识nginx!
What--什么是nginx nginx是一款高性能的http服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器.官方测试nginx能够支撑5w并发连接.并且cup.内存等资源消耗却非常 ...
- [小米OJ] 9. 移除 K 位得到最小值
思路: 重复k次: 1.找到并且删除第一个 num[i] > num[i+1] 的第i位数字. 2.若删除过程中,序列变成递增序列,则直接删除最后一位. 注意除去字符串头的0 def solut ...
- [剑指offer] 34. 第一个只出现一次的字符
题目描述 在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写). 一次遍历存储到哈希表 一次 ...
- LiteDB源码解析系列(3)索引原理详解
在这一章,我们将了解LiteDB里面几个基本数据结构包括索引结构和数据块结构,我也会试着说明前辈数据之巅在博客中遇到的问题,最后对比mysql进一步深入了解LiteDB的索引原理. 1.LiteDB的 ...
- 【SVN】SVN使用教程总结
SVN使用教程总结 SVN简介: 为什么要使用SVN? 程序员在编写程序的过程中,每个程序员都会生成很多不同的版本,这就需要程序员有效的管理代码,在需要的时候可以迅速,准确取出相应的版本. Subve ...
- Django的学习进阶(三)————ORM
django框架是将数据库信息进行了封装,采取了 类——>数据表 对象——>记录 属性——>字段 通过这种一一对应方式完成了orm的基本映射官方文档:https://docs.dja ...
- 详述Spring对数据校验支持的核心API:SmartValidator
每篇一句 要致富,先修路.要使用,先...基础是需要垒砌的,做技术切勿空中楼阁 相关阅读 [小家Java]深入了解数据校验:Java Bean Validation 2.0(JSR303.JSR349 ...
- 转 - RPC调用和HTTP调用的区别
很长时间以来都没有怎么好好搞清楚RPC(即Remote Procedure Call,远程过程调用)和HTTP调用的区别,不都是写一个服务然后在客户端调用么?这里请允许我迷之一笑~Naive!本文简单 ...
- 第三章 JavaScript操作Dom对象
常用的方法: 1.访问节点: 通过Document.getElementByXXX()获得一个指定节点-->再通过以下属性节点访问节点:第一部分:节点属性a:parentNode 返回节点的父节 ...
- ProcessBuilder waitFor 调用外部应用
小程序项目最初使用ffmpeg转换微信录音文件为wav格式,再交给阿里云asr识别成文字.视频音频转换最常用是ffmpeg. 1 ffmpeg -i a.mp3 b.wav 相关文章: 小程序实现语音 ...