どうもみむらです。
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 が稼働するとこんな感じの画面が出ます:
かなりの長文なので「続きを読む」を使っていったん切ります・・
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
かなりの長文となりましたが、
これに関しての日本語資料があまりない、というところで、少しでも参考になれば幸いです。