Tất tần tật câu lệnh netstat hữu ích

Anh em làm DevOps/system trong công việc hàng ngày, chắc hẳn đã từng gặp tình huống: deploy một ứng dụng web mới lên server, systemctl start báo thành công, nhưng khi mở trình duyệt truy cập vào địa chỉ IP thì lại nhận được thông báo “This site can’t be reached”.

Lúc này, một loạt câu hỏi sẽ hiện ra: Liệu có phải do firewall? Service đã thực sự chạy chưa? Hay port đang bị một ứng dụng khác chiếm dụng?

Để trả lời những câu hỏi này một cách hệ thống, chúng ta cần một công cụ để thấy những gì đang diễn ra bên trong mạng của server. netstat chính là công cụ kinh điển và hiệu quả cho công việc này. Có thể nói là cái thứ đầu tiên xuất hiện trong đầu mình khi vấn đề sảy ra luôn, cứ netstat đã tính sau :))

019962ce-1d6f-7998-a0c6-298acd8304f5

Nestat là gì? các lệnh netstat hữu dụng

netstat (network statistics) là một tiện ích dòng lệnh có sẵn trên hầu hết các hệ điều hành Linux. Nó cung cấp thông tin chi tiết về các kết nối mạng, bảng định tuyến, thống kê interface, và hơn thế nữa.

Hãy xem nó như một công cụ chẩn đoán, giúp ta thấy được:

  • Những port nào đang mở và ở trạng thái lắng nghe (listening).
  • Process nào đang sử dụng port đó.
  • Các kết nối nào đang được thiết lập (established).

Dưới đây là các câu lệnh netstat hữu ích nhất mà bạn nên biết.

1. Xem các port đang listening

Đây là lệnh bạn sẽ dùng thường xuyên nhất để kiểm tra xem dịch vụ của mình đã chạy và sẵn sàng nhận kết nối hay chưa.

netstat -tuln

Giải thích:

  • -t: Hiển thị các kết nối TCP.
  • -u: Hiển thị các kết nối UDP.
  • -l: Chỉ hiển thị các socket đang ở trạng thái LISTEN.
  • -n: Hiển thị địa chỉ IP và số hiệu port (dạng số), không phân giải tên miền. Lệnh sẽ chạy nhanh hơn.

2. Xác định process đang sử dụng port

Khi cần biết chính xác process nào đang chiếm một port cụ thể, hãy thêm option -p.

netstat -tulpn
  • -p: Hiển thị Process ID (PID) và tên của process sở hữu socket.

3. Xem toàn bộ các socket đang hoạt động

Khi bạn muốn có một cái nhìn tổng quan nhất về tất cả hoạt động mạng, bao gồm cả các port đang lắng nghe (LISTEN) và các kết nối đã được thiết lập (ESTABLISHED), hãy thêm option -a.

netstat -a

Lệnh này sẽ liệt kê tất cả các socket TCP, UDP và cả Unix sockets. Nó hữu ích khi bạn muốn rà soát nhanh mọi thứ mà không cần bộ lọc cụ thể.

4. Lọc riêng các kết nối TCP

Trong nhiều trường hợp, bạn chỉ quan tâm đến các giao thức hướng kết nối như HTTP, SSH, hoặc FTP, vốn đều sử dụng TCP. Để lọc riêng các kết nối này và làm cho kết quả gọn gàng hơn, hãy dùng lệnh:

netstat -tn

Option -t chỉ hiển thị TCP và -n giúp hiển thị địa chỉ IP/port thay vì phân giải tên miền.

5. Lọc riêng các kết nối UDP

Tương tự, để kiểm tra các dịch vụ sử dụng giao thức không hướng kết nối (connectionless) như DNS, DHCP, hoặc NTP, bạn có thể lọc riêng kết nối UDP bằng option -u.

netstat -un

6. Kiểm tra bảng định tuyến (Routing Table)

Đây là một lệnh cực kỳ quan trọng để chẩn đoán các vấn đề về kết nối liên mạng (ví dụ: server không thể truy cập Internet). Nó hiển thị route table của kernel, cho bạn biết gói tin sẽ được gửi đi đâu.

netstat -rn

Kết quả của lệnh này sẽ giúp bạn xác nhận default gateway đã được cấu hình đúng hay chưa. Đây là cổng mặc định cho tất cả traffic không có định tuyến cụ thể trong mạng local.

7. Xem thống kê chi tiết của các giao thức mạng

Để đi sâu hơn vào việc chẩn đoán, bạn có thể xem các số liệu thống kê cho từng giao thức (IP, TCP, UDP, ICMP) với option -s.

netstat -s

Lệnh này sẽ cung cấp các thông tin như tổng số gói tin đã gửi/nhận, số gói tin bị lỗi, số lần kết nối được thiết lập… rất hữu ích để tìm ra các vấn đề tiềm ẩn về hiệu năng hoặc lỗi đường truyền.

8. Xem thông tin các interface mạng

Để xem danh sách các interface mạng (eth0, lo,…) cùng với thống kê về lưu lượng dữ liệu trên từng interface, bạn có thể dùng option -i.

netstat -i

Kết quả sẽ hiển thị các thông số như MTU (Maximum Transmission Unit) và số lượng gói tin nhận (RX) và gửi (TX) thành công hoặc bị lỗi trên mỗi interface.

Các tình huống áp dụng thực tế

Kiểm tra dịch vụ SSH

Để đảm bảo server cho phép kết nối SSH, ta kiểm tra port 22:

netstat -tulpn | grep 22

Một kết quả tốt sẽ tương tự như sau:

tcp   0  0 0.0.0.0:22   0.0.0.0:* LISTEN   1234/sshd
  • 0.0.0.0:22: Dịch vụ đang lắng nghe trên port 22 của tất cả các interface mạng.
  • LISTEN: Trạng thái cho thấy dịch vụ đã sẵn sàng nhận kết nối mới.
  • 1234/sshd: Process sshd với PID là 1234 đang quản lý port này.

Nếu bạn không thể SSH vào server, lệnh này sẽ giúp xác nhận liệu dịch vụ SSH có đang chạy hay không.

Kiểm tra Web Server (HTTP/HTTPS)

Quay lại vấn đề ở đầu bài. Sau khi khởi động Nginx hoặc Apache, hãy dùng lệnh sau để xác thực:

netstat -tulpn | grep 80

Kết quả mong đợi:

tcp   0  0 0.0.0.0:80   0.0.0.0:* LISTEN   4567/httpd

Điều này xác nhận rằng web server của bạn đang hoạt động và lắng nghe trên port 80.

Tiếp theo, khi có người dùng truy cập, bạn có thể kiểm tra các kết nối đã được thiết lập:

netstat -an | grep 80

Bạn sẽ thấy các dòng có trạng thái ESTABLISHED, ví dụ:

tcp   0  0 192.168.1.10:80   192.168.1.5:50000   ESTABLISHED
  • LISTEN có thể hiểu là “cửa hàng đã mở cửa”.
  • ESTABLISHED có nghĩa là “đang có khách hàng giao dịch tại quầy”.

Kiểm tra các kết nối đang hoạt động

Để có cái nhìn tổng quan về các kết nối TCP đang hoạt động trên server, sử dụng lệnh:

netstat -tn

Kết quả sẽ liệt kê các kết nối, bao gồm IP nguồn (Foreign Address) và IP đích (Local Address), giúp bạn biết được ai đang kết nối đến server của mình.

Kiểm tra Default Gateway

Khi server mất kết nối Internet, một trong những bước đầu tiên là kiểm tra route table:

netstat -rn

Hãy tìm dòng có Destination0.0.0.0. Gateway được chỉ định ở dòng này chính là đích đến cho tất cả traffic không có định tuyến cụ thể. Nếu thông tin này sai, server sẽ không thể kết nối ra ngoài mạng local.

Lời kết

netstat là một công cụ mạnh mẽ và cần thiết trong bộ công cụ của bất kỳ ai làm việc với Linux. Nắm vững các câu lệnh trên sẽ giúp bạn nhanh chóng xác định và xử lý các vấn đề liên quan đến kết nối mạng một cách hiệu quả.

Nếu chưa từng dùng thì bạn hãy dành chút thời gian mở terminal và tự mình kiểm tra xem server đang có những kết nối nào nhé.

Chia sẻ bài viết:
Theo dõi
Thông báo của
0 Góp ý
Được bỏ phiếu nhiều nhất
Mới nhất Cũ nhất
Phản hồi nội tuyến
Xem tất cả bình luận