連載
» 2010年08月23日 00時00分 公開

知らなきゃ損するiptablesのTipsiptablesテンプレート集 改訂版(8)(3/3 ページ)

[鶴長鎮一,@IT]
前のページへ 1|2|3       

Tips 6:iptablesの統計情報からMRTGデータファイルを作成する

 本連載第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)
  ..省略..
「iptables -nvxL」でパケットの統計情報を表示する
filter+natテーブルの構造 画面1 iptablesの統計情報から作成されたMRTGのグラフ

 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
MRTGのインストールと作業ディレクトリの作成

 作業ディレクトリにシェルスクリプト「iptables_mrtg.sh」を作成します。

#!/bin/bash 
IPTABLES="/sbin/iptables" 
$IPTABLES -nvxL | grep INPUT | awk '{ print $7 }' 
$IPTABLES -nvxL | grep OUTPUT | awk '{ print $7 }'
/usr/local/iptables_mrtg/iptables_mrtg.shの作成

 シェルスクリプトでは「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
実行権の設定、HTMLドキュメントディレクトリの作成

 次に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」を指定
/usr/local/iptables_mrtg/mrtg.cfgの作成

 設定ファイルが準備できたところで初期データを作成します。エラーや警告が表示されますが、そのまま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」
mrtgコマンドで作成されたHTMLや画像ファイル

 ブラウザを使って「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
5分間隔でグラフを更新するようcrontabを設定する

 設定は以上です。MRTGのほか、RRDtoolを使ってグラフを作成することもできます。

おわりに

 8回にわたりiptablesの活用事例を解説しました。本連載では理屈は二の次とし、「とにかくiptablesを使いたい」という要望を満たせるよう、必要性が高いものを取り上げました。iptablesには、ここで紹介したもの以外にも多くの使い方や活用方法があります。ぜひ、そうしたものにも興味を持って目を向けるようにしてください。

 本連載が皆さまの手助けになっていることを願って結びとしたいと思います。ご愛読いただきありがとうございました。

前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。