CentOS 6.5 に Snorby と Suricata をインストール


どうもみむらです。

IDS というと Snort というイメージも多いかと思いますが、
ふと Google なページをさまよっていたら Suricata というものを見つけましたので、
これを入れてみようかと。

環境としては CentOS 6.5 で Hyper-V 環境。
Windows Server 2012 (Windows 8) 以降の Hyper-V であればポートミラーリングが使えますので
その辺を使いつつ。

今回の環境では eth0 をミラーポートからのデータ受け付け用に
eth1 を管理用に構築してみます。

参考にしたところ:

http://n40lab.wordpress.com/2013/06/02/snorby-in-centos-6-4/
http://n40lab.wordpress.com/2013/05/31/installing-suricata-ids-from-source-centos-6-3/
https://redmine.openinfosecfoundation.org/projects/suricata/wiki/Suricata_Snorby_and_Barnyard2_set_up_guide
https://redmine.openinfosecfoundation.org/projects/suricata/wiki/Basic_Setup

 

Snorby が稼働するとこんな感じの画面が出ます:

image

 

かなりの長文なので「続きを読む」を使っていったん切ります・・


1.事前準備

事前にプロミスキャスモードを有効にしておきます。
あとは、余計なことを喋らないようにいろいろいじってみる。

# vim /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
PROMISC=yes
USERCTL=no
PEERDNS=no

私の場合はこんな感じで。


2.Suricata をインストールするための準備

必要なパッケージが epel にあるので入れておきます。

具体的には

http://ftp.iij.ad.jp/pub/linux/fedora/epel/

あたりから、自分の環境にあった epel-release を取ってきてインストールしておきます。

 

私の場合はこんな感じ:

rpm -ivh http://ftp.iij.ad.jp/pub/linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm

 

続いて、ビルドに必要なものをインストール:

yum install gcc ruby-devel rubygems pcre-devel libyaml-devel libnet-devel libpcap-devel libcap-ng-devel file-devel zlib-devel rpm-build

 

後で RPM パッケージにまとめるために使う fpm をインストール:

gem install fpm

3.Suricata をコンパイル

下記 URL から suricata の最新バージョンを取ってきます。

http://www.openinfosecfoundation.org/index.php/download-suricata

wget http://www.openinfosecfoundation.org/download/suricata-2.0.tar.gz

 

ダウンロードしたファイルを展開してそのディレクトリに移動します。

tar zxvf suricata-2.0.tar.gz
cd suricata-2.0

先ほど展開したディレクトリに移動して

prefix=/usr/

sysconfdir=/etc/

localstatedir=/var/

で configure を動かします。

( QEMU/KVM 環境ではこれに加えて “—disable-gccmarch-native” を付けるとよいそうです。)

configure が終わったら make

最後 make install をするときに DESTDIR=/tmp/suricata を付けて install します。

rm -rf /tmp/suricata
./configure --prefix=/usr/ --sysconfdir=/etc/ --localstatedir=/var/
make -j8
make install DESTDIR=/tmp/suricata

4.Suricata のパッケージを作ってインストール

fpm コマンドを使ってさくっと。

・・この辺についての詳しい内容は

fpm を使って任意のプログラムを rpm にまとめてみる。 を参照してください。

 

・・ってことでさくっと。

cd ~
fpm -s dir -t rpm -n suricata -v 2.0 -C /tmp/suricata -p suricata-2.0.rpm .
rm -rf /tmp/suricata
su
rpm -ivh suricata-2.0.rpm
exit

 


5.Suricata の設定

https://redmine.openinfosecfoundation.org/projects/suricata/wiki/Basic_Setup

この辺のページを見ながら・・になります。

先ほどビルドしたソースコードの置いてある場所に移動し、

管理者権限で make install-full をすると設定ファイルとルールが良い感じに入りますので

これを使ってみます。

su
cd suricata-2.0
make install-full

これが完了したら、 /etc/suricata/suricata.yaml を自分の環境に合わせて変更します。

・・いろいろと設定項目はありますが、とりあえず環境に関しては

vars: の中の address-groups: の変更をすれば大丈夫かと思います。

(必要に応じて host-os-policy や port-groups など。)

・・私の場合は

HOME_NET: “192.168.1.0/24”

に変更。あとは HTTP_SERVERS もちょこっと変えました。

 

この時点で

suricata -c /etc/suricata/suricata.yaml -i eth0

とか打って動作すれば、ここまでの設定は完了しています。


6.Barnyard のインストール

必要なやつをインストール

yum install readline-devel libxml2-devel libxslt-devel mysql-devel mysql-libs mysql-server urw-fonts libyaml-devel gdbm-devel libffi-devel ImageMagick-devel git apr-devel apr-util-devel httpd-devel curl-devel gcc-c++ libtool

 

Barnyard をgit ( https://github.com/firnsy/barnyard2.git ) から取ってきます

cd ~
git clone https://github.com/firnsy/barnyard2.git

 

またこれも rpm 化してからインストールしますので、

autogen.sh を呼んで configure を生成し、

これを “—prefix=/usr –with-mysql –with-mysql-libraries=/usr/lib64/mysql” で呼び出します。

その後、 make,  make install DESTDIR=~/barnyard, fpm の流れになります。

./configure --prefix=/usr --with-mysql --with-mysql-libraries=/usr/lib64/mysql
make -j8
make install DESTDIR=~/barnyard
cd ~
fpm -s dir -t rpm -n barnyard -v 2.1.12 -C ~/barnyard -p barnyard-2.1.12.rpm usr/
rm -rf barnyard

su
rpm -ivh barnyard-2.1.12.rpm

それと、先ほど clone したフォルダ内に設定ファイルがあるのでこれを surikata 以下にコピー

cd barnyard2
cp etc/barnyard2.conf /etc/suricata/

最後に /var/log/barnyard2 ディレクトリを作っておきます。

mkdir /var/log/barnyard2

7.Barnyard の設定

データ格納用のデータベースとユーザを作っておきます。

mysql> CREATE DATABASE データベース名;
mysql> GRANT ALL ON データベース名.* to ユーザ名@localhost;
mysql> FLUSH PRIVILEGES;
mysql> SET PASSWORD FOR ユーザ名@localhost=password('パスワード');

・・上記に上げたような流れで、任意の名前でデータベースを作って、

そのユーザに権限を与えます。

 

私の場合は適当にこんな感じに: (パスワードは変えましたよ、もちろん!)

mysql> create database barnyard;
mysql> grant all on barnyard.* to barnyard@localhost;
mysql> flush privileges;
mysql> set password for barnyard@localhost=password('yuyushiki');

 

/etc/suricata/barnyard2.conf を編集します。

中の /etc/snort を /etc/suricata に変えていく感じです。

# vim /etc/suricata/barnyard2.conf

config reference_file:      /etc/suricata/reference.config
config classification_file: /etc/suricata/classification.config
config gen_file:            /etc/suricata/rules/gen-msg.map
config sid_file:            /etc/suricata/rules/sid-msg.map

..

#最下行に追記

output database: log, mysql, user=barnyard password=yuyushiki dbname=barnyard host=localhost sensor_name=suricata

 

最後に /etc/suricata/suricata.yaml の logging outputs に関する部分を見直して完了です。

# vim /etc/suricata/suricata.yaml

outputs:
 - file:
     enabled :yes  ← ここが YES になっているかどうか。 NO だったら変更する

 - unified2-alert:
   enabled : yes ←ここが YES になっているかどうか。 NO だったら変更する

 - stats:
   enabled : no ← ここは NO になっているかどうか。 YES だとディスクを圧迫する。

 


8.Snorby のインストール

まず wkhtmltopdf をインストールします。

wget http://downloads.sourceforge.net/project/wkhtmltopdf/0.12.0/wkhtmltox-linux-amd64_0.12.0-03c001d.tar.xz
tar Jxvf wkhtmltox-linux-amd64_0.12.0-03c001d.tar.xz

 

このままコピーするのはあまり精神衛生上よろしくないので rpm にしてから。

mv wkhtmltox usr
fpm -s dir -t rpm -n wkhtmltox.rpm -v 0.12 -p wkhtmltox usr/
su
rpm -ivh wkhtmltox.rpm

 

それと ruby を 1.9 系を入れる必要があるので

SPEC FILE とソースコードを取ってきて、 rpmbuild を行います。

cd ~
mkdir -p rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
wget ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p545.tar.gz -P rpmbuild/SOURCES
wget https://raw.github.com/imeyer/ruby-1.9.3-rpm/master/ruby19.spec -P rpmbuild/SPECS
rpmbuild -bb rpmbuild/SPECS/ruby19.spec

気長に待つと、rpmbuild/RPMS/(アーキテクチャ)/ に rpm ファイルができあがっていますので

それをインストール。

su
rpm -Uvh ruby-1.9.3p545-1.el6.x86_64.rpm

 

続いて ruby の必要なコンポーネントをインストール

gem install bundler

 

Apache に passenger をインストール

gem install passenger
passenger-install-apache2-module

 

いろいろと聞かれますが、デフォルトで大丈夫です。

そしてインストールが完了したら、

下記のコマンドを実行して基本的な設定を設定ファイルに書き込ませます。

passenger-install-apache2-module --snippet > /etc/httpd/conf.d/passenger.conf

書き込ませたら、いくつか追加項目を記述します。

# vim /etc/httpd/conf.d/passenger.conf

LoadModule passenger_module /usr/lib64/ruby/gems/1.9.1/gems/passenger-4.0.42/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
  PassengerRoot /usr/lib64/ruby/gems/1.9.1/gems/passenger-4.0.42
  PassengerDefaultRuby /usr/bin/ruby
</IfModule>

# ここから下を追記

Header always unset "X-Powered-By"
Header always unset "X-Rack-Cache"
Header always unset "X-Content-Digest"
Header always unset "X-Runtime"

 

でもってウェブサーバにファイルを設置

cd /var/www/html/
git clone https://github.com/Snorby/snorby.git
cd /var/www/html/snorby/config/
cp database.yml.example database.yml
cp snorby_config.yml.example snorby_config.yml
chown -R apache:apache /var/www/html/snorby

 

database.yml を変更して、 Barnyard で設定したときの設定に合わせる

#vim database.yml

barnyard: &barnyard
  adapter: mysql
  username: barnyard
  password: "yuyushiki" # Example: password: "s3cr3tsauce"
  host: localhost

development:
  database: barnyard
  <<: *barnyard

test:
  database: barnyard
  <<: *barnyard

production:
  database: barnyard
  <<: *barnyard

 

一つ上のディレクトリに移動し、

まず Gemfile の “’rake’,’0.9.2’ となっている部分を ‘> 0.9.2’ に書き換えます。

# vim /var/www/html/snorby/Gemfile

# gem 'rake' '0.9.2' を下記のように書き換える
gem 'rake' '> 0.9.2'

その後、 Gemfile.lock を削除した上で、bundle install,  rake snorby:setup を行います。

rm Gemfile.lock

su
bundle install # CentOS 環境だと sudo が正常に動かない場合もあるため
exit

bundle exec rake snorby:setup

 

そして /etc/httpd/conf.d/passenger.conf に設定を書き加えて、サーバを立ち上げます。

# vim /etc/httpd/conf.d/passenger.conf

LoadModule passenger_module /usr/lib64/ruby/gems/1.9.1/gems/passenger-4.0.42/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
  PassengerRoot /usr/lib64/ruby/gems/1.9.1/gems/passenger-4.0.42
  PassengerDefaultRuby /usr/bin/ruby
</IfModule>

Header always unset "X-Powered-By"
Header always unset "X-Rack-Cache"
Header always unset "X-Content-Digest"
Header always unset "X-Runtime"

# 下記を追記 ( Server Name 等は各環境に合わせる )

<VirtualHost *:80>
        ServerName ids.contoso.com
        DocumentRoot /var/www/html/snorby/public

        <Directory "/var/www/html/snorby/public">
                AllowOverride all
                Order deny,allow
                Allow from all
                Options -MultiViews
        </Directory>
</VirtualHost>

 

ここの状態で、 httpd を開始させて接続したときに、

良い感じで画面が出てくれば設定は成功です。


9.すべてを組み合わせる

ここまで来れば後はもう少しです。

1. suricata を起動させる

suricata -c /etc/suricata/suricata.yaml -i eth0 -D

2. barnyard2 を起動させる

barnyard2 -c /etc/suricata/barnyard2.conf -d /var/log/suricata -f unified2.alert -w /var/log/suricata/suricata.waldo -D

3. snorby にログインする

初期値は下記の通り

ID : snorby@snorby.org

Pass : snorby

 

これでログインできれば設定がすべて完了したことになります。

もし httpd や mysqld が起動時に起動しないようになっていれば、

chkconfig httpd on

chkconfig mysqld on

等を実行して設定を行うと良いかと思います。

 

また、起動するたびに suricata や barnyard2 を起動するのは面倒くさい、という場合は

/etc/rc.local に記述を加えておくと起動時に実行されるようになります。

 

2014/05/13 03:40 追記:

The Snorby worker is not currently running. と表示されて

動かないことが結構あるようです。

この場合、snorby を展開したディレクトリに移動し、

ruby script/delayed_job start

を実行すると表示が消えて動き出します。

・・もしかすると /etc/rc.local 等に入れておく必要があるかもしれません。

私は

pushd /var/www/html/snorby

ruby script/delayed_job start

popd

なんてスクリプトを書いてみました・・。

 


10. 自動的にルールを更新する (oinkmaster)

http://sourceforge.net/projects/oinkmaster/files/oinkmaster/

この辺から oinkmaster をダウンロードし、

中の oinkmaster.pl を /usr/local/bin へ、 oinkmaster.conf を /etc/suricata/ へコピー

tar zxvf oinkmaster.tar.gz
cd oinkmaster-2.0
cp oinkmaster.pl /usr/local/bin
cp oinkmaster.conf /etc/suricata/

oinkmaster.conf の url を

http://rules.emergingthreats.net/open/suricata/emerging.rules.tar.gz

へ書き換え

# vim /etc/suricata/oinkmaster.conf

url = http://rules.emergingthreats.net/open/suricata/emerging.rules.tar.gz

/etc/suricata/suricata.yaml の classification-file と reference-config-file の項を変更

(rules ディレクトリを見に行くようにする)

# vim /etc/suricata/suricata.yaml

classification-file: /etc/suricata/rules/classification.config
reference-config-file: /etc/suricata/rules/reference.config

 

後は /etc/suricata/rules ディレクトリに対して oinkmaster を実行。

/usr/local/bin/oinkmaster.pl -C /etc/suricata/oinkmaster.conf -o /etc/suricata/rules

 

これのら更新作業を自動で行う場合は、

こちらのサイトで紹介されているスクリプトをちょっと書き換えると可能です。

http://centossrv.com/snort-base.shtml

こんな風に:

#!/bin/bash

/usr/local/bin/oinkmaster.pl -C /etc/suricata/oinkmaster.conf -o /etc/suricata/rules 2>&1 1> /dev/null

 


かなりの長文となりましたが、

これに関しての日本語資料があまりない、というところで、少しでも参考になれば幸いです。


 

関連記事