UnixPower on Networking
  http://www.unix-power.net/

 
 Top - Linux - CentOS7 Snortのインストール



■Snortのインストールと初期設定



※当初、CentOS7でインストールしようとしましたがBarnyard2がどうしてもうまくいかず、CentOS6.6にしたところ正常動作しました。この記事はCentOS6.6を前提に記載しています。また、サーバのNICは2枚刺しの状態でeth0がIPアドレスを割り当てたNICで、eth1はIPアドレスを割り当てずキャプチャ専用のインターフェイスとしてモニタリングのポートに接続しているという前提です。



ネットワーク型IDS装置のSnortをインストールしてネットワークの不正アクセスを検知してみます。有償製品でもIDS/IPS装置は多数発売されておりますが、それらと比較するとオープンソースのフリーソフトなだけに劣る部分もあるかもしれませんが、これは無料で利用できます。コストを最低限に抑えつつ少しでもセキュリティレベルを上げたい場合はお勧めだと思います。

まずsnort本体を以下のサイトからダウンロードしてサーバにアップロードしておきます。

http://osdn.jp/projects/sfnet_snort/releases/
【 snort-2.9.7.0.tar.gz 】

上記のファイルを/root配下に保存して作業を進めます。最初にsnortに関連するパッケージをyumでインストールし、snort本体はtar.gzからrpmをビルドしてインストールします。最初にsnortに関連するパッケージをyumおよびrpmでインストールし、snort本体はtar.gzからrpmをビルドしてインストールします。

# yum install libpcap-devel pcre-devel libdnet-devel zlib-devel

# wget http://www.snort.org/downloads/snort/daq-2.0.5-1.src.rpm
# rpmbuild --rebuild daq-2.0.5-1.src.rpm
# cd rpmbuild/RPMS/x86_64/
# rpm -Uvh daq-2.0.5-1.x86_64.rpm

# rpmbuild -tb --clean snort-2.9.7.0.tar.gz
# cd rpmbuild/RPMS/x86_64/
# rpm -Uvh snort-2.9.7.0-1.x86_64.rpm


次にSnortの設定を行います。設定ファイルは/etc/snort/snort.confとなり、これを編集していきますが、内容は多岐にわたるためとりあえず最低限の設定を行っておきます。自ネットワークとそれ以外の定義です。


# vi /etc/snort/snort.conf

<省略>
# Setup the network addresses you are protecting
ipvar HOME_NET 192.168.0.0/16

# Set up the external network addresses. Leave as "any" in most situations
ipvar EXTERNAL_NET !$HOME_NET

# 113行目あたり
var WHITE_LIST_PATH /etc/snort/rules
var BLACK_LIST_PATH /etc/snort/rules

# 520行目あたり
# output unified2: filename merged.log, limit 128, nostamp, mpls_event_types, vlan_event_types
output unified2: filename merged.log, limit 128

# 最後に追加
include $RULE_PATH/community.rules
<省略>

必要なディレクトリ等も作成しておきます。

# touch /etc/snort/rules/white_list.rules
# touch /etc/snort/rules/black_list.rules
# mkdir -p /usr/local/lib/snort_dynamicrules
# chown -R snort.snort /usr/local/lib/snort_dynamicrules
# chmod -R 700 /usr/local/lib/snort_dynamicrules

Snortの動作設定として/etc/sysconfig/snortを編集します。以下は編集箇所の抜粋です。

# vi /etc/sysconfig/snort

<省略>
# パケットをキャプチャするインターフェイスを指定
INTERFACE=eth1

# ログをDBに吐き出すためコメントアウト
#LOGDIR=/var/log/snort
#ALERTMODE=fast
#DUMP_APP=1
#BINARY_LOG=1
#NO_PACKET_LOG=0
#PRINT_INTERFACE=0

■Snortのルールのインストール


Snortのルールを入手します。これにはユーザ登録が必要ですが、E-Mailアドレスとパスワードのみの簡易なものです。登録URLは以下です。

https://www.snort.org/users/sign_up

サブミットすると入力したアドレスにメールがくるので記載されてURLにアクセスしConfirmを完了してください。その後はSign inが可能となり「Oinkcode」というのがログインページから確認できるようになるのでこれをメモしておいてください。このOinkcodeを使ってSnortのルールファイルをダウンロードします。

# wget https://www.snort.org/rules/snortrules-snapshot-2973.tar.gz?oinkcode=<oinkcode>
# mv snortrules-snapshot-2973.tar.gz?oinkcode=******** snortrules-snapshot-2973.tar.gz
# mv rules/* /etc/snort/rules

加えてcommunity-rulesもhttps://www.snort.org/downloadsからダウンロードして配置しておきます。

# tar xvf community-rules.tar
# mv community-rules/community.rules /etc/snort/rules/
# mv community-rules/sid-msg.map /etc/snort

ここまでで設定に間違いがないか以下のコマンドで確認しておきます。問題なければ以下のように表示されます。

# snort -T -c /etc/snort/snort.conf

<省略>
Snort successfully validated the configuration!
Snort exiting

■データベースの準備

Snortで検知したログをDBに格納するためMySQLをインストール致します。

# yum install mysql mysql-server mysql-devel php php-mysql


次にbarnyard2をインストールします。これはsnortとmysqlの橋渡しをするインターフェイスプログラムとなります。

# cd /usr/local/src
# git clone https://github.com/firnsy/barnyard2.git
# cd barnyard2
# ./autogen.sh
# ./configure --with-mysql --with-mysql-libraries=/usr/lib64/mysql/
# make
# make install
# ln -s /usr/local/bin/barnyard2 /usr/bin


作成された設定ファイル等をそれぞれ所定の位置にコピーし、自動起動の設定を実施します。

# cp rpm/barnyard2.conf /etc/sysconfig/barnyard2
# cp rpm/barnyard2 /etc/rc.d/init.d
# cp etc/barnyard2.conf /etc/snort


Barnyard2の起動スクリプトを編集します。起動の順番および起動コマンドを編集致します。私の場合、なぜかそのままの起動スクリプトでは正常にデータベースに格納することができず、少し簡略化することでパケットをキャプチャできるようになりました。

# vi /etc/rc.d/init.d/barnyard2

// 6行目
# chkconfig: 2345 70 60

// 39行目
#BARNYARD_OPTS="-D -c $CONF -d $SNORTDIR/${INT} -w $WALDO_FILE -l $SNORTDIR/${INT} \
-a $ARCHIVEDIR -f $LOG_FILE -X $PIDFILE $EXTRA_ARGS"
BARNYARD_OPTS="-D -c $CONF -d $SNORTDIR -f merged.log -w /var/log/snort/barnyard2.waldo -X $PIDFILE $EXTRA_ARGS"

# chkconfig --add barnyard2


続いて/etc/sysconfig/barnyard2ファイルを編集しておきます。

# vi /etc/sysconfig/barnyard2

INTERFACES="eth1"


MySQLの初期設定についてはこちらを参照してrootパスワード等の設定を実施しておいてください。初期設定が終わればsnort用のDBを作成します。

# mysql -u root -p
Enter password:[MySQLのrootパスワード入力]
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 11
Server version: 5.5.41-MariaDB MariaDB Server

Copyright (c) 2000, 2014, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> create database snort_log;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> grant all privileges on snort_log.* to snort@localhost identified by 'password';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> quit;
Bye


次に所定のSQL文を流し込みます。

# mysql -u snort -p snort_log < ./schemas/create_mysql
Enter password:[上記のパスワードを入力]


/etc/snort/barnyard2.confを編集します。編集箇所は以下となります。

# vi /etc/snort/barnyard2.conf

config hostname:   localhost
config interface:  eth0
output database: log, mysql, user=snort password=password dbname=snort_log host=localhost


一旦ここでbarnyard2のテストを実施しておきます。故意にログが出力されるようローカルルールを登録し、ログが出力されるか確認してみてください。下記が出力されたあと、実際にpingをうってみてログが表示されればOKです。

# vi /etc/snort/rules/local.rules

alert icmp any any -> any any (msg:"ICMP Testing Rule"; sid:1000001; rev:1;)

# barnyard2 -c /etc/snort/barnyard2.conf -d /var/log/snort -f merged.log -w /var/log/snort/barnyard2.waldo

<省略>
        --== Initialization Complete ==--

  ______   -*> Barnyard2 <*-
 / ,,_  \  Version 2.1.14 (Build 336)
 |o"  )~|  By Ian Firns (SecurixLive): http://www.securixlive.com/
 + '''' +  (C) Copyright 2008-2013 Ian Firns <firnsy@securixlive.com>

Using waldo file '/var/log/snort/barnyard2.waldo':
    spool directory = /var/log/snort
    spool filebase  = merged.log
    time_stamp      = 1434959870
    record_idx      = 4901
Opened spool file '/var/log/snort/merged.log.1434959870'


ここまでくればサーバを一旦再起動させてSnortとBarnyard2およびMySQLを自動起動させましょう。



■Baseのインストール

Snortのアラートログ等をWebブラウザから見るためにBaseをインストールします。以下のURLから最新のものをダウンロードします。

http://sourceforge.net/projects/secureideas/files/BASE/
http://sourceforge.net/projects/adodb/files/adodb-php5-only/

Webから見れるようにするためWebサーバのインストールが事前に必要です。Apacheのインストールについてはこちらを御覧ください。この後、上記で取得したファイルを展開し、Webサーバのドキュメントルートに設置します。

# tar xvzf base-1.4.5.tar.gz
# tar xvzf adodb519.tar.gz
# cp -r base-1.4.5 /var/www/html/base
# cp -r adodb5 /var/www/html/
# chmod 755 /var/www/html/adodb5


このあと、BaseのConfファイルを編集します。以下では編集箇所のみ抜粋して記載しています。

# cd /var/www/html/base
# mv base_conf.php.dist base_conf.php
# vi base_conf.php

<省略>
$BASE_urlpath = '/base';
$DBlib_path = '/var/www/html/adodb5';

$alert_dbname   = 'snort_log';
$alert_host     = 'localhost';
$alert_port     = '3306';
$alert_user     = 'snort';
$alert_password = 'password';
<省略>


このあとブラウザからアクセスをします。アクセス先はhttp://[ip-address]/base/base_main.phpとなります。




上記ページの「Setup page」リンクをクリックします。




右側の「Create BASE AG」ボタンをクリックします。




上記のようになれば成功です。下側のMain pageリンクをクリックすると下記のようにメイン画面が表示されます。






■Snortの自動ルール更新

以下のサイトからpulledporkの最新版をダウンロードしてファイルを展開し設定をしていきます。

https://code.google.com/p/pulledpork/

以下は編集した箇所のみ抜粋して記載しています。

# tar xvzf pulledpork-0.7.0.tar.gz
# mv pulledpork-0.7.0 pulledpork
# cd pulledport
# vi etc/pulledpork.conf

rule_url=https://www.snort.org/reg-rules/|snortrules-snapshot.tar.gz|<oinkcode>
#rule_url=https://s3.amazonaws.com/snort-org/www/rules/community/|community-rules.tar.gz|Community
#rule_url=http://labs.snort.org/feeds/ip-filter.blf|IPBLACKLIST|open
#rule_url=https://www.snort.org/reg-rules/|opensource.gz|<oinkcode>

rule_path=/etc/snort/rules/snort.rules
local_rules=/etc/snort/rules/local.rules
sid_msg=/etc/snort/sid-msg.map

snort_path=/usr/sbin/snort
config_path=/etc/snort/snort.conf
distro=RHEL-6-0

black_list=/etc/snort/rules/iplists/default.blacklist
IPRVersion=/etc/snort/rules/iplists

snort_control=/usr/bin/snort_control

snort_version=2.9.7.3


上記の中で欠落しているファイル・フォルダを作成しておきます。

# touch /etc/snort/rules/snort.rules
# chown snort.snort /etc/snort/rules/snort.rules

# mkdir /etc/snort/rules/iplists
# touch /etc/snort/rules/iplists/default.blacklist
# chown -R snort.snort /etc/snort/rules/iplists


あとはこれらを以下のコマンドで実行させます。

# perl pulledpork.pl -c etc/pulledpork.conf

    http://code.google.com/p/pulledpork/
      _____ ____
     `----,\    )
      `--==\\  /    PulledPork v0.7.0 - Swine Flu!
       `--==\\/
     .-~~~~-.Y|\\_  Copyright (C) 2009-2013 JJ Cummings
  @_/        /  66\_  cummingsj@gmail.com
    |    \   \   _(")
     \   /-| ||'--'  Rules give me wings!
      \_\  \_\\
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Checking latest MD5 for snortrules-snapshot-2973.tar.gz....
        They Match
        Done!
Writing /var/log/sid_changes.log....
        Done

No Rule Changes

No IP Blacklist Changes

Done
Please review /var/log/sid_changes.log for additional details
Fly Piggy Fly!


あとはこれをcronに登録すると自動更新が可能となります。




 Copyright(C) 2003-2015 UnixPower on Networking All rights reserved.