【備忘録】centOS7 で tcpdump する

centOS7 で tcpdump がうまく開始されないと問合せを受け、
色々試してみたところ勉強になったので、備忘録として残しておきたいと思います。

題材: うまくいかないコマンド

$ tcpdump tcp
tcpdump:

試行1: 実行権限の確認

tcpdump には root 権限が必要なので、 sudo するようにコマンドを修正

 $ sudo tcpdump tcp
tcpdump: NFLOG link-layer type filtering not implemented

NFLOG のフィルタは実装されてません、とのことらしい。

試行2: ネットワークの確認

インターフェイスのリストを見てみる。

>||
$ sudo tcpdump -D
1.nflog (Linux netfilter log (NFLOG) interface)
2.nfqueue (Linux netfilter queue (NFQUEUE) interface)
3.ens160
4.any (Pseudo-device that captures on all interfaces)
5.lo [Loopback]
|

あ、NFLOG が1番になってる。
試行1 のエラーから推察すると、 tcpdump で interface を指定しない場合には
リスト番号の一番小さい interface を指定する模様。
ifconfig したところ nflog は定義していないので、上記のエラーが出ている、と。
なので、-i オプションで明示的に interface を指定する。

$ sudo tcpdump -i ens160 tcp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens160, link-type EN10MB (Ethernet), capture size 262144 bytes

無事 tcpdump が開始された。

今回のまとめ: tcpdump 利用時の注意点

1. root 権限で実行する(試行1 より)
2. interface をちゃんと指定する(試行2 より)

普段はダンプしたいインターフェイスを絞った上でコマンドを作成するため
気づきませんでしたが、今回勉強になりました。
centOS6 系列で tcpdump -D の結果を比較すると、挙動の違いの理由が分かりそう
な気がしています。後日やってみよう。

(追記: 2018/05/05)
PC を新調して、 仮想で centOS6.X 系を立てたので、tcpdump -D を確認してみました。
default の状態で 1 番が eth0 に指定されていました。
eth0 は WAN に抜ける interface として利用しているので、centOS6.X 系列ではtcpdump 対象として
インターネットとの通信を重要視しているということなんですかね。

[root@CentOS conf]# tcpdump -D
1.eth0
2.nflog (Linux netfilter log (NFLOG) interface)
3.nfqueue (Linux netfilter queue (NFQUEUE) interface)
4.eth1
5.usbmon1 (USB bus number 1)
6.any (Pseudo-device that captures on all interfaces)
7.lo

オプションなしで tcpdump も実行できました。

[root@CentOS conf]# tcpdump
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes