ネットワーク型IDS Snort のインストール手順

以下、LPI Japan さんの「Linuxセキュリティ標準教科書」
を元にインストールした手順です。
結構はまりましたので、メモとして残します。

### 0-1. snortをインストールした環境 ###
$ uname -a
Linux lpic303 2.6.32-358.el6.x86_64 #1 SMP Fri Feb 22 00:31:26 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

### 0-2. 前提として以下のファイルを用意済み ###
$ ls -l /tmp/
-r-xr-xr-x. 1 xxx xxx  652879  X月 YY HH:MM 2014 barnyard2-1.9.tar.gz
-r-xr-xr-x. 1 xxx xxx  228383  X月 YY HH:MM 2014 community-rules.tar.gz
-r-xr-xr-x. 1 xxx xxx  480030  X月 YY HH:MM 2014 daq-2.0.0.tar.gz
-r-xr-xr-x. 1 xxx xxx  446233  X月 YY HH:MM 2014 libdnet-1.11.tar.gz
-r-xr-xr-x. 1 xxx xxx  608967  X月 YY HH:MM 2014 libpcap-1.3.0.tar.gz
-r-xr-xr-x. 1 xxx xxx 1790055  X月 YY HH:MM 2014 pcre-8.32.tar.gz
-r-xr-xr-x. 1 xxx xxx 5289321  X月 YY HH:MM 2014 snort-2.9.4.tar.gz
### 1-1.必要rpmパッケージを導入 ###
$ sudo rpm -ihv gcc-4.4.7-3.el6.x86_64.rpm \
> cpp-4.4.7-3.el6.x86_64.rpm \
> glibc-devel-2.12-1.107.el6.x86_64.rpm \
> libgomp-4.4.7-3.el6.x86_64.rpm \
> cloog-ppl-0.15.7-1.2.el6.x86_64.rpm \
> glibc-headers-2.12-1.107.el6.x86_64.rpm \
> kernel-headers-2.6.32-358.el6.x86_64.rpm \
> mpfr-2.4.1-6.el6.x86_64.rpm \
> ppl-0.10.2-11.el6.x86_64.rpm
警告: gcc-4.4.7-3.el6.x86_64.rpm: ヘッダ V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
準備中...                ########################################### [100%]
   1:ppl                    ########################################### [ 11%]
   2:cloog-ppl              ########################################### [ 22%]
   3:mpfr                   ########################################### [ 33%]
   4:cpp                    ########################################### [ 44%]
   5:kernel-headers         ########################################### [ 56%]
   6:glibc-headers          ########################################### [ 67%]
   7:glibc-devel            ########################################### [ 78%]
   8:libgomp                ########################################### [ 89%]
   9:gcc                    ########################################### [100%]

$ sudo rpm -ihv make-3.81-20.el6.x86_64.rpm
警告: make-3.81-20.el6.x86_64.rpm: ヘッダ V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
準備中...                ########################################### [100%]
   1:make                   ########################################### [100%]

$ sudo rpm -ihv flex-2.5.35-8.el6.x86_64.rpm bison-2.4.1-5.el6.x86_64.rpm
警告: flex-2.5.35-8.el6.x86_64.rpm: ヘッダ V3 RSA/SHA256 Signature, key ID c105b9de: NOKEY
準備中...                ########################################### [100%]
   1:bison                  ########################################### [ 50%]
   2:flex                   ########################################### [100%]

$ sudo rpm -ihv gcc-c++-4.4.7-3.el6.x86_64.rpm libstdc++-devel-4.4.7-3.el6.x86_64.rpm
警告: gcc-c++-4.4.7-3.el6.x86_64.rpm: ヘッダ V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
準備中...                ########################################### [100%]
   1:libstdc++-devel        ########################################### [ 50%]
   2:gcc-c++                ########################################### [100%]

$ sudo rpm -ihv zlib-devel-1.2.3-29.el6.x86_64.rpm pkgconfig-0.23-9.1.el6.x86_64.rpm
警告: zlib-devel-1.2.3-29.el6.x86_64.rpm: ヘッダ V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
準備中...                ########################################### [100%]
   1:pkgconfig              ########################################### [ 50%]
   2:zlib-devel             ########################################### [100%]

### 1-2. ネットワークに流れるパケットを解析するライブラリ Libpcap をインストール ###
$ cd /tmp/
$ tar xvzf libpcap-1.3.0.tar.gz
$ cd libpcap-1.3.0
$ ./configure
$ make
$ sudo make install

### 1-3. Perl互換の正規表現をC言語で実装したライブラリ Perl Compatible Regular Expressions (PCRE)をインストール ###
$ cd /tmp/
$ tar xvzf pcre-8.32.tar.gz
$ cd pcre-8.32
$ ./configure
$ make
$ sudo make install

### 1-4.ネットワーク関連の操作を簡素化するライブラリ Libdnet をインストール ###
$ cd /tmp/
$ tar zxvf libdnet-1.11.tar.gz
$ cd libdnet-1.11
$ ./configure
$ make
$ sudo make install

### LibdnetをSnort利用できるように、/usr/local/lib/に.soファイルを作成 ###
$ cd /usr/local/lib
$ sudo cp -p libdnet.1.0.1 libdnet.so.1.0.1
$ sudo ln -s libdnet.so.1.0.1 libdnet.so.1
$ sudo ln -s libdnet.so.1.0.1 libdnet.so

### 1-5.Snortの結果を出力するためのライブラリ Barnyard2 をインストール ###
$ cd /tmp/
$ tar zxvf barnyard2-1.9.tar.gz
$ cd barnyard2-1.9
$ ./configure
$ make
$ sudo make install

### 1-6.Snortが各種データを取得するために必要なライブラリ DAQ をインストールする ###
$ cd /tmp/
$ tar zxvf daq-2.0.0.tar.gz
$ cd daq-2.0.0
$ ./configure

    ERROR!  Libpcap library version >= 1.0.0  not found.
    Get it from http://www.tcpdump.org

### コンパイルエラーになりました。rpmパッケージからlibpcapをインストール ###
$ cd /mnt/cdrom/Packages/
$ sudo rpm -ihv libpcap-1.0.0-6.20091201git117cb5.el6.x86_64.rpm
警告: libpcap-1.0.0-6.20091201git117cb5.el6.x86_64.rpm: ヘッダ V3 RSA/SHA256 Signature, key ID c105b9de: NOKEY
準備中...                ########################################### [100%]
   1:libpcap                ########################################### [100%]

$ ./configure
$ make
$ sudo make install

### インストールしたライブラリをシステムに認識させます ###
$ sudo ldconfig -v /usr/local/lib
$ ldconfig -p | grep daq
     libdaq.so.2 (libc6,x86-64) => /usr/local/lib/libdaq.so.2
     libdaq.so (libc6,x86-64) => /usr/local/lib/libdaq.so

### 1-7.Snortのインストール ###
$ cd /tmp
$ tar zxvf snort-2.9.4.tar.gz
$ cd snort-2.9.4
$ ./configure
$ make
$ sudo make install
### 2-1. Snortが利用するユーザを作成 ###
$ sudo useradd snort

### 2-2. Snortの設定ファイル、起動スクリプトを配置 ###
$ sudo cp /tmp/snort-2.9.4/rpm/snort.sysconfig /etc/sysconfig/snort
$ sudo cp /tmp/snort-2.9.4/rpm/snortd /etc/init.d/
$ sudo chmod 755 /etc/init.d/snortd

### 2-3. 無料で使えるコミュニティ版のルールファイルを配置 ###
$ cd /tmp/
$ tar zxvf community-rules.tar.gz
$ cd community-rules
$ sudo mkdir /etc/snort
$ sudo cp sid-msg.map /etc/snort/
$ sudo mkdir /etc/snort/rules
$ sudo cp community.rules /etc/snort/rules/
    
### 2-4. Snortの動作に必要な設定ファイルを/etc/snortへコピー ###
$ cd /tmp/snort-2.9.4/etc
$ sudo cp attribute_table.dtd classification.config gen-msg.map reference.config snort.conf threshold.conf unicode.map /etc/snort/
$ sudo chown -R snort.snort /etc/snort

### 2-5. ログなどSnortの動作に必要なディレクトを作成 ###
$ sudo mkdir /usr/local/lib/snort_dynamicrules
$ sudo mkdir /var/log/snort
$ sudo chown -R snort.snort /var/log/snort

### 2-6. ログローテーションを設定 ###
$ sudo cp /tmp/snort-2.9.4/rpm/snort.logrotate /etc/logrotate.d/snort

### 2-7. Snort設定ファイル編集 ###
$ sudo vi /etc/snort/snort.conf
(変更前)var RULE_PATH ../rules
(変更前)var SO_RULE_PATH ../so_rules
(変更前)var PREPROC_RULE_PATH ../preproc_rules
(変更前)var WHITE_LIST_PATH ../rules
(変更前)var BLACK_LIST_PATH ../rules

(変更後)var RULE_PATH ./rules
(変更後)var SO_RULE_PATH ./so_rules
(変更後)var PREPROC_RULE_PATH ./preproc_rules
(変更後)var WHITE_LIST_PATH ./rules
(変更後)var BLACK_LIST_PATH ./rules

(追加)include $RULE_PATH/community.rules

(コメントアウト)#include $RULE_PATH/app-detect.rules
~
(コメントアウト)#include $RULE_PATH/x11.rules

### 2-8. 動作確認のため、簡易ロール設定
$ sudo vi  /etc/snort/rules/local.rules
(追加)alert icmp any any -> any any (msg: "ICMP Packet detected"; sid:999999;)
### 3-1. Snort起動 ###
$ sudo /etc/init.d/snortd start
Starting snort: /bin/bash: /usr/sbin/snort: そのようなファイルやディレクトリはありません
                                                           [失敗]

### 起動失敗、実行コマンドが見つからない? ###
$ whereis snort
snort: /etc/snort /usr/local/bin/snort /usr/local/lib/snort

### 起動スクリプトを修正 ###
$ sudo vi /etc/init.d/snortd
### 以下3箇所修正(/usr/sbin/snort ⇒ /usr/local/bin/snort)
106 daemon /usr/sbin/snort $ALERTMODE $BINARY_LOG $NO_PACKET_LOG $DUMP_APP -D $PRINT_INTERFACE -i $i -u $USER -g $GROUP $CONF -l $LOGDIR/$i $PASS_FIRST $BPFFILE $BPF
115 daemon /usr/sbin/snort $ALERTMODE $BINARY_LOG $NO_PACKET_LOG $DUMP_APP -D $PRINT_INTERFACE -i $i -u $USER -g $GROUP $CONF -l $LOGDIR/$i $PASS_FIRST $BPFFILE $BPF
119 daemon /usr/sbin/snort $ALERTMODE $BINARY_LOG $NO_PACKET_LOG $DUMP_APP -D $PRINT_INTERFACE $INTERFACE -u $USER -g $GROUP $CONF -l $LOGDIR $PASS_FIRST $BPFFILE $BPF

### 再度起動したらまた失敗 ###
$ sudo /etc/init.d/snortd start
Starting snort:                                            [失敗]

### ログメッセージ確認 ###
$ sudo less /var/log/messages
Jul XX HH:MM:SS lpic303 snort[3646]: FATAL ERROR: /etc/snort/snort.conf(511) => Unable to open address file /etc/snort/./rules/white_list.rules, Error: No such file or directory
Jul XX HH:MM:SS lpic303 snort[3673]: FATAL ERROR: /etc/snort/snort.conf(511) => Unable to open address file /etc/snort/./rules/black_list.rules, Error: No such file or directory

### とりあえず空のファイル作成 ###
$ sudo touch white_list.rules
$ sudo touch black_list.rules

### やっと起動成功 ###
$  sudo /etc/init.d/snortd start
Starting snort: Spawning daemon child...
My daemon child 3700 lives...
Daemon parent exiting (0)
                                                           [  OK  ]
                                                           
### 3-2. 試しに別ホストからpingすると ###
$ sudo less /var/log/snort/alert
mm/dd-hh:mm:ss.ssssss  [**] [1:999999:0] ICMP Packet detected [**] [Priority: 0] {ICMP} 192.168.56.1 -> 192.168.56.200
mm/dd-hh:mm:ss.ssssss  [**] [1:999999:0] ICMP Packet detected [**] [Priority: 0] {ICMP} 192.168.56.200 -> 192.168.56.1

### ルールファイルもう少しを修正してみました ###
$ sudo vi  /etc/snort/rules/local.rules
      alert icmp any any -> any any (msg: "ICMP Packet detected"; sid:999999;)
(追加)alert tcp  any any -> any any

### 別ホストからsshでログインすると ###
$ sudo less /var/log/snort/alert
mm/dd-hh:mm:ss.ssssss [Priority: 0] {TCP} 192.168.56.1:58008 -> 192.168.56.200:22
mm/dd-hh:mm:ss.ssssss [Priority: 0] {TCP} 192.168.56.1:55482 -> 192.168.56.200:22
mm/dd-hh:mm:ss.ssssss [Priority: 0] {TCP} 192.168.56.1:55482 -> 192.168.56.200:22
カテゴリー: LPIC303勉強 パーマリンク