随着安全威胁的不断发生,入侵检测系统(IDS)在如今的数据中心环境中显得尤为必要。然而,随着越来越多的服务器将他们的网卡升级到10GB/40GB以太网,对如此线路上的硬件进行计算密集型的入侵检测越来越困难。其中一种提升入侵检测系统性能的途径是多线程入侵检测系统,它将 CPU 密集型的深度包检测工作并行的分配给多个并发任务来完成。这样的并行检测可以充分利用多核硬件的优势来轻松提升入侵检测系统的吞吐量。在这方面有两个知名的开源项目,分别是 Suricata 和 Bro。

这个教程里,我会向大家演示如何在 Linux 服务器上安装和配置 Suricata 入侵检测系统

在 Linux 上安装 Suricata IDS

让我们从源文件来构建 Suricata,但在此之前,需要按如下所示先安装几个依赖包。

在 Debian, Ubuntu 或者 Linux Mint 操作系统上安装依赖包$ sudo apt-get install wget build-essential libpcre3-dev libpcre3-dbg automake autoconf libtool libpcap-dev libnet1-dev libyaml-dev zlib1g-dev libcap-ng-dev libjansson-dev

在 CentOS, Fedora 或者 RHEL 操作系统上安装依赖包$ sudo yum install wget libpcap-devel libnet-devel pcre-devel gcc-c++ automake autoconf libtool make libyaml-devel zlib-devel file-devel jansson-devel nss-devel

一旦将所有依赖包安装完毕,我们就可以继续安装 Suricata 了。

首先从 http://suricata-ids.org/download/ 下载 Suricata 源代码,然后构建它。撰写这篇文章的时候,其最新版本号为 2.0.8 。$ wget http://www.openinfosecfoundation.org/download/suricata-2.0.8.tar.gz$ tar -xvf suricata-2.0.8.tar.gz$ cd suricata-2.0.8$ ./configure --sysconfdir=/etc --localstatedir=/var

以下是配置信息的样例。Suricata Configuration:

AF_PACKET support:                       yes

PF_RING support:                         no

NFQueue support:                         no

NFLOG support:                           no

IPFW support:                            no

DAG enabled:                             no

Napatech enabled:                        no

Unix socket enabled:                     yes

Detection enabled:                       yes

libnss support:                          yes

libnspr support:                         yes

libjansson support:                      yes

Prelude support:                         no

PCRE jit:                                yes

LUA support:                             no  libluajit:                               no  libgeoip:                                no

Non-bundled htp:                         no

Old barnyard2 support:                   no

CUDA enabled:                            no

现在可以编译、安装了。$ make$ sudo make install

Suricata 源代码带有默认的配置文件。按照如下方法安装这些默认配置文件即可。$ sudo make install-conf

正如你所料,如果没有IDS规则集的话,Suricata 什么用也没有。幸好 Makefile 为我们提供了 IDS 规则集的安装选项。安装方法如下。$ sudo make install-rules

以上的规则安装命令会从 EmergingThreats.net 上下载可用的社区规则集快照,并且将其存储在 /etc/suricata/rules 目录下。

首次配置 Suricata IDS

现在到了配置 Suricata 的时候了。配置文件的位置是 /etc/suricata/suricata.yaml。参照以下命令,用文本编辑器打开这个文件。$ sudo vi /etc/suricata/suricata.yaml

文件中有一些运行所需的基本配置。

为default-log-dir关键字指定 Suricata 日志文件所在的位置。default-log-dir: /var/log/suricata/

在vars部分下方,你会发现几项对 Suricata 来说很重要变量。HOME_NET变量需要指定 Suricata 检查的网络。被分配给 EXTERNAL_NET 变量的 !$HOME_NET 代表除本地网络之外的其他网络。XXX_PORTS变量用来辨别不同服务所用到的端口号。需要注意的是无论使用什么端口,Suricata 都可以自动检测 HTTP 流量。所以是不是正确指定端口就显得没那么重要了。vars:    HOME_NET: "[192.168.122.0/24]"    EXTERNAL_NET: "!$HOME_NET"    HTTP_PORTS: "80"    SHELLCODE_PORTS: "!80"    SSH_PORTS: 22

host-os-policy 部分用于防御利用操作系统网络栈的自身行为来逃避检测的一些知名攻击手段(例如:TCP reassembly)。作为对策,通过针对目标操作系统而对检测引擎算法进行微调,现代 IDC 提供了“基于目标”的检测手段。因此,如果你知道某台主机运行了什么操作系统的话,将这个信息提供给 Suricata 就可以大幅提高检测的成功率。这就是 host-os-policy 存在的意义。本例中,默认的 IDC 策略是 Linux 系统。如果针对某个 IP 地址没有指定操作系统信息,Suricata 会默认应用基于 Linux 系统的检测策略。如下,当捕获到对 192.168.122.0/28 和 192.168.122.155通讯时,Suricata 就会应用基于 Windows 系统的检测策略。host-os-policy:

# These are Windows machines.  windows: [192.168.122.0/28, 192.168.122.155]  bsd: []  bsd-right: []  old-linux: []

# Make the default policy Linux.  linux: [0.0.0.0/0]  old-solaris: []  solaris: ["::1"]  hpux10: []  hpux11: []  irix: []  macos: []  vista: []  windows2k3: []

在 threading 部分下,你可以为不同的 Suricata 线程指定 CPU 关联。默认状态下,CPU 关联 是被禁止使用的 (set-cpu-affinity: no),这意味着 Suricata 会分配其线程到所有可用的 CPU 核心上。Suricata 会默认为每一个 CPU 核心创建一个检测线程。你可以通过指定 detect-thread-ratio: N 来调整此行为。此处会创建 N*M 个检测线程,M 代表 CPU 核心总数。threading:

set-cpu-affinity: no  detect-thread-ratio: 1.5

通过以上对线程的设置,Suricata 会创建 1.5*M 个检测线程,M 是系统的 CPU 核心总数。

如果你想对 Suricata 配置有更多的了解,可以去翻阅默认配置文件。里边配有有大量的注释以供你清晰理解。

使用 Suricata 进行入侵监控

现在是时候让 Suricata 跑起来了,但在这之前还有一个步骤需要去完成。

当你使用 pcap 捕获模式的时候,强烈建议关闭 Suricata 监听网卡上的任何的包卸载(例如 LRO/GRO)功能。这些功能会干扰包的实时捕获行为。

按照以下方法关闭 eth0 接口的 LRO/GRO 功能。$ sudo ethtool -K eth0 gro off lro off

这里要注意,在使用某些网卡的情况下,你会看到如下警告信息。忽略它们就行了,这些信息只不过告诉你你的网卡不支持 LRO 功能而已。Cannot change large-receive-offload

Suricata 支持许多运行模式。运行模式决定着 IDC 会使用何种线程。以下命令可以查看所有 可用的运行模式。$ sudo /usr/local/bin/suricata --list-runmodes

Suricata 使用的默认运行模式是 autofp("auto flow pinned load balancing"==“自动流绑定负载均衡” 的缩写)。这个模式下,来自某一个流的包会被分配到一个单独的检测线程中。这些流会根据未被处理的包的最低数量来分配相应的线程。

最后,让我们将 Suricata 运行起来,看看它表现如何。$ sudo /usr/local/bin/suricata -c /etc/suricata/suricata.yaml -i eth0 --init-errors-fatal

本例中,我们在一个8核心系统中监控 eth0 网络接口。如上所示,Suricata 创建了13个包处理线程和3个管理线程。包处理线程中包括一个 PCAP 包捕获线程,12个检测线程(由8*1.5得出)。这表示 IDS 内的1个包捕获线程均衡负载到12个检测线程中。管理线程包括1个流管理和2个计数/统计相关线程。

以下是一个关于Suricata处理的线程截图(由 htop 绘制)。

Suricata 检测日志存储在 /var/log/suricata 目录下。$ tail -f /var/log/suricata/fast.log04/01/2015-15:47:12.559075  [**] [1:2200074:1] SURICATA TCPv4 invalid checksum [**] [Classification: (null)] [Priority: 3] {TCP} 172.16.253.158:22 -> 172.16.253.1:4699704/01/2015-15:49:06.565901  [**] [1:2200074:1] SURICATA TCPv4 invalid checksum [**] [Classification: (null)] [Priority: 3] {TCP} 172.16.253.158:22 -> 172.16.253.1:4631704/01/2015-15:49:06.566759  [**] [1:2200074:1] SURICATA TCPv4 invalid checksum [**] [Classification: (null)] [Priority: 3] {TCP} 172.16.253.158:22 -> 172.16.253.1:46317

日志也可以提供 Json 格式以便导入:$ tail -f /var/log/suricata/eve.json{"timestamp":"2015-04-01T15:49:06.565901","event_type":"alert","src_ip":"172.16.253.158","src_port":22,"dest_ip":"172.16.253.1","dest_port":46317,"proto":"TCP","alert":{"action":"allowed","gid":1,"signature_id":2200074,"rev":1,"signature":"SURICATA TCPv4 invalid checksum","category":"","severity":3}}

{"timestamp":"2015-04-01T15:49:06.566759","event_type":"alert","src_ip":"172.16.253.158","src_port":22,"dest_ip":"172.16.253.1","dest_port":46317,"proto":"TCP","alert":{"action":"allowed","gid":1,"signature_id":2200074,"rev":1,"signature":"SURICATA TCPv4 invalid checksum","category":"","severity":3}}

总结

这篇教程中,我为大家演示了如何在一台多核 Linux 服务器上安装 Suricata 入侵检测系统。不同于单线程的 Snort IDS ,Suricata 可以很容易的从多核硬件的多进程特性所带来的好处中获益。定制 Suricata 来最大化其效能和检测范围是一个很好的主意。Suricata 的粉丝们维护着一个 在线 Wiki,如果你打算将 Suricata 部署到你的环境中,我强烈建议你去那儿取取经。

如果你现在已经开始使用 Suricata 了的话,把你的经验也分享出来吧。

linux 进程suricata,如何在 Linux 系统上安装 Suricata 入侵检测系统相关推荐

  1. 在Ubuntu上安装Snort入侵检测系统。

    转载于:https://www.cnblogs.com/onlyzq/archive/2010/09/10/1823079.html

  2. 在win10系统上安装乌班图系统

    win10系统中含有内置的乌班图系统,所以不用装双系统就可以在windows系统上使用linux系统了 打开Microsoft Store 搜索Ubuntu,点击安装 安装完成之后启动就好了~ [ t ...

  3. mac catalina删除系统多余文件 内存不足_macOS Catalina Patcher(如何在旧mac上安装Catalina系统)...

    macOS Catalina Patcher是一款macOS Catalina修补程序,可以在旧mac上安装最新的Catalina系统工具.macOS Catalina 10.15是Apple受欢迎的 ...

  4. Redis进阶实践之二如何在Linux系统上安装安装Redis

    2019独角兽企业重金招聘Python工程师标准>>> Redis进阶实践之二如何在Linux系统上安装安装Redis 一.引言 上一篇文章写了"如何安装VMware Pr ...

  5. 如何在Linux/MacOS系统上安装Microsoft SQL Server

    转载来源:https://hub.docker.com/_/mssql-server-linux 如何在Linux/MacOS系统上安装Microsoft SQL Server 快速安装 # 首先在L ...

  6. 小白如何在window电脑上安装Linux系统(虚拟机)超详细

    小白如何在window电脑上安装Linux系统(虚拟机) 一.软件准备. 1. VMware软件 下载地址1(迅雷):http://forspeed.onlinedown.net/down/vmwar ...

  7. linux重装eclipse_如何在Linux系统上安装Eclipse

    如何在Linux系统上安装Eclipse 作为Java程序员,需要在Linux系统上安装Eclipse,很多人不知要如何安装,在安装Eclipse前,还需安装JDK,下面小编就给大家介绍下Linux如 ...

  8. 如何在Ubuntu/CentOS上安装Linux内核4.0

    如何在Ubuntu/CentOS上安装Linux内核4.0 大家好,今天我们学习一下如何从Elrepo或者源代码来安装最新的Linux内核4.0.代号为'Hurr durr I'm a sheep'的 ...

  9. linux安装teamviewer黑屏,如何在CentOS 7上安装TeamViewer

    TeamViewer是一种跨平台的解决方案,可用于计算机之间的远程控制,桌面共享和文件传输. TeamViewer是专有的计算机软件,它不包含在CentOS存储库中. 在本教程中,我们将逐步完成在Ce ...

最新文章

  1. Django 模板中使用css, javascript
  2. 13 款 JavaScript 模板引擎
  3. linux mysql 备份脚本_linux 之mysql备份脚本
  4. vue delete删除json数组_vue面试题总结(二)
  5. 【原译】汇编编程之:Hello World!详解- 好文!!!
  6. iOS 给任意一个view转换为image的方法封装
  7. k8s踩坑记第2篇--3个IP折磨人的故事
  8. 如何搭建属于自己的网站博客?(手把手教你)
  9. 最新谷歌本地搜索api
  10. HTML+css网站设计布局模板
  11. k均值算法原理及matlab实现
  12. 电脑win+R小知识
  13. [HTML/CSS]Flex布局中space-evenly的兼容性
  14. 数据仓库和数据集市详解:ODS、DW、DWD、DWM、DWS、ADS
  15. C语言_关于文件内容删除的两个方法总结
  16. matlab共形映射程序,从共形映射角度看Schwarz引理
  17. 开放原子开源基金会OpenHarmony开发者大会2023圆满举办
  18. 阿蒙森 斯科特_斯科特的单元测试定律
  19. a除以b的编程怎么写C语言,输入a,b两个整数,编程求出a除以b得到的商和余数.c语言...
  20. python将10到1递减_基本递减循环 - PYTHON

热门文章

  1. php m4a文件头,各类文件头标志大全
  2. 在linux操作系统安装运行tomcat,修改默认端口
  3. [转]windchill部分表说明
  4. 神奇的兔子数列——算法学习笔记
  5. java获取零时区时间戳
  6. pandas自定义函数进行数据清洗
  7. 斯坦纳问题的matlab代码,几类特殊斯坦纳最小树问题的研究
  8. 前端自适应布局-带文字图片的自适应
  9. 3D游戏开发之基础建模
  10. 视频教程-手写Java框架系列教程之一反射(含配套资料)-Java