Lệnh nmap trong Linux — Quét cổng và kiểm tra dịch vụ mạng

Bạn đã bao giờ rơi vào tình huống cần kiểm tra xem một hệ thống VPS của mình đang mở những cổng nào để đảm bảo an toàn chưa nhỉ? Với tư cách là một Senior System Admin, mình từng phải đối mặt với những cuộc tấn công dò quét cổng liên tục, và lúc đó, việc hiểu rõ nmap là gì trở nên quan trọng hơn bao giờ hết để thiết lập tường lửa kịp thời. Vậy nmap Linux thực chất là một công cụ quyền năng như thế nào? Hiểu một cách đơn giản, nmap là một công cụ quét mạng mạnh mẽ dùng để khám phá các thiết bị và dịch vụ trong mạng máy tính. Trong bài viết này, mình sẽ đồng hành cùng bạn để tìm hiểu cách dùng nmap một cách chi tiết nhất. Tất nhiên, chúng ta sẽ cùng nhau khám phá cách quét cổng máy chủ một cách chuyên nghiệp để tối ưu hóa bảo mật cho hệ thống của bạn, đúng không nào?

Cần chuẩn bị gì trước khi dùng lệnh nmap?

  • Quyền người dùng: Để thực hiện các kỹ thuật quét nâng cao (như SYN scan), bạn cần có quyền root hoặc sử dụng sudo.
  • Hệ điều hành hỗ trợ: Linux (Ubuntu, Debian, CentOS, RHEL, Fedora, Arch Linux), macOS và Windows.
  • Cài đặt gói phần mềm: - Trên Ubuntu/Debian: sudo apt update && sudo apt install nmap - Trên CentOS/RHEL/Fedora: sudo dnf install nmap - Trên macOS (sử dụng Homebrew): brew install nmap

Cú pháp lệnh nmap là gì?

Lệnh nmap hỗ trợ nhiều dạng cấu trúc khác nhau trên các hệ điều hành dựa trên Linux/Unix.

nmap [Scan Type] [Options] {target specification}
nmap [Options] {target specification}
# Tài liệu tùy chọn lệnh nmap ```html

Các tùy chọn thường dùng của lệnh nmap là gì?

Lệnh nmap cung cấp các tùy chọn được phân loại theo chức năng quét mạng, định dạng output, kỹ thuật quét và tối ưu hóa hiệu suất.

Tùy chọn ngắn Tùy chọn dài Mô tả
-p --ports nmap -p 80,443 chỉ định các cổng cần quét. Chấp nhận danh sách cổng, dải cổng (1-1000) hoặc -p- để quét toàn bộ 65535 cổng.
-sS nmap -sS thực hiện quét TCP SYN (stealth scan). Cách quét nhanh và ít bị phát hiện so với kết nối hoàn chỉnh.
-sT nmap -sT thực hiện quét kết nối TCP (connect scan). Hoàn thành ba bước bắt tay TCP và được ghi lại trong nhật ký hệ thống.
-sU nmap -sU thực hiện quét UDP. Sử dụng cho các dịch vụ UDP như DNS, SNMP, DHCP.
-sA nmap -sA thực hiện quét ACK. Dùng để xác định quy tắc tường lửa thay vì xác định trạng thái cổng.
-O nmap -O bật phát hiện hệ điều hành. Yêu cầu quyền root và có thể xác định hệ điều hành chạy trên mục tiêu.
-sV nmap -sV bật phát hiện phiên bản dịch vụ. Thăm dò các cổng mở để xác định tên và phiên bản dịch vụ.
-A nmap -A bật phát hiện hệ điều hành, phiên bản dịch vụ, quét script và traceroute. Tương đương với -O -sV -sC --traceroute.
-sn nmap -sn thực hiện quét ping để phát hiện máy chủ mà không quét cổng. Hữu ích để tìm máy hoạt động trên mạng.
-Pn nmap -Pn bỏ qua bước phát hiện máy chủ và coi tất cả mục tiêu đã online. Dùng khi tường lửa chặn ping.
-sC nmap -sC chạy các script quét mặc định. Tương đương với --script=default để thu thập thông tin bổ sung.
--script nmap --script smb-os-discovery chạy các NSE script được chỉ định. Cho phép thực thi các script tùy chỉnh để phát hiện lỗ hổng.
-oN nmap -oN output.txt xuất kết quả ở định dạng bình thường vào tệp. Dễ đọc nhưng mất một số thông tin so với định dạng XML.
-oX nmap -oX output.xml xuất kết quả ở định dạng XML vào tệp. Có cấu trúc và dễ phân tích bằng các công cụ khác.
-oG nmap -oG output.txt xuất kết quả ở định dạng grepable vào tệp. Tối ưu cho việc tìm kiếm và phân tích bằng grep.
-oA nmap -oA output xuất kết quả ở cả ba định dạng (bình thường, XML, grepable) với cùng một tên tệp cơ bản.
-v --verbose nmap -v tăng mức độ chi tiết của output. Có thể dùng nhiều lần (-vv, -vvv) để tăng thêm thông tin.
-d --debug nmap -d bật chế độ gỡ lỗi để in các thông báo chẩn đoán. Hữu ích khi khắc phục sự cố quá trình quét.
-T nmap -T4 đặt mẫu thời gian (-T0 tới -T5). T0 chậm nhất và ít bị phát hiện, T5 nhanh nhất nhưng dễ gây lỗi.
--top-ports nmap --top-ports 100 quét các cổng phổ biến nhất. Chỉ quét số lượng cổng được chỉ định thay vì toàn bộ cổng.
-F --fast nmap -F quét nhanh bằng cách chỉ kiểm tra 100 cổng phổ biến nhất. Giảm thời gian quét so với quét toàn bộ.
-r nmap -r quét cổng theo thứ tự tuần tự thay vì ngẫu nhiên. Có thể bị phát hiện dễ dàng hơn bởi tường lửa.
--reason nmap --reason hiển thị lý do tại sao nmap kết luận cổng ở trạng thái nhất định. Hữu ích để hiểu kết quả quét.

xem thêm: Networking and Communication

Sử dụng lệnh nmap như thế nào trong các tình huống thực tế?

Phần dưới đây trình bày các kịch bản quét mạng phổ biến mà quản trị viên hệ thống và chuyên gia bảo mật thường xuyên thực hiện.

nmap là gì? [Quét các cổng đang mở cơ bản]

nmap 192.168.1.1
Starting Nmap 7.80 ( https://nmap.org )
Nmap scan report for 192.168.1.1
Host is up (0.0020s latency).
Not shown: 998 closed tcp ports
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
Discovered open ports: 22/tcp, 80/tcp

Lệnh quét các cổng phổ biến nhất trên một địa chỉ IP mục tiêu. Trong thực tế, đây là bước đầu tiên để xác định các dịch vụ đang chạy trên một máy chủ.

nmap -sV là gì? [Xác định phiên bản dịch vụ đang chạy]

nmap -sV 192.168.1.1
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.5
80/tcp open  http    Apache httpd 2.4.41 ((Ubuntu))

Lệnh thực hiện kiểm tra phiên bản cụ thể của các dịch vụ đang hoạt động. Trên môi trường production, kỹ thuật này giúp quản trị viên đánh giá xem các dịch vụ có đang chạy phiên bản lỗi thời hoặc chứa lỗ hổng bảo mật hay không.

nmap -p- là gì? [Quét toàn bộ 65535 cổng]

nmap -p- 192.168.1.1
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
443/tcp  open  https
8080/tcp open  http-proxy
... (các cổng khác)

Lệnh quét tất cả các cổng từ 1 đến 65535 thay vì chỉ quét các cổng mặc định. Trong các cuộc kiểm tra xâm nhập (pentest), việc sử dụng tham số này giúp phát hiện các dịch vụ chạy trên các cổng không tiêu chuẩn nhằm tránh bị bỏ sót.

nmap -sn là gì? [Quét phát hiện host trong mạng]

nmap -sn 192.168.1.0/24
Nmap scan report for 192.168.1.1
Host is up (0.00050s latency).
Nmap scan report for 192.168.1.5
Host is up (0.00045s latency).
Nmap done: 256 IP addresses scanned in 2.10 seconds

Lệnh thực hiện quét ping để xác định các thiết bị đang hoạt động trong dải mạng mà không quét cổng. Đây là phương pháp tối ưu để lập bản đồ thiết bị trong mạng nội bộ một cách nhanh chóng và tiết kiệm tài nguyên.

nmap -A là gì? [Quét chuyên sâu toàn diện]

nmap -A 192.168.1.1
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.2p1
| ssh-hostkey: 
|   256 1a:2b:3c... (ED25519)
|_  OS detection: Linux 5.x

Lệnh kết hợp nhiều tính năng bao gồm phát hiện hệ điều hành, phiên bản dịch vụ, quét scripttraceroute. Trong các kịch bản automation hoặc audit bảo mật chuyên sâu, tham số này cung cấp cái nhìn tổng thể và chi tiết nhất về mục tiêu.

Các lỗi thường gặp khi sử dụng lệnh nmap là gì?

Trong quá trình quét mạng thực tế, người dùng thường gặp phải các vấn đề liên quan đến quyền hạn, cấu hình firewall hoặc tốc độ quét.

Lỗi không thể thực hiện quét SYN scan do thiếu quyền root

nmap -sS 192.168.1.1
Exception: Failed to open device eth0

Lệnh nmap yêu cầu quyền quản trị cao nhất để tạo các gói tin raw socket phục vụ cho kỹ thuật SYN scan.

Lỗi không tìm thấy mục tiêu hoặc sai địa chỉ IP

nmap 192.168.1.256
Failed to resolve "192.168.1.256"

Địa chỉ IP không hợp lệ hoặc sai định dạng khiến nmap không thể khởi tạo quá trình quét mục tiêu.

Lỗi bị chặn bởi tường lửa (Firewall) của mục tiêu

nmap -Pn 10.0.0.5
Note: Host seems down. If it is really up, try -Pn

Khi mục tiêu cấu hình chặn các gói tin ICMP (ping), nmap sẽ mặc định cho rằng máy chủ đang ngoại tuyến và dừng quét.

Lỗi quá tải băng thông hoặc bị chặn do quét quá nhanh

nmap -T5 192.168.1.1
Service Scan Error: Connection timed out

Sử dụng template tốc độ cao (T5) có thể khiến các thiết bị mạng hoặc IDS/IPS phát hiện và ngắt kết nối để bảo vệ hệ thống.

Quy trình thực tế dùng nmap trong kiểm tra an ninh mạng?

Trong một dự án đánh giá lỗ hổng hệ thống, nmap đóng vai trò là công cụ quét và nhận diện các dịch vụ đang hoạt động trên hạ tầng mạng.

Bước 1: Xác định các thiết bị đang hoạt động trong mạng

nmap -sn 192.168.1.0/24

Lệnh thực hiện quét Ping sweep để liệt kê danh sách các địa chỉ IP đang trực tuyến trong dải mạng mà không quét chi tiết các cổng.

Bước 2: Quét các cổng dịch vụ phổ biến trên máy chủ mục tiêu

nmap 192.168.1.15

Sau khi xác định được IP mục tiêu, lệnh này cho phép bạn kiểm tra trạng thái (open, closed, filtered) của 1000 cổng phổ biến nhất.

Bước 3: Kiểm tra phiên bản dịch vụ và hệ điều hành

nmap -sV -O 192.168.1.15

Lệnh kết hợp cho phép bạn xác định chính xác phiên bản của các dịch vụ đang chạy và suy luận hệ điều hành đang sử dụng để tìm kiếm lỗ hổng tương ứng.

Bước 4: Quét lỗ hổng bằng script chuyên dụng

nmap --script vuln 192.168.1.15

Sử dụng thư viện Nmap Scripting Engine (NSE) để tự động kiểm tra các lỗ hổng bảo mật đã biết trên các dịch vụ vừa tìm thấy.

Trong môi trường quản trị VPS, việc sử dụng nmap không kiểm soát dẫn đến việc địa chỉ IP bị các tường lửa hoặc hệ thống IDS/IPS chặn truy cập. Các kỹ sư thường gặp lỗi không quét được port do thiếu quyền root, yêu cầu cần thực hiện lệnh sudo nmap -sS để kích hoạt chế độ SYN scan. Khi triển khai kiểm tra bảo mật trên VPS, việc quét toàn bộ dải IP mà không giới hạn tốc độ khiến tài nguyên hệ thống bị quá tải. Các trường hợp quét qua các firewall phức tạp đòi hỏi sử dụng tham số -Pn để bỏ qua bước kiểm tra ICMP ping. Việc sử dụng nmap sai cấu hình timing (ví dụ: -T5) gây ra tình trạng nhiễu kết nối mạng, ảnh hưởng trực tiếp đến các dịch vụ đang vận hành trên VPS. Người dùng cần kết hợp nmap với các tham số phân đoạn gói tin để tránh bị phát hiện bởi các hệ thống giám sát tự động.

Những câu hỏi thường gặp về lệnh nmap?

Dưới đây là các tình huống phổ biến mà người dùng thường gặp phải khi thực hiện quét mạng bằng nmap.

Làm thế nào để quét một địa chỉ IP duy nhất để kiểm tra các cổng đang mở?

Bạn có thể sử dụng lệnh quét cơ bản để xác định các cổng dịch vụ đang hoạt động trên một mục tiêu cụ thể.

nmap 192.168.1.1
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

Cách quét toàn bộ dải địa chỉ IP trong một mạng nội bộ?

Để kiểm tra sự hiện diện của các thiết bị trong một phân đoạn mạng, bạn có thể sử dụng cú pháp dải IP hoặc CIDR.

nmap 192.168.1.0/24
Nmap scan report for 192.168.1.1
Host is up (0.0020s latency).
...

Làm thế nào để phát hiện phiên bản dịch vụ và hệ điều hành đang chạy?

Sử dụng tham số -sV để xác định phiên bản dịch vụ và -O để cố gắng nhận diện hệ điều hành của mục tiêu.

nmap -sV -O 192.168.1.1
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.5
80/tcp open  http    Apache httpd 2.4.41

Cách quét nhanh các cổng phổ biến để tiết kiệm thời gian?

Thay vì quét toàn bộ 65535 cổng, bạn có thể giới hạn số lượng cổng quét để tăng tốc độ thực hiện.

nmap --top-ports 100 192.168.1.1
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

Làm thế nào để thực hiện quét ẩn danh (Stealth Scan)?

Tham số -sS cho phép thực hiện kiểu quét SYN, giúp giảm khả năng bị ghi lại trong các log ứng dụng thông thường bằng cách không hoàn tất kết nối TCP.

sudo nmap -sS 192.168.1.1
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

Cách xuất kết quả quét ra một tệp tin để lưu trữ?

Bạn có thể sử dụng tham số -oN để lưu kết quả quét dưới định dạng văn bản bình thường vào một tệp tin.

nmap 192.168.1.1 -oN scan_result.txt
Nmap scan report for 192.168.1.1
...

Nmap là một công cụ quét mạng và kiểm tra bảo mật mạnh mẽ, giúp bạn khám phá toàn diện các thiết bị cũng như dịch vụ đang hoạt động trong hệ thống. Bạn có thể sử dụng tham số -sV để kiểm tra chi tiết phiên bản dịch vụ hoặc dùng -O để xác định hệ điều hành của mục tiêu một cách nhanh chóng, đúng không? Việc nắm vững các tùy chọn này chắc chắn sẽ giúp quá trình quản trị mạng của bạn trở nên vô cùng hiệu quả và an toàn hơn rất nhiều. Hy vọng những chia sẻ trên sẽ giúp ích cho hành trình chinh phục Linux của bạn. Chúc bạn thành công!