トラフィックをリアルタイム表示するには MRTG などのツールがありますが, ここではPCにLANカード2枚差しして作ったLinuxルータ/IP Masqueradeマシンを使って, 簡易トラフィックモニタを作ってみます。
Linuxカーネルは
CONFIG_IP_FIREWALL=y CONFIG_IP_MASQUERADE=yのような設定をして
echo 1 >/proc/sys/net/ipv4/ip_forward echo 1 >/proc/sys/net/ipv4/conf/eth0/rp_filter echo 1 >/proc/sys/net/ipv4/conf/eth1/rp_filterしておきます(後の2行はIP spoofing防止用です)。
ipchains のルールはたとえば次のようにしておきます (これ以外にIP Masqueradeやtransparent proxyのルールがあります)。
/sbin/ipchains -A input -i eth1 /sbin/ipchains -A output -i eth1
ipchains についての詳細は Linux IPCHAINS-HOWTO をご覧ください。
こうしておいて,
/sbin/ipchains -L -v -xすると,パケット数とバイト数の積算値が出ます。 これをたとえば10分ごとに行って,差分を取ればいいわけです。
……と思ったのですが,unsigned long でもオーバーフローしてしまいました。
/sbin/ipchains -L -v -x -Zのようにして読み出すたびにリセットするのが正解でした。 これだと差分もとらなくてすむので簡単です。
そのための簡単なプログラム counter.c を作ってみました。 これを root 権限でバックグラウンドで動かしておきます。 これは /usr/local/apache/htdocs/traffic.dat というログを出力します。
また,このログの最近の約1日分を表示するCGIとして showcount.c を作っておきます。
結果は こんな具合 です。
リンクはご自由にどうぞ。
松阪大学
奥村晴彦
okumura@matsusaka-u.ac.jp
Last modified: Wed Apr 26 13:09:04 JST 2000