Etherealの高速化

Ethereal の高速化 (Ethereal+GigaPcap)

背景

etherealEthereal(現Wireshark)は世界で最も広範に使用されているネットワークプロトコルアナライザです。ネットワークを流れるパケットをキャプチャして内容を解析し、表示することができます。対応プロトコルは700種類以上に上ります。GPL(GNU General Public License)のもとで配布されており、無償で利用できます。
Etherealのモニタリング機能によりパケットの宛先、送信元、プロトコル等を知ることができるため、「誰がどこのWebサイトを見ているのか」といった情報を得ることができます。また、ネットワークに障害が発生しその原因究明を行う場合や、不正アクセスの解析を行う場合などにEtherealを用いた分析結果は有用な情報となります。
ネットワーク回線を流れるデータそのものを覗き見ることができる為、外部に漏れてはならない情報を暗号化して送信する際に、本当に暗号化されているのかどうかを確認することができます。
このような理由からEtherealはネットワーク管理に無くてはならないものとなっていますが、回線の帯域が増すとサーバの処理が追いつかなくなり、正確に情報を把握できなくなります。この課題を解決したいという要求が背景にあります。

目的帯域の増加に伴いEtherealのパケットキャプチャ率が低下するのはCPUの負荷が増大することが原因です。CPU負荷を軽減することによって、従来は取りこぼしていたパケットをEtherealでキャプチャできるようにすることを目的としています。また、高精度(6ns粒度)で記録しより詳細なタイムスタンプ情報を得ることも目的としています。
これによりネットワーク管理に必要な基礎情報を正確に収集できるようになります。

Ethereal によるパケットキャプチャ

ネットワーク管理において、Etherealを使ってキャプチャする場合のネットワーク構成図の一例を下記に示します。
これは内部ネットワークが外部ネットワークへ接続される箇所をモニタリングする例です。

Ethereal の課題

Etherealは下位APIとしてlibpcapを利用しています。libpcapはパケットキャプチャ処理を全てソフトウェアで行っているため、高速なCPUを用いても数百Mbps程度のストリームを処理するだけで限界に達し、パケットロスが発生してしまいます。これでは昨今のギガビットイーサを用いたネットワークで利用するには力不足です。

GigaPcap で Ethereal を高速化GigaPcapは1Gbps以上のストリームをパケットロスなく処理するために開発されました。GigaPcapはPCI-X上で動作するハードウェアとそれを制御するドライバ、libpcap互換APIライブラリ及び制御コマンドから成ります。libpcap互換APIを提供しているため、libpcapを用いたアプリケーションへ容易に組み込むことが可能です。
libpcapライブラリを利用するほとんどのアプリケーションは、ヘッダとライブラリにGigaPcapを指定して再コンパイルをすることで GigaPcapを利用することが可能です。アプリケーションのソースを修正する必要はありません。その結果GigaPcapと連携動作することによって、アプリケーションの処理は高速化されます。
Etherealのサンプリング間隔はμsオーダーであり、GigaPcapに対応したEtherealのサンプリング間隔は6[ns]であることから、パケットのタイムスタンプをより正確に記録することが可能となります。他にもMACヘッダを省略する、といった特殊なキャプチャをすることが可能です。

以降においてはlibpcapを用いてコンパイルした通常のEtherealを「Ethereal」と表記し、GigaPcapに対応したEtherealを「ra-Ethereal」と表記します。

■ra-Etherealのバイナリの作成
ライブラリのパスを変更してコンパイルするだけで容易にra-Etherealを作成できます。
GigaPcapをインストールすると/usr/lra/ディレクトリにライブラリやインクルードヘッダ、ドライバや各種コマンドがインストールされます。
./configure を実行の際、pcap のディレクトリとプレフィックスを指定します。

./configure –with-pcap=/usr/lra –prefix=/usr/lra


/usr/lra は GigaPcapパッケージをデフォルトでインストールした際のパスです。
次にmake、make install を実行します。

% make
% su
% make install

以上でra-Ethereal がビルドできました。
下記にra-Etherealを起動した際のGUIインタフェースを示します。

 

■ 高速化Etherealの性能
Etherealとra-Etherealとのキャプチャ性能の違いを示します。使用したコンピュータのスペックとソフトウエアのバージョンは表1に示す通りです。Etherealの受信性能評価環境を図1にra-Etherealの受信性能評価環境を図3示します。図1、図3共に左側のコンピュータで1,000,000個のパケットを生成します。テストトラヒックのパターンは64byteパケットと1500byteパケットを混在させたものであり、それぞれ500Mbps、合わせて1Gbpsのストリームを生成します。そのストリームを右側のサーバのEthereal及びra-Etherealで受信します。図1内右側の受信サーバはNIC(Intel Pro/1000 MT Server Adapter)でストリームを受信し、図3内右側の受信サーバはGigaPcapシステムが搭載されたLinux_RAボードで受信します。

機種 Dell Power Edge 2850
CPU Intel Xeon/2.8GHz
メモリ DDR2-400 SDRAM 1Gbyte
OS Red Hat Enterprise Linux4(2.6.9-5, SMP無し,32bit)
NIC Intel PRO/1000 MT Server Adapter
Libpcap Ver 0.9.4
Ethereal Ver 0.99.0
表1 本評価に使用したコンピュータとソフトウェアのバージョン

 

Etherealによるパケットキャプチャ   ra-Etherealによるパケットキャプチャ
図1 Etherealによるパケットキャプチャ   図3 ra-Etherealによるパケットキャプチャ
     
Etherealによるキャプチャ結果   ra-Etherealによるキャプチャ結果
図2 Etherealによるキャプチャ結果   図4 ra-Etherealによるキャプチャ結果

 

図1の評価環境でキャプチャを行った結果、EtherealのGUIインターフェースは図2のようになりました。「Traffic」の「Packets」にあるようにEtherealでキャプチャしたパケットの個数は321,694個でした。
また、図3の評価環境でキャプチャを行った結果、ra-EtherealのGUIインターフェースは図4のようになりました。ra-Etherealでキャプチャしたパケットの個数は670,461個でした。

パケットキャプチャ率は約35%向上していることが分かります。

GigaPcap対応tcpdumpでパケットキャプチャを行う場合1Gbps(ワイヤースピード)の帯域においてもパケットロスは発生しません。ra-Etherealでパケットロスが発生する原因はGUI描画などによる負荷が考えられます。特にオンボードのビデオカードを利用している場合、PCI-Xバスの帯域をネットワークとビデオカードが奪い合うため上記の結果となります。

ra-Ethereal のシステムアーキテクチャ

Etherealと比較してra-Etherealのパケットキャプチャ率が向上する理由は、下図に示すようなシステムアーキテクチャの違いに因ります。
Ethereal実行中のホストCPUはEthereal自身及びlibpcap、そしてNICを制御するデバイスドライバの処理を行います。しかし、ra-Etherealでは下図右側のように、libpcapの処理の一部とNICの制御をGigaPcapが肩代わりします。
従って、ra-Etherealではそれらに費やしていたリソースをEthereal本来の処理に利用することができ、同一時間に処理できるパケット処理の量が増大してパケットキャプチャ率の向上が望めます。

 

 詳細は下記リンクをご覧ください

 

GigaPcap
GigaPcapベンチマーク
Snortの高速化(Snort+GigaPcap)
NetFlowの高速化(NetFlow+GigaPcap)
GigaPcap 情報漏洩対策
情報漏洩対策ニーズ
内部統制における記録のニーズ
情報漏洩対策関連用語