Linux Lovers
    Fedora Coreで始めるサーバ構築

Home > 運用管理 > Snort

Snortとは?

Snortとは、ネットワーク型の侵入検知システム(NIDS)です。
これを導入すれば、ローカルネットワーク内に入ってきた不正なパケットを検知することができます。
そしてどのような攻撃が行われたのか、ログに記録することができます。

Snortについて1つ注意点があります。それはあくまでも不正なパケットを検知するだけであって、
防御などはしないということです。なのでこれを導入したから安全ということは決してありません。
Windowsでは市販ソフトで代表的なものにNorton Internet Securityというソフトがあります。
Nortonは不正アクセスを検出して、ブロックするという役目を持っています。しかし、Snortには
ブロックという機能はありません。

普段からSnortのログをしっかりと見て、どのような攻撃が多いのか勉強していきましょう。
Snortのログは膨大になりがちで見づらいので、当サイトではSnortsnarfというツールを利用して、
ログの集計結果をHTML化して見やすくします。あと最後に1点ですが、Snortは各ルールと照らし合わせて、
攻撃パターンを判断します。この際、誤報もしばしばあります。なので不要なルールは無効化し、
誤報を減らすような設定まで行っていきたいと思います。


Snortの導入

Snortを導入するには、libpcaplibpcreという2つのライブラリが必要です。
先ずはこれらの導入からしていきます。先ずはlibpcapがインストールされているか確認します。

# rpm -q libpcap
libpcap-0.8.3-6.FC2.1    ←応答があればインストールされてる

上のような表示が返って来ない場合は、インストールされていませんので、インストールします。
yumからインストールすることができます。

# yum -y install libpcap


次に同じように、libpcreがインストールされているか確認します。

# rpm -q libpcre

これはインストールされていませんでしたので、下記のようにインストールしました。

$ wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-5.0.tar.gz
$ tar zxvf pcre-5.0.tar.gz
$ cd pcre-5.0
$ ./configure   ←Makefileの作成
$ make   ←コンパイル
$ su   ←rootにチェンジ
# make install    ←インストール

続いて、シンボリックリンクの作成を行います。

# ln -s /usr/local/lib/libpcre.so.0 /usr/lib/libpcre.so.0  ←/usr/libディレクトリに

なお、wgetからの操作は一般ユーザで、/tmpディレクトリでやるのが好ましいです。

これでライブラリの準備ができましたので、Snortのインストールをしたいと思います。

$ wget http://www.snort.org/dl/current/snort-2.3.3.tar.gz
$ tar zxvf snort-2.3.3.tar.gz
$ cd snort-2.3.3
$ ./configure
$ make
$ su
# make install


続いて、Snortの設定ファイルとルールセットを、/usr/local/以下にコピーします。
またSnortのログファイルを格納するディレクトリを作成します。

# pwd
/tmp/snort-2.3.3    ←現在、snort-2.3.3に居ることを確認
# cp -a ./etc /usr/local/snort
# cp -a ./rules /usr/local/rules
# mkdir /var/log/snort


次にSnortの設定ファイルを編集します。

# vi /usr/local/snort/snort.conf
var HOME_NET any   ←44行目

var HOME_NET 192.168.1.0/24    ←LAN内を監視

var EXTERNAL_NET any    ←47行目

var EXTERNAL_NET !$HOME_NET    ←LAN内マシンからのパケットは除外

192.168.1.0/24の部分は自分の環境に合わせてください。以上が終わったらSnortを起動させます。

# snort -D -c /usr/local/snort/snort.conf    ←バックグラウンドで実行


またコンピュータ起動時に自動で実行するようにします。

# vi /etc/rc.d/rc.local
/usr/local/bin/snort -D -c /usr/local/snort/snort.conf   ←追加

以上で準備完了です。ちゃんとSnortが起動しているか確認してみましょう

# ps -C snort
PID TTY  TIME   CMD
13238  ?  00:00:00  snort    ←このような1行が出ればOK


続いて、Snortを再起動してみましょう。上記のpsコマンドでsnortのPIDは13238と分かりましたので、

# kill -HUP 13238

これで再起動することができます。


>>このページのTOPへ

Snortのログの見方とルールの無効化

続いて、Snortのログファイルを見てみます。ここでは1つの攻撃を例に上げてみます。

# tail -100 /var/log/snort/alert

[**] [1:469:3] ICMP PING NMAP [**]
[Classification: Attempted Information Leak] [Priority: 2]
01/31-01:50:25.033046 192.168.1.12 -> 192.168.1.11
ICMP TTL:52 TOS:0x0 ID:27974 IpLen:20 DgmLen:28
Type:8 Code:0 ID:58418 Seq:0 ECHO
[Xref => http://www.whitehats.com/info/IDS162]

上記では、nmapというポートスキャンをされました。この攻撃のPriorityは2と書いています。
数字は小さいほど深刻です。また、192.168.1.12 -> 192.168.1.11という部分は、IPアドレスが
192.168.1.12から192.168.1.11に対して行われたということになります。

次に不要なルールの無効化をしてみます。Snortのログを見ていると無駄に多く記録されるものが
あったりします。特に害の無いものならそれは無効化しておき、ログに記録されないように
することができます。例えば、MISC UPnP malformed advertisementというルールを無効化して
みたいと思います。ルールセットは先ほど、/usr/local/rules/以下に置きました。
なので、先ずMISC UPnP malformed advertisementがどのルールセットに記述されているのかを
見つけます。以下のコマンドを打ってみてください。

# grep -n "MISC UPnP malformed advertisement" /usr/local/rules/*
/usr/local/rules/misc.rules:25:#alert・・・(省略)

長いので結果は省略しました。一番上の行のすぐ先頭に/usr/local/rules/misc.rules:25とあります。
これは、MISC UPnP malformed advertisementが/usr/local/rules/misc.rulesの25行目にある
という意味です。

それでは早速このルールを無効化してみましょう。

# vi /usr/local/rules/misc.rules
alert udp ・・・(msg:"MISC UPnP malformed advertisement"・・・   ←25行目

#alert udp ・・・(msg:"MISC UPnP malformed advertisement"・・・    ←コメントアウト

以上でこのルールは無効となりましたので、ログに記録されなくなります。
ルールを無効化したら設定を反映させる為にSnortを再起動します。
先にも書きましたが、もう1度確認の為、再起動手順を書きます。

# ps -C snort
13238 ? 00:00:00 snort    ←PIDは13238(この場合)
# kill -HUP 13238 

以上で、設定が反映されます。


>>このページのTOPへ

ルールファイルの更新、ルールファイルを自動で更新するスクリプトの作成

ルールファイルの更新を行います。Snortはルールと照らし合わせて攻撃を検知します。
ルールが古いままでは、新しい攻撃手法に対応できません。なので、ルールは更新をしなくては
いけません。以下のように更新することができます。

# wget http://www.snort.org/pub-bin/downloads.cgi/Download/comm_rules/Community-Rules.tar.gz
# tar zxvf Community-Rules.tar.gz
(rulesとdocsというディレクトリが出来上がる)
# mv -f rules/* /usr/local/rules/    ←古いルールを上書き

以上で、ルールファイルの更新は終わりです。Snortを再起動すれば反映されます。

なお、このルール更新を自動化する為にシェルスクリプトを作成しました。
ここでは、snortrules.shという名前で、/rootに作成しました。以下内容を貼り付けます。

# vi snortrules.sh

#!/bin/sh

# 変数の設定
COMMU=/root/Community-Rules.tar.gz
RULES=/root/temp/rules/*
TEMP=/root/temp

# ルールのDLから、更新まで
wget http://www.snort.org/pub-bin/downloads.cgi/Download/comm_rules/Community-Rules.tar.gz
mkdir $TEMP
tar zxvf $COMMU -C $TEMP
mv -f $RULES /usr/local/rules/

# 設定を反映させる為、snortを再起動
killall -HUP snort

# サクサクと後片付け
rm -rf $COMMU $TEMP

この記述通りにする場合は、snortrules.shは/rootに作成してください。
なお、このスクリプトはwgetで取得することも可能です。
このsnortrules.shのハッシュ値は、0b5a116033bd19f41fc49647d45a4be4 です。
wgetで入手後は、ハッシュ値が一致するか確認してください。

# wget http://chibi.name/script/snortrules.sh
# md5sum snortrules.sh


続いて、このスクリプトに実行権を与え、cronに登録します。

# chmod 700 snortrules.sh
# crontab -e
30 00 * * 1,4 /root/snortrules.sh > /dev/null 2>&1

ここでは、月曜と木曜の0時30分に、このスクリプトを実行するようにしました。
また、Cronに登録する前に実行してみて、ちゃんと動作するかの確認もしておいてください。

# ./snortrules.sh

>>このページのTOPへ

最終更新 : 06/17/2005


Fedoraの設定    SSH    Web    Mail    FTP    DNS    ファイルサーバ    運用管理    システム管理    ネットワーク    セキュリティ対策
Copyright (C) 2004-2007 chibi ,All Rights Reserved