IDSであるsnortをインストールした時の備忘録です。

使用OS
CentOS 5.5 64bit

マシンホスト名
kurobuti.local

/etc/hostsの情報
127.0.0.1 kurobuti.local snort localhost.localdomain localhost

snortバージョン
snort-2.9.0.1
※最新版は下記URLで確認してください。
http://www.snort.org/snort-downloads?

daqバージョン
daq-0.3
※最新版は下記URLで確認してください。
http://www.snort.org/snort-downloads?

GUIツール
base-1.4.5
adodb511

必要なパッケージ
mysql
mysql-server
mysql-bench
mysql-devel
httpd
php
php-mbstring
php-devel
php-mysql
php-pear
gcc
pcre-devel
php-gd
gd
glib2-devel
gcc-c++
libpcap-devel

IDSって何?
http://www.atmarkit.co.jp/fsecurity/special/19fivemin/fivemin00.html


(1)必要なパッケージをインストールする。

[root@kurobuti ~]# yum -y install mysql mysql-server mysql-bench mysql-devel httpd php php-mbstring php-devel php-mysql php-pear gcc pcre-devel php-gd gd glib2-devel gcc-c++ libpcap-devel

(2)「libpcap-1.0.0」をインストールする。
[root@kurobuti ~]# wget http://www.tcpdump.org/release/libpcap-1.0.0.tar.gz
[root@kurobuti ~]# tar zvxf libpcap-1.0.0.tar.gz
[root@kurobuti ~]# cd libpcap-1.0.0
[root@snort libpcap-1.0.0]# ./configure --prefix=/usr/local/snort --bindir=/usr/local/bin
[root@kurobuti libpcap-1.0.0]# make
[root@kurobuti libpcap-1.0.0]# make install
※わざわざ古い「libpcap-1.0.0」をインストールする理由は「snort」をインストールするのに必要な「daq」が「libcap-1.0.0」のライブラリやヘッダファイルを使用するためです。

(3)「libdnet-1.12」をインストールする。
[root@kurobuti ~]# wget http://libdnet.googlecode.com/files/libdnet-1.12.tgz
[root@kurobuti ~]# tar zxvf libdnet-1.12.tgz
[root@kurobuti ~]# cd libdnet-1.12
[root@kurobuti libdnet-1.12]# ./configure --prefix=/usr/local/snort --bindir=/usr/local/bin
[root@kurobuti libdnet-1.12]# make
[root@kurobuti libdnet-1.12]# make install
※最新版は下記URLで確認してください。
http://code.google.com/p/libdnet/downloads/list

(4)「daq-0.3」をインストールする。
[root@kurobuti ~]# wget http://www.snort.org/downloads/363
[root@kurobuti ~]# tar zxvf daq-0.3.tar.gz\?AWSAccessKeyId\=AKIAJJSHU7YNPLE5MKOQ\&Expires\=1290863743\&Signature\=c+rDt36excafZMaPKUoqjUHt1hg\=
[root@kurobuti ~]# cd daq-0.3
[root@kurobuti daq-0.3]# ./configure --prefix=/usr/local/snort --bindir=/usr/local/bin --with-libpcap-includes=/usr/local/snort/include --with-libpcap-libraries=/usr/local/snort/lib --enable-static
[root@kurobuti daq-0.3]# make
[root@kurobuti daq-0.3]# make install

(5)「snort-2.9.0.1」をインストールする。
[root@kurobuti ~]# groupadd snort
[root@kurobuti ~]# useradd -g snort -d /etc/snort -M -s /sbin/nologin snort
[root@kurobuti ~]# wget http://www.snort.org/downloads/369
[root@kurobuti ~]# tar zxvf snort-2.9.0.1.tar.gz\?AWSAccessKeyId\=AKIAJJSHU7YNPLE5MKOQ\&Expires\=1290863955\&Signature\=dudu9AhKIAg5iF0ijFhPsPPuM3M\=
[root@kurobuti ~]# cd snort-2.9.0.1
[root@kurobuti snort-2.9.0.1]# ./configure --with-mysql-libraries=/usr/lib64/mysql --enable-targetbased --enable-dynamicplugin --enable-sourcefire --enable-reload --enable-zlib --enable-gre --enable-mpls --enable-ppm --enable-perfprofiling --with-dnet-includes=/usr/local/snort/include --with-dnet-libraries=/usr/local/snort/lib --with-daq-includes=/usr/local/snort/include --with-daq-libraries=/usr/local/snort/lib
[root@kurobuti snort-2.9.0.1]# make
[root@kurobuti snort-2.9.0.1]# make install
[root@kurobuti snort-2.9.0.1]# ln -s /usr/local/bin/snort /usr/sbin/
[root@kurobuti snort-2.9.0.1]# cp rpm/snortd /etc/init.d/
[root@kurobuti snort-2.9.0.1]# chmod 755 /etc/init.d/snortd
[root@kurobuti snort-2.9.0.1]# cp rpm/snort.sysconfig /etc/sysconfig/snort
[root@kurobuti snort-2.9.0.1]# mkdir /etc/snort
[root@kurobuti snort-2.9.0.1]# mkdir /var/log/snort
[root@kurobuti snort-2.9.0.1]# chown snort:snort /var/log/snort/
[root@kurobuti snort-2.9.0.1]# cp etc/* /etc/snort/
[root@kurobuti snort-2.9.0.1]# rm -rf /etc/snort/Makefile*
※32bitの場合は「–with-mysql」で大丈夫。

(6)「snort」のルールをダウンロードする。
ダウンロード先
https://www.snort.org/snort-rules/?
※「snort」のルールは、ユーザ登録をしてからではないとダウンロードできません。ユーザ登録の方法は、右上の【Sign In】⇒【Sign Up for An Account】をクリックし必要な情報を入力して【Sign UP】をクリックしてください。
しばらくすると、確認メールが登録したアドレスに届くので、その確認メールに記載されているアドレスをクリックしてログインしてからルールのダウンロードをしてください。
注:ルールのダウンロードは1回すると15分間できません。ダウンロード途中でキャンセルしても15分後にしかダウンロードできません。また、ダウンロードできない15分間にダウンロードすると、その時間+15分になるようです。私はそれで、1時間ほどダウンロードできなくなってしまいました・・・orz

ダウンロード後、サーバへアップロードしてください。

(7)「snortrules-snapshot-2900(ルール)」の設置をする。
[root@kurobuti ~]# tar zxvf snortrules-snapshot-2900.tar.gz.gz -C /etc/snort/
[root@kurobuti ~]# mkdir /usr/local/lib64/snort_dynamicrules
[root@kurobuti ~]# cp /etc/snort/so_rules/precompiled/Centos-5-4/x86-64/2.9.0.0/*.so /usr/local/lib64/snort_dynamicrules/
[root@kurobuti ~]# cat /etc/snort/so_rules/*.rules >> /etc/snort/rules/so-rules.rules

(8)「snort」の設定をする。
[root@kurobuti ~]# cd /etc/snort/
[root@kurobuti snort]# vi snort.conf
var RULE_PATH ../rules
var SO_RULE_PATH ../so_rules
var PREPROC_RULE_PATH ../preproc_rules
↓変更
var RULE_PATH /etc/snort/rules
var SO_RULE_PATH /etc/snort/so_rules
var PREPROC_RULE_PATH /etc/snort/preproc_rules

# output unified2: filename merged.log, limit 128, nostamp, mpls_event_types, vlan_event_types
↓変更
output alert_fast: alert

# output database: log, <db_type>, user=<username> password=<password> test dbname=<name> host=<hostname>
↓変更
output database: log, mysql, user=snort password=password dbname=snort host=localhost

[root@kurobuti ~]# vi /etc/sysconfig/snort
INTERFACE=eth0 ← 監視するINTERFACE名にする。

ALERTMODE=fast
↓MySQLに出力できるように変更
#ALERTMODE=fast

DUMP_APP=1
↓変更(コメントアウト)
#DUMP_APP=1

BINARY_LOG=1
↓変更(コメントアウト)
#BINARY_LOG=1

※「/etc/snort/snort.conf」に記述した「mysql」の設定ですが以下の通りになっています。
DB_TYPE = MySQL
MYSQL_USER = snort
MYSQL_USER_PASSWORD = password
MYSQL_DBNAME = snort
MYSQL_HOSTNAME = localhost

ここでは、まだ「MySQL」の設定をしていませんので、次で行います。

※「snort」のログについて
現状では、「/var/log/snort/alert , snort.log.num_ber」「/var/log/messages」に出力されるようになっています。
alert:snortが検知したもの(pingなど)が出力されます。
snort.log._number:バイナリ形式のログが出力されます。
messages:snortの起動ログなどが出力されます。

(9)「MySQL」の設定をする。
[root@kurobuti ~]# /etc/rc.d/init.d/mysqld start
[root@kurobuti ~]# chkconfig mysqld on
[root@kurobuti ~]# echo "set password for root@localhost=password('password');" | mysql -u root
[root@kurobuti ~]# echo "create database snort;" | mysql -u root -p
Enter password:パスワード入力
[root@kurobuti ~]# echo "grant all privileges on snort.* to snort@localhost with grant option;" | mysql -u root -p
Enter password:パスワード入力
[root@kurobuti ~]# echo "set password for snort@localhost=password('password');" | mysql -u root -p
Enter password:パスワード入力
[root@kurobuti ~]# cd snort-2.9.0.1/schemas/
[root@kurobuti schemas]# mysql -u root -p < create_mysql snort
Enter password:パスワード入力
※rootとsnortに設定する(‘password’)は、適切なものに変更してください。

(10)「snort」の結果を可視化するためのGUIツール「base」「adodb」のインストールをする。
[root@kurobuti ~]# wget http://sourceforge.net/projects/adodb/files/adodb-php5-only/adodb-511-for-php5/adodb511.zip/download
[root@kurobuti ~]# unzip adodb511.zip
[root@kurobuti ~]# chown apache:apache -R adodb5
[root@kurobuti ~]# cp -rp adodb5 /var/www/adodb
[root@kurobuti ~]# wget http://sourceforge.net/projects/secureideas/files/BASE/base-1.4.5/base-1.4.5.tar.gz/download
[root@kurobuti ~]# tar zxvf base-1.4.5.tar.gz
[root@kurobuti ~]# chown apache:apache -R base-1.4.5
[root@kurobuti ~]# cp -rp base-1.4.5 /var/www/html/base
[root@kurobuti ~]# cd /var/www/html/base/
[root@kurobuti base]# cp base_conf.php.dist base_conf.php
[root@kurobuti base]# vi base_conf.php
$BASE_Language = 'english';
↓変更
$BASE_Language = 'japanese'

$BASE_urlpath = '';
↓変更
$BASE_urlpath = 'http://IPAdd or Domain/base';

$DBlib_path = '';
↓変更
$DBlib_path = '/var/www/adodb';

* Alert DB connection parameters
 *   - $alert_dbname   : MySQL database name of Snort alert DB
 *   - $alert_host     : host on which the DB is stored
 *   - $alert_port     : port on which to access the DB
 *   - $alert_user     : login to the database with this user
 *   - $alert_password : password of the DB user
 *
 *  This information can be gleaned from the Snort database
 *  output plugin configuration.
 */
$alert_dbname   = 'snort_log';
$alert_host     = 'localhost';
$alert_port     = '';
$alert_user     = 'snort';
$alert_password = 'mypassword';
↓変更
$alert_dbname   = 'snort';
$alert_host     = 'localhost';
$alert_port     = '';
$alert_user     = 'snort';
$alert_password = 'password';

/* Archive DB connection parameters */
$archive_exists   = 0; # Set this to 1 if you have an archive DB
$archive_dbname   = 'snort_archive';
$archive_host     = 'localhost';
$archive_port     = '';
$archive_user     = 'snort';
$archive_password = 'mypassword';
↓変更
$archive_exists   = 0; # Set this to 1 if you have an archive DB
$archive_dbname   = 'snort';
$archive_host     = 'localhost';
$archive_port     = '';
$archive_user     = 'snort';
$archive_password = 'password';
※「adodb」の最新版は下記URLで確認してください。
http://sourceforge.net/projects/adodb/files/adodb-php5-only/
※「base」の最新版は下記URLで確認してください。
http://sourceforge.net/projects/secureideas/files/BASE/

(11)「/etc/php.ini」の設定変更をする。
[root@kurobuti ~]# vi /etc/php.ini
error_reporting  =  E_ALL
↓変更
error_reporting = E_ALL & ~E_NOTICE

(12)「httpd」を起動する。
[root@kurobuti ~]# /etc/rc.d/init.d/httpd start
[root@kurobuti ~]# chkconfig httpd on
※ここでは、「httpd」の設定は割愛します。デフォルトでも問題なく表示されますが、セキュリティが考慮されていません。

(13)「http://ServerIPAdd/base」へアクセスする。
【Setup Page】をクリックする。


【Create BASE AG】をクリックする。


【Successfully】を確認する。問題なければ【Main page】をクリックする。


【Main page】は以下の画面になる。


(14)「base」でグラフ描画に必要な「Image_Graph」をインストールする。
[root@kurobuti ~]# pear install Image_Canvas-0.3.0
[root@kurobuti ~]# pear install Image_Graph-0.8.0
※「Image_Graph」の最新版は下記URLで確認してください。
http://pear.php.net/package/Image_Graph/download

(15)「snort」のテスト起動をしてみる。
[root@kurobuti ~]# /usr/local/bin/snort -c /etc/snort/snort.conf -i eth0
Clt+Cで抜ける。
※Errorが発生して止まらないこと。

(16)問題無ければ「snort」を起動する。
[root@kurobuti ~]# /etc/rc.d/init.d/snortd start
[root@kurobuti ~]# chkconfig snortd on

後は、お好みのルールを設定したり、logrotateの設定をすれば完成です!

参考分家
インストール時に参考にした文献
1.http://www.snort.org/assets/145/Install_Snort_2.8.6_on_CentOS_5.5.pdf
2.http://www.snort.org/assets/154/Snort_2.9.0.1_FC14_Base.pdf
3.http://seclists.org/snort/2010/q4/118
4. http://seclists.org/snort/2010/q3/386
5.http://www.snort.org/docs/setup-guides/
6.http://centossrv.com/snort-base.shtml


11月 28, 2010 at 1:29 pm by 黒ぶちメガネ
Category: Linux