簡易トラフィック統計ツール 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://
フィルタで特定のポートに対するトラフィックだけを集計することもできる。ただし、フィルタ毎にポートを変えてプロセスを起動する必要がある。
例えば、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 コマンドを削除する