Làm thế nào để biết một cổng TCP hoặc UDP đang mở hay bị đóng trong Linux

Biết được cổng TCP hoặc UDP đang mở hay đóng là nhiệm vụ cơ bản đối với bất kỳ quản trị viên hệ thống và mạng nào. Thông thường, điều cần thiết là phải biết các cổng có mở để thiết lập giao tiếp với dịch vụ đang lắng nghe phía sau hay không, nhưng cũng rất quan trọng để biết liệu chúng có bị đóng hay không để tránh các vấn đề bảo mật có thể xảy ra. Hôm nay, trong bài viết này, chúng tôi sẽ giới thiệu cho các bạn cách biết một cổng đang mở hay đóng trong Linux hệ điều hành, vì hệ điều hành này thường được sử dụng trong các máy chủ.

Có một số cách để kiểm tra xem một cổng nhất định đang mở hay đóng, đặc biệt là trong Linux, cách đầu tiên là sử dụng chương trình Netcat phổ biến được cài đặt sẵn trong tất cả các bản phân phối, sau đó là một cách rất tốt để biết liệu một cổng đang mở. Đó là bằng cách kiểm tra nó trực tiếp với Nmap chương trình sẽ cho phép chúng tôi quét tất cả các cổng của một máy chủ nhất định. Cuối cùng, nếu chúng ta muốn biết liệu chúng ta có một cổng mở hay đóng, chúng ta sẽ phải xem nó trong tường lửa và cả trong các kết nối hiện tại của hệ điều hành.

Cho biết liệu Cổng TCP hoặc UDP đang Mở hay Đóng trong Linux

Xem các cổng đang mở với Netcat

Netcat là một công cụ được cài đặt mặc định trong hầu hết các bản phân phối Linux, vì vậy, ngoài việc rất dễ sử dụng, chúng ta sẽ không cần cài đặt thêm bất kỳ gói nào. Trước khi kiểm tra với Netcat xem cổng có mở hay không, hãy xem hai thông số Netcat quan trọng nhất:

  • z là một tham số đảm bảo rằng, khi kết thúc quá trình kiểm tra, kết nối sẽ bị đóng hoặc, nếu không, chương trình sẽ vẫn chạy trong một vòng lặp cho đến khi chúng ta kết thúc thủ công bằng control + C, theo cách tương tự như khi ping bật Linux.
  • v là thông số phụ trách việc kiểm tra xem cổng đang mở hay đóng.

Để kiểm tra cổng, những gì chúng ta phải làm là nhập thông tin sau vào một thiết bị đầu cuối:

nc -zv {IP} {PUERTO}

Ví dụ, để kiểm tra cổng 443 trên bộ định tuyến của chúng tôi, chúng tôi sẽ đi:

nc -zv 192.168.10.1 443

Trong hình ảnh sau, bạn có thể thấy cách mở cổng này:

Nếu chúng tôi kiểm tra trang web của bài viết này và cổng 443, chúng tôi sẽ nhận được thông tin tương tự:

Trong trường hợp nó bị đóng, chúng ta nên đặt điều này:

Như bạn đã thấy, rất dễ dàng để kiểm tra xem một cổng đang mở hay đóng với Netcat, một tiện ích rất đơn giản được cài đặt sẵn trong Linux. Ngoài các lệnh “z” và “v”, chúng ta cũng có sẵn các đối số khác để cho phép chúng ta biết thêm thông tin. Nếu chúng ta thực hiện lệnh sau, trợ giúp sẽ xuất hiện:

nc -h

Như bạn có thể thấy, chúng ta có nhiều đối số để mở rộng các chức năng.

Xem các cổng đang mở với Nmap

Nmap là chương trình xuất sắc nhất để khám phá các máy chủ và cũng để kiểm tra xem các cổng khác nhau có đang mở hay không, chương trình này không được cài đặt sẵn trong hệ điều hành Linux, nhưng chúng ta có thể cài đặt trực tiếp từ kho lưu trữ theo thứ tự sau:

sudo apt install nmap

Sau khi cài đặt, để tìm xem một cổng cụ thể có đang mở hay không, chúng ta phải đặt lệnh sau:

nmap -p {PUERTO} {IP}

Trong hình ảnh sau, bạn có thể thấy một cổng đang mở sẽ xuất hiện như thế nào:

Trong trường hợp cổng bị đóng hoặc bị tường lửa lọc, thông tin sau sẽ xuất hiện:

Nếu chúng ta muốn quét tất cả các cổng của một máy chủ nhất định hoặc một loạt các cổng, chúng ta sẽ phải chỉ ra một loạt các cổng như sau:

nmap -p {PUERTO}-{PUERTO} {IP}

Ví dụ:

nmap -p 1-65535 192.168.10.1

Như bạn thấy, việc kiểm tra các cổng đang mở bằng Nmap thực sự rất đơn giản, ngoài ra, chúng ta có thể quét tất cả các host trên mạng gia đình hoặc mạng nội bộ chuyên nghiệp, để sau này quét các cổng khác nhau.

Kiểm tra tường lửa trong Linux

Nếu chúng ta muốn kiểm tra xem chúng ta có một cổng mở để chấp nhận các kết nối hay không, điều đầu tiên cần kiểm tra là trạng thái của tường lửa trong hệ điều hành Linux của chúng ta. Theo mặc định, trên tất cả các máy chủ Linux, chính sách được cho phép, nghĩa là, tất cả các gói đều được chính sách chấp nhận. Chúng tôi có thể sửa đổi chính sách này cho một chính sách hạn chế và thậm chí thêm các bảng, chuỗi và quy tắc mới để cho phép hoặc từ chối lưu lượng truy cập.

Nếu trong thiết bị đầu cuối Linux của chúng tôi, chúng tôi đặt những điều sau:

iptables -L

Chúng tôi sẽ lấy tất cả các chuỗi và quy tắc từ bảng "bộ lọc" iptables, trong trường hợp sử dụng Nftables, bạn phải chỉ ra lệnh sau:

nft list ruleset

Một khuyến nghị bảo mật rất quan trọng là tất cả các cổng trên máy chủ Linux nên được đóng lại, theo cách này, khi chúng tôi nâng cao một dịch vụ đang lắng nghe trên một cổng nhất định, nó sẽ không thể truy cập được trừ khi chúng tôi cho phép nó trong tường lửa. Chúng tôi phải kiểm tra chi tiết xem một cổng nhất định có mở hay không để các dịch vụ của chúng tôi có thể truy cập từ nước ngoài.

Xem trạng thái của các kết nối TCP và UDP

Nếu chúng ta muốn biết trạng thái của tất cả TCP, UDP, ICMP và các giao thức khác trong hệ điều hành của mình, một công cụ được sử dụng rộng rãi luôn là “netstat”, tuy nhiên, công cụ này đã đứng ở vị trí thứ hai nhờ vào “ss” mới điều đó sẽ cung cấp cho chúng tôi một lượng lớn thông tin một cách dễ dàng và nhanh chóng. Công cụ này chịu trách nhiệm kiểm tra tất cả các ổ cắm mở hoặc đóng trên máy chủ Linux của chúng tôi và chúng tôi sẽ có thể xem số liệu thống kê về các ổ cắm mở hoặc đóng đã nói. Nếu bạn đã sử dụng công cụ netstat trước đây, chúng tôi chắc chắn rằng bạn sẽ thích công cụ “ss” mới này.

Công cụ “ss” đã được cài đặt sẵn trên hệ điều hành Linux như một phần của chính hệ thống, như trường hợp của “ping”, “traceroute” và nhiều công cụ khác. Nếu chúng tôi mở một bảng điều khiển, cả ở chế độ người dùng và chế độ siêu người dùng, chúng tôi phải thực thi:

ss

Khi chúng tôi đã thực hiện lệnh này, chúng tôi có thể thấy những điều sau:

Chúng ta sẽ thấy trạng thái của kết nối (ESTAB), cũng như các gói đã nhận và gửi, địa chỉ cục bộ và cổng, cũng như địa chỉ từ xa và cổng được sử dụng. Chúng tôi sẽ nhận được một số lượng lớn các cổng được sử dụng bởi các chương trình và dịch vụ khác nhau mà chúng tôi sẽ cài đặt trong hệ điều hành.

Nếu chúng ta muốn xem trạng thái của tất cả các cổng (ổ cắm), chúng ta có thể đặt theo thứ tự sau:

ss -a

Nếu chúng ta muốn chỉ xem các cổng đang "lắng nghe", chúng ta phải đặt lệnh sau:

ss -l

Trong hình ảnh sau, bạn có thể thấy một ví dụ về các cổng "SN SÀNG" để chấp nhận các kết nối đến:

Trong trường hợp chúng ta muốn hiển thị các kết nối TCP, chúng ta sẽ phải sử dụng đối số “-t” và trong trường hợp muốn hiển thị các kết nối UDP, chúng ta sẽ phải sử dụng đối số “-u”.

ss -t ss -u

Lệnh “ss” thực sự hữu ích để hiển thị tất cả các kết nối đã thiết lập và cũng có thể lắng nghe trong hệ điều hành Linux của chúng tôi.

Như bạn đã thấy, chúng tôi có các phương pháp khác nhau để biết cổng đang mở hay đóng trên máy chủ từ xa và cả trên máy tính cục bộ của chúng tôi, tùy thuộc vào những gì chúng tôi muốn biết, chúng tôi sẽ sử dụng công cụ này hay công cụ khác, điều quan trọng nhất là tất cả các Cổng không được sử dụng phải được đóng lại để bảo mật thông qua tường lửa, bằng cách này, chúng tôi sẽ tránh được các vấn đề bảo mật và khai thác lỗ hổng trong máy chủ.