2026年7月11日

2026年7月11日

iftop で通信相手ごとの帯域を可視化する手順

iftop は、サーバーのネットワークインターフェースを流れる通信を「どのホストと、どれだけの帯域でやり取りしているか」の組ごとにリアルタイムで表示するツールです。回線が急に重くなった、転送量が増えて請求が心配、特定の相手から大量のアクセスが来ている気がする、といった場面で、原因になっている通信相手をすぐに見つけられます。この記事では、iftop の導入から画面の読み方、絞り込みフィルター、ログに残すためのテキストモード、そして見つけた通信をプロセスや対策につなげる手順までを説明します。

なお、iftop が教えてくれるのは「通信相手ごとの量」であり、経路上のルーターの並びではありません。経路を見たいときは mtr や traceroute、プロセスごとの量を見たいときは nethogs と使い分けます。

インストール

# Debian / Ubuntu
sudo apt install iftop

# RHEL / AlmaLinux / Rocky Linux(EPEL リポジトリが必要な場合があります)
sudo dnf install epel-release
sudo dnf install iftop

iftop はパケットをキャプチャして集計するため、root 権限(sudo)で実行します。iftop は長く大きな更新が出ていないツールですが、主要ディストリビューションのパッケージとして現在も提供されています(2026年10月現在)。導入できない環境では、後述する代替ツールを使います。

基本の起動方法

まずインターフェース名を確認してから起動します。

# インターフェース名を確認
ip -br link

# eth0 を監視(名前解決なし、ポート番号を表示)
sudo iftop -i eth0 -n -N -P

よく使うオプションは次のとおりです。

  • -i:監視するインターフェース。省略すると自動で選ばれますが、VPS では意図しないインターフェースになることがあるため指定するのが無難です。
  • -n:IP アドレスを名前解決しない。DNS 問い合わせ自体が通信を生むのを避けられ、表示も速くなります。
  • -N:ポート番号をサービス名(http など)に変換しない。
  • -P:ポート番号を表示する。443 番への通信か、22 番への通信かが分かります。
  • -B:単位をビットではなくバイトで表示する。

画面の読み方

起動すると、上部に目盛り、中央に通信の組の一覧、下部に合計が表示されます。

  • 各行は「自ホスト」と「相手ホスト」の組で、=> が送信、<= が受信を表します。1つの組が2行で表示されます。
  • 右側の3列は、直近2秒・10秒・40秒の平均帯域です。瞬間的な急増は左の列、継続的な大量通信は右の列で判断します。
  • 行の背景に伸びる棒は、帯域の大きさを目盛りに対して示したものです。
  • 下部の TX(送信)・RX(受信)・TOTAL には、累計(cum)、ピーク(peak)、現在の平均値が表示されます。

Web サーバーで => の値が大きい組は、サイトから相手へ大量にデータを送っている通信です。画像や動画の配信、クローラーによる大量取得、外部へのバックアップ転送などが考えられます。<= が大きい場合は、アップロードや外部からの大量のリクエスト、パッケージの更新などが候補です。

画面上で使えるキー操作

iftop の表示中は、キー操作で表示を切り替えられます。主なものは次のとおりです。

  • n:名前解決の切り替え
  • p:ポート表示の切り替え
  • t:送受信の表示形式の切り替え(2行表示・1行表示・送信のみ・受信のみ)
  • 1 2 3:それぞれ2秒・10秒・40秒の列で並べ替え
  • P:表示を一時停止(気になる行をじっくり見るとき)
  • l:表示中の行をテキストで絞り込む
  • h:ヘルプの表示
  • q:終了

キー割り当てはバージョンによって異なることがあるため、使う前に h でヘルプを確認してください。

フィルターで対象を絞る

通信が多いサーバーでは、一覧が流れて見づらくなります。-f で tcpdump と同じ形式(pcap フィルター)の条件を指定すると、対象を絞り込めます。

# HTTPS の通信だけを見る
sudo iftop -i eth0 -n -P -f 'port 443'

# 特定ホストとの通信だけを見る
sudo iftop -i eth0 -n -P -f 'host 198.51.100.25'

# SSH 以外の通信を見る(自分の接続を除外)
sudo iftop -i eth0 -n -P -f 'not port 22'

198.51.100.25 は確認したい相手の IP に置き換えてください。SSH でログインして iftop を見ている場合、自分の SSH 接続も一覧に出るため、not port 22 で除外すると他の通信が見やすくなります。

テキストモードで記録を残す

障害時の状況を後から見返したい場合や、定期的に記録したい場合は、テキストモードを使います。

# 10秒間計測して上位20件を出力し、終了する
sudo iftop -i eth0 -n -N -P -t -s 10 -L 20 > iftop_$(date +%Y%m%d_%H%M).txt

-t は画面表示を使わずにテキストで出力するモード、-s は指定秒数で終了するオプション、-L は出力する行数です。cron で定期実行すれば、夜間だけ転送量が増えるといった傾向を後から確認できます。ただし、出力には通信相手の IP アドレスが含まれるため、保存先の権限と保存期間を決めて管理してください。

見つけた通信をプロセスと対策につなげる

iftop で大量通信の相手とポートが分かったら、どのプロセスが通信しているかを確認します。

# 相手 IP との接続と、そのプロセスを表示
sudo ss -tnp dst 198.51.100.25

結果の users: の部分にプロセス名と PID が表示されます。たとえば nginx や php-fpm であれば Web アクセス、rsync や rclone であればバックアップ転送だと判断できます。

原因ごとの対処の例は次のとおりです。

  • 特定のクローラーやボットの大量アクセス:アクセスログで User-Agent とリクエスト先を確認し、正当なクローラーかどうかを判断します。悪質な場合はファイアウォールや fail2ban で制限します。
  • 画像など静的ファイルの配信量が多い:CDN の導入や、画像の適切なサイズでの配信を検討します。
  • バックアップの転送が日中に重なる:実行時間をアクセスの少ない時間帯に移す、差分バックアップにするなどで影響を減らせます。
  • 見覚えのない外部への送信:不正なプログラムの可能性もあるため、プロセスの実行ファイルの場所と起動元を確認し、必要ならサーバーをネットワークから切り離して調査します。

ファイアウォールの変更前には現在のルールを保存しておき、自分の SSH 接続を遮断しないよう許可ルールを先に確認してください。

代替ツールとの使い分け

  • nethogs:プロセスごとの帯域を表示します。「どのプログラムが通信しているか」を先に知りたい場合に向いています。
  • nload:インターフェース全体の送受信量をグラフで表示します。全体の傾向を見るのに便利です。
  • vnStat:日別・月別の転送量を記録します。クラウドの転送量を長期で把握したい場合に使います。

iftop は「今この瞬間、誰と通信しているか」を見るのに向いたツールなので、長期の記録は vnStat、プロセスの特定は nethogs や ss と組み合わせると効率よく調査できます。

まとめ

  • iftop は通信相手の組ごとに、直近2秒・10秒・40秒の平均帯域をリアルタイムで表示します。
  • -n -N -P で名前解決を止めてポートを表示すると、原因の特定がしやすくなります。
  • -f の pcap フィルターで対象を絞り、-t -s -L のテキストモードで記録を残せます。
  • 大量通信の相手が分かったら ss -tnp でプロセスを特定し、原因に合わせて対処します。
  • 出力には IP アドレスが含まれるため、ログの保存先と保存期間を管理してください。

お気軽にご相談ください

お見積りへ お問い合わせへ
▲