3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

パケットキャプチャでリバプロの動きを確認

Last updated at Posted at 2025-02-07

前回の記事で、Nginx でリバースプロキシを立ててみました。記事

今回は、その動きを詳しく見るためにパケットキャプチャをします。

要約

tshark をリバースプロキシにインストールし、バックエンドサーバとの通信をキャプチャする。
ついでにSSH も見えた。

作業

インストール

tshark はかの有名なwireshark のコマンドライン版だそうです。t はterminal
wireshark をインストールすると勝手についてくるようです。
リバースプロキシにインストールします。

(RevProxyで)
# sudo dnf install wireshark 

tshark だと、root ユーザーでコマンド実行すると警告がでますが今のところ無視します。

コマンド

tshark のオプションはいろいろありますが、パケットキャプチャと言えばフィルタなのでそこに注目します。

# tshark -i eth0 -f 'host 10.0.1.4'
Capturing on 'eth0'

-i オプション:インターフェイス指定
-f オプション:フィルタ(今回はホストのIP アドレスを指定。クオーテーションが必要)

eth0 とは、リバースプロキシがバックエンドのWEB サーバに向けているインターフェイスです。
10.0.1.4 はそのバックエンドのwWEB サーバです。
このフィルタで、10.0.1.4 を送信元または宛先に含む、eth0 のパケットが見られるはず。

自分用
今回の環境で、-i オプション抜きで -f 'host 10.0.1.4' を打つと勝手にeth0 でキャプチャが始まった。たぶん他にインターフェイスがないことが原因。ふつうは指定が必要なんでしょう。

キャプチャ

想定される通信は、

  1. 踏み台サーバとしてのリバースプロキシからWEB サーバへのSSH
  2. 自分PC のブラウザからリバースプロキシにアクセスしたときにリダイレクトされる通信

です。
適当に観察して遊びましょう。

  102 620.383164766     10.0.0.4 → 10.0.1.4     TCP 74 49908 → 80 [SYN] Seq=0 Win=29200 Len=0 MSS=1460 SACK_PERM=1 TSval=1307360433 TSecr=0 WS=128
  103 620.384395364     10.0.1.4 → 10.0.0.4     TCP 74 80 → 49908 [SYN, ACK] Seq=0 Ack=1 Win=28960 Len=0 MSS=1410 SACK_PERM=1 TSval=2192855130 TSecr=1307360433 WS=128
  104 620.384422864     10.0.0.4 → 10.0.1.4     TCP 66 49908 → 80 [ACK] Seq=1 Ack=1 Win=29312 Len=0 TSval=1307360434 TSecr=2192855130
  105 620.384466264     10.0.0.4 → 10.0.1.4     HTTP 547 GET / HTTP/1.0
  106 620.385108763     10.0.1.4 → 10.0.0.4     TCP 66 80 → 49908 [ACK] Seq=1 Ack=482 Win=30080 Len=0 TSval=2192855131 TSecr=1307360434
  107 620.386224562     10.0.1.4 → 10.0.0.4     TCP 250 HTTP/1.0 200 OK  [TCP segment of a reassembled PDU]
  108 620.386245462     10.0.0.4 → 10.0.1.4     TCP 66 49908 → 80 [ACK] Seq=482 Ack=185 Win=30336 Len=0 TSval=1307360436 TSecr=2192855131
  109 620.386253362     10.0.1.4 → 10.0.0.4     HTTP 129 HTTP/1.0 200 OK  (text/html)
  110 620.386259162     10.0.1.4 → 10.0.0.4     SSH 166 Server: Encrypted packet (len=100)
  111 620.386264762     10.0.0.4 → 10.0.1.4     TCP 66 48054 → 22 [ACK] Seq=1249 Ack=993 Win=317 Len=0 TSval=1307360436 TSecr=2192855132
  112 620.386445962     10.0.0.4 → 10.0.1.4     TCP 66 49908 → 80 [FIN, ACK] Seq=482 Ack=249 Win=30336 Len=0 TSval=1307360436 TSecr=2192855131
  113 620.387292461     10.0.1.4 → 10.0.0.4     TCP 66 80 → 49908 [ACK] Seq=249 Ack=483 Win=30080 Len=0 TSval=2192855133 TSecr=1307360436

以上は、ブラウザでNginx のアドレスにアクセスしたときのキャプチャ結果です。一回のアクセスで12 のパケットがやり取りされてます。6 往復ですね。

  • 102 ~ 104 でスリーウェイハンドシェイクでTCP が確立されています。
  • 105 でHTTP のGET リクエスト。スリーウェイハンドシェイクのACK と同時に飛んでますね。
  • 106, 107 はそれぞれ104, 105 への応答です。107 は分割されたTCP パケットが来たというメッセージがついてますね。
  • 108 は107 への応答
  • 109 はファイル送り終わったよというパケットでしょうか。
  • 110 にはSSH が入り込んでます。リバースプロキシを踏み台として利用してバックエンドサーバにSSH しているので見づらくなってますが、バックエンドが出すログが、踏み台サーバのコンソールに見えているのでそれだと思います。
  • 112 ですが、HTTP クライアントからFIN が来てます。この後FIN がバックエンドサーバから来るのが、TCP 終了の手続きだと思いますがなんで来ないんだろう。ブラウザ閉じたりしても来ない。

以上の通り、SSH を抜くと5 往復でしたね。

ついでにSSH の開始時の通信を見ておきます。

    1 0.000000000     10.0.0.4 → 10.0.1.4     TCP 74 54256 → 22 [SYN] Seq=0 Win=29200 Len=0 MSS=1460 SACK_PERM=1 TSval=1310570799 TSecr=0 WS=128
    2 0.001565899     10.0.1.4 → 10.0.0.4     TCP 74 22 → 54256 [SYN, ACK] Seq=0 Ack=1 Win=28960 Len=0 MSS=1410 SACK_PERM=1 TSval=2196065496 TSecr=1310570799 WS=128
    3 0.001598699     10.0.0.4 → 10.0.1.4     TCP 66 54256 → 22 [ACK] Seq=1 Ack=1 Win=29312 Len=0 TSval=1310570801 TSecr=2196065496
    4 0.001821199     10.0.0.4 → 10.0.1.4     SSH 87 Client: Protocol (SSH-2.0-OpenSSH_8.0)
    5 0.002474698     10.0.1.4 → 10.0.0.4     TCP 66 22 → 54256 [ACK] Seq=1 Ack=22 Win=29056 Len=0 TSval=2196065497 TSecr=1310570801
    6 0.021232183     10.0.1.4 → 10.0.0.4     SSHv2 87 Server: Protocol (SSH-2.0-OpenSSH_8.0)
    7 0.021247383     10.0.0.4 → 10.0.1.4     TCP 66 54256 → 22 [ACK] Seq=22 Ack=22 Win=29312 Len=0 TSval=1310570820 TSecr=2196065516
    8 0.022585182     10.0.0.4 → 10.0.1.4     SSHv2 1434 Client: Key Exchange Init
    9 0.024974780     10.0.1.4 → 10.0.0.4     SSHv2 1114 Server: Key Exchange Init
   10 0.026823079     10.0.0.4 → 10.0.1.4     SSHv2 114 Client: Diffie-Hellman Key Exchange Init
   11 0.032409874     10.0.1.4 → 10.0.0.4     SSHv2 526 Server: Diffie-Hellman Key Exchange Reply, New Keys, Encrypted packet (len=180)
   12 0.035010572     10.0.0.4 → 10.0.1.4     SSHv2 82 Client: New Keys
   13 0.079225536     10.0.1.4 → 10.0.0.4     TCP 66 22 → 54256 [ACK] Seq=1530 Ack=1454 Win=31872 Len=0 TSval=2196065572 TSecr=1310570834
   14 0.079242536     10.0.0.4 → 10.0.1.4     SSHv2 118 Client: Encrypted packet (len=52)
   15 0.081238435     10.0.1.4 → 10.0.0.4     TCP 66 22 → 54256 [ACK] Seq=1530 Ack=1506 Win=31872 Len=0 TSval=2196065576 TSecr=1310570878
   16 0.081251235     10.0.1.4 → 10.0.0.4     SSHv2 118 Server: Encrypted packet (len=52)
   17 0.081326235     10.0.0.4 → 10.0.1.4     SSHv2 134 Client: Encrypted packet (len=68)
   18 0.091597127     10.0.1.4 → 10.0.0.4     SSHv2 150 Server: Encrypted packet (len=84)
   19 0.132507194     10.0.0.4 → 10.0.1.4     TCP 66 54256 → 22 [ACK] Seq=1574 Ack=1666 Win=34304 Len=0 TSval=1310570932 TSecr=2196065586

ssh コマンドを実行してパスワードを入力するまででこんな感じでした。
Diffie-Hellman 鍵交換が見えて、すげぇ!ネスぺで見たやつだ!ってなりました。
SSH を見ていると長くなりすぎそうなので、今度書きます。

お疲れさまでした。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?