Snort-2.6.x から、起動に関する設定が変更されています。この点について補足します。
Snort-2.6.x ??より、snort の起動スクリプト(/etc/rc.d/init.d/snortd)は、/etc/sysconfig/snort を参照するように変更されています。
配付されている過去のバージョンも調べましたが、以前配布されていたソースと異なり、変更されていました。ソース自体も rpm を意識した内容となっています。
アップグレードが大変なので簡単にして欲しいのですが配付されている パッケージ(rpm / src.rpm) は矛盾している所が散見します。
起動因数に関しては、/etc/sysconfig/snort で指定します。 /etc/sysconfig/snort で指定可能な起動オプションは以下の通りです。
オプション | 指定例 | 意味 | 起動 因数 |
---|---|---|---|
INTERFACE= | ALL | 全てのNICを監視対象にする | -i |
eth0 | eth0 のみを監視対象にする | ||
"eth1 eth2 eth3 eth4 eth5" 複数指定はクォーテーションで囲みます。この場合、アラートは分けられます。 /var/log/snort/eth0/alert /var/log/snort/eth1/alert |
複数のインターフェイスを指定する場合、1インターフェイスにつき、snort デーモンは複数起動します。snort デーモンはメモリを大量に消費するため、他のサービスと同居するようなケースでは注意が必要かと思います。また、起動スクリプトもインターフェイス毎にポリシーを適用する配慮はされていません。
付属する起動スクリプトで snort デーモンを起動した場合、ここで指定された同一条件で起動する事になります。個別に自分で作成した方が良さそうです。
snort を実行させるユーザとグループID をセットします。デフォルトで結構です。間違ってもrootは指定しないで下さい。
オプション | 指定例 | 意味 | 起動 因数 |
---|---|---|---|
USER= | snort | snort ユーザで実行します | -u |
GROUP= | snort | snort グループで実行します | -g |
間違っても root は指定しないで下さい。
Alert → Pass → Log の評価順を Pass → Alert → Logの順に変更し、pass アクションを有効にします。これにより、 local.rules などで pass アクションを指定し特定のネットワークを除外するような設定が可能になります。
オプション | 指定例 | 意味 | 起動 因数 |
---|---|---|---|
PASS_FIRST= | 0 | pass アクションを無効にします。 | -o |
1 | pass アクションを有効にします。 |
パケットを絞り込む上で ポイントとなる項目です。
Snort が出力するアラートのレベルを指定します。 例 : -A fast
オプション | 指定例 | 動 作 | 起動 因数 |
---|---|---|---|
ALERTMODE= | fast | /var/log/snort/alert に一行でシンプルなログを出力します。※ | -A |
full | デフォルトの値です。-A を指定しない、デーモンモードで起動するとこのモードになります。MySQL に出力する場合は、これを選びます。 | ||
unsock | ソケット出力を可能にし、他のプログラムで利用できるようにします。 | ||
none | アラートをオフにします。 |
※ 以下のような一行でシンプルなログを出力します。
11/04-05:42:55.935640 [**] [1:486:5] ICMP Destination Unreachable Communication with Destination Host is Administratively Prohibited [**] [Classification: Misc activity] [Priority: 3] {ICMP} 192.168.0.50 -> 192.168.0.51
swatch などのログ監視ツールでリアルタイムに警告したい場合は便利ですが、 MySQLデータベース に出力されなくなるので注意が必要です。
ちなみに、full を指定した場合は、
[**] [1:486:5] ICMP Destination Unreachable Communication with Destination Host is Administratively Prohibited [**]
[Classification: Misc activity] [Priority: 3]
11/04-09:04:28.386734 192.168.0.50 -> 192.168.0.51
ICMP TTL:255 TOS:0xC0 ID:15488 IpLen:20 DgmLen:72
Type:3 Code:10 DESTINATION UNREACHABLE: ADMINISTRATIVELY PROHIBITED HOST FILTERED
** ORIGINAL DATAGRAM DUMP:
192.168.0.23:45967 -> 192.168.0.50:631
TCP TTL:59 TOS:0x0 ID:15039 IpLen:20 DgmLen:44
******S* Seq: 0xA4441F23 Ack: 0x0 Win: 0x1000 TcpLen: 24
** END OF DUMP
複数行に渡りログが出力され、MySQL にも出力されます。
パケットログをするかしないか設定します。0でオフ、1でオンです。
オプション | 指定例 | 意味 | 起動 因数 |
---|---|---|---|
NO_PACKET_LOG= | 0 | パケットログは記録しません。 | -N |
1 | パケットログを記録します。 |
アラートにインターフェイス名を表示するかしないか指定します。
オプション | 指定例 | 意味 | 起動 因数 |
---|---|---|---|
PRINT_INTERFACE= | 0 | アラートにインターフェイス名を表示しません。 | -I |
1 | アラートにインターフェイス名を表示します。 |
1(オンとした場合)
[**] [1:486:5] <eth0> ICMP Destination Unreachable Communication with Destination Host is Administratively Prohibited [**]
0(オフとした場合)
[**] [1:486:5] ICMP Destination Unreachable Communication with Destination Host is Administratively Prohibited [**]
アプリケーションレイヤをダンプするかしないかです。攻撃内容を分析したい場合は有効にします。
オプション | 指定例 | 意味 | 起動 因数 |
---|---|---|---|
DUMP_APP= | 0 | アプリケーションレイヤをダンプしません。 | -d |
1 | アプリケーションレイヤをダンプします。 |
TCPパケットをダンプする際、テキスト型式に変換せずパケットで記録します。
オプション | 指定例 | 意味 | 起動 因数 |
---|---|---|---|
BINARY_LOG= | 0 | ASCII 形式で記録します。(デフォルト) | -b |
1 | アプリケーションレイヤをダンプします。 |
Snort をパケットロガーモードで利用する際に使用します。 ここでは IDS 構築が目的としていますので指定しなくて構いません。
メモリ内のダンプしたデータをディスクに記録するまでの時間を指定します。
オプション | 指定例 | 意味 |
---|---|---|
SECS= | 5 | 数字で指定します。デフォルトは 5秒です。 |
例えば、ポートスキャンを連続して実行し、tail -f /var/log/snort/alert とすると5秒間隔で表示される事になります。
起動スクリプトを見る限り、/etc/sysconfig/snort で指定可能な因数は限られており、必要なオプションがある場合は直接、起動スクリプトを直接修正する事になると思います。(2.6の仕様変更 把握していません、、、汗)
例えば、例えば、スニファモードにする必要がない、つまりプロミスキャスモードにする必要がなく時ホストに対する監視が目的の場合は、以下のように修正すれば良いと思います。
daemon /usr/sbin/snort $ALERTMODE $BINARY_LOG $NO_PACKET_LOG $DUMP_APP -D $PRINT_INTERFACE -i $i -u $USER -g $GROUP $CONF -l
↓ -p 起動因数を付加する
daemon /usr/sbin/snort $ALERTMODE $BINARY_LOG $NO_PACKET_LOG $DUMP_APP -D $PRINT_INTERFACE -i $i -u $USER -g $GROUP $CONF -l -p
修正箇所は daemon で始まる以下の行になります。
この段階では、まだ ルールセットを入手していませんので snort は起動できませんが、現在、起動中の snort デーモンの起動オプションを調べるには以下のようにします。
snort 9759 22.6 39.9 265196 257748 ? Rs 14:57 0:04 /usr/sbin/snort -d -D -I -i eth0 -u snort -g snort -c /etc/snort/snort.conf -l /var/log/snort/eth0 -o
snort 9766 13.2 11.3 82228 73556 ? Rs 14:57 0:00 /usr/sbin/snort -d -D -I -i eth1 -u snort -g snort -c /etc/snort/snort.conf -l /var/log/snort/eth1 -o
/etc/sysconfig/snort で設定した snortの起動因数を確認して下さい。
参考URL
http://www.snort.gr.jp/transdoc/html/doc006.html
http://www.snort.gr.jp/transdoc/html/index.html
http://www.snort.gr.jp/transdoc/html/doc009.html
従来通り、起動スクリプトに直接記述する方がやり易いです。使い易くなったのか、難くなったのかようわからんです。
MySQL が Snort と同一ホストの場合で、MySQL に検出結果を出力するのであれば、システムリブート時にSnort より MySQL サーバが先に起動している必要があります。
rpm パッケージでインストールされる起動スクリプトそのままでは、CentOS 4.4 では問題があったので、起動スクリプトの起動順位を変更します。必要に応じて以下の個所を修正してください。
# chkconfig: 2345 40 60
↓
# chkconfig: 345 91 35
起動スクリプトを登録しなおします。
確認します。
ついでに前回、正常に起動、終了していない場合は、念のため
で削除しておきます。
以上で Snort の起動に関する設定は全て終了ですが、snort-2.6.x からルールセットが付属していませんので、Snort を起動させる事は出来ません。次は、Snort のルールセット自動スクリプト Oinkmaster を使用してルールセットを入手します。
また、ルールセットのライセンスについても併せて説明します。 そのほうが説明しやすいので。
取敢えず、ルールセットは従来どおり付けて配布して欲しいです。インストールから起動までの確認が一連の流れ出確出来た方がやり易いです。ルールセットは別途入手できますが手間です。
以下のページへお進み下さい。 このページ右メニューに表示されています。
参照 => VRTライセンスの取得について