配置实验环境

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

服务器配置如下:

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

修改 Ubuntu 源

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

安装 Lamp

  1. 安装 Apache 2 Web 服务器

    sudo apt install apache2 -y
  2. 安装 MySQL 数据库,并进行保护

    sudo apt install mysql-server libmysqlclient-dev mysql-client autoconf libtool -y
    sudo mysql_secure_installation
  3. 安装 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
  4. 测试 PHP

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

    <?php
    phpinfo();
    ?>

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

安装 Snort

  1. 安装 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 编译成功。

  2. 安装 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
  3. 测试 Snort 是否安装成功

    snort -V

  4. 配置用户和目录

    创建用户和用户组:

    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/
  5. 修改配置文件

    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
  6. 添加规则

    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
  7. 测试配置文件和功能

    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

  1. 安装 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

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

  2. 测试

    barnyard2 -V

  3. 设置配置文件

    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
  4. 配置数据库

    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;
  5. 添加数据库配置

    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
  6. 测试

    启动 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

  1. 安装 ADOdb

    sudo tar zxvf adodb-5.20.14.tar.gz -C /var/www/html
    sudo mv /var/www/html/adodb5 /var/www/html/adodb
  2. 安装 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
  3. 配置

    修改 /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 。

  1. Sniffer 模式只是简单地从网络上抓取数据包并在终端显示出来。

    如果只是想在屏幕上打印出 IP 和 TCP/UDP/ICMP 包的头信息,可以用:

    snort -v

  2. 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

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

    用以下命令开启 NIDS 模式:

    snort -dev -l log_directory -h 192.168.1.0/24 -c snort.conf

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

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

    初始化成功。

    之后也会打印出包信息。

Linux 上搭建 Snort+BASE 入侵检测系统的更多相关文章

  1. 在Windows环境下搭建Snort+BASE入侵检测系统

    操作系统: Windows 7 (service pack 1) 所需软件: 虚拟机:VirtualBox 网络数据包截取驱动程序:WinPcap 4.1.3 (WinPcap_4_1_3.exe) ...

  2. 搭建开源入侵检测系统Snort并实现与防火墙联动

    Snort作为一款优秀的开源主机入侵检测系统,在windows和Linux平台上均可安装运行.BT5作为曾经的一款经典的渗透神器,基于 Ubuntu,里面已经预装很多的应用,比如Mysql.Apach ...

  3. 开源入侵检测系统OSSEC搭建之二:客户端安装

    上一篇文章中已经将OSSEC服务端的安装以及客户端的Key导出操作做了解说,接下来在另一台虚拟机中安装客户端,与安装服务端类似同样需要安装ossec,步骤如下. 一.下载ossec-hids-2.8. ...

  4. 开源入侵检测系统OSSEC搭建之一:服务端安装

    OSSEC是一款开源的多平台的入侵检测系统,可以运行于Windows, Linux, OpenBSD/FreeBSD, 以及 MacOS等操作系统中.主要功能有日志分析.完整性检查.rootkit检测 ...

  5. Snort 入侵检测系统

    Snort 入侵检测系统 一.实验目的 1.掌握snort IDS工作原理 2.应用snort 三种方式工作 二.实验环境 系统环境:Windows环境, kali环境 三.实验原理 1.snort ...

  6. 构建基于Suricata+Splunk的IDS入侵检测系统

    一.什么是IDS和IPS? IDS(Intrusion Detection Systems):入侵检测系统,是一种网络安全设备或应用软件,可以依照一定的安全策略,对网络.系统的运行状况进行监视,尽可能 ...

  7. CentOS Linux上搭建PPPoE服务器及拨号设置

    CentOS Linux上搭建PPPoE服务器及拨号设置 搭建PPPoE,成功了的话,就觉得超级简单,在CentOS Linux更是5步左右就能搞定. 1.安装pppoe,安装完成后,会有pppoe- ...

  8. 【转帖】Linux上搭建Samba,实现windows与Linux文件数据同步

    Linux上搭建Samba,实现windows与Linux文件数据同步 2018年06月09日 :: m_nanle_xiaobudiu 阅读数 15812更多 分类专栏: Linux Samba 版 ...

  9. linux上搭建ftp

    linux上搭建ftp 重要 解决如何搭建ftp         解决用户指定访问其根目录         解决访问ftp超时连接         解决ftp主动连接.被动连接的问题 1.安装ftp ...

随机推荐

  1. Python常见数据结构-字符串

    字符串基本特点 用引号括起来,单引号双引号均可,使用三个引号创建多行字符串. 字符串不可变. Python3直接支持Unicode编码. Python允许空字符串存在,不含任何字符且长度为0. 字符串 ...

  2. Web前端必备-Nginx知识汇总

    一.Nginx简介 Nginx是一个高性能.轻量级的Web和反向代理服务器, 其特点是占有内存及资源少.抗并发能力强. Nginx安装简单.配置简洁.启动快速便捷.支持热部署.支持 SSL.拥有高度模 ...

  3. CARS: 华为提出基于进化算法和权值共享的神经网络结构搜索,CIFAR-10上仅需单卡半天 | CVPR 2020

    为了优化进化算法在神经网络结构搜索时候选网络训练过长的问题,参考ENAS和NSGA-III,论文提出连续进化结构搜索方法(continuous evolution architecture searc ...

  4. ubuntu 虚拟机复制后打开蓝屏解决办法

    sudo apt-get install xserver-xorg-lts-utopic sudo dpkg-reconfigure xserver-xorg-lts-utopic reboot

  5. C语言实现链栈以及基本操作

    链栈,即用链表实现栈存储结构.链栈的实现思路同顺序栈类似,顺序栈是将数顺序表(数组)的一端作为栈底,另一端为栈顶:链栈也如此,通常我们将链表的头部作为栈顶,尾部作为栈底,如下下图所示: 将链表头部作为 ...

  6. SpringCloud入门(十): Config 统一配置中心

    SpringCloud Config 简介 在分布式系统中,由于服务组件过多,为了方便争对不通的环境下的服务配置文件统一管理,实时更新,所以出现了分布式配置中心组件.市面上开源的配置中心有很多,360 ...

  7. 【Java】 Variable 变量

    什么是Variable变量? - 变量是内存中的一个存储区域 - 这个存储区域内的数据允许在同一类型范围内不断变化 - 是程序最基本的存储单元,包含三个要素[变量类型][变量名][存储的值] 为什么需 ...

  8. matlab创建HDF5文件

    一.例子 1.创建写入 testdata = uint8(magic(5)); h5create('my_example.h5','/dataset1',size(testdata)); %创建 h5 ...

  9. stand up meeting for beta release plan 12/16/2015

    今天我们开会讨论一下beta版需要的feature,其中待定的feature是可选做的,如果有时间.其他都是必须实现的. 因为做插件的计划失败了,所以我们现在是pdf阅读器和取词查词加入生词本这两部分 ...

  10. Nginx知多少系列之(七)负载均衡策略

    目录 1.前言 2.安装 3.配置文件详解 4.工作原理 5.Linux下托管.NET Core项目 6.Linux下.NET Core项目负载均衡 7.负载均衡策略 8.加权轮询(round rob ...