Linux được trang bị rất nhiều tiện ích mạng để bạn lựa chọn. Tcpdump là một công cụ mạng mạnh mẽ có thể nắm bắt và phân tích lưu lượng mạng nếu bạn cần để khắc phục lỗi mạng trên Linux.
Hãy cùng thực hành với lệnh tcpdump và khám phá cách sử dụng lệnh này để nắm bắt lưu lượng mạng.
Cài đặt tcpdump trong Linux
Tcpdump thường được cài đặt sẵn với tất cả các bản phân phối Linux chính thống và những lựa chọn thay thế dựa trên bảo mật. Vì vậy, bạn sẽ có thể sử dụng nó ngay lập tức bằng cách nhập tcpdump với tiền tố sudo.
Trong trường hợp bạn không thể chạy lệnh tcpdump và bị kẹt ở lỗi "tcpdump: command not found", hãy cùng tìm hiểu cách cài đặt tcpdump trên máy Linux.
Để cài đặt tcpdump, hãy kích hoạt terminal và chạy lệnh tương ứng với bản phân phối Linux mà bạn hiện đang sử dụng:
Trên các dẫn xuất Debian/Ubuntu, hãy chạy:
sudo pacman -S tcpdump
Trên các hệ thống dựa trên Arch, hãy chạy:
sudo pacman -S tcpdump
Để cài đặt tiện ích tcpdump trên Fedora, CentOS và RHEL, hãy phát hành lệnh sau:
sudo dnf install tcpdump
Lưu ý rằng nếu bạn được yêu cầu cài đặt libcap, hãy nhập Yes hoặc Y vì đây là phần dependency cốt lõi, nếu không có thì tcpdump sẽ từ chối khởi động. Thao tác này sẽ cài đặt tiện ích tcpdump và giải quyết lỗi "command not found".
Bây giờ, tcpdump đã được cài đặt trên hệ thống của bạn, hãy cùng khám phá các tùy chọn và chức năng khác nhau mà nó cung cấp.
Nắm bắt lưu lượng mạng với tcpdump
Tcpdump cung cấp rất nhiều flag để sửa đổi việc thực thi của nó nhưng nó cũng có thể được chạy như một lệnh độc lập. Tuy nhiên, chạy tcpdump mà không có bất kỳ flag hoặc đối số nào sẽ bỏ qua tiềm năng đầy đủ của nó. Tốt hơn hết là bạn nên sử dụng một vài flag để điều chỉnh việc thực thi và đầu ra khi cần thiết.
Nhập lệnh này để theo dõi các quá trình truyền trong mạng bằng tcpdump:
sudo tcpdump
Bây giờ, tcpdump sẽ bắt đầu tự động nắm bắt các gói mạng cho đến khi tín hiệu ngắt được gửi bằng phím tắt Ctrl + Z, phá vỡ quá trình theo cách thủ công. Để giới hạn tổng số gói được nắm bắt, hãy sử dụng flag -c và nhập giới hạn gói mong muốn bên cạnh:
sudo tcpdump -c 5
Nếu không thể hiểu đầu ra ngay bây giờ, trước tiên, bạn cần phải làm quen với định dạng đầu ra tcpdump.
Kiểm tra interface mạng khả dụng với tcpdump
Theo mặc định, tcpdump nắm bắt lưu lượng truy cập từ bất kỳ interface mạng nào có sẵn. Nếu có nhiều interface mạng đang hoạt động, bạn có thể muốn xác định interface mạng mà từ đó tcpdump sẽ nắm bắt các gói tin. Để bắt đầu tcpdump trên một interface cụ thể, trước tiên bạn sẽ phải tìm hiểu về tên interface
Dưới đây là cách liệt kê tất cả các interface mạng có sẵn với tcpdump:
sudo tcpdump -D
Hoặc, bạn có thể thêm flag --list-interface vào lệnh:
sudo tcpdump --list-interfaces
Kết quả trả về chứa danh sách tất cả các interface mạng đang hoạt động mà tcpdump có thể lắng nghe. Để cấu hình tcpdump nắm bắt các quá trình truyền từ một interface mạng cụ thể, hãy nhập lệnh sau:
sudo tcpdump -i interface_id
Hoặc, bạn có thể thêm flag --interface vào lệnh:
sudo tcpdump --interface interface_id
Bây giờ, bạn đã nắm bắt được một vài gói tin, hãy nghiên cứu kỹ chúng và tìm hiểu cách bạn có thể điều chỉnh đầu ra để dễ đọc hơn.
Khám phá các bộ lọc tcpdump
Tcpdump có khả năng thu hút một lượng lớn lưu lượng truy cập trong một lần chạy. Tình trạng quá tải thông tin như vậy có thể khiến bạn chệch hướng khi điều tra hoặc khắc phục sự cố với host hoặc giao thức mạng cụ thể.
Đây là nơi mà các bộ lọc tcpdump phát huy tác dụng. Bạn có thể nối lệnh tcpdump với một số flag nhất định để lọc ra lưu lượng mạng và nắm bắt các gói tin cụ thể. Sau đó, bạn có thể lưu trữ các gói tin này, sau đó phân tích chúng để tìm ra gốc rễ của bất kỳ vấn đề nào liên quan đến mạng. Hãy cùng tìm hiểu cách sử dụng bộ lọc trong tcpdump.
Lọc gói dựa trên giao thức mạng đang được sử dụng
Để lọc các gói được truyền qua một giao thức cụ thể, hãy nhập tên giao thức bằng lệnh tcpdump và nó sẽ chỉ nắm bắt các gói truyền qua giao thức mạng đã xác định.
Ví dụ, để nắm bắt các gói dựa trên ICMP, bạn chỉ cần đính kèm icmp vào cuối lệnh tcpdump. Quá trình này cũng giống như vậy nếu bạn chỉ muốn nắm bắt các gói UDP hoặc TCP.
sudo tcpdump -c 5 icmp
Lệnh này sẽ chỉ trả về đầu ra nếu có sự trao đổi dữ liệu thông qua giao thức ICMP.
Lọc gói dựa trên host
Bạn có thể cấu hình tcpdump để nắm bắt các gói liên quan đến một host duy nhất với tham số host. Điều này đặc biệt hữu ích khi tất cả các hệ thống trong mạng của bạn đang hoạt động ngoại trừ một hệ thống. Bộ lọc này cho phép bạn thực hiện điều tra được nhắm mục tiêu và tăng tốc quy trình xử lý sự cố tổng thể vì bạn không bị phân tâm bởi dữ liệu không cần thiết.
Để nắm bắt các gói liên quan đến một host cụ thể, hãy xác định địa chỉ mạng của host với tham số host:
sudo tcpdump -c 5 host 192.168.2.1
Tương tự như bộ lọc giao thức mạng, lệnh này sẽ chỉ trả về đầu ra nếu bất kỳ quá trình truyền đang diễn ra nào có liên quan đến host đã xác định.
Lọc gói dựa trên cổng hoạt động
Tcpdump được trang bị một tham số cho phép bạn lọc lưu lượng mạng và chỉ nắm bắt các gói được truyền đến hoặc từ một cổng cụ thể.
Để nắm bắt các gói đến từ một cổng cụ thể, hãy gắn flag cổng vào lệnh tcpdump và xác định số cổng bên cạnh nó. Ví dụ, để nắm bắt mọi lưu lượng HTTP đến hoặc đi, hãy xác định cổng 80:
sudo tcpdump -c 5 port 80
Tcpdump sẽ lắng nghe trên cổng 80, chờ truyền HTTP. Khi phát hiện các gói HTTP trong mạng, nó sẽ nắm bắt chúng.
Kết hợp các bộ lọc với nhau để phân loại nâng cao
Các phần trước đã thảo luận về cách bạn có thể lọc lưu lượng dựa trên cổng, giao thức hoặc host, nhưng nếu bạn muốn nắm bắt lưu lượng truy cập từ một cổng của một host cụ thể bằng một giao thức mạng cụ thể thì sao? Chà, bạn thật may mắn vì điều này là có thể, do khả năng sử dụng các toán tử logic với lệnh tcpdump.
Để nắm bắt các gói từ một host riêng lẻ bằng cách sử dụng cổng 443, hãy sử dụng lệnh sau:
sudo tcpdump -c 5 host 192.168.2.1 and port 443
Kiểm tra nội dung của các gói đã nắm bắt
Theo mặc định, tcpdump hiển thị các tiêu đề của một gói trong đầu ra. Mặc dù trong hầu hết các trường hợp như vậy là quá đủ, nhưng đôi khi, bạn có thể muốn hoặc cần xem xét sâu hơn dữ liệu đã thu thập. Bạn có thể chuyển một số tham số nhất định bằng lệnh tcpdump để kiểm tra nội dung của gói đã nắm bắt.
Đây là cách xem nội dung của các gói:
sudo tcpdump -c 5 -x
Lệnh này trả về phiên bản hex của nội dung trong một gói được nắm bắt. Nếu bạn muốn xem dạng ASCII của dữ liệu, bạn có thể chuyển tham số -A với:
sudo tcpdump -A
Lưu đầu ra tcpdump vào một file
Giống như hầu hết các công cụ dòng lệnh Linux khác, bạn có thể lưu trữ kết quả đầu ra do tcpdump tạo ra thành một file để tham chiếu sau này.
Điều này có thể được thực hiện bằng cách thêm flag -w vào lệnh. Sau khi thực thi, tcpdump sẽ lưu trữ dữ liệu đã nắm bắt vào một file .pcap để sau này có thể phân tích bằng tcpdump hoặc các công cụ giám sát mạng khác như Wireshark.
Nhập lệnh này để lưu đầu ra lệnh tcpdump của bạn thành một file:
sudo tcpdump -w capture.pcap
Để đọc file .pcap, bạn có thể sử dụng tcpdump với tham số -r:
sudo tcpdump -r capture.pcap
Linux cung cấp rất nhiều công cụ mạng có thể giải quyết mọi vấn đề mạng miễn là nó thuộc về mặt phần mềm. Biết cách sử dụng một số công cụ mạng tốt nhất trong Linux chắc chắn sẽ rất hữu ích, cho dù bạn là một sysadmin quản lý mạng để kiếm sống hay chỉ là một người dùng Linux hàng ngày.
Vì danh sách thực tế các lệnh mạng có sẵn có thể quá khó hiểu, đây là danh sách một số công cụ mạng Linux quan trọng nhất mà bạn nên biết.