Kiểm tra xem cổng được mở hay đóng trên máy chủ Linux?


209

Làm cách nào để kiểm tra xem một cổng có đang lắng nghe trên máy chủ Linux không?


2
Nó không hoàn toàn rõ ràng những gì bạn đang hỏi. "Mở" nghĩa là gì? Bạn có nghĩa là một số máy chủ đang lắng nghe trên cổng đó? Hay bạn có nghĩa là nó được cho phép bởi tường lửa hệ thống? Hay cái gì?
David Schwartz

Tôi nghĩ rằng một cổng đang bị chặn trên máy chủ của tôi và muốn bỏ chặn / mở lại.
James Anderson

14
netstat -an | grep PORTNUMBER | grep -i listenNếu đầu ra trống, cổng không được sử dụng.
automatix

Câu trả lời:


187

Bạn có thể kiểm tra xem một quy trình có lắng nghe trên cổng TCP hoặc UDP không netstat -tuplen.

Để kiểm tra xem một số cổng có thể truy cập được từ bên ngoài hay không (đây có thể là những gì bạn muốn), bạn có thể sử dụng trình quét cổng như Nmap từ một hệ thống khác . Chạy Nmap trên cùng một máy chủ bạn muốn kiểm tra là khá vô dụng cho mục đích của bạn.


54
GNU netstat biết các thông số -t, -u, -p, -l, -e, và -n. Nhờ trình phân tích cú pháp tùy chọn, nó có thể được thể hiện dưới dạng -tuplen. linux.die.net/man/8/netstat
joschi

3
Ngoài ra, telnetlệnh thường chỉ hỗ trợ TCP, vì vậy bạn không gặp may nếu dịch vụ bạn muốn kiểm tra chạy trên giao thức khác.
joschi

1
yeah, tôi đã sử dụng windows do đó nhầm lẫn.
Dexter

2
nc là (tốt hơn) thay thế cho telnet. Nó cũng hỗ trợ UDP.
Tsvetomir Dimitrov

1
Sử dụng nó với sudo : sudo netstat -tuplen. Điều này sẽ cung cấp cho bạn các quy trình thuộc sở hữu của không chỉ bạn mà còn bởi những người khác và nó sẽ in các chi tiết bổ sung (như PID / Tên chương trình) nếu chúng chưa được hiển thị dưới dạng người dùng không root.
John Red

102

Cách nhanh nhất để kiểm tra xem cổng TCP có mở không (bao gồm mọi tường lửa phần cứng bạn có thể có), là nhập từ máy tính từ xa (ví dụ: máy tính để bàn của bạn):

telnet myserver.com 80

Mà sẽ cố gắng mở một kết nối đến cổng 80 trên máy chủ đó. Nếu bạn hết thời gian hoặc từ chối, cổng không mở :)


1
nói rằng nó không nhận ra "telnet" là một lệnh ...
James Anderson

6
"yum install telnet" để cài đặt gói máy khách telnet.
cjc

8
Viết ở trên:if you get a time out or deny, the port is not open
Công nghiệp

2
Nếu bạn không có quyền cài đặt telnet thì sao? Có một công cụ tiêu chuẩn khác?
KC Baltz

3
Tôi đã dùng thử telnet myhost 22 trực tuyến và nhận được thời gian chờ. Nhưng tôi có thể ssh vào máy đó. ?!
Torsten Bronger

30

OK, tóm lại, bạn có một máy chủ mà bạn có thể đăng nhập. Bạn muốn xem nếu một cái gì đó đang lắng nghe trên một số cổng. Là root, chạy:

netstat -nlp

điều này sẽ hiển thị một danh sách các quá trình lắng nghe trên các cổng TCP và UDP. Bạn có thể quét (hoặc grep) nó cho quá trình bạn quan tâm và / hoặc số cổng bạn muốn thấy.

Nếu quy trình bạn mong đợi không có ở đó, bạn nên bắt đầu quy trình đó và kiểm tra lại netstat. Nếu quá trình ở đó, nhưng nó đang lắng nghe trên một giao diện và cổng mà bạn không mong đợi, thì có một vấn đề về cấu hình (ví dụ: nó có thể đang nghe, nhưng chỉ trên giao diện loopback, vì vậy bạn sẽ thấy 127.0.0.1:3306 và không có dòng nào khác cho cổng 3306, trong trường hợp cấu hình mặc định cho MySQL).

Nếu quá trình kết thúc và nó đang lắng nghe cổng bạn mong đợi, bạn có thể thử chạy "telnet" tới cổng đó từ Macbook trong văn phòng / nhà của bạn, ví dụ:

 telnet xxxxxxxxxxxx.co.uk 443

Điều đó sẽ kiểm tra xem (giả sử các cổng tiêu chuẩn) có máy chủ web được cấu hình cho SSL hay không. Lưu ý rằng thử nghiệm này bằng telnet sẽ chỉ hoạt động nếu quá trình đang lắng nghe trên cổng TCP. Nếu đó là cổng UDP, bạn cũng có thể thử với bất kỳ ứng dụng khách nào bạn sẽ sử dụng để kết nối với cổng đó. (Tôi thấy rằng bạn đã sử dụng cổng 224. Đây là masqdialer và tôi không biết đó là gì).

Nếu dịch vụ ở đó, nhưng bạn không thể truy cập bên ngoài, thì sẽ có tường lửa chặn bạn. Trong trường hợp đó, hãy chạy:

 iptables -L -n

Điều này sẽ hiển thị tất cả các quy tắc tường lửa như được xác định trên hệ thống của bạn. Bạn có thể đăng bài đó, nhưng, nói chung, nếu bạn không cho phép mọi thứ trên chuỗi INPUT, có lẽ bạn sẽ cần phải cho phép rõ ràng lưu lượng truy cập trên cổng được đề cập:

 iptables -I INPUT -p tcp --dport 224 -j ACCEPT

Hoặc một cái gì đó dọc theo các đường dây. Đừng chạy các lệnh tường lửa của bạn một cách mù quáng dựa trên những gì một người lạ đã nói với bạn trên Internet. Hãy xem xét những gì bạn đang làm.

Nếu tường lửa của bạn trên hộp cho phép lưu lượng truy cập bạn muốn, thì công ty lưu trữ của bạn có thể đang chạy tường lửa (ví dụ: họ chỉ cho phép SSH (22 / tcp), HTTP (80 / tcp) và HTTPS (443 / tcp) và từ chối tất cả lưu lượng truy cập đến khác). Trong trường hợp này, bạn sẽ cần mở một vé trợ giúp với họ để giải quyết vấn đề này, mặc dù tôi cho rằng có thể có một cái gì đó trong cPanel của bạn có thể cho phép điều đó.


Bạn có thể vui lòng thêm cách hoàn tác lệnh iptables -I không? Cảm ơn!!
Evgeny

1
"Iptables -D" theo sau bởi bất cứ điều gì khác mà bạn có sau "-I" trong lệnh ban đầu. Về cơ bản, tra cứu các tài liệu.
cjc

11

Tôi sử dụng kết hợp của netstatlsof:

netstat -an | grep <portnumber>
lsof -i:<portnumber>

Để xem cổng đang được sử dụng, và những gì đang sử dụng nó.


không có gì nhắc nhở có hoặc không có sudo
Dheeraj Thedijje

1
@DheerajThedijje - thì cổng đó không mở
warren

Có nó không, có nó.
Dheeraj Thedijje

7

Nếu bạn được kết nối với hệ thống và có thể chạy lệnh dưới quyền root thì bạn có thể kiểm tra đầu ra của iptables

iptables -L -vn

điều này sẽ liệt kê các quy tắc tường lửa và cổng nào là mục tiêu mở ACCEPTvà bất kỳ mục tiêu cổng nào được đóng rõ ràng REJECT.


Và nếu bạn có tường lửa, nó đơn giản hơn firewall-cmd --query-port=port/protocol, vd firewall-cmd --query-port=80/tcp.
Agostino

6

lsof -i :ssh sẽ liệt kê tất cả các quy trình với cổng ssh mở, cả kết nối nghe và hoạt động.


Tiền tố sudonếu nó không trả lại bất kỳ đầu ra.
Elijah Lynn
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.