Macld Linux Câu lệnh netstat hữu ích

Câu lệnh netstat hữu ích

Netstat — Công cụ quan trọng trong chẩn đoán mạng cho DevOps / System Admin

Khi bạn là người vận hành server, làm DevOps hay System Admin, đôi khi gặp trường hợp như: khởi chạy service thành công, nhưng khi truy cập vào server qua IP từ trình duyệt, trang web lại không hiện lên được. Lúc ấy bạn sẽ tự hỏi:

  • Service có thực sự đang chạy không?

  • Port đúng như mong muốn đã mở và lắng nghe chưa?

  • Có ứng dụng nào khác đang chiếm port đó không?

  • Cấu hình firewall hoặc route có vấn đề gì không?

Một trong những tool mà mình dùng để kiểm tra các thông tin mạng bên trong server là netstat. Nó giúp hiển thị những gì đang “diễn ra” bên trong: port, connections, đến từ đâu, đi đâu, ai đang dùng, trạng thái kết nối, …

Dưới đây là các lệnh netstat rất hữu dụng nên biết khi làm việc với Linux.

Giải thích nhanh về netstat

  • netstat là tiện ích dòng lệnh (command-line utility), có mặt gần như trên mọi máy Linux(Library net-tools)

  • Nó cung cấp thông tin về:

    • Các kết nối mạng (TCP, UDP,…), cả đang lắng nghe (LISTEN) lẫn đã thiết lập (ESTABLISHED).

    • Process (PID) nào giữ các kết nối/port đó.

    • Bảng định tuyến (routing), các interface mạng, thống kê gói tin…

      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 chúng ta 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 ta muốn có 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 ta 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, ta 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, ta 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 biết gói tin sẽ được gửi đi đâu.

      netstat -rn

      Kết quả của lệnh này 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, ta 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 (ens33, 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 860/sshd: /usr/sbin 
      tcp6 0 0  :::22      :::*          LISTEN 860/sshd: /usr/sbin
      • 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 3162/nginx: master

      Đ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 0.0.0.0:80   0.0.0.0:* LISTEN 
      tcp 0 0 10.0.0.100:80 10.0.0.1:54866 ESTABLISHED
      tcp 0 0 10.0.0.100:80 10.0.0.1:54865 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ó Destination là 0.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.

      Kernel IP routing table
      Destination Gateway Genmask Flags MSS Window irtt Iface
      0.0.0.0  10.0.0.2 0.0.0.0 UG 0 0 0 ens33
      10.0.0.0  0.0.0.0 255.255.255.0 U 0 0 0 ens33

      Tổng 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 chúng ta 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ả.

      Tham khảo tại đây

Leave a Reply

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *