Lệnh tcpdump trong Linux

Giới thiệu

Trong lab này, bạn sẽ học cách sử dụng lệnh tcpdump mạnh mẽ để thu thập và phân tích lưu lượng mạng trên một hệ thống Linux. Lệnh tcpdump là một công cụ phân tích gói mạng được sử dụng rộng rãi, cho phép bạn giám sát và kiểm tra các gói mạng trong thời gian thực, khiến nó trở thành một công cụ có giá trị để khắc phục sự cố mạng, phân tích bảo mật và hiểu hành vi mạng. Lab này sẽ bao gồm các kiến thức cơ bản về cách sử dụng tcpdump, bao gồm thu thập lưu lượng mạng và lọc đầu ra để tập trung vào các loại hoạt động mạng cụ thể.

Giới thiệu về lệnh tcpdump

Trong bước này, bạn sẽ tìm hiểu về lệnh tcpdump, một công cụ phân tích gói mạng mạnh mẽ được sử dụng để thu thập và phân tích lưu lượng mạng trên các hệ thống Linux.

Lệnh tcpdump cho phép bạn giám sát và kiểm tra các gói mạng trong thời gian thực, khiến nó trở thành một công cụ có giá trị để khắc phục sự cố mạng, phân tích bảo mật và hiểu hành vi mạng.

Hãy bắt đầu bằng cách cài đặt gói tcpdump trên container Ubuntu 22.04 Docker của chúng ta:

sudo apt-get update
sudo apt-get install -y tcpdump

Ví dụ đầu ra:

Hit:1 http://archive.ubuntu.com/ubuntu jammy InRelease
Get:2 http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB]
Get:3 http://archive.ubuntu.com/ubuntu jammy-updates InRelease [114 kB]
Get:4 http://archive.ubuntu.com/ubuntu jammy-backports InRelease [99.8 kB]
Get:5 http://security.ubuntu.com/ubuntu jammy-security/main amd64 Packages [2,276 kB]
Get:6 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages [2,644 kB]
Get:7 http://archive.ubuntu.com/ubuntu jammy-backports/main amd64 Packages [11.3 kB]
Fetched 5,255 kB in 2s (2,627 kB/s)
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  libpcap-dev libpcap0.8 tcpdump
Suggested packages:
  tcpdump-dbg
The following NEW packages will be installed:
  libpcap-dev libpcap0.8 tcpdump
0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded.
Need to get 521 kB of archives.
After this operation, 1,455 kB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Get:1 http://archive.ubuntu.com/ubuntu jammy/main amd64 libpcap0.8 amd64 1.10.1-5ubuntu1 [146 kB]
Get:2 http://archive.ubuntu.com/ubuntu jammy/main amd64 libpcap-dev amd64 1.10.1-5ubuntu1 [185 kB]
Get:3 http://archive.ubuntu.com/ubuntu jammy/main amd64 tcpdump amd64 4.99.1-3ubuntu1 [190 kB]
Fetched 521 kB in 0s (3,837 kB/s)
Selecting previously unselected package libpcap0.8:amd64.
(Reading database ... 14289 files and directories currently installed.)
Preparing to unpack .../libpcap0.8_1.10.1-5ubuntu1_amd64.deb ...
Unpacking libpcap0.8:amd64 (1.10.1-5ubuntu1) ...
Selecting previously unselected package libpcap-dev:amd64.
Preparing to unpack .../libpcap-dev_1.10.1-5ubuntu1_amd64.deb ...
Unpacking libpcap-dev:amd64 (1.10.1-5ubuntu1) ...
Selecting previously unselected package tcpdump.
Preparing to unpack .../tcpdump_4.99.1-3ubuntu1_amd64.deb ...
Unpacking tcpdump (4.99.1-3ubuntu1) ...
Setting up libpcap0.8:amd64 (1.10.1-5ubuntu1) ...
Setting up libpcap-dev:amd64 (1.10.1-5ubuntu1) ...
Setting up tcpdump (4.99.1-3ubuntu1) ...
Processing triggers for man-db (2.10.2-1) ...
Processing triggers for libc-bin (2.35-0ubuntu3.1) ...

Bây giờ chúng ta đã cài đặt tcpdump, hãy khám phá một số cách sử dụng cơ bản:

sudo tcpdump -i any -n

Ví dụ đầu ra:

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
16:25:32.792941 IP 172.17.0.2 > 172.17.0.1: ICMP echo request, id 1, seq 1, length 64
16:25:32.793005 IP 172.17.0.1 > 172.17.0.2: ICMP echo reply, id 1, seq 1, length 64
16:25:33.792998 IP 172.17.0.2 > 172.17.0.1: ICMP echo request, id 1, seq 2, length 64
16:25:33.793058 IP 172.17.0.1 > 172.17.0.2: ICMP echo reply, id 1, seq 2, length 64
^C
4 packets captured
4 packets received by filter
0 packets dropped by kernel

Tùy chọn -i any yêu cầu tcpdump thu thập lưu lượng trên tất cả các giao diện mạng khả dụng và -n ngăn chặn việc phân giải DNS của địa chỉ IP, điều này có thể làm chậm quá trình thu thập.

Lệnh này sẽ bắt đầu thu thập lưu lượng mạng và hiển thị các gói đã thu thập trong thời gian thực. Bạn có thể nhấn Ctrl+C để dừng việc thu thập.

Thu thập lưu lượng mạng với tcpdump

Trong bước này, bạn sẽ học cách sử dụng lệnh tcpdump để thu thập lưu lượng mạng và phân tích các gói đã thu thập.

Hãy bắt đầu bằng cách thu thập tất cả lưu lượng mạng trên giao diện mạng mặc định:

sudo tcpdump -i any -c 10

Ví dụ đầu ra:

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
16:29:56.832591 IP 172.17.0.2 > 172.17.0.1: ICMP echo request, id 1, seq 3, length 64
16:29:56.832648 IP 172.17.0.1 > 172.17.0.2: ICMP echo reply, id 1, seq 3, length 64
16:29:57.832607 IP 172.17.0.2 > 172.17.0.1: ICMP echo request, id 1, seq 4, length 64
16:29:57.832663 IP 172.17.0.1 > 172.17.0.2: ICMP echo reply, id 1, seq 4, length 64
16:29:58.832617 IP 172.17.0.2 > 172.17.0.1: ICMP echo request, id 1, seq 5, length 64
16:29:58.832673 IP 172.17.0.1 > 172.17.0.2: ICMP echo reply, id 1, seq 5, length 64
16:29:59.832628 IP 172.17.0.2 > 172.17.0.1: ICMP echo request, id 1, seq 6, length 64
16:29:59.832684 IP 172.17.0.1 > 172.17.0.2: ICMP echo reply, id 1, seq 6, length 64
17:00:00.832638 IP 172.17.0.2 > 172.17.0.1: ICMP echo request, id 1, seq 7, length 64
17:00:00.832694 IP 172.17.0.1 > 172.17.0.2: ICMP echo reply, id 1, seq 7, length 64
10 packets captured
10 packets received by filter
0 packets dropped by kernel

Tùy chọn -c 10 yêu cầu tcpdump thu thập tối đa 10 gói và sau đó thoát.

Bạn cũng có thể thu thập các gói và lưu chúng vào một tệp để phân tích sau:

sudo tcpdump -i any -w network_capture.pcap

Lệnh này sẽ bắt đầu thu thập lưu lượng mạng và lưu nó vào một tệp có tên network_capture.pcap. Nhấn Ctrl+C để dừng việc thu thập.

Để xem các gói đã thu thập, bạn có thể sử dụng một công cụ phân tích giao thức mạng như Wireshark. Ngoài ra, bạn có thể sử dụng lệnh tcpdump để phân tích tệp đã thu thập:

sudo tcpdump -r network_capture.pcap

Thao tác này sẽ hiển thị nội dung của tệp network_capture.pcap.

Lọc lưu lượng mạng với tcpdump

Trong bước này, bạn sẽ học cách sử dụng tcpdump để lọc lưu lượng mạng dựa trên các tiêu chí khác nhau, chẳng hạn như địa chỉ IP, cổng và giao thức.

Hãy bắt đầu bằng cách chỉ thu thập lưu lượng HTTP:

sudo tcpdump -i any -c 10 tcp port 80

Ví dụ đầu ra:

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
17:04:01.832648 IP 172.17.0.2.49154 > 172.17.0.1.80: Flags [S], seq 3569349168, win 64240, options [mss 1460,sackOK,TS val 1000 ecr 0,nop,wscale 7], length 0
17:04:01.832702 IP 172.17.0.1.80 > 172.17.0.2.49154: Flags [S.], seq 2662318800, ack 3569349169, win 65160, options [mss 1460,sackOK,TS val 1000 ecr 1000,nop,wscale 7], length 0
17:04:01.832736 IP 172.17.0.2.49154 > 172.17.0.1.80: Flags [.], ack 1, win 502, length 0
17:04:01.832747 IP 172.17.0.2.49154 > 172.17.0.1.80: Flags [P.], seq 1:74, ack 1, win 502, length 73
17:04:01.832766 IP 172.17.0.1.80 > 172.17.0.2.49154: Flags [.], ack 74, win 512, length 0
17:04:01.832774 IP 172.17.0.1.80 > 172.17.0.2.49154: Flags [P.], seq 1:1449, ack 74, win 512, length 1448
17:04:01.832785 IP 172.17.0.2.49154 > 172.17.0.1.80: Flags [.], ack 1449, win 502, length 0
17:04:01.832793 IP 172.17.0.2.49154 > 172.17.0.1.80: Flags [F.], seq 74, ack 1449, win 502, length 0
17:04:01.832807 IP 172.17.0.1.80 > 172.17.0.2.49154: Flags [F.], seq 1449, ack 75, win 512, length 0
17:04:01.832815 IP 172.17.0.2.49154 > 172.17.0.1.80: Flags [.], ack 1450, win 502, length 0
10 packets captured
10 packets received by filter
0 packets dropped by kernel

Bộ lọc tcp port 80 yêu cầu tcpdump chỉ thu thập các gói trên cổng TCP 80, là cổng tiêu chuẩn cho lưu lượng HTTP.

Bạn cũng có thể lọc theo địa chỉ IP:

sudo tcpdump -i any -c 10 host 172.17.0.2

Thao tác này sẽ thu thập 10 gói đầu tiên đến hoặc đi từ địa chỉ IP 172.17.0.2.

Ngoài ra, bạn có thể kết hợp nhiều bộ lọc:

sudo tcpdump -i any -c 10 tcp port 80 and host 172.17.0.2

Thao tác này sẽ thu thập 10 gói đầu tiên là lưu lượng HTTP đến hoặc đi từ địa chỉ IP 172.17.0.2.

Tóm tắt

Trong lab này, bạn sẽ học cách sử dụng lệnh tcpdump, một công cụ phân tích gói mạng mạnh mẽ, để thu thập và phân tích lưu lượng mạng trên một hệ thống Linux. Bạn sẽ bắt đầu bằng cách cài đặt gói tcpdump trên một container Ubuntu 22.04 Docker. Sau đó, bạn sẽ học cách thu thập lưu lượng mạng bằng tcpdump, bao gồm lọc dữ liệu đã thu thập dựa trên các tiêu chí khác nhau như địa chỉ IP nguồn và đích, số cổng và giao thức. Đến cuối lab này, bạn sẽ có hiểu biết vững chắc về cách tận dụng tcpdump để khắc phục sự cố mạng, phân tích bảo mật và hiểu hành vi mạng.

400+ câu lệnh phổ biến trong Linux