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?
netstat -an | grep PORTNUMBER | grep -i listen
Nếu đầu ra trống, cổng không được sử dụng.
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?
netstat -an | grep PORTNUMBER | grep -i listen
Nếu đầu ra trống, cổng không được sử dụng.
Câu trả lời:
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.
-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
telnet
lệ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.
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.
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ở :)
if you get a time out or deny, the port is not open
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 đó.
Tôi sử dụng kết hợp của netstat
và lsof
:
netstat -an | grep <portnumber>
lsof -i:<portnumber>
Để xem cổng đang được sử dụng, và những gì đang sử dụng nó.
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ở ACCEPT
và bất kỳ mục tiêu cổng nào được đóng rõ ràng REJECT
.
firewall-cmd --query-port=port/protocol
, vd firewall-cmd --query-port=80/tcp
.
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.
sudo
nếu nó không trả lại bất kỳ đầu ra.