Snort+ACIDのインストール
バージョン | Snort 1.8.5 ACID 0.9.6b21 |
|
OS | Red Hat Linux 7.2 | |
公式サイト |
Snort http://www.snort.org/ ACID http://www.andrew.cmu.edu/~rdanyliw/snort/snortacid.html |
Snortはフリーの不正侵入検知システム(IDS)です。パケットを監視、パターンを照合し、不正アクセスと思われる通信をログに記録します。これに、ACIDというソフトウェアを組み合わせれば、状況をWebブラウザからビジュアルに確認することができます。
Snortのインストール
libpcapというライブラリをインストールする必要がありますが、私の環境では最初からインストールされていたので、説明を割愛します。
まず、通常のTARボールインストール手順でインストールします。
$ tar xvfz snort-1.8.5.tar.gz $ cd snort-1.8.5 $ ./configure $ make $ su # make install
次に、設定ファイルを/etc/snortにコピーします。
# mkdir /etc/snort # cp snort.conf /etc/snort
ルールセットを/etc/snortにコピーします。
# cp *.rules /etc/snort/ # cp classification.config /etc/snort/
snortというユーザーを作ります。
# /usr/sbin/adduser snort
ログの出力先ディレクトリを作って所有者をsnortにしておきます。
# mkdir /var/log/snort # chown snort:snort /var/log/snort
テストのために、起動します。
# snort -i lo -u snort -g snort -c /etc/snort/snort.conf
これの状態で、ping localhostとしてみれば、/var/log/snort以下にログが出力されるのを確認できます。
確認できたら、システム起動時にデーモンとして起動するようにします。(OSの種類によって手順が異なります)
/etc/rc.d/init.d/snortを作ります。
#!/bin/sh # chkconfig: - 91 35 # description: snort . /etc/rc.d/init.d/functions SERVICE="snort" SERVER="/usr/local/bin/snort" ARGS="-D -i eth0 -u snort -g snort -c /etc/snort/snort.conf" case "$1" in start) echo -n "Starting $SERVICE: " daemon "$SERVER $ARGS" echo touch /var/lock/subsys/$SERVICE ;; stop) echo -n "Stopping $SERVICE: " killproc $SERVICE echo rm -f /var/lock/subsys/$SERVICE ;; restart) $0 stop $0 start ;; *) echo "Usage: $SERVICE {start|stop|restart}" exit 1 esac exit 0 exit 0
起動設定します。
# /sbin/chkconfig --add snort
ログをPostgreSQLに記録するには
普通にインストールすると、ログはファイルに出力されます。ACIDを使うには、ログをデータベースに出力するようにする必要があります。ここではDBMSとしてPostgreSQLを使用します。
Snortはconfigureで--with-postgresqlを指定して、コンパイル、インストールされている必要があります。
$ ./configure --with-postgresql=/usr/local/pgsql
PostgreSQLのユーザーとデータベースを作り、Snortのパッケージに含まれているcontrib/create_postgresqlを流し込んでスキーマを設定します。
$ createuser snort Shall the new user be allowed to create databases? (y/n) n Shall the new user be allowed to create more new users? (y/n) n $ createdb snort $ psql -f contrib/create_postgresql snort snort
/etc/snort/snort.confに次の行を加えます。
output database: log, postgresql, user=snort dbname=snort
以上で設定は完了ですが、Snort起動時に次のようなエラーが出る場合があります。
Starting snort: /usr/local/bin/snort: error while loading shared libraries: libpq.so.2: cannot open shared object file: No such file or directory
この場合、/etc/ld.so.confに、次の行を追加してください。
/usr/local/pgsql/lib
そして、ldconfigを実行してください。
# /sbin/ldconfig
ACIDを設定
まず上に書いたようにデータベースにログを記録するいようにしておく必要があります。さらに、実行のためにPHP、PHPlot(もちろんGDも)、ADODBが必要です。
PHPLOTのインストール
GDは既にインストールされているという前提で、説明を省略します。
PHPLOTは次の場所からダウンロードできます。
インストールは展開して適当なパスにコピーするだけです
$ tar xvfz phplot-4.4.6.tar.gz $ su # mv phplot-4.4.6 /usr/local/phplot # exit
ADODBのインストール
ADODBは次の場所からダウンロードできます。
これも展開して適当なパスにコピーするだけです。
$ tar xvfz adodb190.tgz $ su # mv adodb /usr/local # exit
ACIDのインストール
準備が整ったらようやくACIDのインストールです。アーカイブをPHPが実行できるWebサーバのパス上に展開します。
$ tar xvfz acid-0.9.6b21.tar.gz # mv acid /usr/local/apache2/htdocs/
acid_conf.phpを編集します。設定する内容は次の通りです。
$DBtype = "postgres"; $DBlib_path = "/usr/local/adodb"; $ChartLib_path = "/usr/local/phplot"; $alert_dbname = "snort"; $alert_host = "localhost"; $alert_port = ""; $alert_user = "snort"; $alert_password = "";
ACIDはPostgreSQLにTCP/IP接続しますので、PostgreSQLインストール先のdata/postgresql.confのtcpip_socketをtrueにしておきます。(PostgreSQL使用の場合)
tcpip_socket = true
これで、http://HOST/acid/のようにアクセスしてみます。うまくいくと、データベースの設定ページへ進むように案内するページが表示されます。ここでデータベースの設定をしてください。
ルールセットのメンテナンス
Snortでは、新しい脅威に対応するために、常に最新のルールセットを維持することが重要です。私は次のようなスクリプトをcronで1日1回自動実行して、ルールセットを自動更新しています。もうちょっと綺麗な方法があるかもしれませんけど。
cd /tmp /usr/bin/wget -q http://www.snort.org/dl/signatures/snortrules.tar.gz tar xvfz snortrules.tar.gz > /dev/null cp -rf rules/* /etc/snort rm -rf rules rm snortrules.tar.gz echo "output database: log, postgresql, user=snort dbname=snort" \ > /etc/snort/local.rules /etc/rc.d/init.d/snort restart > /dev/null