如何在 Linux 系统上安装 Suricata 入侵检测系统

本文涉及的产品
云防火墙,500元 1000GB
简介:

如何在 Linux 系统上安装 Suricata 入侵检测系统



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

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

在 Linux 上安装 Suricata IDS

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

在 Debian, Ubuntu 或者 Linux Mint 操作系统上安装依赖包

  
  
  1. $ 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
AI 代码解读

在 CentOS, Fedora 或者 RHEL 操作系统上安装依赖包

  
  
  1. $ 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
AI 代码解读

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

首先从 http://suricata-ids.org/download/ 下载 Suricata 源代码,然后构建它。撰写这篇文章的时候,其最新版本号为 2.0.8 。

  
  
  1. $ wget http://www.openinfosecfoundation.org/download/suricata-2.0.8.tar.gz
  2. $ tar -xvf suricata-2.0.8.tar.gz
  3. $ cd suricata-2.0.8
  4. $ ./configure --sysconfdir=/etc --localstatedir=/var
AI 代码解读

以下是配置信息的样例。

  
  
  1. Suricata Configuration:
  2. AF_PACKET support: yes
  3. PF_RING support: no
  4. NFQueue support: no
  5. NFLOG support: no
  6. IPFW support: no
  7. DAG enabled: no
  8. Napatech enabled: no
  9. Unix socket enabled: yes
  10. Detection enabled: yes
  11. libnss support: yes
  12. libnspr support: yes
  13. libjansson support: yes
  14. Prelude support: no
  15. PCRE jit: yes
  16. LUA support: no
  17. libluajit: no
  18. libgeoip: no
  19. Non-bundled htp: no
  20. Old barnyard2 support: no
  21. CUDA enabled: no
AI 代码解读

现在可以编译、安装了。

  
  
  1. $ make
  2. $ sudo make install
AI 代码解读

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

  
  
  1. $ sudo make install-conf
AI 代码解读

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

  
  
  1. $ sudo make install-rules
AI 代码解读

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

首次配置 Suricata IDS

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

  
  
  1. $ sudo vi /etc/suricata/suricata.yaml
AI 代码解读

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

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

  
  
  1. default-log-dir: /var/log/suricata/
AI 代码解读

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

  
  
  1. vars:
  2. HOME_NET: "[192.168.122.0/24]"
  3. EXTERNAL_NET: "!$HOME_NET"
  4. HTTP_PORTS: "80"
  5. SHELLCODE_PORTS: "!80"
  6. SSH_PORTS: 22
AI 代码解读

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 系统的检测策略。

  
  
  1. host-os-policy:
  2. # These are Windows machines.
  3. windows: [192.168.122.0/28, 192.168.122.155]
  4. bsd: []
  5. bsd-right: []
  6. old-linux: []
  7. # Make the default policy Linux.
  8. linux: [0.0.0.0/0]
  9. old-solaris: []
  10. solaris: ["::1"]
  11. hpux10: []
  12. hpux11: []
  13. irix: []
  14. macos: []
  15. vista: []
  16. windows2k3: []
AI 代码解读

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

  
  
  1. threading:
  2. set-cpu-affinity: no
  3. detect-thread-ratio: 1.5
AI 代码解读

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

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

使用 Suricata 进行入侵监控

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

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

按照以下方法关闭 eth0 接口的 LRO/GRO 功能。

  
  
  1. $ sudo ethtool -K eth0 gro off lro off
AI 代码解读

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

  
  
  1. Cannot change large-receive-offload
AI 代码解读

Suricata 支持许多运行模式。运行模式决定着 IDC 会使用何种线程。以下命令可以查看所有 可用的运行模式

  
  
  1. $ sudo /usr/local/bin/suricata --list-runmodes
AI 代码解读

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

最后,让我们将 Suricata 运行起来,看看它表现如何。

  
  
  1. $ sudo /usr/local/bin/suricata -c /etc/suricata/suricata.yaml -i eth0 --init-errors-fatal
AI 代码解读

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

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

Suricata 检测日志存储在 /var/log/suricata 目录下。

  
  
  1. $ tail -f /var/log/suricata/fast.log
AI 代码解读

  
  
  1. 04/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:46997
  2. 04/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:46317
  3. 04/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
AI 代码解读

日志也可以提供 Json 格式以便导入:

  
  
  1. $ tail -f /var/log/suricata/eve.json
AI 代码解读

  
  
  1. {"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}}
  2. {"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}}
AI 代码解读

总结

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

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



本文来自云栖社区合作伙伴“Linux中国”

原文发布时间为:2013-04-02.

目录
打赏
0
0
0
0
19
分享
相关文章
Linux系统资源管理:多角度查看内存使用情况。
要知道,透过内存管理的窗口,我们可以洞察到Linux系统运行的真实身姿,如同解剖学家透过微观镜,洞察生命的奥秘。记住,不要惧怕那些高深的命令和参数,他们只是你掌握系统"魔法棒"的钥匙,熟练掌握后,你就可以骄傲地说:Linux,我来了!
73 27
|
28天前
|
零基础保姆级教程!手把手教你免费玩转Linux CentOS安装+学习环境搭建(附避坑指南)
本文详细介绍了在VMware虚拟机中安装CentOS 6.8的全过程。首先,需确保已安装VMware并开启V-CPU虚拟化功能,可通过BIOS设置或使用LeoMoon CPU-V工具检测。接着,下载CentOS镜像文件,并在VMware中新建虚拟机,配置CPU、内存、硬盘等参数。最后,加载ISO镜像启动虚拟机,按照提示完成CentOS的安装,包括语言、键盘、存储方式、地区、密码设置及硬盘分区等步骤。安装完成后,以root用户登录即可进入系统桌面,开始学习Linux命令和操作。
108 12
零基础保姆级教程!手把手教你免费玩转Linux CentOS安装+学习环境搭建(附避坑指南)
在Rocky Linux 9上安装JDK并配置环境变量!
本教程介绍在Rocky Linux 9上安装JDK并配置环境变量的完整步骤。首先更新系统,清理旧版本JDK相关包及残留文件,确保环境干净。接着搜索并安装所需版本的JDK(如OpenJDK 17),验证安装是否成功。然后查找JDK安装路径,配置全局环境变量`JAVA_HOME`和`PATH`,最后验证环境变量设置。按照此流程操作,可顺利完成Java开发环境搭建,支持多版本切换(如JDK 8/11/17)。生产环境请谨慎操作,避免影响现有服务。
79 21
YashanDB Linux客户端安装
本文详细介绍了YashanDB客户端在Linux系统中的安装、使用与卸载步骤。安装方法包括适用于所有Linux平台的脚本安装和专用于CentOS的rpm安装。脚本安装需解压软件包并配置环境变量,而rpm安装则需以root用户执行相关命令。此外,文章还说明了如何通过yasql连接YashanDB并进行数据库操作,以及两种安装方式对应的卸载方法,帮助用户顺利完成客户端的管理与维护。
Linux 手动安装快速部署 LNMP 环境实战
本文详细记录了在阿里云ECS上手动搭建LNMP环境的过程,系统选用Ubuntu 24.04。主要内容包括:1) 使用`apt`安装Nginx和MySQL,并更新软件源;2) 编译安装PHP 8.4.5,配置PHP-FPM及环境路径;3) 配置MySQL root用户密码;4) 调整Nginx支持PHP解析并测试整体环境。通过此过程,重现手动配置服务器的细节,帮助熟悉各组件的安装与协同工作。
|
13天前
|
Linux系统ext4磁盘扩容实践指南
这个过程就像是给你的房子建一个新的储物间。你需要先找到空地(创建新的分区),然后建造储物间(格式化为ext4文件系统),最后将储物间添加到你的房子中(将新的分区添加到文件系统中)。完成这些步骤后,你就有了一个更大的储物空间。
68 10
Android调试终极指南:ADB安装+多设备连接+ANR日志抓取全流程解析,覆盖环境变量配置/多设备调试/ANR日志分析全流程,附Win/Mac/Linux三平台解决方案
ADB(Android Debug Bridge)是安卓开发中的重要工具,用于连接电脑与安卓设备,实现文件传输、应用管理、日志抓取等功能。本文介绍了 ADB 的基本概念、安装配置及常用命令。包括:1) 基本命令如 `adb version` 和 `adb devices`;2) 权限操作如 `adb root` 和 `adb shell`;3) APK 操作如安装、卸载应用;4) 文件传输如 `adb push` 和 `adb pull`;5) 日志记录如 `adb logcat`;6) 系统信息获取如屏幕截图和录屏。通过这些功能,用户可高效调试和管理安卓设备。
|
2月前
|
Linux系统之whereis命令的基本使用
Linux系统之whereis命令的基本使用
108 24
Linux系统之whereis命令的基本使用
|
25天前
|
Linux系统中如何查看CPU信息
本文介绍了查看CPU核心信息的方法,包括使用`lscpu`命令和读取`/proc/cpuinfo`文件。`lscpu`能快速提供逻辑CPU数量、物理核心数、插槽数等基本信息;而`/proc/cpuinfo`则包含更详细的配置数据,如核心ID和处理器编号。此外,还介绍了如何通过`lscpu`和`dmidecode`命令获取CPU型号、制造商及序列号,并解释了CPU频率与缓存大小的相关信息。最后,详细解析了`lscpu`命令输出的各项参数含义,帮助用户更好地理解CPU的具体配置。
77 8
Linux中yum、rpm、apt-get、wget的区别,yum、rpm、apt-get常用命令,CentOS、Ubuntu中安装wget
通过本文,我们详细了解了 `yum`、`rpm`、`apt-get`和 `wget`的区别、常用命令以及在CentOS和Ubuntu中安装 `wget`的方法。`yum`和 `apt-get`是高层次的包管理器,分别用于RPM系和Debian系发行版,能够自动解决依赖问题;而 `rpm`是低层次的包管理工具,适合处理单个包;`wget`则是一个功能强大的下载工具,适用于各种下载任务。在实际使用中,根据系统类型和任务需求选择合适的工具,可以大大提高工作效率和系统管理的便利性。
185 25
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等