
在2019年發布的文章《手動打造Snort+barnyard2+BASE可視化報警平臺》,目前已有20K+的瀏覽量,幫助了很多想深入了解Snort,而又無法獨立安裝系統的同學。前段時間一些學員留言,詢問有關Pfsense(基于FreeBSD的開源防火墻)的問題,經過一段時間的研究,萌生了在FreeBSD系統中手動下載源碼并編譯Snort IDS的想法,實驗成功后現分享給大家。有關FreeBSD和Linux的性能對比就不再贅述。
(資料圖)
安裝特點:FreeBSD下安裝snort及相關組件,對軟件編譯知識要求的比較少,很多依賴關系都可以自動完成,對硬件資源要求不高,但對網絡訪問質量要求很高,有些代碼需訪問外網才能完成安裝。推薦在VMware workstation中安裝。
通過下面的URL獲取安裝鏡像
??https://download.freebsd.org/ftp/releases/ISO-IMAGES/11.2/?
?# vi /etc/rc.confsendmail_enable="NONE"hostname="snortvm"ifconfig_le0="192.168.183.136 netmask 255.255.255.0"defaultrouter="192.168.183.2"sshd_enable="YES"# Set dumpdev to "AUTO" to enable crash dumps, "NO" to disabledumpdev="AUTO" apache24_enable="yes"mysql_enable="YES"snort_enable="YES"
修改DNS
# vi /etc/resolv.confnameserver 192.168.183.2
以上網絡地址需根據實際需要設置(IP:192.168.183.136)。為啟動Snort需要,我們查看當前網絡接口。有的系統為em0,有的系統為le0.
重啟服務
# /etc/rc.d/netif restart && /etc/rc.d/routing restart
測試
ping -c4 www.baidu.com
系統安裝完成重新登錄系統后,首先設置SSH服務,允許root 遠程登錄。方法如下:
編輯/etc/ssh/sshd_config文件
將其中的第36行
#PermitRootLogin no 改為 PermitRootLogin yes
即將前面的#去掉,并將no改為yes,保存退出。
重啟動SSHD服務
#/etc/rc.d/sshd restart
為了源碼編譯,我們先要完成安裝前準備工作,首先執行下面命令:
#portsnap fetch extract update
該步驟的目的是下載、更新Ports 套件快照。
#cd /usr/ports/ports-mgmt/portupgrade#make install
編譯環節,耗時比較長,需要多次確認安裝組件(保持默認選擇OK選項即可)。所有下載的源碼包存儲在/usr/ports/distfiles目錄。
#rehash
當上面的準備工作做好之后,安裝編譯snort根本就用不著我們操心,執行下面命令。
#portinstall snort
該命令系統會考慮依賴包的問題自動安裝Snort、barnyard2、pulldpork共3個軟件。
在隨后彈出界面中,選擇MYSQL,表示支持數據庫輸出插件。
在Snort 軟件安裝完成時,另兩款工具Barnyard2 v2.1.13(支持數據庫插件)、pulledpork v0.74也隨之附帶安裝完,但snort,pulledpork需要單獨配置才能運行。
Tips:如果需要在多臺機器中部署,為了節約下載時間,也可以通過其他機器將軟件下載完成后,導入全部tarball包下載到/usr/ports/distfiles目錄。
首先我們要編輯/usr/local/etc/snort/snort.conf配置文件。將snort.conf的第一行加入網絡號
原配:ipvar HOME_NET [YOU_NEED_TO_SET_HOME_NET_IN_snort.conf]
修改:ipvar HOME_NET [192.168.183.0/24]
接著修改黑名單和白名單路徑,下面是原始配置
改為現在配置(238行)
修改規則變量的路徑
注銷暫時不用的規則。我們先將"include $RULE_PATH/local.rules"之后的所有引用規則暫時注銷。修改完成后保存退出。
接著在目錄/usr/local/etc/snort/rules下建立規則文件local.rules,并寫入ping規則(寫法參考上一篇博客)。
#mkdir /var/log/snort
Tip:源碼包安裝的情況需要手動建立,如果用pkg install snort則會產生/var/log/snort
#cd /usr/local/etc/snort/rules#touch white_list.rules black_list.rules#mkdir /var/log/barnyard2#cd /usr/local/etc/snort/#touch sid-msg.map#touch /var/log/snort/barnyard2.waldo
準備工作完成之后下面嘗試啟動Snort
#snort -c /usr/local/etc/snort/snort.conf -i le0
6.配置pulledpork
PulledPork (這個單詞原意是豬肉漢堡)是一個 perl 腳本,它將從不同位置下載、組合和安裝/更新 Snort 規則集以供 Snort 使用。Pulled Pork 將所有規則合并到一個文件中:/etc/snort/rules/snort.rules.
我們需要確保將行:添加include $RULE PATH/snort.rules到snort.conf文件中,否則在 Snort 啟動時,PulledPork 規則不會被讀入內存。
Pulledpork主程序雖然已經安裝,但沒有配置,我們還是無法使用,下面我們進入pulledpork配置目錄,將pulledpork.conf.sample配置模板文件復制為pulledpork.conf
#cd /usr/local/etc/pulledpork#cp pulledpork.conf.sample pulledpork.conf# vi pulledpork.conf
查看第19行配置,原配置如下:
首先我們要把pulledpork的配置文件復制到/etc/snort/目錄。我們登錄snort.org官網注冊用戶并獲取oinkcode代碼。修改完成后,保存退出。此時我們不要急于運行pulledpork腳本,還需要新建iplists目錄。
#mkdir -p /usr/local/etc/snort/rules/iplists/
?確保pulledpork.conf配置正確的情況下。執行下列命令。
#/usr/local/bin/pulledpork.pl -c /usr/local/etc/pulledpork/pulledpork.conf
該腳本執行完成之后,將發生以下變化:
手動新建下列2個文件:
/usr/local/etc/snort/sid-msg.map/usr/local/etc/snort/rules/snort.rules
然后下載2個壓縮包放置在/tmp目錄
community-rules.tar.gz snortrules-snapshot-29171.tar.gz
注釋:如果pulledpork這個腳本無法運行,我們也可以手動下載文件snortrules-snapshot-29180.tar.gz
我們將 PulledPork 腳本添加到 root 的 crontab,以實現自動升級Snort規則,操作如下。
crontab -e
在 crontab 中添加以下行:
01 04 * * * /usr/local/bin/pulledpork.pl -c /etc/snort/pulledpork.conf -l
改進方法,寫一個升級規則的腳本,然后在crontab啟動這個腳本。
在Snort IDS的數據庫系統配置過程往往和barnyard2一起進行,因為Barnyard2運行需要連接數據庫,我們接著先來安裝mysql57。
pkg install -y mysql57-serverecho "mysql_enable="YES"" >> /etc/rc.conf/usr/local/etc/rc.d/mysql-server start
啟動數據庫
# /usr/local/etc/rc.d/mysql-server start
這里數據庫管理員的初始化密碼不為空,我們要獲取數據庫初始密碼,只有啟動數據庫之后,系統才會產生.mysql_secret文件。
#cat /root/.mysql_secret
登錄數據庫并修改管理員密碼
系統提示需重置管理員密碼。下面的命令將管理員設置密碼為‘123456’
為root用戶創建了新密碼之后,下面開始創建 snort 數據庫并設置用戶訪問權限:
# mysql -u root -pmysql> CREATE DATABASE snort;mysql>use snort;mysql>GRANT ALL PRIVILEGES ON snort.* TO "snort"@"localhost" IDENTIFIED BY "123456";
有一個用snort 預先打包的腳本來為您設置表:
mysql> SOURCE /usr/local/share/examples/barnyard2/create_mysql;
對于pkg install snort方式安裝的可以用這條命令。
以下是barnyard2.conf(/usr/local/etc/barnyard2.conf)參考配置:
config reference_file: /usr/local/etc/snort/reference.configconfig classification_file: /usr/local/etc/snort/classification.configconfig gen_file: /usr/local/etc/snort/gen-msg.mapconfig sid_file: /usr/local/etc/snort/sid-msg.mapconfig hostname: snortvm config interface: le0 //可選的配置項config logdir: /var/log/snort //可選的配置項config waldo_file:/var/log/snort/barnyard2.waldoinput unified2output alert_fast: stdout //將報警顯示在屏幕output alert_fast output database: log, mysql, user=snort password=123456 dbname=snort host=localhost
啟動barnyard2
#/usr/local/bin/barnyard2 -c /usr/local/etc/barnyard2.conf -d /var/log/snort -f snort.log -w /var/log/snort/barnyard2.waldo
通過ping測試snort規則報警,以便觀察數據庫表的變化。
mysql -u snort -p -D snort -e "select count(*) from event"
,Snort+Barnyard2+MySQL聯通實驗完成之后下面解決WebUI的問題,本實驗安裝BASE 1.4.5。
(1)安裝Apache
#pkg install apache24
安裝程序會自動創建用戶www和組www
#echo " apache24_enable="yes"" >> /etc/rc.conf
(2)安裝PHP模塊(php 74)
#pkg install php74(FreeBSD 11、12下默認安裝php7.4)
#pkg install www/mod_php74 php74-mysqli#cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini
編輯php.ini文件
#vi /usr/local/etc/php.ini
在Linux其他版本中BASE僅支持PHP5.6 ,對于PHP7不支持,這里FreeBSD社區對BASE進行了優化。
#pkg install base-1.4.5_1
New packages to be INSTALLED: adodb5-php74: 5.21.2 base: 1.4.5_1
fontconfig: 2.13.94_1,1
freetype2: 2.11.0 giflib: 5.2.1 jbigkit: 2.1_1 jpeg-turbo: 2.1.1 libgd: 2.3.1,1 php74-ctype: 7.4.24 php74-gd: 7.4.24 php74-gettext: 7.4.24 php74-pear: 1.10.12 php74-pear-Image_Canvas: 0.3.2_1 php74-pear-Image_Color: 1.0.4 php74-pear-Image_Graph: 0.8.0 php74-pear-Log: 1.13.3 php74-pear-Mail: 1.4.1,1 php74-pear-Mail_Mime: 1.10.11,2 php74-session: 7.4.24 php74-xml: 7.4.24 php74-zlib: 7.4.24 png: 1.6.37_1 tiff: 4.3.0 webp: 1.2.1
備注:如何找到這個軟件名:pkg search base-1.4.5,我想在系統找到安裝的軟件:pkg info | grep base
查看這個軟件包安裝路徑: pkg info -l base 小寫字母l
root@snort:~ # pkg info -l base-1.4.5_1
base-1.4.5_1:
/usr/local/share/doc/base/CHANGELOG/usr/local/share/doc/base/CREDITS/usr/local/share/doc/base/GPL/usr/local/share/doc/base/README/usr/local/www/base/admin/base_roleadmin.php/usr/local/www/base/admin/base_useradmin.php/usr/local/www/base/admin/index.php/usr/local/www/base/base_ag_common.php……
安裝BASE完成之后還需要下面3步操作。
移動BASE目錄
# mv /usr/local/www/base/ /usr/local/www/apache24/data/
設置權限
# chown -R www:www /usr/local/www/apache24/data/base/
修改配置
#vi /usr/local/etc/apache24/httpd.conf
在423后面加上兩行。
AddType application/x-httpd-php .phpAddType application/x-httpd-php-source .phps
保存退出。下面開始重啟Web服務器
#service apache24 restart
打開瀏覽器輸入網址??http://192.168.183.136/base/??
ADODB路徑/usr/local/share/adodb/
到此,FreeBSD設置BASE設置就圓滿完成。相比較LInux系統安裝,我們在這里不用考慮依賴包的問題,不用建立繁瑣的軟連接,安裝過程基本實現半自動化,需要注意的是FreeBSD11 ~ 13 都可以安裝 snort+barnyard+mysql。但只有freebsd11可以安裝BASE,本文場景適用于復雜繁重的網絡環境讓FreeBSD系統的IDS做數據分析存儲,然后在LInux環境中安裝WebUI實現報警可視化。
2022年51CTO學堂講師評選正在進行中,希望各位投上寶貴一票。
??https://edu.51cto.com/lecturer/350944.html???
(以用戶ID登錄并進行投票)