Linux 上搭建 Snort+BASE 入侵检测系统

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
日志服务 SLS,月写入数据量 50GB 1个月
简介:

Linux 上搭建 Snort+BASE 入侵检测系统

配置实验环境
由于本人电脑的存储空间不足,无法再承担安装一个虚拟机的开销,因此在阿里云上申请了一个云服务器进行本次实验。

服务器配置如下:

1 核 - 2GB 内存 - 40GB 系统盘
操作系统:Ubuntu 18.04

修改 Ubuntu 源
查看 /etc/apt/sources.list 发现已经配置好了阿里源,故不再做修改。如有需要,可自行改为阿里源或清华源,提高安装包下载速度。

安装 Lamp
安装 Apache 2 Web 服务器
sudo apt install apache2 -y
安装 MySQL 数据库,并进行保护
sudo apt install mysql-server libmysqlclient-dev mysql-client autoconf libtool -y
sudo mysql_secure_installation
安装 PHP 超文本预处理器
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update -y
sudo apt-get install -y libapache2-mod-php5.6 php5.6 php5.6-common php5.6-gd php5.6-cli php5.6-xml php5.6-mysql
sudo apt-get install -y php-pear libphp-adodb
执行第一句命令时报了 sudo: add-apt-repository: command not found 错误,查阅资料后得知需要先安装 software-properties-common(如下),然后再执行以上命令。

sudo apt-get install software-properties-common
最后,重新启动 Apache Web 服务器。

sudo systemctl restart apache2
测试 PHP
在 /var/www/html 中创建一个名为 info.php 的新文件,写入如下内容,保存并退出。

<?php
phpinfo();
?>
现在浏览 http://localhost/info.php ,可以看到 PHP 信息页面,说明 PHP 工作正常。

安装 Snort
安装 DAQ,解压编译
tar -xvzf daq-2.0.6.tar.gz
cd daq-2.0.6
./configure
sudo make & make install
然而 ./configure 命令并没有成功生成 Makefile 文件,检查输出的信息发现如下错误:

意思是缺少一些依赖,于是先安装 flex 和 bison。

sudo apt-get install flex
sudo apt-get install bison
再次执行 ./configure,又提示 libpcap 版本太低:

重新安装 libpcap。

sudo apt-get install libpcap-dev
此时再执行最开始的命令,DAQ 编译成功。

安装 Snort,解压编译
tar -xvzf snort-2.9.12.tar.gz
cd snort-2.9.12
./configure --enable-sourcefire
sudo make & make install
执行 ./configure 的过程中同样因为缺少一些依赖库而报错,需要安装 libpcre、dumbnet、luajit、libnghttp。

sudo apt-get install libpcre3-dev
sudo apt-get install libdumbnet-dev
sudo apt-get install liblua5.2-dev
sudo apt-get install libnghttp2-dev
最后修复链接。

sudo ldconfig
测试 Snort 是否安装成功
snort -V

配置用户和目录
创建用户和用户组:

sudo groupadd snort
sudo useradd snort -r -s /sbin/nologin -c SNORT_IDS -g snort
创建Snort目录:

sudo mkdir /etc/snort
sudo mkdir /etc/snort/rules
sudo mkdir /etc/snort/rules/iplists
sudo mkdir /etc/snort/preproc_rules
sudo mkdir /usr/local/lib/snort_dynamicrules
sudo mkdir /etc/snort/so_rules
创建文件来存储规则:

sudo touch /etc/snort/rules/iplists/black_list.rules
sudo touch /etc/snort/rules/iplists/white_list.rules
sudo touch /etc/snort/rules/local.rules
创建日志目录:

sudo mkdir /var/log/snort
sudo mkdir /var/log/snort/archived_logs
修改文件权限:

sudo chmod -R 5775 /etc/snort
sudo chmod -R 5775 /var/log/snort
sudo chmod -R 5775 /var/log/snort/archived_logs
sudo chmod -R 5775 /etc/snort/so_rules
sudo chmod -R 5775 /usr/local/lib/snort_dynamicrules
修改文件的归属用户:

sudo chown -R snort:snort /etc/snort
sudo chown -R snort:snort /var/log/snort
sudo chown -R snort:snort /usr/local/lib/snort_dynamicrules
复制配置文件:

cd /opt/snort-2.9.12/etc/
sudo cp .conf /etc/snort
sudo cp *.map /etc/snort
sudo cp *.dtd /etc/snort
cd /opt/snort-2.9.12/src/dynamic-preprocessors/build/usr/local/lib/snort_dynamicpreprocessor/
sudo cp * /usr/local/lib/snort_dynamicpreprocessor/
修改配置文件
sudo vi /etc/snort/snort.conf

ipvar HOME_NET 修改为本机的内部网络

ipvar HOME_NET 172.25.45.23/18

设置以下配置文件路径

var RULE_PATH /etc/snort/rules
SO_RULE_PATH /etc/snort/so_rules
PREPROC_RULE_PATH /etc/snort/preproc_rules
WHITE_LIST_PATH /etc/snort/rules/iplists
BLACK_LIST_PATH /etc/snort/rules/iplists

在 output unified2: filename merged.log, limit 128, nostamp, mpls_event_types, vlan_event_types 之后添加

output unified2: filename snort.u2, limit 128

启用 local.rules 文件,其后的 include 文件均注释掉

include $RULE_PATH/local.rules
添加规则
tar -xzf community-rules.tar.gz
cp community-rules/* /etc/snort/rules/
检查规则。

snort -T -c /etc/snort/snort.conf

在规则中添加一条对 ICMP 包的规则,以便测试。

sudo vi /etc/snort/rules/local.rules
alert icmp any any -> $HOME_NET any (msg:"ICMP Test detected!!!"; classtype:icmp-event; sid:10000001; rev:001; GID:1; )
设置 sid 对应信息,添加 sid-msg 文件。

sudo touch /etc/snort/sid-msg.map
sudo vi /etc/snort/sid-msg.map
1 || 10000001 || 001 || icmp-event || 0 || ICMP Test detected || url,tools.ietf.org/html/rfc792
测试配置文件和功能
sudo snort -T -c /etc/snort/snort.conf -i eth0
sudo snort -A console -q -u snort -g snort -c /etc/snort/snort.conf -i eth0
关闭防火墙。

ufw disable
此时用本机 ping 服务器网口 eth0 的 IP,可以看到服务器上 Snort 在控制台打印出 alert 告警,说明添加的 ICMP 规则已生效。

安装 Barnyard2
安装 Barnyard2,解压编译
tar zxvf barnyard2-2-1.13.tar.gz
cd barnyard2-2-1.13
autoreconf -fvi -I ./
./configure --with-mysql --with-mysql-libraries=/usr/lib/x86_64-linux-gnu
sudo make & make install
这里 make 时发生错误:

意思是 spo_alert_fwsam.c 中存在 SOCKET 类型的重复定义。查阅大量资料后得知,这是源码中的 bug,在 GitHub 上已经有人给出了解决办法:将该文件中所有的 SOCKET 替换为 BARNYARD2_SOCKET。具体可参考 https://github.com/Gerjo/barnyard2/commit/cc53c5573ba016489518bcda69ca64ca7acee2e8#diff-c1f3b2342b04cc7ae2df530b1a871cbeL122

然后重新执行上述指令,编译成功。

测试
barnyard2 -V

设置配置文件
sudo cp /opt/barnyard2-2-1.13/etc/barnyard2.conf /etc/snort/
sudo mkdir /var/log/barnyard2
sudo chown snort.snort /var/log/barnyard2
sudo touch /var/log/snort/barnyard2.waldo
sudo chown snort.snort /var/log/snort/barnyard2.waldo
配置数据库
mysql -u root -p
mysql> create database snort;
mysql> use snort;
mysql> source /opt/barnyard2-2-1.13/schemas/create_mysql;
mysql> CREATE USER 'snort'@'localhost' IDENTIFIED BY '123456';
mysql> grant create, insert, select, delete, update on snort.* to 'snort'@'localhost';
mysql> exit;
添加数据库配置
sudo vi /etc/snort/barnyard2.conf
在末尾添加数据库配置:

output database: log, mysql, user=snort password=123456 dbname=snort host=localhost sensor name=sensor01
修改 barnyard2.conf 的权限,防止被修改。

sudo chmod 644 /etc/snort/barnyard2.conf
测试
启动 MySQL。

service mysql start
开启 Snort,并向 eth0 发送 ping 数据包。

sudo snort -q -u snort -g snort -c /etc/snort/snort.conf -i eth0
开启 Barnyard2,将日志信息存入数据库。

连续处理模式,设置 barnyard2.waldo 为书签
sudo barnyard2 -c /etc/snort/barnyard2.conf -d /var/log/snort -f snort.u2 -w /var/log/snort/barnyard2.waldo -g snort -u snort
控制台打印出刚才 ping 的记录。

/var/log/snort 目录下也生成了相应的日志文件。

文件处理模式,处理单个日志文件
sudo barnyard2 -c /etc/snort/barnyard2.conf -o /var/log/snort/snort.u2.1588583079
这里选择其中一个日志文件进行处理,同样可以看到刚才的记录。

再查看一下数据库条目数量,有所增加。

mysql -u snort -p -D snort -e "select count(*) from event"

安装 BASE
安装 ADOdb
sudo tar zxvf adodb-5.20.14.tar.gz -C /var/www/html
sudo mv /var/www/html/adodb5 /var/www/html/adodb
安装 BASE
sudo tar zxvf base-1.4.5.tar.gz -C /var/www/html
sudo mv /var/www/html/base-1.4.5 /var/www/html/base
sudo /etc/init.d/apache2 restart
配置
修改 /etc/php/5.6/apache2/php.ini 。

error_reporting = E_ALL & ~E_NOTICE
重启 Apache 使配置生效。

sudo /etc/init.d/apache2 restart
设置目录权限。

chown -R root:root /var/www/html
chmod 755 /var/www/html/adodb
打开 http://localhost/base/setup/index.php 。

设置页面中,最好每一项都为绿色,表示通过。这里显示 Web 服务器对 BASE 的安装目录不可写。按照提示,可以在设置完成后创建 base_conf.php。

现在点击 Continue,跟着导引一步步完成设置。

第 1 步:选择语言 simplified_chinese ,填写 ADOdb 所在目录 /var/www/html/adodb 。

第 2 步:填入数据库的信息,按之前配置的信息填即可(Archive 数据库的信息可以不填)。

第 3 步:填入管理账号:snort,密码:123456。

第 4 步:创建数据表。

第 5 步:提示将显示的信息复制到 /var/www/html/base/base_conf.php 中。

完成设置后,显示以上页面,代表 BASE 安装成功,可以看到 MySQL 中的数据。

使用 Snort
Snort 有三种工作模式:Sniffer、Packet Logger 和 Network Intrusion Detection System 。

Sniffer 模式只是简单地从网络上抓取数据包并在终端显示出来。
如果只是想在屏幕上打印出 IP 和 TCP/UDP/ICMP 包的头信息,可以用:

snort -v

Packet Logger 模式可把数据包保存在磁盘中。
如果想把数据包信息存在磁盘上,就要用 Packet Logger Mode 。用以下命令可使 Snort 自动把数据包信息存到磁盘中:

snort -vde -l log_directory
当 Snort 运行在该模式下时,它会把所有抓取的数据包按 IP 分类地存放到 log_directory 中。可用 -h 指定本地网络,以使 Snort 记录与本地网络相关的数据包:

snort -vde -l log_directory -h 192.168.1.0/24
如果在一个高速网络中,或者想记录数据包以备分析,可以以二进制方式记录数据包,在这里不用指定 -vde,因为二进制方式将记录整个包的信息。如:

snort -l log_directory -b
二进制模式把数据包存成 tcpdump 格式,使用如下命令将二进制文件中的信息打印到屏幕上:

snort -dv -r snort.log

Network Intrusion Detection 模式最复杂,具有高可配置性。它可使 Snort 根据用户定义的规则分析网络流量,并作出反应。
用以下命令开启 NIDS 模式:

snort -dev -l log_directory -h 192.168.1.0/24 -c snort.conf
snort.conf 是规则集配置文件。在 log_directory 目录下会生成 alter 日志,记录入侵检测的警报信息。

执行命令后,会有一系列的初始化信息。

初始化成功。

之后也会打印出包信息。

原文地址https://www.cnblogs.com/timdyh/p/12828276.html

相关文章
|
9天前
|
机器学习/深度学习 JSON JavaScript
在linux系统上看全世界新闻 -- Clinews的使用详解
这篇文章介绍了如何在Linux系统上使用Clinews命令行工具阅读全世界的新闻,包括安装、配置API密钥、使用命令获取新闻源和搜索新闻的步骤。
28 3
在linux系统上看全世界新闻 -- Clinews的使用详解
|
5天前
|
Linux Shell
Linux系统
是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。
|
4天前
|
Ubuntu Linux 网络安全
从头安装Arch Linux系统
本文记录了作者安装Arch Linux系统的过程,包括安装成果展示和遇到的疑难点及其解决方法,如硬盘不足、下载失败、设置时区、安装微码和配置无密码登录等。
从头安装Arch Linux系统
|
1天前
|
Linux Shell
Linux系统
是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。
|
1天前
|
监控 安全 Linux
使用NRPE和Nagios监控Linux系统资源的方法
通过遵循以上步骤,可以有效地使用NRPE和Nagios监控Linux系统资源,确保系统运行稳定,并及时响应任何潜在的问题。这种方法提供了高度的可定制性和灵活性,适用于从小型环境到大型分布式系统的各种监控需求。
8 2
|
1天前
|
Linux Shell
Linux系统
是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。
|
2天前
|
Ubuntu Linux Shell
Linux系统密码忘记
【10月更文挑战第2天】在Linux系统中,若忘记密码,可以通过单用户模式或使用Live CD/USB来重置。对于Ubuntu系统,可通过GRUB引导菜单进入单用户模式,利用命令行重置密码;或使用Live CD/USB启动并挂载硬盘分区后修改密码文件。CentOS系统同样支持单用户模式重置密码,也可借助安装介质进入救援模式,挂载文件系统后进行密码重置。这些方法均能在忘记密码的情况下帮助恢复系统访问。
|
3天前
|
Linux Shell
Linux系统
是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。
|
4天前
|
Linux Shell
Linux系统
是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。
|
7天前
|
Linux Shell
Linux系统
是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。
下一篇
无影云桌面