FreeBSD 12 の環境で、snort 2.9版を導入した時の情報です。
ただ、試行錯誤に設定したのですが、以下の理由で諦める事にしました。
諦めた原因
- barnyard2 から MariaDB にsnort のアラートログを保存させる事ができない。
- base が PHP74 と MariaDB に対応してなさそう・・・
同じように構築したい人のヒントと、次回も同じように設定できるようにメモ書きする事にしました。
事前情報
- MariaDB の環境が構築済みであること
- Apache の環境が構築済みであること
- ports の環境が構築済みであること
1.barnyard2 導入
MySQL(MariaDB)にデータを保存させるために導入する。
また、snort導入時に、一緒に導入されるのは、MySQLに対応対応してないのでリビルドする必要がある。
①.barnyard2 の保存先に移動する。
cd /usr/ports/security/barnyard2
②.リビルドを実行する。
make install clean
③.以下のないように変更後の設定する。
■変更前
[ ] 64BIT Enable 64bit compilation (experimental)
[ ] ARUBA Enable aruba support
[ ] BRO Enable bro support (libbroccoli)
[ ] GRE Enable gre support
[x] IPV6 IPv6 protocol support
[ ] MPLS MPLS support
[ ] PORT_PCAP Use libpcap from ports
[x] DOCS Build and/or install documentation
[x] EXAMPLES Build and/or install examples
-------------------------------- DATABASE ------------------
( ) MYSQL MySQL database support
( ) MYSQL_SSL Enable mysql ssl support (experimental)
( ) ODBC ODBC database backend
( ) PGSQL PostgreSQL database support
■変更後
[x] 64BIT Enable 64bit compilation (experimental)
[ ] ARUBA Enable aruba support
[ ] BRO Enable bro support (libbroccoli)
[ ] GRE Enable gre support
[x] IPV6 IPv6 protocol support
[ ] MPLS MPLS support
[ ] PORT_PCAP Use libpcap from ports
[x] DOCS Build and/or install documentation
[x] EXAMPLES Build and/or install examples
-------------------------------- DATABASE ------------------
(*) MYSQL MySQL database support
( ) MYSQL_SSL Enable mysql ssl support (experimental)
( ) ODBC ODBC database backend
( ) PGSQL PostgreSQL database support
④.以下のように表示する事を確認する。
====> Compressing man pages (compress-man)
===> Staging rc.d startup script(s)
===> Installing for barnyard2-1.13_4
===> Checking if barnyard2 is already installed
===> Registering installation for barnyard2-1.13_4
Installing barnyard2-1.13_4...
Read the notes in the barnyard2.conf file for how to configure
/usr/local/etc/barnyard2.conf after installation. For addtional information
see the Securixlive FAQ at http://www.securixlive.com/barnyard2/faq.php.
In order to enable barnyard2 to start on boot, you must edit /etc/rc.conf
with the appropriate flags, etc. See the FreeBSD Handbook for syntax:
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/configtuning-rcng.html
For the various options available, type % barnyard2 -h after install or read
the options in the startup script - in /usr/local/etc/rc.d.
Barnyard2 can process unified2 files from snort or suricata. It can also
interact with snortsam firewall rules as well as the sguil-sensor. Those
ports must be installed separately if you wish to use them.
⑤.自動的に更新しないようにする。
pkg lock barnyard2
barnyard2-1.13_4: lock this package? [y/N]: y
Locking barnyard2-1.13_4
⑥.MySQL に対応しているか確認する。
pkg info barnyard2
⑦.「Options」に、64BIT と MYSQL が on である事を確認する。
[root@FreeBSD ~]# pkg info barnyard2
barnyard2-1.13_4
Name : barnyard2
Version : 1.13_4
Installed on : Tue May 5 08:30:50 2020 JST
Origin : security/barnyard2
Architecture : FreeBSD:12:amd64
Prefix : /usr/local
Categories : security
Licenses : GPLv2
Maintainer : bofh@FreeBSD.org
WWW : https://github.com/firnsy/barnyard2
Comment : Interpreter for Snort unified2 binary output files
Options :
64BIT : on
ARUBA : off
BRO : off
DOCS : on
EXAMPLES : on
GRE : off
IPV6 : on
MPLS : off
MYSQL : on
MYSQL_SSL : off
ODBC : off
PGSQL : off
PORT_PCAP : off
Shared Libs required:
libmariadb.so.3
Annotations :
FreeBSD_version: 1201000
Flat size : 453KiB
2.snort 導入
①.snort をインストールする。
pkg install snort
②.以下のように表示する事を確認する。
[root@FreeBSD ~]# pkg install snort
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
All repositories are up to date.
Updating database digests format: 100%
The following 6 package(s) will be affected (of 0 checked):
New packages to be INSTALLED:
daq: 2.2.2
libpcap: 1.9.1_1
p5-Crypt-SSLeay: 0.72_3
p5-LWP-Protocol-https: 6.07_1
pulledpork: 0.7.3
snort: 2.9.15.1
Number of packages to be installed: 6
The process will require 11 MiB more space.
4 MiB to be downloaded.
Proceed with this action? [y/N]: y
[1/6] Fetching snort-2.9.15.1.txz: 100% 3 MiB 3.2MB/s 00:01
[2/6] Fetching pulledpork-0.7.3.txz: 100% 39 KiB 39.5kB/s 00:01
[3/6] Fetching p5-LWP-Protocol-https-6.07_1.txz: 100% 8 KiB 8.3kB/s 00:01
[4/6] Fetching p5-Crypt-SSLeay-0.72_3.txz: 100% 38 KiB 39.3kB/s 00:01
[5/6] Fetching daq-2.2.2.txz: 100% 167 KiB 170.7kB/s 00:01
[6/6] Fetching libpcap-1.9.1_1.txz: 100% 275 KiB 281.2kB/s 00:01
Checking integrity... done (0 conflicting)
[1/6] Installing p5-LWP-Protocol-https-6.07_1...
[1/6] Extracting p5-LWP-Protocol-https-6.07_1: 100%
[2/6] Installing p5-Crypt-SSLeay-0.72_3...
[2/6] Extracting p5-Crypt-SSLeay-0.72_3: 100%
[3/6] Installing libpcap-1.9.1_1...
[3/6] Extracting libpcap-1.9.1_1: 100%
[4/6] Installing pulledpork-0.7.3...
[4/6] Extracting pulledpork-0.7.3: 100%
[5/6] Installing daq-2.2.2...
[5/6] Extracting daq-2.2.2: 100%
[6/6] Installing snort-2.9.15.1...
[6/6] Extracting snort-2.9.15.1: 100%
=====
Message from pulledpork-0.7.3:
--
In order to use pulled pork, adjust the config files located in
/usr/local/etc/pulledpork
Important Note:
Snort changed the way rules are published. Since June 2010 Snort
stop offering rules in the "snortrules-snapshot-CURRENT" format.
Instead, rules will be released for specific Snort versions.
You will be responsible for downloading the correct rules release
for your version of Snort.
The new versioning mechanism will require a four digit version in the
file name. To get the new download naming schema visit snort.org,
and look at 'My Account' -> 'Subscriptions and Oinkcodes'
=====
Message from snort-2.9.15.1:
--
Snort uses rcNG startup script and must be enabled via /etc/rc.conf
Please see /usr/local/etc/rc.d/snort
for list of available variables and their description.
Configuration files are located in /usr/local/etc/snort directory.
Please note that, by default, snort will truncate packets larger than the
default snaplen of 15158 bytes. Additionally, LRO may cause issues with
Stream5 target-based reassembly. It is recommended to disable LRO, if
your card supports it.
This can be done by appending '-lro' to your ifconfig_ line in rc.conf.
③.snort.conf を修正する。
■修正前
#ipvar HOME_NET [YOU_NEED_TO_SET_HOME_NET_IN_snort.conf]
■修正後
ipvar HOME_NET 192.168.0.0/24
■修正前
#ipvar EXTERNAL_NET any
■修正後
ipvar EXTERNAL_NET !$HOME_NET
■修正前
# output unified2: filename merged.log, limit 128, nostamp, mpls_event_types, vlan_event_types
■修正後
output unified2: filename merged.log, limit 128, nostamp, mpls_event_types, vlan_event_types
■修正前
#var WHITE_LIST_PATH ../rules
#var BLACK_LIST_PATH ../rules
■修正後
var WHITE_LIST_PATH ./rules
var BLACK_LIST_PATH ./rules
④.wget をインストールする。
pkg install wget
⑤.以下のように表示する事を確認する。
[root@FreeBSD ~]# pkg install wget
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
All repositories are up to date.
Updating database digests format: 100%
The following 1 package(s) will be affected (of 0 checked):
New packages to be INSTALLED:
wget: 1.20.3
Number of packages to be installed: 1
The process will require 3 MiB more space.
654 KiB to be downloaded.
Proceed with this action? [y/N]: y
[1/1] Fetching wget-1.20.3.txz: 100% 654 KiB 670.1kB/s 00:01
Checking integrity... done (0 conflicting)
[1/1] Installing wget-1.20.3...
[1/1] Extracting wget-1.20.3: 100%
⑥.「snortrules-snapshot」を取得する。
※.snortrules-snapshot を取得するには、snort に登録する必要がある。
また、以下の手順から取得する。
・「snort」にログインする。
・「メールアドレス」を選択する。
・「Oinkcode」を選択する。
・「How to use your oinkcode」を選択する。
・「Download rules with your oinkcode」を参照する。
※.Oinkcode は、この後も使用するので控えるようにする。
または、Oinkcode を登録して、以下のように取得する事も可能です。
wget https://www.snort.org/rules/snortrules-snapshot-29160.tar.gz?oinkcode=xxxxxxx -O snortrules-snapshot-29160.tar.gz
※.oinkcode=xxxxxxx の x 部分に、oinkcode を記入する。
⑦.snortrules-snapshot-29160.tar.gz を解凍する。
tar zxvf snortrules-snapshot-29160.tar.gz
※.解凍先は任意の場所でする。
⑧.定義情報などを保存させるために作成する。
mkdir /usr/local/etc/snort/so_rules
mkdir /usr/local/etc/snort/rules/iplists
touch /usr/local/etc/snort/rules/local.rules
touch /usr/local/etc/snort/rules/white_list.rules
touch /usr/local/etc/snort/rules/black_list.rules
⑨.定義情報を登録する。
cp -r rules/* /usr/local/etc/snort/rules/
cp -r so_rules/* /usr/local/etc/snort/so_rules/
pulledpork 設定
snortrules-snapshot を自動更新するための設定です。
①.pulledpork.conf を作成する。
cp /usr/local/etc/pulledpork/pulledpork.conf.sample /usr/local/etc/pulledpork/pulledpork.conf
②.pulledpork.conf を修正する。
vi /usr/local/etc/pulledpork/pulledpork.conf
③.以下のように修正する。
■修正前
#rule_url=https://www.snort.org/reg-rules/|snortrules-snapshot.tar.gz|<oinkcode>
■修正後
rule_url=https://www.snort.org/reg-rules/|snortrules-snapshot.tar.gz|oinkcode を記入する。
④.定義情報が更新する事を確認する。
pulledpork.pl -c /usr/local/etc/pulledpork/pulledpork.conf -l
⑤.以下のように表示する事を確認する。
[root@FreeBSD ~]# pulledpork.pl -c /usr/local/etc/pulledpork/pulledpork.conf -l
https://github.com/shirkdog/pulledpork
_____ ____
`----,\ )
`--==\\ / PulledPork v0.7.3 - Making signature updates great again!
`--==\\/
.-~~~~-.Y|\\_ Copyright (C) 2009-2017 JJ Cummings, Michael Shirk
@_/ / 66\_ and the PulledPork Team!
| \ \ _(")
\ /-| ||'--' Rules give me wings!
\_\ \_\\
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Checking latest MD5 for snortrules-snapshot-29151.tar.gz....
Rules tarball download of snortrules-snapshot-29151.tar.gz....
They Match
Done!
Checking latest MD5 for community-rules.tar.gz....
Rules tarball download of community-rules.tar.gz....
They Match
Done!
IP Blacklist download of https://talosintelligence.com/documents/ip-blacklist....
Reading IP List...
Checking latest MD5 for opensource.gz....
Rules tarball download of opensource.gz....
They Match
Done!
Prepping rules from snortrules-snapshot-29151.tar.gz for work....
Done!
Prepping rules from opensource.gz for work....
Done!
Prepping rules from community-rules.tar.gz for work....
Done!
Reading rules...
Generating Stub Rules....
An error occurred: WARNING: ip4 normalizations disabled because not inline.
An error occurred: WARNING: tcp normalizations disabled because not inline.
An error occurred: WARNING: icmp4 normalizations disabled because not inline.
An error occurred: WARNING: ip6 normalizations disabled because not inline.
An error occurred: WARNING: icmp6 normalizations disabled because not inline.
Done
Reading rules...
Writing Blacklist File /usr/local/etc/snort/rules/iplists/default.blacklist....
Writing Blacklist Version 959527270 to /usr/local/etc/snort/rules/iplistsIPRVersion.dat....
Setting Flowbit State....
Enabled 1 flowbits
Done
Writing /usr/local/etc/snort/rules/snort.rules....
Done
Generating sid-msg.map....
Done
Writing v1 /usr/local/etc/snort/sid-msg.map....
Done
Writing /var/log/sid_changes.log....
Done
Rule Stats...
New:-------39104
Deleted:---0
Enabled Rules:----13037
Dropped Rules:----0
Disabled Rules:---26067
Total Rules:------39104
IP Blacklist Stats...
Total IPs:-----717
Done
Please review /var/log/sid_changes.log for additional details
Fly Piggy Fly!
※.以下の表示部分は無視して良いエラーです。
Generating Stub Rules....
An error occurred: WARNING: ip4 normalizations disabled because not inline.
An error occurred: WARNING: tcp normalizations disabled because not inline.
An error occurred: WARNING: icmp4 normalizations disabled because not inline.
An error occurred: WARNING: ip6 normalizations disabled because not inline.
An error occurred: WARNING: icmp6 normalizations disabled because not inline.
⑥.ネットワークのインターフェース名を確認する。
ifconfig
⑦.以下のように表示する事を確認する。
vmx0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=e403bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,TSO4,TSO6,VLAN_HWTSO,RXCSUM_IPV6,TXCSUM_IPV6>
ether 00:0c:29:06:f4:86
inet 192.168.0.11 netmask 0xffffff00 broadcast 192.168.0.255
media: Ethernet autoselect
status: active
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6>
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2
inet 127.0.0.1 netmask 0xff000000
groups: lo
nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
⑧.snort が起動する事を確認する。
snort -A console -q -c /usr/local/etc/snort/snort.conf -i vmx0
⑨.以下のように表示する事を確認する。
05/05-02:18:27.238395 [**] [129:12:1] Consecutive TCP small segments exceeding threshold [**] [Classification: Potentially Bad Traffic] [Priority: 2] {TCP} 192.168.0.30:57973 -> 192.168.0.11:22
⑩.rc.conf を修正する。
vi /etc/rc.conf
⑪.以下のように記入する。
snort_enable="YES"
snort_interface="vmx0"
⑫.snort を起動する。
service snort start
⑬.crontab に登録する。
vi /etc/crontab
⑭.以下のように記入する。
#snort rules
0 1 * * * root /usr/local/bin/pulledpork.pl -c /usr/local/etc/pulledpork/pulledpork.conf -l > /dev/null
3.barnyard2 設定
MySQL にデータを登録できるように設定する。
①.barnyard2.conf を修正する。
vi /usr/local/etc/barnyard2.conf
②.以下のように記入する。
config hostname: localhost
config interface: vmx0
config logdir: /var/log/barnyard2
config daemon
config waldo_file: /var/log/snort/barnyard2.waldo
output database: log, mysql, user=snort password=パスワード dbname=snort_log host=localhost
③.保存先の情報を登録する。
mkdir /var/log/barnyard2
mkdir /var/log/snort/archive
touch /var/log/snort/barnyard2.waldo
④.rc.conf を修正する。
barnyard2_enable="YES"
barnyard2_flags="-f merged.log -d /var/log/snort -a /var/log/snort/archive -D"
⑤.MySQL(MariaDB)にユーザーを登録する。
mysql -u root -p
CREATE USER 'snort'@'localhost' IDENTIFIED BY 'snort';
⑥.create_mysql の保存先に移動する。
cd /usr/local/share/examples/barnyard2
⑦.snort 用のテーブルを作成する。
mysql -u root -p snort < create_mysql
※.ref_system_id のエラーが表示する場合は、GitHub の情報を使用した方が良いです。
⑧.barnyard2 を起動する。
service barnyard2 start
⑨.syslog.conf を修正する。
vi /etc/syslog.conf
⑩.以下のように記入する。
# $FreeBSD: releng/12.1/usr.sbin/syslogd/syslog.conf 338146 2018-08-21 17:01:47Z brd $
#
# Spaces ARE valid field separators in this file. However,
# other *nix-like systems still insist on using tabs as field
# separators. If you are sharing this file between systems, you
# may want to use only tabs as field separators here.
# Consult the syslog.conf(5) manpage.
!snort,barnyard2
*.* /var/log/snort/snort.log
!-snort,barnyard2
!snort,barnyard2
*.* /var/log/snort/snort.log
!-snort,barnyard2
※.上記の内容を登録するが必要ないかも・・・
⑪.syslogd を再起動する。
service syslogd restart
⑫.newsyslog.conf を修正する。
vi /etc/newsyslog.conf
⑬.以下のように記入する。
/var/log/snort/snort.log 644 3 100 * JC
※.上記のないよう必要ないかもです・・・
⑭.crontab に登録する。
vi /etc/crontab
⑮.以下のように記入する。
# Clean up Snort Files
0 5 * * * root /usr/bin/find /var/log/snort/archive -mtime +7 -type f -delete
※.上記のないよう必要ないかもです・・・
4.base 導入
①.保存先に移動する。
cd /usr/ports/security/base
②.リビルドを実行する。
make install clean
③.リビルド中に確認画面が表示するが、全て OK のみを選択する。
④.以下のように表示する事を確認する。
====> Compressing man pages (compress-man)
===> Installing for base-1.4.5_1
===> Checking if base is already installed
===> Registering installation for base-1.4.5_1
Installing base-1.4.5_1...
Please read the README file located at:
/usr/local/share/doc/base/README
for how to configure /usr/local/www/base/base_conf.php after
installation.
To make BASE accessible through your web site, you will need to add
the following to your Apache configuration file:
Alias /base/ "/usr/local/www/base"
In order for the graphing functions to work in BASE, make sure you
include PEAR in your /usr/local/etc/php.ini configuration file, like:
include_path = ".:/usr/local/share/pear"
If you built BASE with PDF support, make sure you include the FPDF
path in your /usr/local/etc/php.ini configuration file, like:
include_path = ".:/usr/local/share/pear:/usr/local/share/fpdf"
===> NOTICE:
The base port currently does not have a maintainer. As a result, it is
more likely to have unresolved issues, not be up-to-date, or even be removed in
the future. To volunteer to maintain this port, please create an issue at:
https://bugs.freebsd.org/bugzilla
More information about port maintainership is available at:
https://www.freebsd.org/doc/en/articles/contributing/ports-contributing.html#maintain-port
===> Cleaning for adodb5-php74-5.20.17
===> Cleaning for adodb5-php72-5.20.17
===> Cleaning for adodb5-php73-5.20.17
===> Cleaning for php74-pear-Image_Graph-0.8.0
===> Cleaning for php72-pear-Image_Graph-0.8.0
===> Cleaning for php73-pear-Image_Graph-0.8.0
===> Cleaning for php74-pear-1.10.6
===> Cleaning for php72-pear-1.10.6
===> Cleaning for php73-pear-1.10.6
===> Cleaning for php74-pear-Log-1.13.1
===> Cleaning for php72-pear-Log-1.13.1
===> Cleaning for php73-pear-Log-1.13.1
===> Cleaning for php74-pear-Image_Canvas-0.3.2_1
===> Cleaning for php72-pear-Image_Canvas-0.3.2_1
===> Cleaning for php73-pear-Image_Canvas-0.3.2_1
===> Cleaning for php74-pear-Image_Color-1.0.4
===> Cleaning for php72-pear-Image_Color-1.0.4
===> Cleaning for php73-pear-Image_Color-1.0.4
===> Cleaning for php74-pear-Mail-1.4.1,1
===> Cleaning for php72-pear-Mail-1.4.1,1
===> Cleaning for php73-pear-Mail-1.4.1,1
===> Cleaning for php74-pear-Mail_Mime-1.10.7,2
===> Cleaning for php72-pear-Mail_Mime-1.10.7,2
===> Cleaning for php73-pear-Mail_Mime-1.10.7,2
===> Cleaning for base-1.4.5_1
5.base 設定
①.php.ini を修正する。
vi /usr/local/etc/php.ini
②.以下のように変更後の内容にする。
■変更前
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
■変更後
;error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
③.apache に以下の内容を記入する。
Alias /base /usr/local/www/base
<Directory /usr/local/www/base>
Require ip 127.0.0.1
Require ip 192.168.0.
</Directory>
④.apache を再起動する。
service apache24 restart
⑤.base の設定画面を表示する。
http://IPアドレス/base/setup/
⑥.設定時のエラーログになります。
PHP Fatal error: Uncaught Error: Call to undefined function mysql_connect() in /usr/local/share/adodb/drivers/adodb-mysql.inc.php:461\nStack trace:\n#0 /usr/local/share/adodb/adodb.inc.php(683): ADODB_mysql->_connect()\n#1 /usr/local/www/base/setup/setup2.php(72): ADOConnection->Connect()\n#2 {main}\n thrown in /usr/local/share/adodb/drivers/adodb-mysql.inc.php on line 461, referer: http://IPアドレス/base/setup/setup2.php
エラーログの内容を詳しく確認してないですが・・・
PHP74 と MariaDB との相性が良くないのかもです。
そのため、今回は諦めることにしました。