本連載第1回で、iptablesの設定確認方法として「-nL」オプションを紹介しましたが、さらにパケットのトラフィック量などの統計情報を「-nvxL」オプションで出力できます。この出力結果をMRTGのようなツールでグラフ化し、パケットの流量などを知ることができます。グラフを出力できるようiptablesやMRTGを設定する方法を解説します。
$ sudo iptables -nvxL Chain INPUT (policy ACCEPT 3094 packets, 2762530 bytes) ←パケット数とバイト数が表示されます ..省略.. Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) ..省略.. Chain OUTPUT (policy ACCEPT 2514 packets, 936609 bytes) ..省略..
MRTGのグラフはWebサーバを介してブラウザで閲覧します。そのためHTTPサーバが必要になりますが、ここではHTTPサーバのインストール方法については割愛します。各ディストリビューションに用意されたパッケージなどを使ってインストールしておきます。なおHTTPDのドキュメントルートは、FedoraやCentOSでは「/var/www/html」、Ubuntuでは「/var/www」としています。
MRTGを次のようにインストールします。同時にスクリプトや設定ファイルを置くディレクトリ「/usr/local/iptables_mrtg」も作成します。
・FedoraやCentOSの場合
# yum install mrtg # mkdir /usr/local/iptables_mrtg
・Ubuntuの場合
# apt-get install mrtg # mkdir /usr/local/iptables_mrtg
作業ディレクトリにシェルスクリプト「iptables_mrtg.sh」を作成します。
#!/bin/bash IPTABLES="/sbin/iptables" $IPTABLES -nvxL | grep INPUT | awk '{ print $7 }' $IPTABLES -nvxL | grep OUTPUT | awk '{ print $7 }'
シェルスクリプトでは「iptables -nxvL」を実行し、INPUTチェインに適合したパケットの統計情報を抽出しています。grepするキーワードに“OUTPUT”を指定したり、“iptables”に“-t nat”オプションを付けてnatテーブルの情報を集計したりと、スクリプトを修正することで、さまざまなパターンの統計情報を抽出できます。
シェルスクリプト作成後、実行権限を追加します。続いてMRTGが生成するグラフ画像やHTMLドキュメントを保存するディレクトリをHTTPDのデフォルトドキュメントルート下に「/var/www/html/iptables_mrtg」(Ubuntuなら「/var/www/iptables_mrtg」)として作成します。
・FedoraやCentOSの場合
# chmod +x /usr/local/iptables_mrtg/iptables_mrtg.sh # mkdir /var/www/html/iptables_mrtg
・Ubuntuの場合
# chmod +x /usr/local/iptables_mrtg/iptables_mrtg.sh # mkdir /var/www/iptables_mrtg
次にMRTGのための設定ファイル「/usr/local/iptables_mrtg/mrtg.cfg」を作成します。
WorkDir: /var/www/html/iptables_mrtg ←HTMLドキュメントディレクトリの指定※ Target[in_packets]: `/usr/local/iptables_mrtg/iptables_mrtg.sh` ←シェルスクリプトの指定 MaxBytes[in_packets]: 12500000 ←インターフェイスの帯域に合わせて修正 Title[in_packets]: Packet Stats ←タイトル、ドキュメントの表題 PageTop[in_packets]: <h1>Packet Stats</h1> ←ドキュメントの表題 ※Ubuntuの場合は「/var/www/iptables_mrtg」を指定
設定ファイルが準備できたところで初期データを作成します。エラーや警告が表示されますが、そのまま2度コマンドを実行します。
# env LANG=C /usr/bin/mrtg /usr/local/iptables_mrtg/mrtg.cfg # env LANG=C /usr/bin/mrtg /usr/local/iptables_mrtg/mrtg.cfg (2回繰り返しています。環境変数LANGをCに変更し、実行しています)
MRTG初期データの作成
以上の操作で「/var/www/html/iptables_mrtg/」(Ubuntuの場合は「/var/www/html/iptables_mrtg/」)にMRTGが生成したデータファイルやHTMLが作成されます。
# ls /var/www/html/iptables_mrtg/※ in_packets-day.png in_packets-year.png in_packets.old mrtg-r.png in_packets-month.png in_packets.html mrtg-l.png in_packets-week.png in_packets.log mrtg-m.png ※Ubuntuの場合は「/var/www/iptables_mrtg」
ブラウザを使って「http://サーバ名/iptables_mrtg/in_packets.html」にアクセスし、生成されたグラフが表示できることを確認します。
なお統計データを集計するには、一定間隔でコマンドを実行する必要があります。そこでスケジューラ「crontab」を使って設定します。次の設定では5分置きにコマンドが実行されグラフが更新されます。
# crontab -e */5 * * * * env LANG=C /usr/bin/mrtg /usr/local/iptables_mrtg/mrtg.cfg > /dev/null 2>&1
設定は以上です。MRTGのほか、RRDtoolを使ってグラフを作成することもできます。
8回にわたりiptablesの活用事例を解説しました。本連載では理屈は二の次とし、「とにかくiptablesを使いたい」という要望を満たせるよう、必要性が高いものを取り上げました。iptablesには、ここで紹介したもの以外にも多くの使い方や活用方法があります。ぜひ、そうしたものにも興味を持って目を向けるようにしてください。
本連載が皆さまの手助けになっていることを願って結びとしたいと思います。ご愛読いただきありがとうございました。
Copyright © ITmedia, Inc. All Rights Reserved.