お金をかけずにサーバーの勉強をしよう

Wiresharkでネットワークパケット解析

2024年4月27日

メニューへ戻る

サーバーエンジニアもネットワークに一歩踏み出そう!

サーバーエンジニアとしてのお勉強をしたり実践をしたりしているとネットワークの事も必ずお勉強をすることになります。

サーバーエンジニアの守備範囲というと、TCP/IPとその上の層にある HTTPなどのアプリケーションプロトコルが主になると思いますが、本で勉強しても理論ばかりで中々イメージがし難いものではないでしょうか。

そういう場合には、ネットワークパケットの中身を直に見られる「ネットワークパケットキャプチャ」というソフトを使ってみましょう。

WireSharkという「これがオンリーワン」というフリーのツールがありますので、是非味わってみることをお勧めします。

Wireshakのサイトはこちら。
WIRESHARK

ということで、ここでは Wiresharkのインストールから実際に使ってみるまでを扱ってみます。

1.環境

対象の環境は以下のセットでやりますが、Wireshark自体の使い方は他の環境でも変わりません。
あくまで「この環境でのインストールの仕方」になります。

両方とも 2024年4月27日時点での最新版を使っています。


2.インストール

Lubuntu 24.04では、パッケージが snapと aptの2本立てになっていますが、snapのリポジトリには Wiresharkがありませんでした。

aptのリポジトリからインストールします。

subro@Lubuntu2404:~$ sudo apt -y install wireshark
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了

こんな風にインストールは進みますが、途中でこのような画面が表示されます。
Wireshark インストール 1

Linuxでも Windowsでもネットワークパケットをキャプチャする作業は OSでの特権を持つユーザーにしか許されません。

Linuxでは [root]ユーザーがその対象になりますが、パケットキャプチャって一般ユーザーもやりたくなる利便性の高い手法なんで、「[root]ユーザーにしかやらせないよ」ではその利便性が損なわれてしまいます。

そこで Wiresharkでは、一般ユーザーにもその門戸を開くようにしているんですが、これは OSのセキュリティ低下とのトレードオフの関係にあることなので、ここでどうするか問うてきているという訳です。

当ホームページでは利便性を重視して一般ユーザーにパケットキャプチャを開放しますが、会社などでは許可がいる場合もあることでしょう。

で、[はい]を選択し、Enterキーを押して下さい。

インストールの続きが継続されます。

〜〜〜 中略 〜〜〜

desktop-file-utils (0.27-2build1) のトリガを処理しています ...
hicolor-icon-theme (0.17-2) のトリガを処理しています ...
libc-bin (2.39-0ubuntu8) のトリガを処理しています ...

インストールできました。

WireSharkを立ち上げる前に、使っているネットワークアダプタの名前を押さえてきます。

subro@Lubuntu2404:~$ ip address
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute
       valid_lft forever preferred_lft forever
2: ens33:  mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:62:1f:5d brd ff:ff:ff:ff:ff:ff
    altname enp2s1
    inet 192.168.1.102/24 brd 192.168.1.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever

IPv4のアドレス [192.168.1.102] が付与されているのが [ens33] でした。
この名前は後で使いますので、覚えておいてください。


3.一般ユーザーを [wireshark]グループに登録

一般ユーザーがパケットキャプチャを行うためには、その一般ユーザーが [wireshark]グループに所属していなければなりません。

コマンドを使って [subro]ユーザーを [wireshark]グループに追加してやります。

subro@Luntu2404:~$ sudo usermod -a -G wireshark subro

何も出ませんが、登録されているはずです。

[/etc/group]ファイルを見てみます。

subro@Luntu2404:~$ grep wireshark /etc/group
wireshark:x:123:subro

[subro]ユーザーが追加されていました。

このままだとこの設定変更が有効にならなかったので、一度ログアウトしてから再ログインしました。

※ちょっと難しい話になりますが、現在主流のネットワークインターフェイス(NIC)というハードウェアは MACアドレスを受信宛先としてデータ(イーサーネットフレーム)を受け取っていますが、自分宛てではないデータは破棄して OSに届けることをしません。
しかしパケットキャプチャでは自分に関係のない通信を拾いたいこともあるのですからこれでは困ります。
そこで NICを「プロミスキャス・モード(無差別モード)」に切り替えることで、届いたデータ全てを OSに取り込むようにする必要があるのですが、これには root権限が必要なのです。


4.パケットキャプチャ

それでは Wiresharkを立ち上げます。
Lubuntuではスタートメニューの [インターネット] のところに入っていました。
鮫の背びれマークのアイコンです。

このような画面です。
先程調べたネットワークインターフェイスの名前の行にフォーカスがされていると思いますので、左上の[鮫の背びれマークボタン]を押すとネットワークパケットキャプチャが開始されます。
Wireshark インストール 2

上のペインにバラバラと到着したパケットの情報が流れていきます。
(個人的な通信内容を隠すためフィルタしています)
Wireshark インストール 3

上のペインで中を見たいパケットの行を選択しますと、左下のペインで中を見ることができます。

TCP/IPの本などでネットワークの勉強をしてみると分かりますが、ネットワークのパケットってロシアのマトリョーショカのようにデータを何重にもくるんだ構成になってるんですね。

左下のペインでは、その階層で中を分析できるようになっています。

画面が狭くて、パケット内容を展開した絵は貼りませんが、上の絵の場合なら左下ペインに 5行出ていて

  1. イーサーネットフレーム
  2. イーサーネットフレーム(詳細)
  3. IPパケット
  4. TCPパケット
  5. TSL

となっています。

TCP/IPの本に散々出てくるあのスタック図を上下逆さまにした感じですよね。

ここから先の話は書籍にあたってください。
とても書ききれません。

パケットキャプチャを停止するには、[赤い四角ボタン]を押して下さい。


5.おまけ 1 - VMware Workstation Playerの効果

ここで VMware Workstation Playerの一つの特性について説明します。

VMware Workstation Playerで動かす仮想OSのネットワークに「ブリッジ」を選択している場合はこのようなイメージになっています。
構成図 1

検証している物理PC(ホストOS:Windows10)と仮想OSが接続されている「ハブ」なんですが、これは現在主流のスイッチングハブ(L2スイッチ)ではなく、リピータハブなんですね。

もしこれが L2スイッチだとこういう感じで必要な PCにしかデータを通過させません。
構成図 2

でもリピータハブなのでこうなります。
構成図 3

よって VMware Workstation Playerでネットワークにブリッジを選択している全ての仮想OSとホストOSでお互いのネットワークパケットが全て届いちゃうのです。

これはネットワークパケットの解析の検証が捗る!


6.おまけ 2 - ポートミラーリング

一方で本物のネットワークであれば普通はスイッチングハブを使ってるでしょうから、リアルタイムパケットキャプチャをできる環境が中々ありません。

また、家で Wiresharkを使えるようになると、スマホや携帯ゲーム機が勝手にインターネットとやりとりしてないかも見たくなってきます。

そういうときにはスイッチングハブの「ポートミラーリング」という機能を使います。
スイッチングハブの特定の口に届いたデータを意図的に別の特定の口にも流してやるって機能です。
このおかげで本来届かないはずのネットワークデータが届くようになります。

残念ながら業務用のお高いスイッチングハブにしかこの機能はないんですね、これが。

家を例にするとポートミラー機能付きスイッチングハブをこういう風に配置すると家からインターネットに行くパケットを全部見られます。
構成図 4

「でもとても買えないよ…」と思っていたらこんなものが。

このようにコンパクトなナリで、なんとポートミラー機能と VLAN機能付きでなんと 3千円台?!、マジか!

Wiresharkよりも、ポートミラー機能付きスイッチングハブが庶民の手の届く所に来たって方が主になってしまいました。

でも Wiresharkとコイツを組み合わせることで、もっとうまい酒が飲めるよって思う次第です。


やる気になったらこの手の本を 1冊買った方が良いです。
Wiresharkは機能があり過ぎるので。