Cách kiểm tra các Port đang mở trong VPS Linux

Tác giả: VPS chính hãng 23 tháng 04, 2023

Kiểm tra các port (cổng) đang mở trong Linux là một trong những biện pháp bảo mật sau khi mua VPS Linux. Quản trị viên VPS Linux nên làm quen với cách kiểm tra các port đang mở. Bài viết này hướng dẫn cách kiểm tra các port đang mở trong Linux thông qua dòng lệnh.

Port mở (Open Port) là gì?

Port (cổng) bao gồm một chuỗi số từ 0 đến 65535. Trong đó Listen port là cổng mạng nơi chương trình nghe và sẵn sàng nhận các gói từ xa. Ví dụ: khi bạn sử dụng máy chủ web như Nginx hoặc Apache, máy chủ web có nghĩa vụ xử lý yêu cầu của người dùng đang tìm kiếm một trang web cụ thể trong trình duyệt. Open port hay port mở được sử dụng để chỉ số cổng TCP hoặc UDP được định cấu hình. Ngược lại, một port từ chối kết nối hoặc bỏ qua tất cả các gói hướng đến nó được gọi là cổng đóng.

Do đó, để xử lý yêu cầu của người dùng, một cổng (ví dụ: cổng 80) được mở cho dịch vụ máy chủ web, Internet và bất kỳ ai (ngoại trừ IPS bị chặn) đều có thể truy cập các trang web được lưu trữ trên máy chủ web bằng trình duyệt của họ. Vì vậy cổng 80 là cổng mở mà người quản trị hệ thống Linux phải biết khi các cổng này được mở. Các open port là những lỗ hổng bảo mật tiềm ẩn có thể bị tấn công. Quản trị viên hệ thống Linux nên xác định các cổng cần thiết cho các dịch vụ quan trọng và đóng các cổng khác.

Open port để chỉ số cổng TCP hoặc UDP được định cấu hình

Open port để chỉ số cổng TCP hoặc UDP được định cấu hình

Bạn có thể sử dụng các lệnh Cat grep để xem số cổng của các chương trình.

cat /etc/services 

grep -w '80/tcp' /etc/services 

grep -w '443/tcp' /etc/services 

grep -E -w '22/(tcp|udp)' /etc/services

Bạn có thể nhận danh sách các listen port  trên hệ thống của mình bằng cách truy vấn ngăn xếp mạng bằng các lệnh như ss, netstat hoặc lsof.

Tại sao nên kiểm tra các Port đang mở trong VPS Linux?

Một trong những nhiệm vụ của người dùng Linux hoặc quản trị viên là biết các port mở của hệ thống Linux để tránh các sự cố bảo mật. Các port mở là các cổng mạng sẵn sàng nhận các gói từ các kết nối bên ngoài. Các cổng mở dễ bị kẻ tấn công xâm nhập, do đó việc liên tục kiểm tra các port đang mở trong Linux là rất hữu ích.

Quản trị viên Linux trong các tình huống khác nhau nên biết các port đang được sử dụng hoặc được gán cho các dịch vụ khác nhau. Như máy chủ web Nginx hoặc SSH hoặc tường lửa để họ có thể nhanh chóng phát hiện các hành vi xâm nhập và các lỗ hổng bảo mật tiềm ẩn. Đồng thời ngăn chặn các sự cố bảo mật máy chủ Linux và lưu lượng truy cập không mong muốn bằng cách đóng các port. Ngoài việc khắc phục sự cố máy chủ, nó còn giúp quản trị viên dễ dàng kiểm tra các port đang mở trong Linux và gán chúng cho các dịch vụ mới.

=>> Đọc thêm: Cách kiểm tra số lần đăng nhập SSH không thành công trong VPS Linux

Kiểm tra các port đang mở để phát hiện các lỗ hổng bảo mật

Kiểm tra các port đang mở để phát hiện các lỗ hổng bảo mật

Trong bài viết này, bạn sẽ tìm hiểu về các lệnh sau để xem và kiểm tra các cổng đang mở trong Linux:

  • Lệnh ss để hiển thị các cổng TCP và UDP đang mở.
  • Lệnh lsof để truy cập danh sách các tệp và cổng đang mở.
  • Lệnh netstat để hiển thị danh sách tất cả các cổng trên Linux.
  • Lệnh nmap để hiển thị các cổng UDP và TCP.
  • Lệnh netcat để kiểm tra các cổng Linux đang mở.

Theo dõi nội dung tiếp theo để biết cách bảo mật máy chủ VPS Linux của bạn.

5 cách để kiểm tra các port đang mở trong VPS Linux

1. Kiểm tra các port đang mở trong Linux bằng lệnh ss

Lệnh ss là một trong những lệnh hiển thị thông tin Listen Port cùng với các mạng kết nối của chúng. Để tìm các cổng này trong Linux và biết thêm thông tin về chúng, bạn có thể sử dụng lệnh ss với các tùy chọn khác nhau. Cú pháp cơ bản của lệnh như sau:

sudo ss -tulpn

Nếu bạn muốn đầu ra của mình cung cấp thông tin ngắn gọn nhưng phù hợp hơn, bạn nên chạy lệnh với -ltn:

sudo ss -ltn

Output:

State      Recv-Q     Send-Q         Local Address:Port            Peer Address:Port     Process 

LISTEN     0          4096           127.0.0.53%lo:53                   0.0.0.0:* 

LISTEN     0          5                  127.0.0.1:631                  0.0.0.0:* 

LISTEN     0          70                 127.0.0.1:33060                0.0.0.0:* 

LISTEN     0          151                127.0.0.1:3306                 0.0.0.0:* 

LISTEN     0          5                      [::1]:631                     [::]:* 

LISTEN     0          511                        *:80                         *:*

Trong đầu ra mẫu mà bạn thấy, các cổng số 80, 3306 và 33060 là các cổng mà các dịch vụ HTTP và MySQL sử dụng và hầu hết người dùng Linux đều quen thuộc với các cổng này. Các kết nối khác trên máy chủ đang ở trạng thái lắng nghe trên các cổng được chỉ định. Nếu thông tin này không đủ đối với bạn và bạn cần biết cổng nào đang mở thuộc về quy trình nào, bạn có thể chạy tùy chọn -p cùng với lệnh ss:

sudo ss -ltnp

Output:

State    Recv-Q   Send-Q      Local Address:Port        Peer Address:Port   Process 

LISTEN   0        4096        127.0.0.53%lo:53               0.0.0.0:*       users:(("systemd-resolve",pid=530,fd=13)) LISTEN   0        5               127.0.0.1:631              0.0.0.0:*       users:(("cupsd",pid=572,fd=7)) 

LISTEN   0        70              127.0.0.1:33060            0.0.0.0:*       users:(("mysqld",pid=2320,fd=32)) 

LISTEN   0        151             127.0.0.1:3306             0.0.0.0:*       users:(("mysqld",pid=2320,fd=34)) 

LISTEN   0        5                   [::1]:631                 [::]:*       users:(("cupsd",pid=572,fd=6)) 

LISTEN   0        511                     *:80                     *:*       users:(("apache2",pid=2728,fd=4),("apache2",pid=2727,fd=4),("apache2",pid=2725,fd=4))

Trong đầu ra của lệnh này, nó xác định cổng nào thuộc về các quy trình mysqld, systemd-resolve,cupsd và apache2.

Bạn cũng có thể sử dụng các tùy chọn khác cùng với lệnh ss, chẳng hạn như:

  • -l: Hiển thị cổng nghe.
  • -lt: Hiển thị các cổng TCP đang nghe.
  • -tul: Truy cập danh sách các cổng nghe TCP và UDP.
  • -n: Để truy cập cổng nghe của dịch vụ được chỉ định.

Cần lưu ý rằng bạn cũng có thể sử dụng lệnh sau để biết thêm thông tin chi tiết về các listen port kết nối đến:

ss -tuln | grep LISTEN

2. Kiểm tra các port đang mở trên Linux bằng lệnh nmap

Nmap là một chương trình kiểm tra bảo mật và quét mạng mã nguồn mở. Sử dụng công cụ nmap, bạn có thể tìm kiếm mạng và xác định các cổng mở trên máy chủ cục bộ từ xa. Để kiểm tra các port đang mở trong máy chủ cục bộ bằng lệnh nmap. Bạn có thể nhập địa chỉ IP của hệ thống từ xa và cũng có thể chỉ định hệ thống của mình là máy chủ cục bộ. Hãy chú ý đến ví dụ sau:

sudo nmap -sT -O localhost 

sudo nmap -sU -O 192.168.2.254 ##[ list open UDP ports ]## 

sudo nmap -sT -O 127.0.0.1 ##[ list open TCP ports ]## 

sudo nmap -sTU -O 192.168.2.24

Mẫu đầu ra sẽ như sau:

Starting Nmap 7.70 ( https://nmap.org ) at 2023-03-09 23:49 IST 

Nmap scan report for localhost (127.0.0.1) 

Host is up (0.00024s latency). 

Other addresses for localhost (not scanned): ::1 

Not shown: 998 closed ports 

PORT    STATE SERVICE 

22/tcp  open  ssh 

631/tcp open  ipp 

Device type: general purpose 

Running: Linux 2.6.X 

OS CPE: cpe:/o:linux:linux_kernel:2.6.32 

OS details: Linux 2.6.32 

Network Distance: 0 hops 



OS detection performed. Please report any incorrect results at https://nmap.org/submit/ . 

Nmap done: 1 IP address (1 host up) scanned in 2.31 seconds

3. Kiểm tra các port đang mở trên Linux bằng lệnh lsof

Bạn có thể sử dụng lệnh lsof để tìm các quy trình mà người dùng đã chạy và truy cập các cổng TCP và UDP đang mở bằng lệnh này. Cùng với lệnh bạn cũng có thể chạy các tùy chọn khác nhau cho các mục đích khác nhau, như sau:

  • -i: Nếu bạn không có quyền truy cập vào địa chỉ IP, lệnh này sẽ giúp bạn xem thông tin về tất cả các tệp mạng.
  • -p: Nếu bạn gặp sự cố khi tìm kiếm tên cổng, bạn có thể sử dụng tùy chọn này vì tùy chọn này ngăn việc chuyển đổi số cổng của các tệp mạng thành tên cổng.
  • -n: Tùy chọn này hữu ích khi bạn không muốn sử dụng tên DNS và nó ngăn số mạng chuyển đổi tên máy chủ của các tệp mạng.
  • | grep LISTEN: sắp xếp đầu ra để hiển thị các cổng ở trạng thái LISTEN.

Cú pháp chính của lệnh này như sau:

sudo lsof -i -P -n

Trong đầu ra của lệnh này, bạn sẽ thấy danh sách các port đang mở trong Linux. Nhưng lệnh này có một nhược điểm là đôi khi nó hiển thị các cổng không thực sự mở. Để truy cập các listen port trên hệ thống Linux của bạn, chúng tôi đề xuất lệnh sau:

sudo lsof -i -P -n | grep LISTEN

4. Kiểm tra các port đang mở trong Linux bằng lệnh netstat

Một trong những lệnh hữu ích để kiểm tra các port đang mở là lệnh netstat. Lệnh này hiển thị các port đang mở ở định dạng danh sách. Cú pháp cơ bản của lệnh này để liệt kê các cổng đang mở như sau:

sudo netstat -tulpn | grep LISTEN

Các tùy chọn khác cho các mục đích khác nhau có thể được thực thi bằng thenetstatcommand, bao gồm các tùy chọn sau:

  • -t: Hiển thị tất cả các cổng TCP.
  • -u: Hiển thị tất cả các cổng UDP.
  • -I: Cung cấp ổ cắm máy chủ nghe.
  • -P: Hiển thị PID và tên của các chương trình ổ cắm.
  • -n: Nó được thực thi để tên không được giải quyết.
  • | grep LISTEN: Lọc đầu ra để hiển thị các cổng đang mở ở trạng thái LISTEN bằng lệnh grep.

5. Kiểm tra các port đang mở trong Linux bằng lệnh netcat

Bằng cách thực hiện lệnh netcat với sự trợ giúp của giao thức TCP và UDP. Người dùng có thể ghi và đọc dữ liệu giữa các máy tính, cú pháp chính của lệnh này như sau:

nc [options] host port

Lệnh netcat cùng với các tùy chọn khác sẽ có ý nghĩa khác nhau như bên dưới đây:

  • nifty -z: tìm listen daemon mà không gửi dữ liệu đến port.
  • -v: nhận thêm thông tin và kích hoạt tính chi tiết.

Bạn cũng có thể sử dụng lệnh sau để quét các cổng đang mở:

nc -z -v <IP-ADDRESS> 1-65535 2>&1 | grep -v 'Connection refused'

Thay thế IP-ADDRESS trong lệnh trên bằng địa chỉ IP của hệ thống Linux mà bạn muốn tìm các cổng đang mở. Do đó, bằng cách chạy lệnh trước đó bạn sẽ thấy các cổng đang mở và có thể truy cập được trên hệ thống Linux của mình.

=>> Đọc thêm: Cách tìm kiếm tệp và thư mục bằng lệnh Find trong Linux

Kiểm tra các Port đang mở trong UFW của Linux

Một số cổng trong hệ thống của bạn có thể bị chặn bởi tường lửa và phần mềm khác. Và tất cả các cổng đang mở mà bạn thấy trong danh sách có thể không được mở trên Internet. Do đó, bạn phải biết các quy tắc của tường lửa để xác định chính xác các cổng mở và bị chặn. Bạn có thể sử dụng lệnh sau để tìm hiểu về trạng thái của tường lửa liên quan đến việc chặn truy cập đầu vào và đầu ra:

sudo ufw status verbose

Đầu ra mẫu sẽ như sau:

Status: active 

Logging: on (low) 

Default: deny (incoming), allow (outgoing), disabled (routed) 

New profiles: skip

Trong kết quả này, bạn có thể thấy rằng các kết nối đến bị chặn bởi tường lửa và các kết nối MySQL và HTTP đến với cổng 80 và 3306 không được phép trong quy tắc tường lửa. Trong khi các cổng này có thể được hiển thị dưới dạng cổng mở bằng cách thực hiện 5 lệnh được chia sẻ ở trên.

Bạn cũng có thể truy cập danh sách các quy tắc tường lửa được định cấu hình trên máy chủ Linux bằng cách chạy lệnh sau:

sudo iptables -S # 

IPv6 # 

sudo ip6tables -S

Cách chặn các Port đang mở trong Linux

Sau khi kiểm tra các port đang mở, bạn có thể đóng các cổng dễ bị tấn công. Với mục đích này, bạn nên xác định các dịch vụ cho phép các listen port trên máy chủ Linux và dừng chúng. Để tìm tên dịch vụ, hãy nhập lệnh sau:

sudo ss -tulnp | grep LISTEN

Sau khi nhìn thấy tên dịch vụ và cổng mở mà bạn nhận được ở đầu ra, bạn có thể dừng dịch vụ mong muốn bằng cách thực hiện lệnh sau (ví dụ: nếu dịch vụ apache đang hoạt động):

sudo systemctl stop apache

Dịch vụ này có thể được kích hoạt tự động với mỗi lần khởi động. Vì vậy bạn có thể tắt dịch vụ Apache bằng cách chạy lệnh sau:

sudo systemctl disable apache

Ngoài việc dừng dịch vụ mong muốn, bạn phải thực hiện các thay đổi trong quy tắc tường lửa và chặn cổng được sử dụng bởi dịch vụ Apache trong tường lửa UFW. Để cấu hình tường lửa chặn cổng, trước tiên hãy tìm hiểu về trạng thái tường lửa:

sudo ufw status

Đầu ra mẫu:

Status: active 

To                                  Action              From 

--                                ------------      --------- 

Apache HTTP                Allow                Anywhere 

1                                   DENY                 Anywhere 

2                                   DENY                 Anywhere 

Apache HTTP(v6)           ALLOW              Anywhere(v6) 

1(v6)                               DENY                 Anywhere(v6) 

2(v6)                               DENY                 Anywhere(v6)

Trong kết quả này, bạn có thể thấy trạng thái của tường lửa là Active (Đang hoạt động). Nếu trạng thái tường lửa không hoạt động, bạn có thể kích hoạt nó bằng cách chạy lệnh sau:

sudo ufw enable

Sau đó, trong danh sách mà bạn nhận được ở đầu ra của lệnh sudo ufw status, bạn phải đặt tùy chọn Deny (Từ chối) cho cổng mong muốn mà bạn định chặn. Trong ví dụ của chúng tôi, Apache sử dụng cổng 80. Do đó, để đặt quy tắc trong tường lửa dựa trên việc từ chối cổng 80, hãy nhập lệnh sau:

sudo ufw deny 80

Output:

Rule added 

Rule added(v6)

Cuối cùng, cổng 80 bị chặn trong tường lửa.

Trong hướng dẫn này, chúng tôi đã cung cấp các lệnh để kiểm tra các port đang mở và hướng dẫn cách đóng các port đang mở. Cách hiệu quả nhất và nhanh nhất để kiểm tra các port đang mở là sử dụng lệnh lsof, nhưng bạn phải có tài khoản người dùng với đặc quyền sudo và đăng nhập vào hệ thống. VPS Chính hãng hy vọng bài viết này đã giúp bạn biết cách cải thiện bảo mật máy chủ VPS Linux của mình. Chúc các bạn thành công!