Cách Kiểm Tra Các Cổng Mở Trên Linux: Hướng Dẫn Đầy Đủ 2026

Terminal Linux hiển thị các cổng mở với lệnh ss và netstat

Biết cách kiểm tra các cổng đang mở trên Linux là kỹ năng căn bản mà bất kỳ ai quản lý server, xử lý sự cố mạng, hay tăng cường bảo mật hệ thống đều cần nắm vững. Một cổng đang mở thực chất là một "cánh cửa" dẫn vào hệ thống của bạn - nếu không biết cửa nào đang mở, bạn không thể bảo vệ chúng đúng cách. Dù bạn đang chạy web server trên Ubuntu, quản lý VPS, hay chẩn đoán lỗi kết nối, việc liệt kê các cổng đang mở giúp bạn thấy rõ hệ thống đang phơi bày gì ra mạng. Bài viết này hướng dẫn bốn phương pháp thực tế, cách lọc kết quả, và cách đóng những cổng không cần thiết.

Điểm chính cần nhớ:

  • Lệnh ss là cách hiện đại và nhanh nhất để liệt kê các cổng đang mở trên Linux.
  • nmap cho phép quét cổng từ góc nhìn bên ngoài, phản ánh đúng những gì kẻ tấn công thực sự nhìn thấy.
  • Dùng lsof để xác định ngay tiến trình nào đang chiếm một cổng cụ thể.
  • Đóng các cổng không cần thiết bằng ufw hoặc iptables là cách trực tiếp nhất để thu hẹp bề mặt tấn công.

Tại sao cần kiểm tra cổng đang mở trên Linux

Mỗi dịch vụ chạy trên máy Linux đều lắng nghe trên một hoặc nhiều cổng. SSH lắng nghe cổng 22, HTTP trên cổng 80, HTTPS trên cổng 443. Nhưng sau nhiều tháng cài đặt và gỡ phần mềm, server thường có những cổng bị bỏ ngỏ mà không ai cố ý cấu hình. Một daemon cơ sở dữ liệu bị quên, đang lắng nghe trên cổng 5432 mà không có quy tắc firewall nào bảo vệ, là rủi ro thực tế đã dẫn đến nhiều vụ rò rỉ dữ liệu.

Kiểm tra các cổng đang mở trên Linux giúp bạn:

  • Kiểm toán xem dịch vụ nào đang thực sự chạy và bị phơi bày ra ngoài.
  • Xử lý sự cố khi một ứng dụng không thể kết nối đến dịch vụ khác.
  • Xác minh rằng các quy tắc firewall đang hoạt động đúng như mong muốn.
  • Chuẩn bị cho một buổi kiểm toán bảo mật hoặc kiểm thử xâm nhập.

Các phương pháp dưới đây bao gồm cả kiểm tra nội bộ (những gì chính máy báo cáo) lẫn quét từ bên ngoài (những gì một máy chủ từ xa có thể thấy). Cả hai góc nhìn đều quan trọng.

Phương pháp 1: Lệnh ss (Hiện đại, khuyên dùng)

Lệnh ss (socket statistics) đã thay thế netstat trên hầu hết các bản phân phối Linux hiện đại. Nó nhanh hơn, chi tiết hơn, và được tích hợp sẵn trong gói iproute2 - vốn được cài mặc định trên Ubuntu, Debian, CentOS và Fedora.

Để liệt kê tất cả các cổng đang mở kèm tên tiến trình, chạy lệnh:

sudo ss -tulnp

Giải thích các tham số:

  • -t - hiển thị socket TCP
  • -u - hiển thị socket UDP
  • -l - chỉ hiển thị socket đang lắng nghe
  • -n - hiển thị số cổng thay vì tên dịch vụ
  • -p - hiển thị tiến trình đang dùng mỗi socket

Ví dụ thực tế: Trên một Ubuntu server mới cài Nginx và PostgreSQL, kết quả đầu ra có thể trông như sau:

Netid  State   Recv-Q  Send-Q  Local Address:Port  Peer Address:Port  Process
tcp    LISTEN  0       128     0.0.0.0:80           0.0.0.0:*          users:(("nginx",pid=1234,fd=6))
tcp    LISTEN  0       128     127.0.0.1:5432       0.0.0.0:*          users:(("postgres",pid=5678,fd=5))
tcp    LISTEN  0       128     0.0.0.0:22           0.0.0.0:*          users:(("sshd",pid=910,fd=3))

Lưu ý rằng PostgreSQL chỉ bind vào 127.0.0.1, nghĩa là không thể truy cập từ bên ngoài. SSH và Nginx bind vào 0.0.0.0, tức là chấp nhận kết nối từ bất kỳ địa chỉ IP nào. Chỉ một dòng kết quả này đã cho bạn biết rất nhiều về mức độ phơi bày của hệ thống.

Để tham khảo đầy đủ tất cả tùy chọn của ss, xem trang man chính thức của lệnh ss.

Phương pháp 2: Lệnh netstat (Cũ nhưng vẫn phổ biến)

Lệnh netstat thuộc gói net-tools cũ hơn. Nó không còn được cài mặc định trên nhiều bản phân phối, nhưng vẫn được dùng rộng rãi và đáng biết - đặc biệt khi làm việc với các hệ thống cũ.

Cài đặt nếu cần:

sudo apt install net-tools   # Debian/Ubuntu
sudo yum install net-tools   # CentOS/RHEL

Để liệt kê các cổng đang mở trên Linux bằng netstat:

sudo netstat -tulnp

Các tham số có ý nghĩa giống hệt với ss. Định dạng đầu ra hơi khác nhưng cung cấp cùng thông tin cốt lõi: giao thức, địa chỉ cục bộ, cổng, và tiến trình sở hữu.

Một hạn chế thực tế: trên các server rất bận với hàng nghìn kết nối, netstat có thể chậm hơn đáng kể so với ss. Với các tác vụ hàng ngày trên một server thông thường, sự khác biệt này không đáng kể.

Phương pháp 3: Quét cổng với nmap (Góc nhìn từ bên ngoài)

Các công cụ trên cho bạn thấy những gì máy báo cáo từ bên trong. nmap tiếp cận theo hướng khác - nó quét cổng qua mạng, mô phỏng những gì kẻ tấn công bên ngoài hoặc một máy khách từ xa thực sự nhìn thấy. Điều này rất quan trọng vì firewall có thể đang chặn một cổng mà ss vẫn hiển thị là đang lắng nghe.

Cài đặt nmap:

sudo apt install nmap   # Debian/Ubuntu
sudo yum install nmap   # CentOS/RHEL

Quét một server từ máy khác trong cùng mạng:

nmap -sT -p 1-1024 192.168.1.10

Để quét 1000 cổng phổ biến nhất kèm phát hiện phiên bản dịch vụ:

nmap -sV 192.168.1.10

Tham số -sV cố gắng phát hiện phiên bản phần mềm đang chạy trên mỗi cổng mở. Điều này hữu ích để xác định các dịch vụ lỗi thời cần được vá lỗi.

Lưu ý quan trọng: Chỉ chạy nmap trên các server bạn sở hữu hoặc đã được cấp phép rõ ràng để quét. Quét hệ thống của bên thứ ba mà không có sự cho phép có thể vi phạm pháp luật tại khu vực của bạn.

Nếu bạn cần kiểm tra xem một cổng cụ thể có thể truy cập từ bên ngoài mạng mà không cần cài nmap, công cụ Port Checker miễn phí của chúng tôi xử lý điều đó ngay lập tức - không cần cài đặt hay cấu hình gì cả.

Phương pháp 4: Lệnh lsof (Ánh xạ tiến trình theo cổng)

Lệnh lsof (list open files) xem các socket mạng như là file, phù hợp với triết lý "mọi thứ đều là file" của Linux. Nó đặc biệt hữu ích khi bạn cần trả lời câu hỏi: "Tiến trình nào đang dùng cổng 8080?"

Liệt kê tất cả kết nối mạng:

sudo lsof -i

Tìm tiến trình đang dùng một cổng cụ thể (ví dụ: cổng 3000):

sudo lsof -i :3000

Lệnh này đặc biệt tiện lợi khi ứng dụng Node.js của một developer đang chiếm một cổng và bạn cần xác định rồi kill tiến trình đó trước khi khởi động lại dịch vụ.

Cách lọc kết quả theo cổng, TCP hoặc UDP

Kết quả thô từ bất kỳ công cụ nào trong số này đều có thể rất nhiều thông tin. Dưới đây là các mẫu lọc hữu ích nhất:

Chỉ hiển thị các cổng TCP đang lắng nghe (ss):

sudo ss -tlnp

Chỉ hiển thị các cổng UDP (ss):

sudo ss -ulnp

Kiểm tra xem một cổng cụ thể có đang mở không (grep với ss):

sudo ss -tulnp | grep :443

Lọc theo cổng với nmap:

nmap -p 80,443,8080 192.168.1.10

Các mẫu này bao phủ phần lớn nhu cầu lọc hàng ngày. Để xử lý sự cố HTTP cụ thể trên cổng 80, xem Hướng dẫn xử lý sự cố HTTP trên cổng 80.

Nếu bạn đang dùng Windows và cần hướng dẫn tương tự, xem Hướng dẫn đầy đủ kiểm tra cổng đang mở trên Windows 2026.

Cách đóng hoặc chặn cổng với ufw hoặc iptables

Tìm ra một cổng đang mở mà bạn không cần mới chỉ là một nửa công việc. Dưới đây là cách đóng nó bằng hai công cụ firewall phổ biến nhất trên Linux.

Dùng ufw (Uncomplicated Firewall) - Khuyên dùng cho Ubuntu

Chặn lưu lượng đến trên cổng 8080:

sudo ufw deny 8080/tcp

Chỉ cho phép SSH và HTTPS, từ chối tất cả còn lại:

sudo ufw default deny incoming
sudo ufw allow 22/tcp
sudo ufw allow 443/tcp
sudo ufw enable

Kiểm tra trạng thái firewall hiện tại:

sudo ufw status verbose

Dùng iptables - Để kiểm soát nâng cao

Chặn toàn bộ lưu lượng đến trên cổng 3306 (MySQL):

sudo iptables -A INPUT -p tcp --dport 3306 -j DROP

Lưu các quy tắc để chúng tồn tại sau khi khởi động lại:

sudo iptables-save | sudo tee /etc/iptables/rules.v4

Để tham khảo sâu hơn về cú pháp và thứ tự quy tắc iptables, tài liệu chính thức của Netfilter là nguồn tham khảo uy tín nhất.

Mẹo: Chặn một cổng bằng ufw hoặc iptables không dừng dịch vụ đang chạy trên đó - nó chỉ ngăn các kết nối bên ngoài tiếp cận dịch vụ. Nếu bạn muốn dừng hoàn toàn dịch vụ, dùng sudo systemctl stop servicenamesudo systemctl disable servicename.

Kết luận

Kiểm tra các cổng đang mở trên Linux không đòi hỏi công cụ phức tạp hay chuyên môn sâu. Lệnh ss cho bạn cái nhìn nội bộ nhanh chóng và đáng tin cậy. nmap cho thấy những gì thế giới bên ngoài có thể tiếp cận. lsof xác định chính xác tiến trình nào đang sở hữu một cổng. Và ufw hoặc iptables cho phép bạn đóng bất kỳ thứ gì không nên bị phơi bày. Thực hiện các kiểm tra này thường xuyên - đặc biệt sau khi cài phần mềm mới hoặc thay đổi cấu hình mạng - là một trong những thói quen đơn giản nhất bạn có thể xây dựng để giữ cho Linux server của mình an toàn. Hãy bắt đầu ngay với sudo ss -tulnp và xem server của bạn đang thực sự phơi bày những gì.

Công cụ Port Checker miễn phí - kiểm tra cổng có đang mở trên Linux server của bạn không

Kiểm tra bất kỳ cổng nào trên Linux server của bạn - Ngay lập tức

Không chắc một cổng có thực sự truy cập được từ bên ngoài không? Công cụ Port Checker miễn phí của chúng tôi quét server của bạn từ góc nhìn bên ngoài trong vài giây - không cần cài đặt, không cần cấu hình.

Dùng thử công cụ Port Checker miễn phí →

FAQ - Câu hỏi thường gặp

Chạy sudo ss -tulnp trong terminal. Lệnh này dùng ss hiện đại để hiển thị tất cả các cổng TCP và UDP đang lắng nghe cùng với tên tiến trình. Nó nhanh hơn netstat và có sẵn mặc định trên hầu hết các bản phân phối Linux hiện tại bao gồm Ubuntu và Debian.

Cả hai lệnh đều hiển thị cổng đang mở và thông tin socket, nhưng ss là phiên bản thay thế hiện đại của netstat. Nó đọc dữ liệu trực tiếp từ kernel, giúp nó nhanh hơn và chính xác hơn trên các hệ thống bận. netstat yêu cầu gói net-tools riêng biệt, vốn không còn được cài mặc định trên nhiều bản phân phối.

Dùng nmap -p PORT TARGET_IP từ một máy khác trong mạng. Để kiểm tra nhanh từ bên ngoài mà không cần cài gì, hãy dùng công cụ kiểm tra cổng trên web. Cách này kiểm tra xem cổng có thể truy cập từ bên ngoài không, có tính đến các quy tắc firewall mà các công cụ nội bộ như ss không phản ánh được.

Dùng sudo lsof -i :PORT hoặc sudo ss -tulnp | grep :PORT. Cả hai lệnh đều hiển thị tên tiến trình và PID liên quan đến cổng đó. Phương pháp lsof đặc biệt rõ ràng vì nó liệt kê tên lệnh, PID và người dùng theo định dạng dễ đọc.

Không. Chặn một cổng bằng ufw hoặc iptables ngăn các kết nối bên ngoài tiếp cận dịch vụ, nhưng bản thân dịch vụ vẫn tiếp tục chạy. Để dừng hoàn toàn, dùng sudo systemctl stop servicename. Để xóa vĩnh viễn, cũng chạy sudo systemctl disable servicename để ngăn nó khởi động lại sau khi reboot.