Bagaimana Cara Menangkap dan Menganalisis Lalu Lintas Jaringan dengan tcpdump?

tcpdump adalah alat baris perintah yang luar biasa untuk mengendus jaringan. Ini adalah standar industri untuk menangkap dan menganalisis paket TCP/IP.

Alat tcpdump dapat sangat membantu saat menyelesaikan masalah jaringan. Paket dapat disimpan ke file dan kemudian dianalisis. Sebaiknya jalankan alat ini sesekali untuk mengawasi jaringan Anda.

Seperti apa keluaran tcpdump?

tcpdump memungkinkan Anda untuk memeriksa header dari paket TCP/IP. Itu mencetak satu baris untuk setiap paket, dan perintah terus berjalan sampai Anda menekan Ctrl+C untuk mengakhiri.

Mari kita periksa satu baris dari contoh keluaran:

20:58:26.765637 IP 10.0.0.50.80 > 10.0.0.1.53181: Flags [F.], seq 1, ack 2, win 453, options [nop,nop,TS val 3822939 ecr 249100129], length 0

Setiap baris termasuk

  • Cap waktu Unix (20:58:26.765637)
  • protokol (IP)
  • nama host atau IP sumber, dan nomor port (10.0.0.50.80)
  • nama host atau IP tujuan, dan nomor port (10.0.0.1.53181)
  • Bendera TCP (Bendera [F.]). Bendera menunjukkan status koneksi. Ini dapat mencakup lebih dari satu nilai, seperti dalam contoh ini [F.] untuk FIN-ACK. Bidang ini dapat memiliki nilai berikut :
    • S – SYN. Langkah pertama dalam membangun koneksi.
    • F-FIN. Pemutusan koneksi.
    • . – AK. Paket pengakuan berhasil diterima.
    • P – PUSH. Memberitahu penerima untuk memproses paket alih-alih menyangganya.
    • R-RST. Komunikasi berhenti.
  • Nomor urut data dalam paket. (urutan 1)
  • Nomor pengakuan (ack 2)
  • Ukuran jendela (menang 453). Jumlah byte yang tersedia di buffer penerima. Ini diikuti oleh opsi TCP.
  • Panjang muatan data. (panjang 0)

Instalasi

Pada distribusi berbasis Debian, tcpdump dapat diinstal dengan perintah APT :

# apt install tcpdump -y

Pada distribusi berbasis RPM, tcpdump dapat diinstal dengan YUM :

# yum install tcpdump -y

Atau menggunakan DNF jika RHEL 8

# dnf install tcpdump -y

opsi perintah tcpdump

Anda harus menjadi root untuk menjalankan tcpdump. Ini mencakup banyak opsi dan filter. Menjalankan tcpdump tanpa opsi apa pun akan menangkap semua paket yang mengalir melalui antarmuka default.

Untuk melihat daftar antarmuka jaringan yang tersedia di sistem dan di mana tcpdump dapat menangkap paket.

# tcpdump -D

Atau

# Tcpdump --list-interfaces
1.eth0
2.nflog (Linux netfilter log (NFLOG) interface)
3.nfqueue (Linux netfilter queue (NFQUEUE) interface)
4.eth1
5.any (Pseudo-device that captures on all interfaces)
6.lo [Loopback]

Ini sangat berguna pada sistem yang tidak memiliki perintah untuk membuat daftar antarmuka.

  11 Monitor Gaming Melengkung Terbaik yang Dapat Anda Beli

Untuk menangkap paket yang mengalir melalui interface tertentu, gunakan flag -i dengan nama interface. Tanpa antarmuka -i tcpdump akan mengambil antarmuka jaringan pertama yang ditemuinya.

# tcpdump -i eth1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 262144 bytes
01:06:09.278817 IP vagrant-ubuntu-trusty-64 > 10.0.0.51: ICMP echo request, id 4761, seq 1, length 64
01:06:09.279374 IP 10.0.0.51 > vagrant-ubuntu-trusty-64: ICMP echo reply, id 4761, seq 1, length 64
01:06:10.281142 IP vagrant-ubuntu-trusty-64 > 10.0.0.51: ICMP echo request, id 4761, seq 2, length 64

Bendera -v meningkatkan informasi yang Anda lihat tentang paket, -vv memberi Anda lebih banyak detail.

Secara default, tcpdump menyelesaikan alamat IP menjadi nama host dan juga menggunakan nama layanan, bukan nomor port. Jika DNS rusak atau Anda tidak ingin tcpdump melakukan pencarian nama, gunakan opsi -n.

# tcpdump -n
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
04:19:07.675216 IP 10.0.2.15.22 > 10.0.2.2.50422: Flags [P.], seq 2186733178:2186733278, ack 204106815, win 37232, length 100
04:19:07.675497 IP 10.0.2.2.50422 > 10.0.2.15.22: Flags [.], ack 100, win 65535, length 0
04:19:07.675747 IP 10.0.2.15.22 > 10.0.2.2.50422: Flags [P.], seq 100:136, ack 1, win 37232, length 36
04:19:07.675902 IP 10.0.2.2.50422 > 10.0.2.15.22: Flags [.], ack 136, win 65535, length 0
04:19:07.676142 IP 10.0.2.15.22 > 10.0.2.2.50422: Flags [P.], seq 136:236, ack 1, win 37232, length 100

Untuk menangkap hanya satu set baris, katakanlah 5, gunakan flag -c:

#tcpdump -c 5
04:19:07.675216 IP 10.0.2.15.22 > 10.0.2.2.50422: Flags [P.], seq 2186733178:2186733278, ack 204106815, win 37232, length 100
04:19:07.675497 IP 10.0.2.2.50422 > 10.0.2.15.22: Flags [.], ack 100, win 65535, length 0
04:19:07.675747 IP 10.0.2.15.22 > 10.0.2.2.50422: Flags [P.], seq 100:136, ack 1, win 37232, length 36
04:19:07.675902 IP 10.0.2.2.50422 > 10.0.2.15.22: Flags [.], ack 136, win 65535, length 0
04:19:07.676142 IP 10.0.2.15.22 > 10.0.2.2.50422: Flags [P.], seq 136:236, ack 1, win 37232, length 100
5 packets captured

Output tcpdump default menggunakan cap waktu Unix. Untuk menangkap paket dengan stempel waktu yang dapat dibaca manusia:

# tcpdump -tttt
2020-07-06 04:30:12.203638 IP 10.0.2.15.22 > 10.0.2.2.50422: Flags [P.], seq 2186734102:2186734138, ack 204107103, win 37232, length 36
2020-07-06 04:30:12.203910 IP 10.0.2.2.50422 > 10.0.2.15.22: Flags [.], ack 36, win 65535, length 0
2020-07-06 04:30:12.204292 IP 10.0.2.15.22 > 10.0.2.2.50422: Flags [P.], seq 36:72, ack 1, win 37232, length 36
2020-07-06 04:30:12.204524 IP 10.0.2.2.50422 > 10.0.2.15.22: Flags [.], ack 72, win 65535, length 0
2020-07-06 04:30:12.204658 IP 10.0.2.15.22 > 10.0.2.2.50422: Flags [P.], seq 72:108, ack 1, win 37232, length 36

ekspresi filter tcpdump

Ekspresi filter memilih header paket mana yang akan ditampilkan. Jika tidak ada filter yang diterapkan, semua header paket ditampilkan. Filter yang biasa digunakan adalah port, host, src, dst, tcp, udp, icmp.

  Cara Meningkatkan Google Apps Anda dengan Editor Skrip

saringan pelabuhan

Gunakan filter port untuk melihat paket yang tiba di port tertentu:

# Tcpdump -i eth1 -c 5 port 80
23:54:24.978612 IP 10.0.0.1.53971 > 10.0.0.50.80: Flags [SEW], seq 53967733, win 65535, options [mss 1460,nop,wscale 5,nop,nop,TS val 256360128 ecr 0,sackOK,eol], length 0
23:54:24.978650 IP 10.0.0.50.80 > 10.0.0.1.53971: Flags [S.E], seq 996967790, ack 53967734, win 28960, options [mss 1460,sackOK,TS val 5625522 ecr 256360128,nop,wscale 6], length 0
23:54:24.978699 IP 10.0.0.1.53972 > 10.0.0.50.80: Flags [SEW], seq 226341105, win 65535, options [mss 1460,nop,wscale 5,nop,nop,TS val 256360128 ecr 0,sackOK,eol], length 0
23:54:24.978711 IP 10.0.0.50.80 > 10.0.0.1.53972: Flags [S.E], seq 1363851389, ack 226341106, win 28960, options [mss 1460,sackOK,TS val 5625522 ecr 256360128,nop,wscale 6], length 0

penyaring tuan rumah

Untuk menangkap semua paket yang datang atau pergi dari host dengan alamat IP 10.0.2.15:

# tcpdump host 10.0.2.15
03:48:06.087509 IP 10.0.2.15.22 > 10.0.2.2.50225: Flags [P.], seq 3862934963:3862934999, ack 65355639, win 37232, length 36
03:48:06.087806 IP 10.0.2.2.50225 > 10.0.2.15.22: Flags [.], ack 36, win 65535, length 0
03:48:06.088087 IP 10.0.2.15.22 > 10.0.2.2.50225: Flags [P.], seq 36:72, ack 1, win 37232, length 36
03:48:06.088274 IP 10.0.2.2.50225 > 10.0.2.15.22: Flags [.], ack 72, win 65535, length 0
03:48:06.088440 IP 10.0.2.15.22 > 10.0.2.2.50225: Flags [P.], seq 72:108, ack 1, win 37232, length 36

Untuk menangkap paket dari jenis protokol tertentu, misalnya icmp, pada antarmuka eth1:

# tcpdump -i eth1 icmp
04:03:47.408545 IP vagrant-ubuntu-trusty-64 > 10.0.0.51: ICMP echo request, id 2812, seq 75, length 64
04:03:47.408999 IP 10.0.0.51 > vagrant-ubuntu-trusty-64: ICMP echo reply, id 2812, seq 75, length 64
04:03:48.408697 IP vagrant-ubuntu-trusty-64 > 10.0.0.51: ICMP echo request, id 2812, seq 76, length 64
04:03:48.409208 IP 10.0.0.51 > vagrant-ubuntu-trusty-64: ICMP echo reply, id 2812, seq 76, length 64
04:03:49.411287 IP vagrant-ubuntu-trusty-64 > 10.0.0.51: ICMP echo request, id 2812, seq 77, length 64

Menggabungkan ekspresi filter

Anda dapat menggabungkan ekspresi filter ini dengan operator AND, OR, dan NOT. Ini akan memungkinkan Anda untuk menulis perintah yang dapat mengisolasi paket dengan lebih tepat:

Paket dari IP tertentu dan ditujukan untuk port tertentu:

# tcpdump -n -i eth1 src 10.0.0.1 and dst port 80
00:18:17.155066 IP 10.0.0.1.54222 > 10.0.0.50.80: Flags [F.], seq 500773341, ack 2116767648, win 4117, options [nop,nop,TS val 257786173 ecr 5979014], length 0
00:18:17.155104 IP 10.0.0.1.54225 > 10.0.0.50.80: Flags [S], seq 904045691, win 65535, options [mss 1460,nop,wscale 5,nop,nop,TS val 257786173 ecr 0,sackOK,eol], length 0
00:18:17.157337 IP 10.0.0.1.54221 > 10.0.0.50.80: Flags [P.], seq 4282813257:4282813756, ack 1348066220, win 4111, options [nop,nop,TS val 257786174 ecr 5979015], length 499: HTTP: GET / HTTP/1.1
00:18:17.157366 IP 10.0.0.1.54225 > 10.0.0.50.80: Flags [.], ack 1306947508, win 4117, options [nop,nop,TS val 257786174 ecr 5983566], length 0

Untuk menangkap semua paket kecuali ICMP, gunakan operator NOT:

# tcpdump -i eth1 not icmp

Menyimpan header paket ke file

Karena output dari tcpdump dapat menggulir melewati layar dengan cukup cepat, Anda dapat menyimpan header paket ke file dengan flag -w. File untuk menyimpan output menggunakan format pcap dan memiliki ekstensi .pcap.

  Monitor Penggunaan Jaringan PC, Mouse & Keyboard Dengan Peta Panas

PCAP adalah singkatan dari penangkapan paket. Perintah berikut menyimpan 10 baris output pada antarmuka eth1 ke icmp.pcap.

# tcpdump -i eth1 -c 10 -w icmp.pcap
tcpdump: listening on eth1, link-type EN10MB (Ethernet), capture size 262144 bytes
10 packets captured
10 packets received by filter
0 packets dropped by kernel

Anda dapat membaca file ini dengan flag -r:

tcpdump -r icmp.pcap
reading from file icmp.pcap, link-type EN10MB (Ethernet)
05:33:20.852732 IP vagrant-ubuntu-trusty-64 > 10.0.0.51: ICMP echo request, id 3261, seq 33, length 64
05:33:20.853245 IP 10.0.0.51 > vagrant-ubuntu-trusty-64: ICMP echo reply, id 3261, seq 33, length 64
05:33:21.852586 IP vagrant-ubuntu-trusty-64 > 10.0.0.51: ICMP echo request, id 3261, seq 34, length 64
05:33:21.853104 IP 10.0.0.51 > vagrant-ubuntu-trusty-64: ICMP echo reply, id 3261, seq 34, length 64
05:33:22.852615 IP vagrant-ubuntu-trusty-64 > 10.0.0.51: ICMP echo request, id 3261, seq 35, length 64

Melihat detail paket

Sejauh ini kita hanya melihat header paket, untuk melihat isi paket gunakan opsi -A. Ini mencetak isi paket dalam ASCII, yang dapat membantu pemecahan masalah jaringan. Juga -X flag dapat digunakan untuk menampilkan output dalam format hex. Ini mungkin tidak banyak membantu jika koneksi dienkripsi.

# tcpdump -c10 -i eth1 -n -A port 80
23:35:53.109306 IP 10.0.0.1.53916 > 10.0.0.50.80: Flags [P.], seq 2366590408:2366590907, ack 175457677, win 4111, options [nop,nop,TS val 255253117 ecr 5344866], length 499: HTTP: GET / HTTP/1.1
E..'[email protected]@.%.
...
..2...P..M.
uE............
.6.}.Q.bGET / HTTP/1.1
Host: 10.0.0.50
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
If-Modified-Since: Tue, 04 Mar 2014 11:46:45 GMT

Kesimpulan

tcpdump mudah diatur, dan setelah Anda memahami hasilnya, berbagai tanda, dan filter, ini dapat digunakan untuk menyelesaikan masalah jaringan dan mengamankan jaringan Anda.