入侵检测系统(IntrusionDetectionSystem,IDS)是一种主动保护自己免受攻击的一种网络安全技术。作为防火墙的合理补充,入侵检测技术能够帮助系统监测攻击行为,扩展了系统管理员的安全管理能力(包括安全审计、监视、攻击识别和响应),提高了信息安全基础结构的完整性。它从计算机网络系统中的若干关键点收集信息,并分析这些信息。入侵检测被认为是防火墙之后的第二道安全闸门,能够在不影响网络性能的情况下能对网络进行监测,防止或减轻上述的网络威胁。
入侵检测系统有很多种,从部署的位置可以分为以下几种:
- 基于网络的系统。它放置于网络之上,靠近被检测的系统,它们监测网络流量并判断是否正常。
- 基于主机的系统。其经常运行在被监测的系统之上,用以监测系统上正在运行的进程是否合法。
最近出现的一种系统,位于操作系统的内核之中,并监测系统的最底层行为。
从检测的技术手段上可以分为以下两种:
- 误用检测:是将收集到的数据与预先确定的特征知识库里的各种攻击模式进行比较,如果发现有攻击特征,则判断有攻击。特征知识库是将己知的攻击方法和技术的特征提取出来建立的一个知识库。
- 异常检测:是对收集到的数据进行统计分析。它首先假定所有的攻击行为与正常行为不同,这样发现与正常行为有不同时,则判断存在攻击。它需要建立正常行为的标准,如登录时错误次数为多少时视为正常。
相比而言,误用检测的原理简单,很容易配置,特征知识库也容易扩充。但它存在一个致命的弱点――只能检测到已知的攻击方法和技术。异常检测可以检测出已知的和未知的攻击方法和技术,但是其问题在于正常行为标准只能采用人工智能、机器学习算法等来生成,并且需要大量的数据和时间,同时,由于现在人工智能和机器学习算法仍处于研究阶段。所以现在的入侵检测系统大多采用误用检测的分析方法。
安装
环境配置
安装依赖
apt install build-essential libpcap-dev libpcre3-dev libnet1-dev zlib1g-dev luajit hwloc libdnet-dev libdumbnet-dev bison flex liblzma-dev openssl libssl-dev pkg-config libhwloc-dev cmake cpputest libsqlite3-dev uuid-dev libcmocka-dev libnetfilter-queue-dev libmnl-dev autotools-dev libluajit-5.1-dev libunwind-dev -y
安装DAQ,这个是什么数据采集库,不知道干啥用的,要从github下载https://github.com/snort3/libdaq
,我这用3.0.10
版本
tar -zxvf libdaq-3.0.10.tar.gz
安装libdaq
./bootstrap
./configure
make
make install
make
make install
安装snort
这是snort官网
从github获取snort
wget https://github.com/snort3/snort3/archive/3.0.2-5.tar.gz
我是用的这个版本https://github.com/snort3/snort3/releases/tag/3.1.51.0
解压
tar -zxvf snort3-3.1.51.0.tar.gz
配置、编译和安装
正常应该是./configure && make && make install
,不知道是不是我的版本比较高,只有./configure_cmake.sh
,那就执行这个吧
./configure_cmake
然后进入
build
目录下,编译一下
cd build
make
然后运行
./src/snort
会报错找不到libdaq
./src/snort: error while loading shared libraries: libdaq.so.3: cannot open shared object file: No such file or directory
执行strace ./src/snort
追踪一下,发现他寻找的目录和我们上面安装的目录不一致,导致找不到
openat(AT_FDCWD, "/usr/lib/x86_64/libdaq.so.3", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/usr/lib/x86_64", 0x7ffc11dfb6c0) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/libdaq.so.3", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/usr/lib", {
st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
writev(2, [{
iov_base="./src/snort", iov_len=11}, {
iov_base=": ", iov_len=2}, {
iov_base="error while loading shared libra"..., iov_len=36}, {
iov_base=": ", iov_len=2}, {
iov_base="libdaq.so.3", iov_len=11}, {
iov_base=": ", iov_len=2}, {
iov_base="cannot open shared object file", iov_len=30}, {
iov_base=": ", iov_len=2}, {
iov_base="No such file or directory", iov_len=25}, {
iov_base="\n", iov_len=1}], 10./src/snort: error while loading shared libraries: libdaq.so.3: cannot open