検索
連載

番外編:iptables活用Tips集習うより慣れろ! iptablesテンプレート集(4)(1/4 ページ)

Share
Tweet
LINE
Hatena

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

 第1回で、iptablesの設定確認方法として「-nL」オプションを紹介しましたが、より詳細な情報を「-nvxL」オプションで知ることができます。この出力結果をグラフ化することで、ルールにマッチしたパケットの流量などを知ることができます。パケット流量を知ることで、DoS攻撃の発生を早期に察知することもできます。

# iptables -nvxL
Chain INPUT (policy ACCEPT 3468748 packets, 5112284250 bytes)
    pkts      bytes target     prot opt in     out     source
               destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
    pkts      bytes target     prot opt in     out     source
               destination
Chain OUTPUT (policy ACCEPT 2065127 packets, 119014727 bytes)
    pkts      bytes target     prot opt in     out     source
               destination

 グラフ化ツールにはMRTGを使用します。MRTGによって生成させたドキュメントは、Apacheなどを介してWebブラウザで表示します。MRTGのインストールは、「MRTGによるサーバ監視システムの構築」を参考に行ってください。ここでは、MRTGのインストール先を/usr/local/mrtg-2としています。ご自身の環境と異なる場合は、適宜読み替えてください。

 まずshスクリプトを用意します。このshスクリプトは「iptables -nvxL」を実行し、INPUTルールに適合したパケットの統計情報を抽出します。ここでは、shスクリプトを/usr/local/mrtg-2/に保存しているという前提で話を進めますが、保存場所は任意のディレクトリで構いません。

参考:MRTG: Monitoring Linux routers and firewalls
http://uk.builder.com/programming/unix/0,39026612,20267095-2,00.htm

#!/bin/bash
IPTABLES="/sbin/iptables"
$IPTABLES -nvxL | grep INPUT | awk '{ print $7 }'
$IPTABLES -nvxL | grep OUTPUT | awk '{ print $7 }'
/usr/local/mrtg-2/iptables-in

コラム スクリプト改造のポイント

 grepするキーワードに「OUTPUT」を指定したり、「iptables」に「-t nat」オプションを付けてnatテーブルの情報を集計することもできます。このスクリプトに少し手を入れるだけで、さまざまに活用できます。


 shスクリプトを作成したら、実行権を付与しておきます。

# chmod +x iptables-in

 次に、MRTGが生成するグラフなどのドキュメントを展開するディレクトリを作成します。httpdデーモンのドキュメントルート下に作成するのがいいでしょう。

# mkdir /var/www/html/mrtg
注:/var/www/html/がhttpdのドキュメントルートの場合。

 次に、MRTGが使用する設定ファイルを作成します。ここでは/etc/mrtg.cfgとしていますが、任意のディレクトリ/ファイル名で構いません。

WorkDir: /var/www/html/mrtg
Target[in_packets]: `/usr/local/mrtg-2/iptables-in`
MaxBytes[in_packets]: 13107200 ←インターフェイスの帯域に合わせて修正
Title[in_packets]: Inbound packets
PageTop[in_packets]: <h1>Inbound Packet Stats</h1>
/etc/mrtg.cfg

 「WorkDir:」には、先ほど作成したMRTGドキュメントの展開先を指定します。「Target[in_packets]:」には、冒頭で作成したshスクリプト/usr/local/mrtg-2/iptables-inを絶対パスで指定して「`」で囲み、mrtg.cfgが使用されるたびにスクリプトを実行するようにしています。そのほかの値は、環境に合わせて変更してください。

 設定ファイルを準備できたら、初期データを作成します。MRTGを新たなターゲットで初めて作成する場合は、「ファイルが見つからない」などのエラーが表示されますが、気にせず2回同じコマンドを実行します。

# /usr/local/mrtg-2/bin/mrtg /etc/mrtg.cfg
# /usr/local/mrtg-2/bin/mrtg /etc/mrtg.cfg
注:2回繰り返す。

 以上の操作で、/var/www/html/mrtg/にMRTGが生成した分析データが作成されます。

# ls /var/www/html/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

 httpdデーモンを起動し、Webブラウザで「http://サーバのIP/mrtg/in_packets.html」にアクセスし、グラフを確認します。

 定期的に分析データを作成するため、crontabを設定します。下記の設定は、5分置きに統計を取る場合です。

# crontab -e
*/5 * * * * /usr/local/mrtg-2/bin/mrtg /etc/mrtg.cfg > /dev/null 2>&1
画面1 iptablesの統計情報から作成されたMRTGのサンプル
画面1 iptablesの統計情報から作成されたMRTGのサンプル

Copyright © ITmedia, Inc. All Rights Reserved.

       | 次のページへ
ページトップに戻る