Kiểm tra port đang mở trên Linux là một trong những công việc đầu tiên cần làm khi ta muốn sửa lỗi kết nối mạng hay cấu hình firewall cho hệ thống. Bài viết này sẽ hướng dẫn các cách kiểm tra port đang mở trên Linux nhanh nhất.
Những điểm chính
- Định nghĩa port đang mở trên Linux: Giải thích khái niệm port đang mở và vai trò của chúng trong hệ thống Linux.
- Cách kiểm tra port đang mở trên Linux: Hướng dẫn các phương pháp kiểm tra port đang mở bằng nhiều lệnh khác nhau như ss, lsof, nmap…
- Biết được Vietnix – VPS bảo mật mạnh mẽ, tốc độ nhanh và an toàn.
Port đang mở trên Linux là gì?
Port đang mở trên Linux là các cổng mạng đang lắng nghe (listening) để nhận kết nối từ các dịch vụ hoặc ứng dụng. Bạn có thể xem danh sách port đang mở trên hệ thống bằng cách truy vấn stack mạng với các câu lệnh như ss, netstat hoặc lsof. Mỗi port đang nghe có thể được mở hoặc đóng (lọc) bằng một tường lửa.

Nói chung, port đang mở là một cổng mạng chấp nhận các package từ bên ngoài. Ví dụ, web server sử dụng port 80 và 443 để người dùng truy cập qua trình duyệt. Tuy nhiên, các port đang mở có thể bị hacker khai thác, gây rủi ro bảo mật. Do đó, chỉ nên mở port cần thiết và đóng các port không sử dụng.
Cách kiểm tra port đang mở trên Linux
Kiểm tra bằng lệnh nmap
Nmap là một công cụ quét mạng vô cùng mạnh mẽ, có khả năng quét các host đơn lẻ hoặc cả những mạng lớn. Nmap chủ yếu được sử dụng để kiểm tra bảo mật hoặc pentest. Đây cũng là lý do nmap nên là ưu tiên hàng đầu khi bạn cần kiểm tra port đang mở trên Linux. Bên cạnh đó, nmap còn có thể phát hiện địa chỉ Mac, loại hệ điều hành, phiên bản kernel,…
Câu lệnh dưới đây giúp xác định port nào đang lắng nghe các kết nối TCP từ mạng:
sudo nmap -sT -p- 10.0.2.15

Trong đó:
- -sT: Dùng để quét các cổng TCP tương ứng.
- -p-: Quét tất cả các cổng.
Kiểm tra bằng Bash Pseudo Device
Một cách khác để kiểm tra port mở trên Linux là dùng pseudo-device Bash /dev/tcp/.. hoặc /dev/udp/… Khi chạy lệnh trên /dev/$PROTOCOL/$HOST/$PORT, Bash sẽ mở kết nối đến host và port chỉ định. Dưới đây là lệnh if..else
kiểm tra port 443 trên kernel.org:
if timeout 5 bash -c '</dev/tcp/kernel.org/443 &>/dev/null'
then
echo "Port is open"
else
echo "Port is closed"
fi
Kết quả: Ở đoạn code, khi thực hiện kết nối đến một cổng bằng pseudo-device thì thời gian timeout mặc định sẽ rất lớn. Do đó ta dùng lệnh timeout để tự động dừng lệnh sau 5 giây. Nếu kết nối được thiết lập đến kernel.org trên cổng 443 thì câu lệnh sẽ trả về kết quả true.

Để kiểm tra một khoảng port xem có đang mở không, ta có thể dùng vòng lặp for như sau:
for PORT in {20..80}; do
timeout 1 bash -c /"</dev/tcp/10.10.8.8/$PORT &>/dev/null" && echo "port $PORT is open"
done
Sử dụng lệnh netstat để kiểm tra port
Lệnh netstat là lệnh giúp kiểm tra các cổng TCP và UDP đang mở. Để kiểm tra, bạn hãy dùng lệnh:
# netstat -pnltu

Trong đó:
- p: Chỉ ra ID Process được liên kết.
- n: Hiển thị port đang chạy.
- l: Chỉ ra các kết nối TCP.
- u: Chỉ ra kết nối UDP.
Kiểm tra bằng lệnh ss
Lệnh ss được dùng để hiển thị những port đang lắng nghe kết nối, đồng thời còn hiển thị những mạng đang chấp nhận kết nối đến. Ở đây, mình sử dụng lệnh ss
với tùy chọn -ltn
trong lệnh để xem kết quả đầy đủ trên hệ thống:
sudo ss -ltn
Kết quả: Server đang kết nối với port 53, 631 (DNS, Internet Printing Protocol).

Để kiểm tra xem các port tiến trình (process) nào, chèn thêm tùy chọn -p
vào lệnh như sau:
sudo ss -ltnp

Ngoài ra, nếu bạn muốn hiển thị tất cả tcp, udp và process name, hãy chạy lệnh sau:
# ss -lntup

Để hiển thị tất cả các kết nối socket, bạn chỉ cần chạy lệnh ss
mà không kèm tham số.
# ss

Kiểm tra bằng ufw firewall
Khi sử dụng lệnh ss
hoặc nmap
trên hệ thống thì về cơ bản là ta đang bypass tường lửa. Bởi vì những lệnh này chỉ hiển thị xem port nào đang ở trạng thái lắng nghe, và điều này không đồng nghĩa với việc port này đang được mở trên internet vì tường lửa có thể đang chặn kết nối.
Do đó, bạn có thể kiểm tra trạng thái của tường lửa ufw như sau:
sudo ufw status verbose
Kết quả: Bạn sẽ thấy UFW đang chặn kết nối, nên các port không nhận được truy cập dù ss
hiển thị chúng đang lắng nghe.

Bây giờ, bạn có thể thêm ngoại lệ cho những port này như sau:
sudo ufw allow 80/tcp

$ sudo ufw allow 3306/tcp

$ sudo ufw status verbose

Kiểm tra port đang mở bằng lệnh lsof
Lệnh lsof cũng có thể kiểm tra các cổng mở trong Linux. Để xem các cổng, bạn dùng lệnh:
# lsof -i

Để hiển thị các sockets mở, bạn dùng thêm lệnh grep như sau:
# lsof -n -P | grep LISTEN

Nếu bạn muốn hiển thị hết các kết nối TCP, bạn chạy lệnh sau:
# lsof -i tcp

Ngoài ra, bạn có thể sử dụng lệnh sau để hiện thị các kết nối từ UDP:
# lsof -i udp

Kiểm tra port đang mở bằng netcat
Netcat (nc) là công cụ dòng lệnh dùng để đọc, ghi dữ liệu qua TCP/UDP và quét cổng. Ví dụ, để quét các port TCP, bạn dùng lệnh:
nc -z -v localhost 611-631

Trong đó:
-z
: Yêu cầu nc chỉ scan những port đang mở mà không gửi bất kỳ dữ liệu nào.-v
: Hiển thị thông tin ở dạng đầy đủ (verbose).
nc -z -v localhost 1-65535 2>&1 | grep succeeded

nc -z -v -u localhost 1-65535 2>&1 | grep succeeded

Vietnix – VPS bảo mật mạnh mẽ, tốc độ nhanh và an toàn
Dịch vụ VPS tại Vietnix cung cấp giải pháp mạnh mẽ cho các nhu cầu về hiệu suất cao và linh hoạt trong việc mở rộng. Với việc hỗ trợ tối ưu cho nhiều hệ điều hành, từ CentOS, Ubuntu Server, đến các phiên bản Windows Server và Windows cho người dùng, dịch vụ VPS không giới hạn dữ liệu truyền tải, đảm bảo hiệu suất làm việc không bị gián đoạn. Bạn có toàn quyền quản trị để chủ động kiểm soát các hoạt động trên hệ thống.
VPS AMD tại Vietnix nâng cấp hiệu suất lên một tầm cao mới với bộ xử lý AMD EPYC, lý tưởng cho các tác vụ xử lý dữ liệu và tính toán phức tạp. Với công nghệ ảo hóa tối ưu cho Dell Hardware, VPS AMD mang đến khả năng mở rộng dễ dàng và tốc độ vượt trội. Đồng thời, dịch vụ còn sử dụng ổ cứng NVMe Enterprise, dịch vụ này cung cấp tốc độ truy cập siêu nhanh, bảo vệ dữ liệu tối ưu và đáp ứng hoàn hảo các ứng dụng yêu cầu xử lý liên tục và truy vấn database hiệu quả.
Thông tin liên hệ:
- Hotline: 18001093
- Email: sales@vietnix.com.vn
- Địa chỉ: 265 Hồng Lạc, Phường 10, Quận Tân Bình, Thành Phố Hồ Chí Minh.
- Website: https://vietnix.vn/
Qua bài viết này, mình đã cung cấp một số công cụ phổ biến nhất để kiểm tra port đang mở trên Linux, và cụ thể có cả Ubuntu. Ngoài ra vẫn còn nhiều công cụ khác hỗ trợ kiểm tra port như module socket của Python, curl, telnet hay wget.