配置实验环境
由于本人电脑的存储空间不足,无法再承担安装一个虚拟机的开销,因此在阿里云上申请了一个云服务器进行本次实验。
服务器配置如下:
- 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 的新文件,写入如下内容,保存并退出。 现在浏览 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。具体可参考 http://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
- 安装 ADOdbsudo tar zxvf adodb-5.20.14.tar.gz -C /var/www/html sudo mv /var/www/html/adodb5 /var/www/html/adodb
- 安装 BASEsudo 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 日志,记录入侵检测的警报信息。执行命令后,会有一系列的初始化信息。
- 之后也会打印出包信息。
- 原文:http://mp.yidianzixun.com/#/Writing/articleEditor
作者:TimDyh
|