Android

Cách kiểm tra (quét) các cổng mở trong linux

Linux/Mac Terminal Tutorial: The Grep Command - Search Files and Directories for Patterns of Text

Linux/Mac Terminal Tutorial: The Grep Command - Search Files and Directories for Patterns of Text

Mục lục:

Anonim

Cho dù bạn đang khắc phục sự cố kết nối mạng hoặc định cấu hình tường lửa, một trong những điều đầu tiên cần kiểm tra là cổng nào thực sự được mở trên hệ thống của bạn.

Bài viết này mô tả một số cách tiếp cận để tìm ra cổng nào được mở ra bên ngoài trên hệ thống Linux của bạn.

Cổng mở là gì

Cổng nghe là cổng mạng mà ứng dụng nghe. Bạn có thể nhận được danh sách các cổng nghe 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 . Mỗi cổng nghe có thể được mở hoặc đóng (được lọc) bằng tường lửa.

Nói chung, một cổng mở là một cổng mạng chấp nhận các gói đến từ các địa điểm từ xa.

Ví dụ: nếu bạn đang chạy một máy chủ web nghe trên các cổng 80 443 và các cổng đó được mở trên tường lửa của bạn, bất kỳ ai (trừ ips bị chặn) sẽ có thể truy cập các trang web được lưu trữ trên máy chủ web của bạn bằng trình duyệt của anh ấy. Trong trường hợp này, cả 80 443 đều là cổng mở.

Các cổng mở có thể gây ra rủi ro bảo mật vì mỗi cổng mở có thể được sử dụng bởi những kẻ tấn công để khai thác lỗ hổng hoặc thực hiện bất kỳ loại tấn công nào khác. Bạn chỉ nên hiển thị các cổng cần thiết cho chức năng của ứng dụng và đóng tất cả các cổng khác.

Kiểm tra cổng mở với nmap

Nmap là một công cụ quét mạng mạnh mẽ có thể quét các máy chủ đơn và mạng lớn. Nó chủ yếu được sử dụng để kiểm tra bảo mật và kiểm tra thâm nhập.

Nếu có sẵn, nmap sẽ là công cụ đầu tiên của bạn khi quét cổng. Bên cạnh nmap quét cổng cũng có thể phát hiện địa chỉ Mac, loại hệ điều hành, phiên bản kernel và nhiều hơn nữa.

Lệnh sau được phát ra từ bàn điều khiển xác định cổng nào đang lắng nghe các kết nối TCP từ mạng:

sudo nmap -sT -p- 10.10.8.8

-sT yêu cầu nmap quét các cổng TCP và -p- để quét tất cả các cổng 65535. Nếu -p- không được sử dụng, nmap sẽ chỉ quét 1000 cổng.

Starting Nmap 7.60 (https://nmap.org) at 2019-07-09 23:10 CEST Nmap scan report for 10.10.8.8 Host is up (0.0012s latency). Not shown: 998 closed ports PORT STATE SERVICE 22/tcp open ssh 80/tcp open http MAC Address: 08:00:27:05:49:23 (Oracle VirtualBox virtual NIC) Nmap done: 1 IP address (1 host up) scanned in 0.41 seconds

Đầu ra ở trên cho thấy chỉ các cổng 22 , 80 8069 được mở trên hệ thống đích.

Để quét các cổng UDP, hãy sử dụng -sU thay vì -sT :

sudo nmap -sU -p- 10.10.8.8

Để biết thêm thông tin, hãy truy cập trang nmap man và đọc về tất cả các tùy chọn mạnh mẽ khác của công cụ này.

Kiểm tra cổng mở với netcat

Netcat (hoặc nc ) là một công cụ dòng lệnh có thể đọc và ghi dữ liệu trên các kết nối mạng, sử dụng giao thức TCP hoặc UDP.

Với netcat bạn có thể quét một cổng hoặc một phạm vi cổng.

Ví dụ: để quét các cổng TCP mở trên máy từ xa có địa chỉ IP 10.10.8.8 trong phạm vi 20-80 bạn sẽ sử dụng lệnh sau:

nc -z -v 10.10.8.8 20-80

Tùy chọn -z yêu cầu nc chỉ quét các cổng mở, không gửi bất kỳ dữ liệu nào và -v là để biết thêm thông tin dài dòng.

Đầu ra sẽ trông giống như thế này:

nc: connect to 10.10.8.8 port 20 (tcp) failed: Connection refused nc: connect to 10.10.8.8 port 21 (tcp) failed: Connection refused Connection to 10.10.8.8 22 port succeeded!… Connection to 10.10.8.8 80 port succeeded!

nc -z -v 10.10.8.8 20-80 2>&1 | grep succeeded

Connection to 10.10.8.8 22 port succeeded! Connection to 10.10.8.8 80 port succeeded!

Để quét các cổng UDP, hãy chuyển tùy chọn -u cho lệnh nc :

nc -z -v -u 10.10.8.8 20-80 2>&1 | grep succeeded

Kiểm tra cổng mở bằng thiết bị Bash Pseudo

Một cách khác để kiểm tra xem một cổng nào đó được mở hay đóng bằng cách sử dụng Bash shell /dev/tcp/.. hoặc /dev/udp/.. thiết bị giả.

Khi thực hiện lệnh trên thiết bị giả /dev/$PROTOCOL/$HOST/$IP a /dev/$PROTOCOL/$HOST/$IP , Bash sẽ mở kết nối TCP hoặc UDP đến máy chủ được chỉ định trên cổng được chỉ định.

Câu lệnh if..else sau đây sẽ kiểm tra xem cổng 443 trên kernel.org có mở không:

if timeout 5 bash -c ' /dev/null' then echo "Port is open" else echo "Port is closed" fi if timeout 5 bash -c ' /dev/null' then echo "Port is open" else echo "Port is closed" fi

Port is open

Làm thế nào để mã trên hoạt động?

Thời gian chờ mặc định khi kết nối với cổng bằng thiết bị giả là rất lớn, vì vậy chúng tôi đang sử dụng lệnh timeout để giết lệnh kiểm tra sau 5 giây. Nếu kết nối được thiết lập tới kernel.org cổng 443 , lệnh kiểm tra sẽ trả về true.

Bạn cũng có thể sử dụng vòng lặp for để kiểm tra phạm vi cổng:

for PORT in {20..80}; do timeout 1 bash -c " /dev/null" && echo "port $PORT is open" done for PORT in {20..80}; do timeout 1 bash -c " /dev/null" && echo "port $PORT is open" done

Đầu ra sẽ trông giống như thế này:

port 22 is open port 80 is open

Phần kết luận

Chúng tôi đã chỉ cho bạn một số công cụ mà bạn có thể sử dụng để quét các cổng mở. Ngoài ra còn có các tiện ích và phương thức khác để kiểm tra các cổng mở, ví dụ: bạn có thể sử dụng mô-đun socket Python, curl , telnet hoặc wget .

thiết bị đầu cuối