Snortのインストール方法

#1 snortとは?
Snort(スノート)とは、ネットワーク型IDS(不正侵入検知システム)です。 
ネットワークを流れるパケットをキャプチャーして、不審なパケットの検出を行います。
インストール自体、非常に手間がかかるので、ここではインストールのみ実行してみました。

#2 環境
VMware Workstation 15 Player上の仮想マシンを使いました。
仮想マシンのOS版数は以下のとりです。

```console:CentOS版数
[root@server ~]# cat /etc/redhat-release
CentOS Linux release 8.3.2011
```

```console:カーネル版数
[root@server ~]# uname -r
4.18.0-240.el8.x86_64
```

#3 参照ドキュメント
下記ドキュメントに従ってインストールしました。
[Snort 3 on CentOS 8 Stream](https://snort-org-site.s3.amazonaws.com/production/document_files/files/000/003/977/original/Snort_3_GA_on_CentOS_8_Stream.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIXACIED2SPMSC7GA%2F20210314%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20210314T102238Z&X-Amz-Expires=172800&X-Amz-SignedHeaders=host&X-Amz-Signature=2c60ed10d84fb08cea6877ae45b1cb4a7985c17097010c5a9437ba1ece2323e2)


#4 必須パッケージのインストール
Snortをインストールするため、各種必須パッケージのインストールを行います。


##4.1 openssl-develのインストール
cmakeでbootstrapを実行すると、下記エラーがでるので、
あらかじめopenssl-develをインストールします。
`Could not find OpenSSL.  Install an OpenSSL development package or`

```console:パッケージのインストール
[root@server ~]# dnf install openssl-devel
```


##4.2 epel-releaseのインストール
epelリポジトリを使うため、epel-releaseパッケージをインストールします。

```console:パッケージのインストール
[root@server ~]# dnf install epel-release
```
dnfコマンドの使い方は、[dnfコマンドの使い方](https://qiita.com/hana_shin/items/25f8f4167666cb7fa5b9)を参照ください。



##4.3 powertoolsリポジトリの有効化
下記コマンドを実行して、powertoolsリポジトリを有効にします。
なお、powertoolsは、`/etc/yum.repos.d/CentOS-Linux-PowerTools.repo`に定義されています。

```console:リポジトリの有効化
[root@server ~]# dnf config-manager --enable powertools
```

リポジトリを確認します。
powertoolsが有効になったことがわかります。

```console:リポジトリの確認
[root@server ~]# dnf repolist|grep powertools
powertools         CentOS Linux 8 - PowerTools
```

##4.4 cmakeのインストール

```console:ソースファイルのダウンロード
[root@server ~]# wget https://github.com/Kitware/CMake/releases/download/v3.19.6/cmake-3.19.6.tar.gz
```

```console:ファイルの解凍
[root@server ~]# tar xvf cmake-3.19.6.tar.gz
```

```console:cmakeのコンパイル
[root@server ~]# cd cmake-3.19.6/
[root@server cmake-3.19.6]# ./bootstrap && make && make install
```

```console:版数確認
[root@server ~]# cmake --version
cmake version 3.19.6

CMake suite maintained and supported by Kitware (kitware.com/cmake).
```


##4.5 各種パッケージのインストール

```console:パッケージのインストール
[root@server ~]# dnf install libpcap-devel pcre-devel libdnet-devel hwloc-devel openssl-devel zlib-devel luajit-devel pkgconf libmnl-devel libunwind-devel
```

LibDAQをビルドするために必要なパッケージインストールします。

```console:パッケージのインストール
[root@server ~]# dnf install libnfnetlink-devel libnetfilter_queue-devel
```


##4.6 LibDAQのインストール

```console:ソースファイルのダウンロード
[root@server ~]# git clone https://github.com/snort3/libdaq.git
Cloning into 'libdaq'...
remote: Enumerating objects: 234, done.
remote: Counting objects: 100% (234/234), done.
remote: Compressing objects: 100% (134/134), done.
remote: Total 2153 (delta 147), reused 169 (delta 100), pack-reused 1919
Receiving objects: 100% (2153/2153), 1.02 MiB | 6.95 MiB/s, done.
Resolving deltas: 100% (1538/1538), done.
```

```console:bootstrapの実行
[root@server ~]# cd libdaq/
[root@server libdaq]# ./bootstrap
+ autoreconf -ivf --warnings=all
autoreconf: Entering directory `.'
autoreconf: configure.ac: not using Gettext
autoreconf: running: aclocal --force --warnings=all -I m4
autoreconf: configure.ac: tracing
autoreconf: running: libtoolize --copy --force
libtoolize: putting auxiliary files in '.'.
libtoolize: copying file './ltmain.sh'
libtoolize: putting macros in AC_CONFIG_MACRO_DIRS, 'm4'.
libtoolize: copying file 'm4/libtool.m4'
libtoolize: copying file 'm4/ltoptions.m4'
libtoolize: copying file 'm4/ltsugar.m4'
libtoolize: copying file 'm4/ltversion.m4'
libtoolize: copying file 'm4/lt~obsolete.m4'
autoreconf: running: /usr/bin/autoconf --force --warnings=all
autoreconf: running: /usr/bin/autoheader --force --warnings=all
autoreconf: running: automake --add-missing --copy --force-missing --warnings=all
configure.ac:29: installing './ar-lib'
configure.ac:26: installing './compile'
configure.ac:34: installing './config.guess'
configure.ac:34: installing './config.sub'
configure.ac:19: installing './install-sh'
configure.ac:19: installing './missing'
api/Makefile.am: installing './depcomp'
parallel-tests: installing './test-driver'
autoreconf: Leaving directory `.'
```

```console:configureの実行
[root@server libdaq]# ./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /usr/bin/mkdir -p

-snip-

    Build AFPacket DAQ module.. : yes
    Build BPF DAQ module....... : yes
    Build Divert DAQ module.... : no
    Build Dump DAQ module...... : yes
    Build FST DAQ module....... : yes
    Build NFQ DAQ module....... : yes
    Build PCAP DAQ module...... : yes
    Build netmap DAQ module.... : no
    Build Trace DAQ module..... : yes
```

```console:コンパイル
[root@server libdaq]# make
```

```console:インストール
[root@server libdaq]# make install
```

以下の手順は、公式ドキュメントになかったのですが、これを実行しないと
snortが共有ライブラリを実行できませんでした。
この手順が本当に正しいかどうか、自信がありません。

```console:シンボリックリンク作成
[root@server lib]# ln -s /usr/local/lib/libdaq.so.3 /lib/
```

```console:共有ライブラリの追加
[root@server libdaq]# ldconfig
```

```console:ライブラリの確認
[root@server libdaq]# ldconfig -p|grep daq
        libdaq.so.3 (libc6,x86-64) => /lib/libdaq.so.3
```


#5 オプションパッケージのインストール
必要におうじて追加のパッケージをインストールします。
ここでは、とりあえず、すべてインストールしました。

##5.1 LZMAとUUIDのインストール

```console:パッケージのインストール
[root@server ~]# dnf install xz-devel libuuid-devel
```


##5.2 Hyperscanのインストール

```console:パッケージのインストール
[root@server ~]# dnf install hyperscan hyperscan-devel
```

##5.3 Flatbuffersのインストール

```console:ソースファイルのダウンロード
[root@server ~]# curl -Lo flatbuffers-1.12.tar.gz https://github.com/google/flatbuffers/archive/v1.12.0.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   127  100   127    0     0    436      0 --:--:-- --:--:-- --:--:--   434
100 1118k  100 1118k    0     0  1432k      0 --:--:-- --:--:-- --:--:-- 1432k
```

```console:ファイルの確認
[root@server ~]# ls -l flatbuffers-1.12.tar.gz
-rw-r--r--. 1 root root 1145348  3月 14 19:36 flatbuffers-1.12.tar.gz
```

```console:圧縮ファイルの解凍
[root@server ~]# tar xvf flatbuffers-1.12.tar.gz
```

```console:ディレクトリ作成
[root@server ~]# mkdir fb-build && cd fb-build
```

```console:
[root@server fb-build]# cmake ../flatbuffers-1.12.0
-- The C compiler identification is GNU 8.3.1
-- The CXX compiler identification is GNU 8.3.1
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Looking for strtof_l
-- Looking for strtof_l - found
-- Looking for strtoull_l
-- Looking for strtoull_l - found
-- `tests/monster_test.fbs`: add generation of C++ code with '--no-includes;--gen-compare'
-- `tests/monster_test.fbs`: add generation of binary (.bfbs) schema
-- `tests/namespace_test/namespace_test1.fbs`: add generation of C++ code with '--no-includes;--gen-compare'
-- `tests/namespace_test/namespace_test2.fbs`: add generation of C++ code with '--no-includes;--gen-compare'
-- `tests/union_vector/union_vector.fbs`: add generation of C++ code with '--no-includes;--gen-compare'
-- `tests/native_type_test.fbs`: add generation of C++ code with ''
-- `tests/arrays_test.fbs`: add generation of C++ code with '--scoped-enums;--gen-compare'
-- `tests/arrays_test.fbs`: add generation of binary (.bfbs) schema
-- `tests/monster_test.fbs`: add generation of C++ embedded binary schema code with '--no-includes;--gen-compare'
-- `tests/monster_extra.fbs`: add generation of C++ code with '--no-includes;--gen-compare'
-- `samples/monster.fbs`: add generation of C++ code with '--no-includes;--gen-compare'
-- `samples/monster.fbs`: add generation of binary (.bfbs) schema
fatal: No names found, cannot describe anything.
-- Configuring done
-- Generating done
-- Build files have been written to: /root/fb-build
```

```
[root@server fb-build]# make -j$(nproc)
[root@server fb-build]# make -j$(nproc) install
```

```
[root@server fb-build]# ldconfig
[root@server fb-build]# cd ../
```

##5.4 Safecのインストール

```
[root@server ~]# dnf install libsafec libsafec-devel
```

```
[root@server ~]# ln -s /usr/lib64/pkgconfig/safec-3.3.pc /usr/lib64/pkgconfig/libsafec.pc
```


##5.5 Tcmallocのインストール

```
[root@server ~]# dnf install gperftools-devel
```

#6 Snort3のインストール

```console:ソースファイルのダウンロード
[root@server ~]# git clone https://github.com/snort3/snort3.git
Cloning into 'snort3'...
remote: Enumerating objects: 861, done.
remote: Counting objects: 100% (861/861), done.
remote: Compressing objects: 100% (575/575), done.
remote: Total 91771 (delta 430), reused 372 (delta 286), pack-reused 90910
Receiving objects: 100% (91771/91771), 72.21 MiB | 3.94 MiB/s, done.
Resolving deltas: 100% (80312/80312), done.
```

```console:環境変数の設定
[root@server ~]# cd snort3/
[root@server snort3]# export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
[root@server snort3]# export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig:$PKG_CONFIG_PATH
[root@server snort3]# export CFLAGS="-O3"
[root@server snort3]# export CXXFLAGS="-O3 -fno-rtti"
```

```console:configureの実行
[root@server snort3]# ./configure_cmake.sh --prefix=/usr/local/snort --enable-tcmalloc

-snip-


snort version 3.1.2.0

Install options:
    prefix:     /usr/local/snort
    includes:   /usr/local/snort/include/snort
    plugins:    /usr/local/snort/lib64/snort

Compiler options:
    CC:             /usr/bin/cc
    CXX:            /usr/bin/c++
    CFLAGS:         -O3  -fvisibility=hidden   -DNDEBUG -g -ggdb  -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free
    CXXFLAGS:       -O3 -fno-rtti  -fvisibility=hidden   -DNDEBUG -g -ggdb  -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free
    EXE_LDFLAGS:
    MODULE_LDFLAGS:

Feature options:
    DAQ Modules:    Static (afpacket;bpf;dump;fst;nfq;pcap;trace)
    Flatbuffers:    ON
    Hyperscan:      ON
    ICONV:          ON
    Libunwind:      ON
    LZMA:           ON
    RPC DB:         Built-in
    SafeC:          ON
    TCMalloc:       ON
    UUID:           ON
-------------------------------------------------------

-- Configuring done
-- Generating done
-- Build files have been written to: /root/snort3/build
```


```console:コンパイル
[root@server snort3]# cd build/
[root@server build]# pwd
/root/snort3/build

[root@server build]# make -j$(nproc)

-snip-

[100%] Linking CXX executable snort2lua
[100%] Built target snort2lua
[100%] Built target snort
```


```console:インストール
[root@server build]# make -j$(nproc) install
```

```console:バージョンの確認
[root@server ~]# /usr/local/snort/bin/snort -V

   ,,_     -*> Snort++ <*-
  o"  )~   Version 3.1.2.0
   ''''    By Martin Roesch & The Snort Team
           http://snort.org/contact#team
           Copyright (C) 2014-2020 Cisco and/or its affiliates. All rights reserved.
           Copyright (C) 1998-2013 Sourcefire, Inc., et al.
           Using DAQ version 3.0.1
           Using LuaJIT version 2.1.0-beta3
           Using OpenSSL 1.1.1g FIPS  21 Apr 2020
           Using libpcap version 1.9.1 (with TPACKET_V3)
           Using PCRE version 8.42 2018-03-20
           Using ZLIB version 1.2.11
           Using FlatBuffers 1.12.0
           Using Hyperscan version 5.3.0 2020-08-10
           Using LZMA version 5.2.4
```




#Z 参考情報
[オープンソースのセキュリティソフト／Snortとは](https://www.ossnews.jp/oss_info/Snort)
[不正アクセス検知システムのSnort インストール](https://ex1.m-yabe.com/archives/4906)
[もう一匹ぶたさん(snort2)を飼ってみる](https://gplains.wordpress.com/2021/02/09/snort_first_step_2/)