RHEL系(CentOS)
---
サーバ運用でtcpdumpを利用する場合、障害発生時に、リアルタイムで通信状況を監視するケースが高いと思います。
重要になってくるのは、特定の条件に絞りこんで障害となっている通信だけに絞って迅速に状況を監視することが求められます。
よく利用するtcpdumpコマンドのフィルタ条件をオプションを交えてケース毎に、使用例を「厳選10選」紹介します。
使用例のコマンドをコピーして、ご自身の環境に合わせて読み替えてご利用ください。
- tcpdumpフィルタ設定のメリット
- tcpdumpのフィルタ使用例(条件式・演算子の活用事例)
- tcpdumpコマンド実行環境の構成図
- tcpdumpコマンド使用例:tcpdump実行サーバの【サーバZ】で実行した場合
- 1.【サーバZ】にpingしている全てのサーバを監視したい場合
- 2.【サーバZ】と(サーバA)でpingしているか?【サーバZ】に(サーバA)からのpingが届いているか?を監視したい場合
- 3.【サーバZ】と(サーバA)の全ての通信を監視したい場合
- 4.【サーバZ】が「192.168.11.0/24」セグメントからの通信を監視したい場合
- 5.【サーバZ】と同じネットワークセグメント内の通信を監視したい場合
- 6.【サーバZ】が(サーバA)と(サーバB)の全ての通信を監視したい場合
- 7.【サーバZ】と同一セグメントの「192.168.11.0/24」以外から【サーバZ】宛ての通信を監視したい場合
- 8.【サーバZ】と(サーバA)との通信ポートが「80」の監視をしたい場合
- 9.【サーバZ】と(サーバA)との通信ポートが「80/tcp」の通信を監視したい場合
- 10.【サーバZ】と(サーバA)との通信ポートが「80/tcp」と「80/udp」の通信を監視したい場合
tcpdumpフィルタ設定のメリット
・余計な通信を取り除くことができます。
・通信量が多いとTeraTerm、コンソールなどのエミュレーターがすぐに
スクロールして確認したい通信がわからなくなる
・監視したい通信だけに絞り込み、迅速な状況確認ができる
■フィルタ有
・通信内容が限定されて見やすい
・スクロールが軽減されている
■フィルタ無
・色々な通信が混在していて見づらい
・すぐにスクロールしてします
tcpdumpのフィルタ使用例(条件式・演算子の活用事例)
tcpdumpコマンド実行環境の構成図
対象 | IPアドレス | NWインターフェース |
tcpdump実行サーバ【サーバZ】 | 192.168.11.13 | enp0s3 |
192.168.11.13へ通信するサーバ(サーバA) | 192.168.11.15 | eth0 |
192.168.11.13へ通信するサーバ(サーバB) | 192.168.11.17 | eth1 |
tcpdumpコマンド使用例:tcpdump実行サーバの【サーバZ】で実行した場合
1.【サーバZ】にpingしている全てのサーバを監視したい場合
tcpdump -nn -i enp0s3 icmp and host 192.168.11.13
【画面1】
コマンド1->tcpdumpコマンドを実行している【サーバZ】のIPアドレス(192.168.11.13)を指定することで、【サーバZ】宛てにping実行しているすべてのサーバを監視することができます。
解説1->【サーバZ】にping実行しているサーバは「192.168.11.15」と「192.168.11.17」の2サーバだけだとわかります。【サーバZ】は、この2サーバと疎通できていることもわかります。
2.【サーバZ】と(サーバA)でpingしているか?【サーバZ】に(サーバA)からのpingが届いているか?を監視したい場合
tcpdump -nn -i enp0s3 icmp and host 192.168.11.15
【画面2】
コマンド1->疎通確認したい、対象(サーバA)のIP(192.168.11.15)を指定することで、特定のサーバのping実行の状況を監視することができます。
解説1->【サーバZ】と(サーバA)とで疎通が取れていることがわかります。ping実行も正常であることもわかります。
3.【サーバZ】と(サーバA)の全ての通信を監視したい場合
tcpdump -nn -i enp0s3 host 192.168.11.15
【画面3】
コマンド->対象(サーバA)のIP(192.168.11.15)だけに絞って、すべての通信状況を監視することができます。
解説1->【サーバZ】と(サーバA)とでポート「80」の通信をしていることがわかります。
解説2->【サーバZ】と(サーバA)とでping実行していることがわかります。
4.【サーバZ】が「192.168.11.0/24」セグメントからの通信を監視したい場合
tcpdump -nn -i enp0s3 net 192.168.11.0/24
上記と下記は同じ意味
tcpdump -nn -i enp0s3 \(src or dst net 192.168.11.0/24\)
「(」と「)」のカッコを使用する場合は、カッコ「()」の前に
「\」でエスケープを使用してください
【画面4】
コマンド1->送り元(src)・行き先(dst)どちらかに「192.168.11.0/24」セグメントが含まれている通信を監視することができます。
解説1->【サーバZ】と「192.168.11.0/24」セグメント間の通信状況がわかります。対象範囲が広いので、閲覧するときには、「and」でさらに条件を絞ったり、ファイルに出力して確認することをお勧めします。
5.【サーバZ】と同じネットワークセグメント内の通信を監視したい場合
tcpdump -nn -i enp0s3 \(src and dst net 192.168.11.0/24\)
「(」と「)」のカッコを使用する場合は、カッコ「()」の前に
「\」でエスケープを使用してください
【画面5】
コマンド1->送り元(src)・行き先(dst)どちらにも「192.168.11.0/24」のセグメントが含まれる通信のみ監視することができます。
【サーバZ】と同じネットワークセグメントを設定する必要があり、すなわち、今回であれば【サーバZ】は「192.168.11.13/24」のIPなので「192.168.11.0/24」を指定する必要があります。
解説1->【サーバZ】と同じネットワークセグメント同士での通信状況のみがわかります。
6.【サーバZ】が(サーバA)と(サーバB)の全ての通信を監視したい場合
tcpdump -nn -i enp0s3 \(host 192.168.11.15\) or \(host 192.168.11.17\)
「(」と「)」のカッコを使用する場合は、カッコ「()」の前に
「\」でエスケープを使用してください
【画面6】
コマンド1->送り元(src)・行き先(dst)のどちらかに(サーバA)か(サーバB)が含まれているすべての通信を監視することができます。
解説1->【サーバZ】と(サーバA)のpingが確認できます。
解説2->【サーバZ】と(サーバB)のpingが確認できます。
解説3->【サーバZ】と(サーバA)のポート80(http)での通信が確認できます。
7.【サーバZ】と同一セグメントの「192.168.11.0/24」以外から【サーバZ】宛ての通信を監視したい場合
tcpdump -nn -i enp0s3 \(src net not 192.168.11.0/24\) and \(dst host 192.168.11.13\)
「(」と「)」のカッコを使用する場合は、カッコ「()」の前に
「\」でエスケープを使用してください
【画面7】
コマンド1->【サーバZ】宛ての通信、すなわち「行き先(dst)が「192.168.11.13」の通信」で、同一セグメントの「192.168.11.0/24」以外、すなわち「送り元(src)が「192.168.11.0/24」以外」からアクセスがある通信を監視することができます。
解説1->「192.168.11.0/24」セグメント以外の「122.103.125.181」から【サーバZ】(行き先)への通信が確認できます。
但し、【サーバZ】が送り元の通信は除外されますので、【サーバZ】と相手側サーバとの送受信のやり取りを確認することができません。
解説2->通常、「解説1」の通信は、【サーバZ】が「122.103.125.181」へポート123(ntp)の要求をして、その結果を「122.103.125.181」が【サーバZ】へ返す通信のやり取りが行われています。しかし、「コマンド1」での監視では、「122.103.125.181」が【サーバZ】へ返す通信だけしか確認することができません。一連の送受信の流れを確認することはできませんので注意してください。【サーバZ】が送り元としてどのような通信を受信しているか?のみ確認するときに利用してください。
8.【サーバZ】と(サーバA)との通信ポートが「80」の監視をしたい場合
tcpdump -nn -i enp0s3 host 192.168.11.15 and port 80
【画面8】
コマンド1->(サーバA)からtcp・udp関係なくポートが「80」の通信を監視することができます。
※行き先(dst)と送り元(src)のどちらかでポート「80」を利用していた場合に該当します。
解説1->(サーバA)が【サーバZ】へポート80/udpの通信を確認できます。
解説2->(サーバA)が【サーバZ】へポート80/tcpの通信を確認できます。
※プロトコル(udp・tcpなど)関係なくポート80の通信を確認できます。
9.【サーバZ】と(サーバA)との通信ポートが「80/tcp」の通信を監視したい場合
tcpdump -nn -i enp0s3 host 192.168.11.15 and tcp port 80
【画面9】
コマンド1->(サーバA)からtcpのポートが「80」の通信を監視することができます。
※行き先(dst)と送り元(src)のどちらかでポート「80」を利用していた場合に該当します。
解説1->(サーバA)が【サーバZ】へポート80/tcpの通信を確認できます。
※プロトコルがtcpのポート80のみの通信を確認できます。
10.【サーバZ】と(サーバA)との通信ポートが「80/tcp」と「80/udp」の通信を監視したい場合
tcpdump -nn -i enp0s3 host 192.168.11.15 and \(tcp or udp\) and port 80
「(」と「)」のカッコを使用する場合は、カッコ「()」の前に
「\」でエスケープを使用してください
【画面10】
コマンド1->(サーバA)からtcpとudpだけプロトコルに絞ったポートが「80」の通信を監視することができます。
※行き先(dst)と送り元(src)のどちらかでポート「80」を利用していた場合に該当します。
※【画面8】とあまり結果はかわりません。
解説1->(サーバA)が【サーバZ】へポート80/udpの通信を確認できます。
解説2->(サーバA)が【サーバZ】へポート80/tcpの通信を確認できます。
※プロトコルをudpとtcpだけに限定してポート80の通信を確認できます。
tcpdumpのフィルタ条件のまとめ
条件演算子(「and・or・not」フィルタ)
フィルタを組合せて条件を詳細に絞り込んでフィルタする時に指定して利用します。
要素 | 設定方法 | 設定例 | 説明 |
結合(論理積) | 'and' 又は '&&' | A and B 又は A && B | AかつB (どちらにも該当する) |
択一(論理和) | 'or' 又は '||' | A or B 又は A || B | A又はB (どちらか一方) |
否定 | not | not A 又は ! A | A以外 |
■注意事項
andやorを併用して使用する場合、条件を分かりやすくするために
()カッコをつけて明確にします。
()を使用する場合は、()カッコの前に「\」でエスケープを使用する
例
tcpdump -nn -i enp0s3 \(host 192.168.11.15\) and \(tcp port 80\)
type(IP・ポートフィルタ)
個別IPアドレス、ネットワークセグメント、通信ポート指定により
フィルタする場合に利用します。
種類 | タイプ | 使用例 |
IPアドレス指定 | host | host 192.168.11.15 |
ネットワーク | net | net 192.168.11.0/24 |
ポート番号 | port | port 80 |
proto(通信プロトコルフィルタ)
通信プロトコルを指定してフィルタする場合に利用します。
以下は、よく利用するものだけを抜粋
プロトコル | icmp tcp udp ip arp など |
dir(送り元(src)・行き先(dst)のフィルタ)
通信方向の「送り元(src)・行き先(dst)」を指定してフィルタする場合に利用します。
また、条件演算子(and、or、not)を併用して詳細なフィルタも可能となります。
通信方向(dirの修飾子) | 説明 |
src | 送り元 ※単発で利用することはほとんどありません ※srcのみ指定すると送受信を監視することができません 例 src net 192.168.11.0/24 ->「送り元」が192.168.11.0/24のセグメントに含まれている IPアドレスの場合 |
dst | 行き先 ※単発で利用することはほとんどありません ※dstのみ指定すると送受信を監視することができません 例 dst net 192.168.11.0/24 ->「行き先」が192.168.11.0/24のセグメントに含まれている IPアドレスの場合 |
src or dst | 「送り先」又は「行き先」どちらかに該当する場合 ※dirの修飾子の指定がない場合の指定扱いになります 例 \(src or dst net 192.168.11.0/24\) と net 192.168.11..0/24 ->同じ意味 「送り先」又は「行き先」のどちらかに192.168.11.0/24 のセグメントに含まれているIPアドレスが該当している場合 |
src and dst | 「送り元」かつ「行き先」どちらにも該当する場合 例 \(src and dst net 192.168.11.0/24\) ->「送り先」かつ「行き先」に192.168.11.0/24 のセグメントに含まれているIPアドレスが必ず該当している場合 |
tcpdumpのオプションについて
ファイル保存、詳細情報表示、インターフェース指定、キャプチャサイズ指定など、フィルタ条件を活用しながら利用するためのtcpdumpのオプションについては、以下のリンクを参照してください。
コメント