【入門編】 VPCフローログのレコードフィールド(srcaddr, dstaddr, srcport, dstport, protocol, packets, bytes) – クラウドインフラと仮想化ネットワーク実践ガイド

ネットワークの「通信記録」を読み解く:VPCフローログでパケットの旅路を追跡しよう

クラウドの世界へようこそ!AWSのVPC(Virtual Private Cloud)を構築し始めると、必ず耳にするのが「VPCフローログ」という言葉です。

「ログ?なんだか難しそう……」と感じるかもしれませんね。でも、難しく考える必要はありません。VPCフローログは、いわば「クラウドという巨大な街で交わされる『郵便物』の記録簿」のようなものなんです。

今日は、この記録簿の読み方を、皆さんと一緒に一歩ずつ紐解いていきましょう。

—

1. VPCフローログは「郵便配達の記録簿」

皆さんが誰かに手紙を送るとき、封筒には「差出人の住所」「宛先の住所」「中身の重さ」などが書かれていますよね。インターネット上の通信も全く同じです。

  • 差出人(srcaddr): どこから来たのか?
  • 宛先(dstaddr): どこへ向かうのか?
  • ポート(srcport / dstport): どの「窓口(部署)」に届けたいのか?
  • プロトコル(protocol): どんな種類の荷物か?
  • パケットとバイト数(packets / bytes): どれくらいの量か?

VPCフローログは、ネットワークの境界線(サブネットやENI)を通過する通信をすべて記録してくれます。これがあれば、「なぜか通信が繋がらない」「不審な通信が来ていないか?」といったトラブルの際、強力な手がかりになります。

—

2. 主要フィールドを優しく解説

ログに出力される主要なフィールドを、身近な例で見てみましょう。

| フィールド名 | 意味 | たとえば… |
| :— | :— | :— |
| srcaddr | 送信元IPアドレス | 「渋谷区の営業部」から |
| dstaddr | 送信先IPアドレス | 「新宿区の倉庫」へ |
| srcport | 送信元ポート番号 | 「営業部の代表電話」経由で |
| dstport | 送信先ポート番号 | 「倉庫の受付窓口(80番など)」へ |
| protocol | プロトコル番号 | どんなルールで話すか(TCPなら6) |
| packets | パケット数 | 荷物の「個数」 |
| bytes | バイト数 | 荷物の「総重量」 |

特に初心者が迷いやすいのが protocol です。これは数値で記録されます。

  • 6: TCP(確実に届けたい「書留郵便」のようなもの)
  • 17: UDP(速さが命の「速達メール」のようなもの)

TCPは「届いた?」と確認し合う丁寧な通信、UDPは「とにかく送る!」という勢いのある通信だと覚えておくと、トラブルシューティングの際に「あ、これはUDPだから途中で捨てられたのかも?」といった仮説が立てやすくなりますよ。

—

3. 実践!ログを分析してみよう

実際にS3へ出力されたログの中身は、こんな形式(デフォルト形式)になっています。

# バージョン アカウントID インターフェイスID 送信元IP 宛先IP 送信元ポート 宛先ポート プロトコル パケット数 バイト数 開始時間 終了時間 アクション ステータス
2 123456789012 eni-0a1b2c3d 10.0.1.5 192.168.1.10 54321 80 6 1 60 1620000000 1620000060 ACCEPT OK

この1行が教えてくれること

  • 10.0.1.5 から 192.168.1.10 の 80 番(Webサーバー)へ、TCP(6) で通信が届いた。
  • 1 パケット、合計 60 バイトのやり取りが行われ、無事に ACCEPT(許可) された。

もしこれが REJECT(拒否) になっていたら……「ああ、セキュリティグループで通信がブロックされているんだな!」と即座に判断できるわけです。

—

4. 現場で役立つPythonでの構文解析ヒント

ログが増えてくると、人間が目で追うのは不可能です。Pythonを使って、特定のIPからの通信だけをサッと抽出するスクリプトの断片をご紹介します。

# ログファイルを読み込んで、特定の宛先への通信をフィルタリングするイメージ
target_ip = "192.168.1.10"

with open("vpc_flow_log.txt", "r") as f:
    for line in f:
        parts = line.split()
        # 宛先IPがインデックス4にあると仮定
        dst_addr = parts[4]
        
        if dst_addr == target_ip:
            print(f"ターゲットIPへの通信を検知: {line}")
            # ここに「ログを解析してアラートを出す」等の処理を繋げます

—

最後に:完璧を目指さなくて大丈夫

最初はログの羅列を見るだけで目が回るかもしれません。でも、それでいいんです。まずは「通信が通ったか、捨てられたか」を確認するだけで、トラブル解決のスピードは劇的に上がります。

パケットの旅路を追いかけるのは、まるで名探偵のような仕事です。ぜひ皆さんも、VPCフローログという「記録簿」を片手に、クラウドという街の安全を守るエンジニアへの一歩を踏み出してみてくださいね!

それでは、また次回の記事でお会いしましょう!Happy Clouding!

コメント

タイトルとURLをコピーしました