Tổng quan về netstat
trong Linux.
netstat
là một công cụ dòng lệnh phổ biến được sử dụng để giám sát các kết nối mạng trong hệ thống Linux. Nó cung cấp thông tin chi tiết về các kết nối mạng đang hoạt động (cả kết nối đang mở và đang nghe), các giao thức mạng đang sử dụng, bảng định tuyến, thống kê giao diện mạng và nhiều thông tin khác liên quan đến mạng.
netstat
là một công cụ mạnh mẽ, giúp quản trị viên hệ thống giám sát và xử lý các vấn đề mạng, phát hiện lưu lượng truy cập bất thường, kiểm tra trạng thái các dịch vụ và chẩn đoán sự cố. Tuy nhiên, trong một số bản phân phối Linux hiện đại, netstat
đã dần được thay thế bởi các công cụ như ss
hoặc ip
, mặc dù nó vẫn còn rất hữu dụng và được sử dụng rộng rãi.
Nội dung chi tiết về netstat
.
netstat
có thể được sử dụng với nhiều tùy chọn để cung cấp các thông tin khác nhau. Dưới đây là một số tùy chọn chính:
-a
: Hiển thị tất cả các kết nối mạng (cả đang lắng nghe và đã thiết lập).-n
: Hiển thị địa chỉ IP và số cổng thay vì tên miền hoặc tên cổng, giúp thông tin rõ ràng và dễ đọc hơn, đặc biệt khi bạn cần chẩn đoán chi tiết.-p
: Hiển thị thông tin về quá trình đang sử dụng kết nối đó (PID và tên tiến trình).-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 lắng nghe (các cổng đang mở để chờ kết nối).-s
: Hiển thị thống kê các gói tin theo giao thức (TCP, UDP, ICMP, IP, v.v.).
Sự khác nhau giữa 2 lệnh thường dùngnetstat -anp
và netstat -tulnp
.
Hai lệnh netstat -anp
và netstat -tulnp
có sự khác nhau chủ yếu ở mục đích sử dụng. Lệnh netstat -anp
cung cấp cái nhìn tổng quan về tất cả các kết nối mạng hiện có và tiến trình tương ứng, trong khi netstat -tulnp
tập trung vào việc hiển thị các cổng đang mở và dịch vụ lắng nghe, hữu ích trong việc kiểm tra bảo mật và cấu hình mạng.
netstat -anp
:- Mục đích: Hiển thị tất cả các kết nối mạng (bao gồm cả kết nối đang lắng nghe và đã thiết lập) với địa chỉ IP, số cổng (dùng tùy chọn
-n
để không phân giải tên miền hoặc cổng), và thông tin về tiến trình (PID) sử dụng kết nối đó (dùng-p
). - Ứng dụng: Thường được sử dụng để kiểm tra trạng thái toàn bộ các kết nối đang hoạt động trên hệ thống, rất hữu ích khi bạn muốn giám sát chi tiết hệ thống và phát hiện lưu lượng bất thường hoặc kiểm tra kết nối mạng của một ứng dụng cụ thể.
- Mục đích: Hiển thị tất cả các kết nối mạng (bao gồm cả kết nối đang lắng nghe và đã thiết lập) với địa chỉ IP, số cổng (dùng tùy chọn
netstat -tulnp
:- Mục đích: Hiển thị chi tiết các cổng đang lắng nghe (sockets đang mở) cho cả giao thức TCP (
-t
) và UDP (-u
). Tùy chọn-l
chỉ tập trung vào các cổng đang lắng nghe (thay vì các kết nối đã thiết lập),-n
không phân giải tên miền và cổng, và-p
hiển thị PID/tên tiến trình. - Ứng dụng: Đây là lệnh quan trọng để kiểm tra danh sách các dịch vụ đang mở cổng trên hệ thống (đặc biệt là kiểm tra an ninh và dịch vụ không mong muốn). Sử dụng
-tulnp
cho phép bạn nhanh chóng thấy được dịch vụ nào đang mở cổng nào, và liệu có cổng nào đang mở mà không nên có.
- Mục đích: Hiển thị chi tiết các cổng đang lắng nghe (sockets đang mở) cho cả giao thức TCP (
Các trạng thái kết nối TCP.
Dưới đây là danh sách các trạng thái (state) của kết nối TCP trong netstat
, cùng với ý nghĩa và tác dụng của từng trạng thái.
LISTEN: Ứng dụng đang lắng nghe các kết nối đến trên một cổng nhất định. Đây là trạng thái của một dịch vụ đang chờ một yêu cầu kết nối mới từ một máy khác.
tcp 0 0 0.0.0.0:5000 0.0.0.0:* LISTEN 4198/apache2
Dòng này cho biết dịch vụ Apache đang lắng nghe trên cổng 5000 trên tất cả các địa chỉ IP.
ESTABLISHED: Kết nối đã được thiết lập thành công giữa hai bên (client và server), và hai bên có thể truyền dữ liệu qua lại.
tcp6 0 0 172.16.12.243:5000 172.16.11.121:65325 ESTABLISHED 11785/apache
Đây là kết nối đã thiết lập giữa máy chủ (IP 172.16.12.243, cổng 5000) và máy khách (IP 172.16.11.121, cổng 65325), và cả hai đang truyền dữ liệu.
TIME_WAIT: Trạng thái TIME_WAIT cho chúng ta biết rằng kết nối đã được đóng từ phía của máy chủ, nhưng nó vẫn duy trì kết nối trong một khoảng thời gian ngắn để đảm bảo rằng mọi gói tin trễ hoặc các vấn đề về mạng đã được xử lý hoàn toàn. Trạng thái này quan trọng để đảm bảo không có dữ liệu nào bị mất trong quá trình đóng kết nối, đồng thời ngăn chặn các kết nối cũ vô tình ảnh hưởng đến các kết nối mới trên cùng một cổng.
tcp 0 0 172.16.12.214:5000 172.16.11.113:25933 TIME_WAIT -
Điều này cho thấy kết nối từ 172.16.12.214:5000 đến 172.16.11.113:25933 đã được đóng và đang chờ thời gian để hoàn tất việc ngắt kết nối an toàn.
CLOSE_WAIT: Phía máy chủ đã nhận được yêu cầu đóng kết nối từ phía client, nhưng chưa hoàn tất quá trình đóng kết nối. Tức là phía máy chủ đang chờ để gửi xác nhận rằng nó đã xử lý xong và chuẩn bị đóng kết nối.
tcp6 0 0 172.16.12.243:5000 172.16.11.115:65200 CLOSE_WAIT 11785/apache
- FIN_WAIT_1:
- Ý nghĩa: Máy chủ đã gửi yêu cầu đóng kết nối (FIN) và đang chờ xác nhận từ phía client rằng yêu cầu đóng này đã được nhận.
- FIN_WAIT_2:
- Ý nghĩa: Máy chủ đã nhận được xác nhận từ client về yêu cầu đóng kết nối, nhưng client vẫn có thể đang gửi dữ liệu cuối cùng trước khi đóng hoàn toàn.
- CLOSING:
- Ý nghĩa: Cả hai phía (client và server) đã gửi yêu cầu đóng kết nối nhưng vẫn chưa hoàn tất việc đóng. Trạng thái này xuất hiện khi cả hai phía đồng thời gửi yêu cầu đóng (FIN).
- LAST_ACK:
- Ý nghĩa: Máy chủ đã gửi yêu cầu đóng kết nối và đang chờ nhận xác nhận từ phía client rằng nó đã nhận yêu cầu này trước khi đóng hoàn toàn.
- SYN_SENT:
- Ý nghĩa: Máy khách đã gửi yêu cầu bắt đầu kết nối (SYN) và đang chờ phản hồi từ phía máy chủ để thiết lập kết nối.
- SYN_RECV:
- Ý nghĩa: Máy chủ đã nhận yêu cầu kết nối từ client và đang chờ phản hồi từ client để hoàn tất quá trình thiết lập kết nối.
- CLOSED:
- Ý nghĩa: Kết nối đã hoàn toàn đóng, và không còn hoạt động nào đang diễn ra trên kết nối này.
Những trạng thái này giúp quản trị viên mạng theo dõi được trạng thái của các kết nối trong hệ thống, từ đó xử lý các sự cố và tối ưu hóa việc quản lý kết nối.
Kết luận.
netstat
là một công cụ quan trọng trong việc quản lý và giám sát mạng trên hệ thống Linux. Nó cho phép bạn xem thông tin chi tiết về các kết nối mạng và các cổng đang mở, giúp bạn dễ dàng kiểm tra và phát hiện sự cố, cũng như quản lý bảo mật mạng. Mặc dù các công cụ mới như ss
và ip
đang dần thay thế netstat
, nhưng lệnh này vẫn là một phần không thể thiếu trong việc giám sát mạng của nhiều quản trị viên hệ thống.