Snort的TILE64移植
一、简述
本文分析了如何利用Tilera的高速I/O库netio以及并行处理库ilib把Snort快速到TILE64上,以支持更大带宽的入侵检测。
二、TILE64
TILE64是Tilera公司于2007年发布的着眼于嵌入式应用的高性能通用CPU:
从图中可以看出TILE64由64个主频工作在700~866的独立的核构成,每一个独立的核称为一个Tile,所有这些Tile由每个Tile中的Switch Engine连接组成一个8x8的Mesh网络,从而实现Tile之间的高速通信。
TILE64外围的高性能接口包括两个10GE(XAUI)、两个GE、以及两个4-Lane的PCIe。对于这个高速接口Tilera已经提供了完整的驱动以及用户库,从而构成一个完整的开发平台而不是单纯的CPU芯片。在TILE64上直接和硬件打交道的是每个Tile上独立的Hypervisor层;在这之前是统一的一个Supervisor层,目前是SMP Linux。
对于10GE/GE接口,Tilera平台在Hypervisor中提供了一个跑在专门的Tile上的IPP驱动(Input Packet Process)来完成高速数据包的处理。下面是数据包从接口流入芯片之后的处理过程:
在实际环境中,往往会有多个Worker Tile来进行分流以处理高速接口的处理。IPP根据用户的配置可以进行流的分类,如是Round-Robin,把处理流均匀地分配到各Tile上;或根据L2/L3/L4包头进行分类,保留把同一个流分配到同一个Tile上。另外IPP也实现了Load Balance的功能,根据用户配置可以把不同的流均匀地分配到不同的Tile上进行处理。
三、Snort
Snort是开源的轻量级NIDS/IPS,通过rule-driven language来控制,综合了signature,、protocol 及anomaly based入侵检测方式。Snort的创始人创建了Sourcefire公司,在Snort的基础上开发出一款高性能的NIDS/IPS系统;另外有许多其它的商业产品也是基于Snort开发的。这使得Snort成为目前事实上的行业标准。
Snort的构架清晰而灵活,由以下几部分组成:
上图可以看到,Snort是模块化设计,移植的话往往只考虑其中特定的模块即可。向TILE64移植的方案在我们讲完并行设计之后综合Tilera的库来完成方案设计。
四、并行设计
并行设计通常有两种分解方式:
1.       Functional Decomposition。通常也叫Pipeline,把一个功能的整个过程分解为不同的步骤,每一个步骤由不同的CPU完成,一个完全之后交给下一个处理:
2.       Data Decomposition。这种方式一般是把需要处理的数据划分为不同的部分,交给处理过程完全相同的进程独立地处理:
而实际环境中往往并不会采用单一模型,而可能是两种方式混合出来的,通常也叫Hybrid Decomposition:
五、Snort的TILE64移植方案
Snort的跨平台性做得很好,能运行于多种不同的操作系统如Linux、Windows、FreeBSD等。TILE64的平台中已经提供了SMP Linux,所以很容易就实现交叉编译在上面运行基于Linux协议栈的Snort。但这样移植的Snort是不能发挥TILE64的高速I/O以及多核的优势的。
首先我们先介绍移植中会用的Tilera的开发平台中提供的两个库:
netio库——用于高速网络数据包处理的库。它利用Hypervisor的IPP驱动直接绕过Linux协议栈把二层数据包提取到用户空间,实现了零拷贝的特性。
ilib库——用于并行设计的库。封装了多进程的相关处理,可以灵活地把进程位于指定的Tile之上从而最大化地利用I/O接口和核间网络;同时也提供了利用核间网络进行进程间高速通信的接口。
根据前面所述Snort的结构分析以及并行设计思想,利用下述方案就可以简单地把Snort移植到TILE64平台上:
1.       Snort的Packet Capture部分是基于libpcap设计的,我们不采用修改Snort中使用libpcap的部分,而是利用netio来实现libpcap的一个子集(称为stub)来灵活地完成从传统基于协议栈的抓包到高速netio库的切换。
2.       采用Data Decomposition方式来实现多进程并行处理。在数据可划分的情况下数据分解比较简单,只是简单地启动几个并行的进程针对不同的处理进行相同的处理,程序基本上不需要修改。数据的分解利用IPP驱动的分流和Load Balance机制,直接把数据流均匀地分配到不同的Snort进程中进行检测。
下面是简单移植的Demo的数据流图:
到现在为止,我们已经简单地把Snort移植到了TILE64平台上。但要最大化性能,还有许多值得进一步优化的地方:
1.       不同的检测耗时不同,只靠IPP的简单分流会导致有些进程很慢而有些比较空闲,并且处理过于复杂会导致ICache Miss增加,因此需要对Snort的整个处理流程进行Functional Decomposition,划分出Pileline来,所以最终的系统应该是基于Hybrid Decomposition的。
2.       大流量的Output部分也是要考虑优化的。目前只是简单地基于日志文件,如果记录量很大时需要考虑用高速I/O记录到外部专门的存储服务器上。
3.       利用Profiling找出效率的关键进进行重点优化,有些地方考虑使用专用指令(ArchLib)来提高速度。
4.       找一个实际的环境利用编译器的Feed Back优化,通过自动采集和分析执行过程的处理来优化编译的结果,进一步提高速度。

Snort的TILE64移植相关推荐

  1. 「干货」Snort使用手册「详细版」

    也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 0x01 前言 1.1 IDS是什么? IDS(intrus ...

  2. 基于Snort的入侵检测系统_相关论文

    摘 要 随着网络技术的发展,中小型企业已建设了属于自己的信息化业务平台与系统.中小型企业只有实现信息互通,资源共享,才能够在当今的竞争中生存下去,但信息的互通会面临一些安全问题,对此需要对其采取一些措 ...

  3. 极路由 安装php,自己动手DIY:极路由贰移植WiFi Pineapple

    原文出处:FreebuF.COM TTL刷openwrt 在极路由9003以上版本中,官方加入了防刷固件,无法使用用户通过桶菊花(Rst刷机法)进行刷机,太特么可耻的,所以只能使用ttl刷机法了. 使 ...

  4. 入侵检测系统--snort知识

    1. IPS简介 入侵指的是破坏目标系统资源的完整性 . 机密性或可用性的一系列活动 . I D S 所检测的入侵不包括物理入侵 , 而仅包括以电子方式从系统内部或者外部发起的 , 尝试或者实施对系统 ...

  5. PowerBuilder程序 ASA 数据库移植后不能连接解决

    前言: 软件开发工具实践课作业用的powerbuilder自带的数据库画板建立的,建好之后运行成功后就没有再管过了.后来代码在别人的机器跑不起来.报错信息如下 找到原因: 程序运行完后,没有手动断开连 ...

  6. web server大全之GoAhead移植(转载)

    转自:http://linux.chinaunix.net/techdoc/develop/2009/06/19/1119124.shtml 注:最近在做goAhead web server和移植其到 ...

  7. Tomcat V6 Examples移植到Apusic V5.1

    目标:将Tomcat V6的的例子Examples移植到Apusic V5.1上 术语:Tomcat:只提供了WEB容器的开源服务器: Apusic:提供了完整的J2EE支持的商用服务器: %TOMC ...

  8. 嵌入式linux alsa,嵌入式Linux下ALSA音频架构ALSA-lib移植与编译心得

    **************************************************************************************************** ...

  9. java的移植性_详细介绍JAVA的可移植性

    软件可移植性指与软件从某一环境转移到另一环境下的难易程度.为获得较高的可移植性,在设计过程中常采用通用的程序设计语言和运行支撑环境.尽量不用与系统的底层相关性强的语言.下面介绍JAVA的可移植性. 1 ...

  10. [mqtt]mqtt嵌入式移植

    目前在无线这块,很多4G模组的厂商已经将mqtt放入模块内,无需在项目代码中再实现mqtt移植 github eclipse paho source code: https://github.com/ ...

最新文章

  1. 模拟浏览器自动化测试工具Selenium之三页面窗口切换开发篇
  2. ML之SVM:基于SVM(支持向量机)之SVC算法对手写数字图片识别进行预测
  3. 达人探店小程序全套源码
  4. Oracle数据库是如何执行SQL的
  5. 啦啦啦-我又来了!!!
  6. Logisim元件用法详解一:Wiring 线
  7. 2018年版计算机技术类北大中文核心期刊目录
  8. ns3--入门基础概念
  9. 2021深圳杯d题数学建模 基于一个微分对策问题的机器学习能力定量评价
  10. 【所见即所得】数据分析最有用的25个 Matplotlib图【附代码】
  11. C#日期格式参考小结
  12. 攻防世界-Web-练习区12题解
  13. Encoder-Decoder 模型架构详解
  14. 狭义相对论从入门到入土(建议初一及以上)
  15. Anaconda+Pycharm下载及环境配置
  16. 1375. 至少K个不同字符的子串
  17. 关于win7 出现两个本地连接不能上网的问题?
  18. 那些年我做家教学过的东西_决策与风险decision and risk_1_贝叶斯推断Bayes Inference
  19. Datawhale组队学习-NLP新闻文本分类-TASK05
  20. 细数Xcode 6 给我们带来的新特性

热门文章

  1. 客户预付款处理和设置
  2. matlab抗混叠滤波器,抗混叠滤波器讲解.doc
  3. Uncaught TypeError: $(...).modal is not a function
  4. matlab 求约当阵,矩阵约当标准化的一个新方法
  5. day10:声明式事务控制
  6. 衣带渐宽终不悔,为伊消得人憔悴
  7. html5游戏封包工具,游戏解包Extractor
  8. String实现 intern
  9. 警惕针对SQL的爆破攻击,入侵者会完全控制服务器,挖矿只是小目标
  10. translation exercise 3