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 との相性が良くないのかもです。
そのため、今回は諦めることにしました。