トップ  > サーバ設定:運用  > サーバ公開後のセキュリティ対策  > iptablesログ解析(IPTables log analyzer)

iptablesログ解析(IPTables log analyzer)  (最終更新日:2010/02/16)

IPTables log analyzerを導入して、iptablesのログをWebブラウザからリアルタイムに参照出来るようにします。

ファイアウォール構築(iptables)Webサーバ構築(Apache)+PHPデータベースサーバ構築(MySQL)が導入されていること。

IPTables log analyzerインストール

[root@sv ~]# yum install mysql-devel ← IPTables log analyzerにインストールに必要なパッケージをインストール

[root@sv ~]# wget http://jaist.dl.sourceforge.net/sourceforge/iptablelog/iptablelog-v0.9.tar.bz2 ← IPTables log analyzerダウンロード
※最新版はこちらで確認。(2010/02/16時点。iptablelog-v0.9.tar.bz2)

[root@sv ~]# tar jxvf iptablelog-v0.9.tar.bz2 ← IPTables log analyzer展開

[root@sv ~]# mv iptablelog/ /var/www ← IPTables log analyzer展開先ディレクトリを移動

[root@sv ~]# rm -f iptablelog-v0.9.tar.bz2 ← ダウンロードしたファイルを削除

IPTables log analyzer用データベース作成

1.IPTables log analyzer用データベース作成

IPTables log analyzerはiptablesのログをMySQLに保存する為、専用のデータベースを作成します。

[root@sv ~]# mysql -u root -p ← MySQLへrootでログイン
Enter password:  ← MySQLのrootパスワードを入力(非表示)
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 19
Server version: 5.0.77 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> create database iptablelog; ← iptablelogデータベース作成
Query OK, 1 row affected (0.00 sec)

mysql> grant all on iptablelog.* to iptablelog_user@localhost identified by 'パスワード'; ← iptablelogデータベースアクセスユーザ作成
Query OK, 0 rows affected (0.01 sec)

mysql> exit ← MySQLからログアウト
Bye

[root@sv ~]# cat /var/www/iptablelog/conf/iptables.mysql | mysql -u iptablelog_user -p iptablelog ← iptablelogデータベース作成
Enter password:  ← iptablelogデータベースアクセスユーザ作成時のパスワード入力(非表示)
2.php-mysqlインストール

IPTables log analyzerはPHPで動作するため、PHPからMySQLデータベースへ接続するphp-mysqlをインストールする。

[root@sv ~]# rpm -q php-mysql ← php-mysqlインストール確認
php-mysql-5.1.6-23.2.el5_3

「パッケージ php-mysql はインストールされていません。」と表示される場合
[root@sv ~]# yum install php-mysql ← php-mysqlインストール

ulogdインストール

iptablesのログをulogd経由でMySQLデータベースへ保存する為、ulogdをインストールします。

[root@sv ~]# wget ftp://ftp.pbone.net/mirror/rpm.razorsedge.org/centos-5/RE-test/ulogd-1.24-2.el5.re.x86_64.rpm ← ulogdダウンロード
※最新版はこちらで確認。(2010/02/16時点。ulogd-1.24-2.el5.re.x86_64.rpm)

[root@sv ~]# wget ftp://ftp.pbone.net/mirror/rpm.razorsedge.org/centos-5/RE-test/ulogd-mysql-1.24-2.el5.re.x86_64.rpm ← ulogd-MySQLダウンロード
※最新版はこちらで確認。(2010/02/16時点。ulogd-mysql-1.24-2.el5.re.x86_64.rpm)

[root@sv ~]# rpm -Uvh ulogd-1.24-2.el5.re.x86_64.rpm ← ulogdインストール
m -Uvh ulogd-1.24-2.el5.re.x86_64.rpm 
警告: ulogd-1.24-2.el5.re.x86_64.rpm: ヘッダ V3 DSA signature: NOKEY, key ID ba7a4a9e
準備中...                ########################################### [100%]
   1:ulogd                  ########################################### [100%]

[root@sv ~]# rpm -Uvh ulogd-mysql-1.24-2.el5.re.x86_64.rpm ← ulogd-MySQLインストール
警告: ulogd-mysql-1.24-2.el5.re.x86_64.rpm: ヘッダ V3 DSA signature: NOKEY, key ID ba7a4a9e
準備中...                ########################################### [100%]
   1:ulogd-mysql            ########################################### [100%]

[root@sv ~]# rm -f ulogd-* ← ダウンロードしたファイルを削除

ulogd設定

iptablesのログをulogd経由でMySQLデータベースへ保存するように設定します。

[root@sv ~]# vi /etc/ulogd.conf ← ulogd設定ファイル編集
#
# ulogd_BASE.so - interpreter plugin for basic IPv4 header fields
# 		  you will always need this
plugin="/usr/lib64/ulogd/ulogd_BASE.so"
plugin="/usr/lib64/ulogd/ulogd_LOCAL.so" ← 追加

# output plugins. 
#plugin="/usr/lib64/ulogd/ulogd_LOGEMU.so" ← コメントアウト
#plugin="/usr/lib64/ulogd/ulogd_OPRINT.so"
plugin="/usr/lib64/ulogd/ulogd_MYSQL.so" ← コメント解除
#plugin="/usr/lib64/ulogd/ulogd_PGSQL.so"
#plugin="/usr/lib64/ulogd/ulogd_SQLITE3.so"
#plugin="/usr/lib64/ulogd/ulogd_PCAP.so"

[MYSQL]
table="ulog"
pass="パスワード" ← iptablelogデータベースアクセスユーザ作成時設定したパスワード
user="iptablelog_user" ← iptablelogデータベースアクセスユーザ作成時に設定したユーザ
db="iptablelog" ← iptablelogデータベース作成に設定したデータベース名
host="localhost"

ulogd起動

[root@sv ~]# /etc/rc.d/init.d/ulogd start ← ulogd起動
Starting ulogd:                                            [  OK  ]

[root@sv ~]# chkconfig --add ulogd ← ulogdをchkconfigへ登録

[root@sv ~]# chkconfig --list ulogd ← ulogd自動起動設定確認
ulogd           0:off   1:off   2:off   3:on    4:on    5:on    6:off

iptables設定

ファイアウォール構築(iptables)で設定している場合、ulogdへのログ出力コマンドを追加する。

[root@sv ~]# vi iptables.sh ← ファイアウォール設定スクリプト編集

# 上記のルールにマッチしなかったアクセスはログを記録して破棄
iptables -A INPUT -m limit --limit 1/s -j LOG --log-prefix '[IPTABLES INPUT] : '
iptables -A INPUT -m limit --limit 1/s -j ULOG --ulog-nlgroup 1 --ulog-prefix 'INPUT' ← 追加
iptables -A INPUT -j DROP
iptables -A FORWARD -m limit --limit 1/s -j LOG --log-prefix '[IPTABLES FORWARD] : '
iptables -A FORWARD -j DROP

[root@sv ~]# ./iptables.sh ← ファイアウォール設定スクリプト実行

個別に設定する場合

[root@sv ~]# iptables -A INPUT -m limit --limit 1/s -j ULOG --ulog-nlgroup 1 --ulog-prefix 'INPUT' ← 受信パケット記録設定

IPTables log analyzer設定

[root@sv ~]# cp /var/www/iptablelog/conf/config.php.default /var/www/iptablelog/conf/config.php ← サンプルファイルから設定用ファイル作成

[root@sv ~]# vi /var/www/iptablelog/conf/config.php ← iptablelog設定ファイル編集
# Password of the MySQL database
$db_password="パスワード"; ← iptablelogデータベースアクセスユーザ作成時設定したパスワード

# File Path to your installation
$file_base="/var/www/iptablelog"; # i.e. "/var/www/html/iptablelog" ← iptablelogが格納されているディレクトを指定

[root@sv ~]# cp /var/www/iptablelog/conf/iptables_resolve.default /etc/cron.hourly/iptables_resolve ← IPアドレス名前解決スクリプトを定期自動実行ディレクトリへコピー

[root@sv ~]# vi /etc/cron.hourly/iptables_resolve ← IPアドレス名前解決スクリプト編集
$iptablelog_path = "/var/www/iptablelog"; # Change this ← iptablelogが格納されているディレクトを指定

db_connect("localhost","iptablelog","iptablelog_user", "パスワード");  # Change these db settings ← iptablelogデータベース作成時に設定したデータベース名・ユーザ名

Apache設定

[root@sv ~]# vi /etc/httpd/conf.d/iptables.conf ← IPTables log analyzer用Apache設定ファイル作成
Alias /iptablelog /var/www/iptablelog
アクセスを制限する場合
<Location /iptablelog>
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
    Allow from 192.168.0.0/24
</Location>


[root@sv ~]# /etc/rc.d/init.d/httpd reload ← Apache設定反映
httpd を再読み込み中:                                      [  OK  ]

IPTables log analyzer確認

http://サーバ名/iptablelog/へアクセスして、表示されることを確認