Kiểm tra Port trên Ubuntu hiệu quả với ss, netstat và ufw

1. Giới thiệu

Trong quản lý mạng và vận hành máy chủ, việc nắm rõ trạng thái của các cổng (port) là vô cùng quan trọng. Đặc biệt khi sử dụng Ubuntu, việc kiểm tra các cổng đang mở và các tiến trình đang sử dụng sẽ giúp tăng cường bảo mật và khắc phục sự cố nhanh chóng.

Bài viết này sẽ hướng dẫn chi tiết cách sử dụng các lệnh cơ bản và công cụ để kiểm tra cổng trên Ubuntu. Chúng tôi cung cấp các bước thực hành dễ hiểu, phù hợp cho người dùng từ cấp độ mới bắt đầu đến trung cấp, vì vậy hãy đọc đến cuối nhé.

侍エンジニア塾

2. Cổng (Port) là gì?

2.1 Khái niệm cơ bản về cổng

Cổng là một giao diện truyền thông ảo mà máy tính hoặc thiết bị mạng sử dụng để gửi và nhận dữ liệu. Cụ thể, khi nhiều ứng dụng cùng lúc giao tiếp trên cùng một địa chỉ IP, cổng đóng vai trò nhận diện và phân phối dữ liệu cho từng ứng dụng một cách chính xác.

Ví dụ, máy chủ web sử dụng cổng 80 để xử lý giao tiếp HTTP. Nếu cùng máy chủ đó cho phép kết nối SSH, nó sẽ sử dụng cổng 22. Như vậy, các dịch vụ được phân biệt bằng số cổng, do đó việc kiểm tra trạng thái cổng là điều cần thiết trong quản lý mạng.

2.2 Các loại và vai trò của cổng

Các cổng được phân loại thành 3 nhóm chính:

  1. Cổng Well-known (0〜1023)
  • Đây là các số cổng được chuẩn hóa trên toàn cầu và được gán cho các dịch vụ được sử dụng rộng rãi.
    • Ví dụ:
    • HTTP: 80
    • HTTPS: 443
    • SSH: 22
  1. Cổng đã đăng ký (1024〜49151)
  • Các cổng này được sử dụng bởi các ứng dụng hoặc công ty cụ thể.
    • Ví dụ:
    • MySQL: 3306
    • PostgreSQL: 5432
  1. Cổng động (49152〜65535)
  • Các cổng này được các ứng dụng sử dụng tạm thời và thường dùng trong giao tiếp phía máy khách (client).

Việc hiểu rõ phân loại này giúp bạn dễ dàng xác định mục đích sử dụng của từng số cổng.

3. Cách kiểm tra cổng trên Ubuntu

Trên Ubuntu, bạn có thể sử dụng nhiều công cụ khác nhau để kiểm tra trạng thái của các cổng. Dưới đây, chúng tôi sẽ giải thích 4 lệnh thực tế nhất.

3.1 Sử dụng lệnh ss

Lệnh ss là một công cụ quản lý mạng mạnh mẽ được sử dụng trong các hệ thống Linux. Nó hoạt động nhanh chóng và cung cấp thông tin kết nối chi tiết.

Lệnh cơ bản:

sudo ss -ltn

Giải thích các tùy chọn:

  • -l: Chỉ hiển thị các cổng đang ở trạng thái lắng nghe (listening).
  • -t: Chỉ hiển thị các giao thức TCP.
  • -n: Hiển thị địa chỉ và số cổng dưới dạng số.

Ví dụ đầu ra:

State        Recv-Q Send-Q      Local Address:Port          Peer Address:Port  
LISTEN       0      128             0.0.0.0:22                  0.0.0.0:*

3.2 Sử dụng lệnh netstat

Lệnh netstat là một công cụ quản lý mạng đã được sử dụng từ lâu. Mặc dù hiện đang dần được thay thế bởi ss, nhưng nó vẫn khả dụng trên nhiều hệ thống.

Lệnh cơ bản:

sudo netstat -ltn

Ví dụ đầu ra:

Proto Recv-Q Send-Q Local Address              Foreign Address            State      
tcp        0      0 0.0.0.0:22                 0.0.0.0:* LISTEN

3.3 Sử dụng lệnh lsof

Lệnh lsof rất hữu ích để xác định tiến trình nào đang sử dụng một cổng cụ thể.

Kiểm tra cổng cụ thể:

sudo lsof -i :80

Ví dụ đầu ra:

COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
apache2   1234  www    4u   IPv4  12345 0t0      TCP *:http (LISTEN)

3.4 Sử dụng lệnh nmap

nmap là một công cụ chuyên dùng để quét mạng và cũng được sử dụng để kiểm tra bảo mật.

Quét localhost:

sudo nmap localhost

Ví dụ đầu ra:

Starting Nmap 7.80 ( https://nmap.org ) at 2024-12-21 18:00 JST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00013s latency).
PORT    STATE SERVICE
22/tcp  open  ssh
80/tcp  open  http

Lưu ý:

  • Các cổng đang mở và tên dịch vụ tương ứng sẽ được liệt kê.
  • Bạn cũng có thể quét cổng của máy chủ bên ngoài, nhưng cần phải có sự cho phép trước.

4. Kiểm tra cài đặt tường lửa

Trên Ubuntu, việc sử dụng tường lửa là điều phổ biến để tăng cường bảo mật. Đặc biệt, ufw (Uncomplicated Firewall) được sử dụng rộng rãi như một công cụ quản lý đơn giản nhưng mạnh mẽ. Trong phần này, chúng tôi sẽ giải thích cách sử dụng ufw để kiểm tra trạng thái mở/đóng của cổng và cách thay đổi cài đặt nếu cần.

4.1 Kiểm tra trạng thái ufw

Lệnh kiểm tra trạng thái tường lửa:

sudo ufw status verbose

Ví dụ đầu ra:

Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing)
New profiles: skip
To              Action    From
--              ------    ----
22/tcp          ALLOW     Anywhere
80/tcp          ALLOW     Anywhere

Giải thích:

  • Status: active: Tường lửa đang được bật.
  • Logging: on: Ghi nhật ký được bật, các hoạt động của tường lửa được ghi lại.
  • Default: deny (incoming), allow (outgoing): Cài đặt mặc định là từ chối kết nối đến và cho phép kết nối đi.
  • ALLOW: Cho phép các cổng hoặc dịch vụ cụ thể (ví dụ: SSH và HTTP).

Lưu ý:
Nếu tường lửa đang tắt (Status: inactive), hãy bật nó lên bằng lệnh sau:

sudo ufw enable

4.2 Cho phép hoặc chặn cổng

Lệnh cho phép cổng:

sudo ufw allow 22/tcp

Giải thích:

  • Cho phép kết nối TCP đến cổng 22 (SSH).

Lệnh chặn cổng:

sudo ufw deny 80/tcp

Giải thích:

  • Chặn truy cập đến cổng 80 (HTTP).

Ví dụ chỉ cho phép từ một địa chỉ IP cụ thể:

sudo ufw allow from 192.168.1.100 to any port 22 proto tcp

Giải thích:

  • Chỉ cho phép kết nối SSH từ địa chỉ IP 192.168.1.100.

4.3 Đặt lại và xem xét lại cài đặt

Nếu bạn muốn khởi tạo lại cài đặt và xây dựng lại, hãy chạy lệnh sau:

sudo ufw reset

Lệnh này sẽ xóa tất cả các quy tắc và đưa cài đặt tường lửa về trạng thái mặc định. Khi đã thực hiện thay đổi, hãy luôn kiểm tra lại các quy tắc.

5. Ví dụ thực tế: Kiểm tra trạng thái của một cổng cụ thể

Tại đây, chúng tôi sẽ hướng dẫn các bước cụ thể để kiểm tra trạng thái của SSH (cổng 22) làm ví dụ.

5.1 Kiểm tra trạng thái cổng

Ví dụ lệnh:

sudo ss -ltn | grep ':22'

Ví dụ đầu ra:

LISTEN       0      128      0.0.0.0:22            0.0.0.0:*

Lưu ý:

  • Nếu kết quả đầu ra hiển thị LISTEN, có nghĩa là cổng đang ở trạng thái lắng nghe và chờ kết nối.
  • 0.0.0.0 có nghĩa là cài đặt chấp nhận kết nối từ tất cả các địa chỉ IP.

5.2 Kiểm tra tiến trình

Ví dụ lệnh:

sudo lsof -i :22

Ví dụ đầu ra:

COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd      1234  root   3u   IPv4  56789 0t0      TCP *:ssh (LISTEN)

Lưu ý:

  • sshd là tiến trình daemon quản lý kết nối SSH.
  • Bạn có thể dừng hoặc khởi động lại tiến trình bằng cách xác định ID tiến trình (PID).

Ví dụ dừng tiến trình:

sudo kill 1234

5.3 Ví dụ khắc phục sự cố

Vấn đề: Các biện pháp khắc phục khi cổng không mở hoặc không thể kết nối.

Các bước:

  1. Kiểm tra cài đặt tường lửa.
sudo ufw status verbose
  1. Nếu cổng bị chặn bởi tường lửa, hãy thêm cài đặt cho phép.
sudo ufw allow 22/tcp
  1. Kiểm tra trạng thái dịch vụ và khởi động lại nếu cần.
sudo systemctl restart ssh

6. Mở/đóng cổng và bảo mật

Quản lý cổng liên quan trực tiếp đến bảo mật mạng. Dưới đây là các điểm quan trọng về việc mở/đóng cổng và quản lý bảo mật.

6.1 Đóng các cổng không cần thiết

Các cổng không sử dụng nên được đóng để tránh rủi ro bị kẻ tấn công lợi dụng.

Ví dụ: Đóng cổng 80

sudo ufw deny 80/tcp

6.2 Phòng chống quét cổng (Port Scan)

Quét cổng là kỹ thuật mà kẻ tấn công sử dụng để tìm kiếm các lỗ hổng trong hệ thống. Để ngăn chặn điều này, các biện pháp sau đây rất hiệu quả:

  1. Tăng cường quy tắc tường lửa:
sudo ufw default deny incoming
  1. Giám sát nhật ký:
sudo tail -f /var/log/ufw.log
  1. Cài đặt công cụ phát hiện quét cổng:
    Sử dụng các công cụ như fail2ban để tự động chặn các truy cập trái phép.

7. Tổng kết

Bài viết này đã giải thích chi tiết các bước và cách sử dụng lệnh cụ thể để kiểm tra cổng trên Ubuntu. Ngoài ra, chúng tôi cũng đã trình bày chi tiết về quản lý tường lửa bằng ufw và các điểm quan trọng về biện pháp bảo mật.

7.1 Tóm tắt các điểm chính

  • Khái niệm cơ bản và các loại cổng
    Cổng là lối ra vào của giao tiếp, được phân loại thành cổng well-known, cổng đã đăng ký và cổng động.
  • Cách sử dụng các lệnh kiểm tra cổng
  • Bạn có thể sử dụng các lệnh như ss, netstat, lsof, nmap để kiểm tra trạng thái cổng và tiến trình.
  • Cách quản lý tường lửa
  • Có thể sử dụng ufw để đặt quy tắc cho phép hoặc chặn cổng, từ đó tăng cường bảo mật.
  • Tầm quan trọng của các biện pháp bảo mật
  • Duy trì môi trường mạng an toàn bằng cách đóng các cổng không cần thiết, giám sát nhật ký và cài đặt các công cụ chống tấn công.

7.2 Ứng dụng trong tương lai

Quản lý cổng là nền tảng của bảo mật mạng. Hãy tận dụng những kiến thức đã học trong bài viết này để duy trì môi trường máy chủ an toàn.

FAQ: Các câu hỏi thường gặp về kiểm tra cổng trên Ubuntu

Q1. Tôi phải làm gì nếu cổng không mở trên Ubuntu?

A:
Nếu cổng không mở, hãy thử các bước sau:

  1. Kiểm tra cài đặt tường lửa:
sudo ufw status verbose

Nếu cổng bị chặn bởi tường lửa, hãy cho phép nó bằng lệnh sau:

sudo ufw allow [số cổng]/tcp
  1. Kiểm tra xem dịch vụ mục tiêu có đang chạy không:
sudo systemctl status [tên dịch vụ]

Ví dụ: Với SSH, dùng sudo systemctl status ssh
Nếu cần, khởi động lại bằng lệnh sau:

sudo systemctl restart [tên dịch vụ]
  1. Kiểm tra xem dịch vụ có đang sử dụng đúng cổng không:
    Kiểm tra tệp cấu hình (ví dụ: /etc/ssh/sshd_config cho SSH) để đảm bảo số cổng chính xác được chỉ định.

Q2. Sự khác biệt giữa ssnetstat là gì?

A:
ssnetstat đều là các công cụ để kiểm tra kết nối mạng, nhưng có những điểm khác biệt sau:

  • ss:
  • Công cụ được khuyến nghị trên các hệ thống Linux hiện đại.
  • Hoạt động nhanh hơn và có thể hiển thị thông tin chi tiết hơn.
  • Ví dụ: sudo ss -ltn
  • netstat:
  • Công cụ đã được sử dụng từ lâu nhưng đang dần không được khuyến nghị.
  • Tương thích tốt hơn với các hệ thống Linux cũ.
  • Ví dụ: sudo netstat -ltn

Trên các hệ thống mới, nên sử dụng ss.

Q3. Có cách nào để phát hiện quét cổng không?

A:
Để phát hiện quét cổng, bạn có thể sử dụng các phương pháp sau:

  1. Kiểm tra nhật ký tường lửa:
sudo tail -f /var/log/ufw.log

Kiểm tra xem có địa chỉ IP đáng ngờ hoặc các lần thử kết nối thường xuyên không.

  1. Cài đặt công cụ IDS/IPS:
  • Sử dụng các công cụ như fail2ban hoặc Snort để tự động chặn các kết nối trái phép.
  1. Quét máy chủ của bạn bằng nmap:
sudo nmap localhost

Kiểm tra xem có cổng không cần thiết nào đang mở không và đóng chúng lại.

Q4. Làm cách nào để kiểm tra tiến trình đang sử dụng một cổng cụ thể?

A:
Bạn có thể sử dụng lệnh lsof để kiểm tra tiến trình đang sử dụng một cổng cụ thể:

sudo lsof -i :[số cổng]

Ví dụ: Với cổng 80

sudo lsof -i :80

Ví dụ đầu ra:

COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
apache2   1234  www    4u   IPv4  12345 0t0      TCP *:http (LISTEN)

Q5. Làm cách nào để chỉ cho phép một địa chỉ IP cụ thể bằng ufw?

A:
Để chỉ cho phép kết nối từ một địa chỉ IP cụ thể, hãy sử dụng lệnh sau:

sudo ufw allow from [địa chỉ IP] to any port [số cổng] proto tcp

Ví dụ: Cho phép kết nối đến cổng 22 (SSH) từ địa chỉ IP 192.168.1.100:

sudo ufw allow from 192.168.1.100 to any port 22 proto tcp

Q6. Tôi phải làm gì nếu muốn thay đổi số cổng?

A:
Để thay đổi số cổng, bạn cần chỉnh sửa tệp cấu hình của dịch vụ. Dưới đây là ví dụ về SSH:

  1. Chỉnh sửa tệp cấu hình:
sudo nano /etc/ssh/sshd_config
  1. Tìm cài đặt Port và đặt số cổng mới:
Port 2222
  1. Khởi động lại dịch vụ SSH:
sudo systemctl restart ssh
  1. Cho phép cổng mới trong tường lửa:
sudo ufw allow 2222/tcp

Q7. Tôi có thể cho phép nhiều cổng cùng lúc không?

A:
Có, bạn có thể cho phép nhiều cổng cùng lúc. Sử dụng các phương pháp sau:

  1. Để cho phép một dải cổng cụ thể:
sudo ufw allow 1000:2000/tcp

Giải thích: Cho phép các cổng trong dải từ 1000 đến 2000.

  1. Để cho phép từng cổng riêng lẻ:
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp