Fedora Core 6 snort



前書き

Linuxサーバーへの不正アクセスを検知するシステムです。
これらはIDS(Intrusion Detection System)と呼ばれるものです。

ここではSnortのインストールを行うほかに、自動でルールファイル(不正アクセスの判断を行う設定ファイル)を自動更新するOinkmasterをインストールします。

依存するパッケージの確認とインストール

Snortをインストールするにあたって必要なパッケージを確認しなければインストールします。

# rpm -qa | grep pcre-devel
# rpm -qa | grep libpcap-devel


インストールしてなければ yum をつかってパッケージインストールをします。

# yum -y install pcre-devel libpcap-devel


ソースファイルの入手

Snort公式サイト から最新のソースコード(tar.gz)を入手します。
執筆時点の最新版は 2.8.0.1 になります。

# wget http://www.snort.org/dl/current/snort-2.8.0.1.tar.gz


RPMパッケージの作成

入手したソースファイルをもとにRPMパッケージを作成します。

# rpmbuild -tb --clean snort-2.8.0.1.tar.gz


インストール

作成したRPMパッケージをインストールします。
作成したRPMは /usr/src/redhat/RPMS/i386/ にあります。

# rpm -Uvh /usr/src/redhat/RPMS/i386/snort-2.8.0.1-1.i386.rpm

正常にインストールできれば下記のように表示されます。

準備中...                ########################################### [100%]
   1:snort                  ########################################### [100%]


ymuの自動更新情報の変更

今回 Snort を公式からソースファイルを使ってRPM化してインストールしました。
よってyumを使っての自動更新から対象外として登録しておかなければいけません。
下記の方法で修正します。

# vi /etc/yum.conf 

下記の内容を追記または修正します。

exclude=snort


Snort設定

Snortの設定ファイルを修正します。
設定ファイルは /etc/snort/snort.conf にあります。

# vi /etc/snort/snort.conf ← snort設定ファイル編集

下記の内容を修正します。

var HOME_NET any
  ↓
var HOME_NET 192.168.0.0/24

※ここでは使用しているLANのネットワークアドレスを指定してください。

var EXTERNAL_NET any
  ↓
var EXTERNAL_NET !$HOME_NET

ルールファイルの入手

ルールファイルを入手します。
入手するには事前登録が必要なようです。
登録したメールアドレスにユーザー名とパスワードが記載されていますので、それを使ってログインします。

Snortルールファイル:Sourcefire VRT Certified Ruleをダウンロードします。
ダウンロードしたルールファイルを解凍しSnortのルールファイルディレクトリにコピーします。

# tar xzf snortrules-snapshot-CURRENT.tar.gz
# cp -r rules/* /etc/snort/rules/


次にCommunity-Rulesをダウンロードし同じようにディレクトリにコピーします。

# wget http://www.snort.org/pub-bin/downloads.cgi/Download/comm_rules/Community-Rules-CURRENT.tar.gz
# tar zxvf Community-Rules-CURRENT.tar.gz
# cp -r rules/* /etc/snort/rules/


Snortログのローテートエラー対策

デフォルトのログローテート設定のままではエラーメッセージのメールが送信されますので、下記のように修正します。

# vi /etc/logrotate.d/snort


/var/log/snort/alert /var/log/snort/*log /var/log/snort/*/alert /var/log/snort/*/*log  {
  ↓
/var/log/snort/alert /var/log/snort/*log {


SnortSnarfについて

Snortの検知ログをWeb上で確認できるユーティリティーです。
日本語化ユーティリティーもあるので同時にインストールします。

perl-Time-modulesのインストール

SnortSnarfに必要なPerlモジュール perl-Time-modules をインストールします。
FedoraCore6では yum を使ってインストールできるので下記のようにインストールします。^

# yum -y install perl-Time-modules


SnortSnarfの入手とインストール

最新版のSnortSnarfを http://www.snort.org/dl/contrib/data_analysis/snortsnarf/ から入手します。
執筆時点での最新版は SnortSnarf-050314.1.tar.gz になります。

# wget http://www.snort.org/dl/contrib/data_analysis/snortsnarf/SnortSnarf-050314.1.tar.gz

入手したファイルを展開し、稼動させるディレクトリにコピーします。

# tar zxvf SnortSnarf-050314.1.tar.gz
# mkdir /usr/local/snortsnarf
# cp SnortSnarf-050314.1/snortsnarf.pl /usr/local/snortsnarf/
# cp -r SnortSnarf-050314.1/include/ /usr/local/snortsnarf/


SnortSnarf設定

起動時にエラーメッセージが表示されるため、その修正をします。

# vi /usr/local/snortsnarf/include/SnortSnarf/HTMLMemStorage.pm
        return @arr->[($first-1)..$end];
       ↓
        return @arr[($first-1)..$end]; ← "->"削除
# vi /usr/local/snortsnarf/include/SnortSnarf/HTMLAnomMemStorage.pm
        return @arr->[($first-1)..$end];
       ↓
        return @arr[($first-1)..$end]; 

apacheの設定

SnortSnarfをapacheで動作させるためにHTMLの出力先ディレクトリを作成。

# mkdir /var/www/snort


次に作成したディレクトリのエイリアスをapacheに登録

# vi /usr/local/apache2/conf.d/snort.conf

下記の内容を入力します。
閲覧指定を下記の設定ではかけていますので、ご利用形態に合わせて修正してください。

Alias /snort /var/www/snort
<Location /snort>
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
    Allow from 192.168.0.0/24
</Location>


自動実行スクリプト

cronで定時ごとに動作させるためのスクリプトを作成します。

# vi snortsnarf.sh 下記の内容を入力

#!/bin/bash

cd /usr/local/snortsnarf
if [ -s /var/log/snort/alert ]; then
    if [ -s /var/log/snort/portscan.log ]; then
        ./snortsnarf.pl -dns -d /var/www/snort /var/log/snort/alert /var/log/snort/portscan.log
    else
        ./snortsnarf.pl -dns -d /var/www/snort /var/log/snort/alert
    fi
fi


Webから動作を確認

上記で作成したスクリプトを実行させ、Webから表示できるか確認します。

# ./snortsnarf.sh


ブラウザから http://*********/snort/ (****はご自分のサーバーアドレスまたはドメイン)にアクセスし、SnortSnarf start pageが表示されるのを確認。

SnortSnarf自動実行設定

先ほど作成した snortsnarf.sh を毎時ごとに自動実行させるため /etc/cron.hourly/ にスクリプトを移動させます。

# mv snortsnarf.sh /etc/cron.hourly/


Oinkmasterのインストール

ルールファイルを自動更新させるため、Oinkmasterをインストールします。
Sourceforgeから最新版を入手します。
執筆時点の最新版は 2.0 になります。

# wget http://nchc.dl.sourceforge.net/sourceforge/oinkmaster/oinkmaster-2.0.tar.gz


ダウンロードしたファイルを解凍し、各必要なファイルを稼動ディレクトリにそれぞれコピーします。

# tar zxvf oinkmaster-2.0.tar.gz
# cp oinkmaster-2.0/oinkmaster.pl /usr/local/bin/
# cp oinkmaster-2.0/oinkmaster.conf /etc/
# cp oinkmaster-2.0/oinkmaster.1 /usr/share/man/man1/


Oinkmaster設定

SnortルールファイルをダウンロードするにはOink Codeが必要。
https://www.snort.org/reg-bin/userprefs.cgi にログインし Oink Codeの欄にある Get Codeを押して入手する。
40桁の半角英数字によるコードが表示されるので、これをコピーしておく。


テキストエディタでOinkmasterの設定ファイル oinkmaster.conf を開く。

# vi /etc/oinkmaster.conf

下記の修正をします。

# Example for Snort-current ("current" means cvs snapshots).
# url = http://www.snort.org/pub-bin/oinkmaster.cgi/<oinkcode>/snortrules-snapshot-CURRENT.tar.gz
  ↓
url = http://www.snort.org/pub-bin/oinkmaster.cgi/[上記でコピーしたOink Code]/snortrules-snapshot-CURRENT.tar.gz
# Example for Community rules
# url = http://www.snort.org/pub-bin/downloads.cgi/Download/comm_rules/Community-Rules.tar.gz
  ↓
url = http://www.snort.org/pub-bin/downloads.cgi/Download/comm_rules/Community-Rules-CURRENT.tar.gz


Oinkmasterの動作確認

スクリプト oinkmaster.pl を実行させ、正常に更新されるかを確認します。

# oinkmaster.pl -o /etc/snort/rules/
Loading /etc/oinkmaster.conf
Downloading file from http://www.snort.org/pub-bin/oinkmaster.cgi/*oinkcode*/snortrules-snapshot-CURRENT.tar.gz... done.
Archive successfully downloaded, unpacking... done.
  ・
  ・
  ・

[***] Results from Oinkmaster started 20080108 14:15:40 [***]

  ・
  ・

と表示されればOKです。

Oinkmasterの自動実行設定

Oinkmasterをcronに登録し自動で実行させる処理をします。
テキストエディタで /etc/cron.daily/ 配下に snort-rule-update という名前でスクリプトを作成します。

# vi /etc/cron.daily/snort-rule-update

下記の内容を入力

#!/bin/sh

/usr/bin/oinkmaster.pl -o /etc/snort/rules/ 2>&1 | logger -t oinkmaster
/etc/rc.d/init.d/snortd restart > /dev/null


作成したスクリプトに実行権限を与えます。

# chmod +x /etc/cron.daily/snort-rule-update


Snortsnaf実行時の *undef* エラー対策

実行時に下記のエラーエラーメッセージが送られてくることがあります。
その対策を行います。

Argument "*undef*" isn't numeric in multiplication (*) at include/SnortSnarf/HTMLOutput.pm line 835.
Use of uninitialized value in multiplication (*) at include/SnortSnarf/HTMLOutput.pm line 835.
Use of uninitialized value in multiplication (*) at include/SnortSnarf/HTMLOutput.pm line 835.
Use of uninitialized value in addition (+) at include/SnortSnarf/HTMLOutput.pm line 835.


Snorsnafのディレクトリ(ここでは /usr/local/snortsnarf/include/SnortSnarf)にある HTMLOutput.pm を修正します。

# cd /usr/local/snortsnarf/include/SnortSnarf
# vi HTMLOutput.pm

下記の箇所を修正します。

sub ip_to_num {
    my @byte= split(/\./,$_[0]);
    return $byte[0]*256*256*256 + $byte[1]*256*256 + $byte[2]*256 + $byte[3];
}
  ↓
sub ip_to_num {
    if ($_[0] ne '*undef*') {
        my @byte= split(/\./,$_[0]);
        return $byte[0]*256*256*256 + $byte[1]*256*256 + $byte[2]*256 + $byte[3];
    }
#    my @byte= split(/\./,$_[0]);
#    return $byte[0]*256*256*256 + $byte[1]*256*256 + $byte[2]*256 + $byte[3];
}

以上で、設定は終了です。



Last-modified: 2015-04-23 (木) 15:25:04 (946d)