■フローの概要
ネットワーク管理者の方であれば自身で管理しているネットワークの流量などを把握していると思われます。そのツールはMRTGであったりcactiであったり様々な便利ツールがオープンソースとして公開されています。これらのツールを用いるとネットワークの流量をグラフィカルに表示することが可能ではありますが、そのトラフィックが何のトラフィックであるのかまでは把握することができません。
何かしらネットワークに障害が発生し接続しにくいなどという状況が発生した場合はより詳細な解析が必要となり、そういった場合に非常に役に立つのがフローでありそれを解析するツールがflow-toolsです。フローが発生するのはルーやスイッチでありそれをflow-toolsがインストールされたサーバまでエクスポートする必要があります。フローとはCisco社でいうとNetFlowという機能となります。
フローの中でフローデータをエクスポートする機器、解析する機器などでインストールするアプリケーションも異なってきますので、それぞれの用途別に以下にまとめておきます。
項目 | 説明 | アプリケーション名 |
フローセンサー ( ハードウェア ) |
トラフィックをフローにまとめてエクスポートする機器。 通常はルータやスイッチのNetFlowで実現される。 |
NetFlow version 5 |
フローセンサー ( ソフトウェア ) |
NetFlowなどがサポートされない機器でポートミラーリングを 設定しそれらをフローに変換してエクスポートするソフトウェア。 |
softflowd |
フローコレクター | エクスポートされたフローデータを受取り解析するツール。 | flow-tools ( flow-capture ) |
フローレポート | 解析したフローデータをビジュアルにグラフ化するツール | FlowScan / FlowViewer |
■ソフトウェアセンサー ( softflowd ) のインストール
ソフトウェアのフローセンサーであるsoftflowdをインストールします。これはルータ・スイッチ側でNetFlow version5をサポートしている場合には不要な作業となります。softflowdはスイッチ上でモニタリングを設定し、ミラーポートからトラフィックを吸い上げてフローに変換しコレクタにエクスポートします。これらはNetFlow version5がサポートされていればわざわざこのようなことを行う必要がありませんので、NetFlowをサポートしていない、またはNetFlow version9のみサポートしている場合に必要な作業となります。
softflowdはyumからインストールを行います。デフォルトのyumでは見つかりませんので以下のように操作します。
# wget http://centos.alt.ru/repository/centos/6/i386/centalt-release-6-1.noarch.rpm # rpm -Uvh centalt-release-6-1.noarch.rpm # yum install softflowd # rpm -qa | grep softflowd softflowd-0.9.8-2.el6.i686 |
softflowdをインストールするサーバはミラー設定されたポートに接続するNICとコレクタにフローをエクスポートするNICの最低2つのNICが必要になります。なお、ミラーポートに接続するNICはIPアドレスは不要です。softflowdの設定ファイルは以下となります。-vはversion、-iでキャプチャを行うインターフェイスを指定、-nでエクスポートする宛先のIPアドレスおよびポート番号を指定しています。必要に応じてこれを編集します。
# vi /etc/sysconfig/softflowd # Example NetFlow v5 export from traffic on eth0 to collector on 127.0.0.1 port 2055 OPTIONS="-v 5 -i eth0 -n 127.0.0.1:2055" |
編集が完了すれば以下のコマンドでsoftflowdを起動します。
# /etc/rc.d/init.d/softflowd start softflowd を起動中: [ OK ] |
しばらくしてから正常にミラーポートからフローを取得できているか以下のコマンドで確認できます。
# softflowctl statistics softflowd[7769]: Accumulated statistics: Number of active flows: 503 Packets processed: 69208 Fragments: 0 Ignored packets: 371 (371 non-IP, 0 too short) Flows expired: 1277 (0 forced) Flows exported: 2194 in 89 packets (0 failures) Packets received by libpcap: 69579 Packets dropped by libpcap: 0 Packets dropped by interface: 0 Expired flow statistics: minimum average maximum Flow bytes: 100 54249 24625917 Flow packets: 1 51 20514 Duration: 0.00s 32.45s 1690.29s Expired flow reasons: tcp = 0 tcp.rst = 324 tcp.fin = 232 udp = 721 icmp = 0 general = 0 maxlife = 0 over 2Gb = 0 maxflows = 0 flushed = 0 Per-protocol statistics: Octets Packets Avg Life Max Life tcp (6): 68509362 62938 68.25s 1690.29s Unknown (17): 767041 2670 4.84s 730.71s |
上記のように表示されていれば成功です。
■コレクタ ( flow-tools ) のインストール
センサーの設定が終了したので、フローを受け取るコレクタの設定を行います。コスト的なことを無視すればセンサーとコレクタは1対1の関係が望ましいのですが、複数のセンサーに1コレクタでも実現不可能ではありません。コレクタはflow-toolsで実現します。以下のようにyumからインストールを行います。
# yum install flow-tools # rpm -qa | grep flow-tools flow-tools-0.68.5.1-1.el6.i686 |
基本動作の設定に以下のファイルを編集します。-n 287は5分おきに新しいログファイルを生成する。288×5 = 1440分 = 1日分という意味です。-N 0はログファイルの生成場所の階層の定義です。0を指定すると指定したディレクトリ直下に作成しますが-3~3の間で指定可能であり、年月日などのフォルダを作成してその配下にログファイルを生成することができます。詳細はmanを参照。-wはログファイルの生成場所です。-Sで指定している5という数字は5分おきにログに記録するという意味で、/区切りで数字が3つ並んでいるのは自身のIP / センサーのIP / ポート番号という並びとなっており、いずれも0を指定すると制限がかからないという意味になります。またポート番号はセンサーで定義したものと一致しておかないといけません。
# vi /etc/sysconfig/flow-capture # Change the source IP and port to what is used on your network OPTIONS="-n 287 -N 0 -w /var/flow-tools -S 5 0/0/8818" |
上記の基本設定が完了すればflow-captureを起動します。
# /etc/rc.d/init.d/flow-capture start flow-capture を起動中: [ OK ] |
起動してからしばらく待つと指定したディレクトリ配下にフローファイルが生成されています。これはflow-printコマンドを使って以下のように表示することができます。
# ls ft-v05.2013-08-16.143901+0900 tmp-v05.2013-08-16.144501+0900 ft-v05.2013-08-16.144001+0900 # flow-cat ft-v05.2013-08-16.143901+0900 | flow-print srcIP dstIP prot srcPort dstPort octets packets 192.168.12.1 192.168.12.4 17 49428 137 78 1 192.168.12.4 192.168.12.1 17 137 49428 203 1 192.168.12.1 192.168.12.4 17 58532 137 78 1 192.168.12.4 192.168.12.1 17 137 58532 203 1 192.168.12.1 192.168.12.4 17 53 55232 263 1 192.168.12.4 192.168.12.1 17 55232 53 58 1 192.168.2.1 239.255.255.250 17 2417 1900 3118 8 192.168.2.1 239.255.255.250 17 2418 1900 2264 6 192.168.2.1 239.255.255.250 17 2419 1900 854 2 173.194.38.41 192.168.12.4 6 80 51287 98 2 192.168.12.4 173.194.38.41 6 51287 80 190 4 |
その他、フロー生成するデータでフィルタリングなども行うことが可能ですがここでは割愛します。設定ファイルは以下にあります。
# ls /etc/flow-tools/cfg/ filter.cfg map.cfg mask.cfg stat.cfg tag.cfg xlate.cfg |