Linux 上搭建 Snort+BASE 入侵檢測系統


配置實驗環境

由於本人電腦的存儲空間不足,無法再承擔安裝一個虛擬機的開銷,因此在阿里雲上申請了一個雲服務器進行本次實驗。

服務器配置如下:

  • 1 核 - 2GB 內存 - 40GB 系統盤
  • 操作系統:Ubuntu 18.04

aliyun

修改 Ubuntu 源

查看 /etc/apt/sources.list 發現已經配置好了阿里源,故不再做修改。如有需要,可自行改為阿里源或清華源,提高安裝包下載速度。

aliyuan

安裝 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 工作正常。

    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

    意思是缺少一些依賴,於是先安裝 flex 和 bison。

    sudo apt-get install flex
    sudo apt-get install bison
    

    再次執行 ./configure,又提示 libpcap 版本太低:

    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
    

    snort

  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
    

    6檢查規則

    在規則中添加一條對 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 規則已生效。

    test_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 時發生錯誤:

    barnyard2_error

    意思是 spo_alert_fwsam.c 中存在 SOCKET 類型的重復定義。查閱大量資料后得知,這是源碼中的 bug,在 GitHub 上已經有人給出了解決辦法:將該文件中所有的 SOCKET 替換為 BARNYARD2_SOCKET。具體可參考 https://github.com/Gerjo/barnyard2/commit/cc53c5573ba016489518bcda69ca64ca7acee2e8#diff-c1f3b2342b04cc7ae2df530b1a871cbeL122

    然后重新執行上述指令,編譯成功。

  2. 測試

    barnyard2 -V
    

    barnyard2

  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 目錄下也生成了相應的日志文件。

      連續log

    • 文件處理模式,處理單個日志文件

      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"
    

    mysql數量

安裝 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

    index

    設置頁面中,最好每一項都為綠色,表示通過。這里顯示 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

    完成設置后,顯示以上頁面,代表 BASE 安裝成功,可以看到 MySQL 中的數據。

使用 Snort

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

  1. Sniffer 模式只是簡單地從網絡上抓取數據包並在終端顯示出來。

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

    snort -v
    

    sniffer

  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
    

    packet_logger

  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 日志,記錄入侵檢測的警報信息。

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

    初始化

    初始化成功。

    初始化成功

    之后也會打印出包信息。

    包信息


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM