Snort
プロジェクトの ホームページ より:
- Snort® は Sourcefire によって開発されているオープンソースのネットワーク侵入防止・検知システム (IDS/IPS) です。署名・プロトコル・異常ベースの検査を組み合わせて使うことができ、Snort は世界で最も広く使われている IDS/IPS テクノロジーとなっています。数百万のダウンロードと四十万近くの登録ユーザーがいる Snort は IPS のデファクトスタンダードです。
目次
一般的なセットアップとノート
- Snort を使って WAN <-> LAN の調査をするのは困難です。どのコンピュータが警報を鳴らしたのか表示されず、また、HOME_NET を WAN の IP アドレスに設定する必要がありますが、モデルが DHCP を使用している場合、アドレスは変わってしまう可能性があります。
- Snort が2つのインターフェイスのブリッジを設定するため、あなたが設定をする必要はありません。
2つのルーターを使うことで Snort で無線トラフィックを調査することができます。分かりやすくするために、DHCP がオンで無線がオフのルーターを「ルーター A」、無線がオンで DHCP がオフのルーターを「ルーター B」 とします。
- 2つのルーターの IP アドレスは異なっている必要があります。ただしサブネットは同一にしてください。
- Snort をインラインモードで動作させる場合、3つのネットワークインターフェイスカードが必要になります。管理用、受信トラフィック用、送信トラフィック用です。
- ルーター B から Snort マシンの空いている NIC にイーサネットケーブルを接続してください。
- ルーター A から Snort マシンの空いている NIC に別のイーサネットケーブルを接続してください。
- Snort を起動したらトラフィックがルーター B <-> Snort マシン <-> ルーター A <-> インターネットを通るようにします。
- インラインモードを使わない場合、トラフィックを Snort マシンに転送してください。参照: Port Mirroring
インストール
AUR から snortAUR をインストールしてください。
設定
メインの設定ファイルは /etc/snort/snort.conf
です。
監視したいネットワークを Snort に指定してください:
ipvar HOME_NET [10.8.0.0/24,192.168.1.0/24]
ファイルの一番下には、インクルードするファイルのリストがあります。Pulledpork を使ってルールセットをダウンロードする場合、以下の行以外を全てコメントアウトしてください:
include $RULE_PATH/snort.rules
Inline モード
Snort をインラインモードで使用する場合、設定の一番下に以下の行を追加してください:
config policy_mode:inline config daq: afpacket config daq_mode: inline config daq_var: buffer_size_mb=1024
インラインモードのサンプルとなる snort.conf
は pastebin にもあります。
そして、サービスファイル /usr/lib/systemd/system/snort@.service
の引数に -Q
を追加してインラインモードを使うように設定してください。また、Snort は LRO と GRO をオフにすることを推奨しています [1]。
[Unit] Description=Snort IDS system listening on '%I' [Service] Type=simple ExecStartPre=/usr/sbin/ip link set up dev %I ExecStartPre=/usr/bin/ethtool -K %I gro off ExecStart=/usr/bin/snort --daq-dir /usr/lib/daq/ -A fast -b -p -u snort -g snort -c /etc/snort/snort.conf -i %I -Q [Install] Alias=multi-user.target.wants/snort@%i.service
インラインモードに設定した Snort を起動するには (インターフェイスは適当に置き換えてください):
# systemctl start snort@ens1:ens4
IDS モード
IDS モードで Snort を起動するには:
systemctl start snort@ens1
Pulledpork でルールを更新
AUR から pulledporkAUR をインストールしてください。
設定
設定ファイルは /etc/pulledpork
にあります。
/etc/pulledpork/pulledpork.conf
を編集して使用したいルールをアンコメントしてください。ルールをダウンロードするには "oinkcode" が必要となります。
dropsid.conf
に書かれているルールにマッチしたトラフィックは拒否されます。enablesid.conf
は署名を有効にします。全ての署名はデフォルトで有効になっているため、ファイルを編集する必要はありません。disablesid.conf
は Snort から署名を完全に削除したいときに使います。
ルールセットの中にあるカテゴリは以下のコマンドで確認できます:
pulledpork.pl -c /etc/snort/pulledpork.conf -Pw lz /var/tmp/*.gz | egrep '\.rules' | cut -d'/' -f3 | sort -u | perl -lne '/(.*).rules/ && print $1' > rules.`date +%F`
Pulledpork でトラフィックを拒否
警告を発するだけでなく Snort の署名が一致したトラフィックを全て拒否するには、dropsid.conf
に以下を追加してください:
pcre:.
もしくはカテゴリにマッチしたトラフィックを全て拒否したい場合:
policy-social policy-other file-other
特定のルールのみを拒否したい場合:
118:7
Pulledpork でルールを無効化
署名を無効化したいときは gen_id と sig_id を /etc/pulledpork/disablesid.conf
に追加:
118:22
カテゴリを無効化したい場合:
deleted protocol-icmp policy-social policy-other
Pulledpork の実行
以下のコマンドで新しいルールがダウンロードされて /etc/snort/rules/snort.rules
に書き込まれます:
pulledpork.pl -c /etc/pulledpork/pulledpork.conf -P
ルールの更新: Oinkmaster
Snort の最新ルールをダウンロードしたい場合、サブスクリプションが必要になります。お金がかかります。5日ほど古くなったルールでも問題ない場合は、無料で登録できます。登録しない場合、Snort が新しくリリースされるときに配布されるルールでしかアップデートを得られません。Snort から登録してください。どうしても登録したくないときは、BleedingSnort.com のルールを使うことができます。ただし最新版のルールなので、テストが十分に行われていない場合があります。
oinkmasterAUR は AUR パッケージでインストールできます。
Oinkmaster の設定
/etc/oinkmaster.conf
を編集して URL セクションの 2.4 行をアンコメントしてください。また、Snort アカウントにログインした後に生成される Oink コードで <oinkcode> を置き換えてください。Bleeding Snort ルールを使用する場合、適当な行をアンコメントしてください。
新しいアカウントにログインしたら、"Oink code" を作成してください。また、以下の行を変更してください:
use_external_bins=1 # 1 uses wget, tar, gzip instead of Perl modules
設定ファイルの残りの部分は変更しなくても問題ありません。
Oinkmaster の使用方法
oinkmaster.pl -o /etc/snort/rules
適当なコマンドで実行スクリプトを作成して /etc/cron.daily
に配置すれば自動的にルールが更新されます。