簡易トラフィック統計ツール darkstat

GW明けでいきなり、社内から社外へのネットワークが非常に重くなり、業務に支障をきたすまでになった。
みんなメールがたまってるからかな、と思ったが、それにしては酷過ぎる。

ゲートウェイを流れているトラフィックを覗こうと、ちょっとしたツールを導入してみた。
darkstat
Linuxのトラフィック統計をシンプルにグラフ化できる「darkstat」 - GIGAZINE
自分のインタフェースに対して、トラフィックを監視し、簡単なグラフやホスト毎の統計、各ポートの統計などがHTTP経由で見られる。
パケットを拾って、集計して、グラフ描画して、Webでサービスするところまで一つの軽量アプリでまかなってしまうので、導入が非常に簡単。
ただ、見られる統計も簡単なので、そんなに詳しいことは分からない。これで目処をたてて、さらに調べたければ tcpdump で、って感じでしょうか。

インストールは yum で簡単。

# yum install darkstat

ソースからでも「./configure; make; make install」で一発みたい。ただし、libpcap-dev というライブラリが予め必要。

起動はインタフェースを指定して起動。自動でデーモンとして立ち上がる。デフォルトで 667 ポートで http を受け付ける。

# /usr/sbin/darkstat -i eth0

複数のインタフェースやフィルタで起動したければポートを変えればOK。

# /usr/sbin/darkstat -i eth1 -p 668

darkstat を起動したら、ブラウザから http://:667/ でアクセスすると統計情報が見られる。
フィルタで特定のポートに対するトラフィックだけを集計することもできる。ただし、フィルタ毎にポートを変えてプロセスを起動する必要がある。
例えば、80 ポートへのトラフィックだけを集計。

# /usr/sbin/darkstat -i eth1 -p 669 -f "port 80"

ちなみに、停止は darkstat のプロセス番号を調べて「kill -9」。

インストール簡単、他に何のアプリも要らない、という点で、お手軽に調査ができていい感じ。
ただ、コマンドのマニュアルはあるけど統計画面の説明がないので、数値の意味がなんとなくしか分からない。
表に出ている in/out がどっちからどっちなのか、とか、数値の単位は?とか。。。

あと、SIGUSR1 を送ると、その時点でのメモリに展開してあるデータベースの中身をファイルに吐くことができ、darkstat コマンドのオプションでファイルから import することもできるみたいなので、特定のインタフェースの全統計を定期的にファイルに吐き、そのファイルを使って、後から適当な filter でごにょごにょすることができるのかな。それができるならベンリそう。そのうち気が向いたら検証してみよう。

おまけ

darkstat を http で閲覧するために、一時的に iptables を変更したので iptables のコマンドの備忘録。

現状のルールの確認

# /sbin/iptables -L

社内(例:192.168.0.0/24)から自分のIP(例:192.168.0.1)へ、tcp の 667 ポートへのアクセスを許可する

# /sbin/iptables -I INPUT -s 192.168.0.0/255.255.255.0 -d 192.168.0.1 -p tcp -m state --state NEW,RELATED,ESTABLISHED -m tcp --dport 668 -j ACCEPT

上記を削除

# /sbin/iptables -D INPUT -s 192.168.0.0/255.255.255.0 -d 192.168.0.1 -p tcp -m state --state NEW,RELATED,ESTABLISHED -m tcp --dport 668 -j ACCEPT

ちなみに、iptables のコマンドオプションは以下の通り。

  • -L ルールを一覧で表示(チェーンやテーブルを指定することも可能)
  • -I 当該チェーン内の最初にコマンドを追加(数字を指定して、特定の場所に追加することも可能)
  • -A 当該チェーン内の最後にコマンドを追加
  • -D コマンドを削除する