ฉันจะตรวจสอบว่าพอร์ตกำลังฟังบนเซิร์ฟเวอร์ Linux ได้อย่างไร
netstat -an | grep PORTNUMBER | grep -i listen
หากเอาต์พุตไม่มีพอร์ตแสดงว่าไม่ได้ใช้งาน
ฉันจะตรวจสอบว่าพอร์ตกำลังฟังบนเซิร์ฟเวอร์ Linux ได้อย่างไร
netstat -an | grep PORTNUMBER | grep -i listen
หากเอาต์พุตไม่มีพอร์ตแสดงว่าไม่ได้ใช้งาน
คำตอบ:
คุณสามารถตรวจสอบว่ากระบวนการรับฟังพอร์ต TCP หรือ UDP ด้วยnetstat -tuplen
หรือไม่
ในการตรวจสอบว่าพอร์ตบางพอร์ตสามารถเข้าถึงได้จากด้านนอก (นี่อาจเป็นสิ่งที่คุณต้องการ) คุณสามารถใช้เครื่องสแกนพอร์ตเช่นNmapจากระบบอื่น การเรียกใช้ Nmap บนโฮสต์เดียวกันกับที่คุณต้องการตรวจสอบนั้นค่อนข้างไร้ประโยชน์สำหรับจุดประสงค์ของคุณ
-t
, -u
, -p
, -l
, และ-e
-n
ขอบคุณที่ตัวเลือก parser -tuplen
มันสามารถแสดงเป็น linux.die.net/man/8/netstat
telnet
คำสั่งมักจะรองรับ TCP เท่านั้นดังนั้นคุณจะโชคไม่ดีถ้าบริการที่คุณต้องการตรวจสอบทำงานบนโปรโตคอลอื่น
sudo netstat -tuplen
sudo: สิ่งนี้จะให้กระบวนการที่คุณเป็นเจ้าของไม่ใช่เพียงแค่คุณ แต่เป็นกระบวนการอื่น ๆ และจะพิมพ์รายละเอียดเพิ่มเติม (เช่น PID / ชื่อโปรแกรม) หากพวกเขาไม่ได้แสดงเป็นผู้ใช้ที่ไม่ใช่รูท
วิธีที่เร็วที่สุดในการทดสอบว่าพอร์ต TCP เปิดอยู่หรือไม่ (รวมถึงไฟร์วอลล์ฮาร์ดแวร์ที่คุณอาจมี) คือพิมพ์จากคอมพิวเตอร์ระยะไกล (เช่นเดสก์ท็อปของคุณ):
telnet myserver.com 80
ซึ่งจะพยายามเปิดการเชื่อมต่อกับพอร์ต 80 บนเซิร์ฟเวอร์นั้น หากคุณหมดเวลาหรือปฏิเสธพอร์ตจะไม่เปิดขึ้น :)
if you get a time out or deny, the port is not open
ตกลงโดยสรุปคุณมีเซิร์ฟเวอร์ที่คุณสามารถเข้าสู่ระบบได้ คุณต้องการดูว่ามีบางอย่างกำลังฟังอยู่บนพอร์ตบ้างไหม ในฐานะที่เป็น root ให้เรียกใช้:
netstat -nlp
สิ่งนี้จะแสดงรายการกระบวนการที่กำลังฟังบนพอร์ต TCP และ UDP คุณสามารถสแกน (หรือ grep) สำหรับกระบวนการที่คุณสนใจและ / หรือหมายเลขพอร์ตที่คุณคาดว่าจะเห็น
หากกระบวนการที่คุณคาดว่าไม่ได้มีคุณควรเริ่มกระบวนการนั้นและตรวจสอบ netstat อีกครั้ง หากกระบวนการนั้นอยู่ที่นั่น แต่กำลังฟังบนอินเทอร์เฟซและพอร์ตที่คุณไม่ได้คาดไว้นั่นก็คือปัญหาการกำหนดค่า (เช่นมันอาจจะฟัง แต่บนอินเทอร์เฟซแบบย้อนกลับเท่านั้นดังนั้นคุณจะเห็น 127.0.0.1:3306 และ ไม่มีบรรทัดอื่นสำหรับพอร์ต 3306 ในกรณีของการกำหนดค่าเริ่มต้นสำหรับ MySQL)
หากกระบวนการนี้เกิดขึ้นและกำลังฟังพอร์ตที่คุณคาดหวังคุณสามารถลองใช้ "telnet" ไปยังพอร์ตนั้นจาก Macbook ของคุณในสำนักงาน / ที่บ้านของคุณเช่น
telnet xxxxxxxxxxxx.co.uk 443
ที่จะทดสอบว่า (สมมติว่าพอร์ตมาตรฐาน) มีเว็บเซิร์ฟเวอร์ที่กำหนดค่าไว้สำหรับ SSL โปรดทราบว่าการทดสอบนี้โดยใช้ telnet จะทำงานได้ก็ต่อเมื่อกระบวนการกำลังรับฟังพอร์ต TCP หากเป็นพอร์ต UDP คุณอาจลองกับไคลเอ็นต์ที่คุณกำลังจะใช้เพื่อเชื่อมต่อ (ฉันเห็นว่าคุณใช้พอร์ต 224 นี่คือ masqdialer และฉันไม่รู้ว่ามันคืออะไร)
หากบริการอยู่ที่นั่น แต่คุณไม่สามารถเข้าถึงได้จากภายนอกแสดงว่ามีไฟร์วอลล์ที่บล็อกคุณ ในกรณีดังกล่าวให้เรียกใช้:
iptables -L -n
นี่จะแสดงกฎไฟร์วอลล์ทั้งหมดตามที่กำหนดไว้ในระบบของคุณ คุณสามารถโพสต์ได้ แต่โดยทั่วไปหากคุณไม่อนุญาตให้ทุกอย่างในเครือข่าย INPUT คุณอาจต้องอนุญาตการรับส่งข้อมูลบนพอร์ตที่เป็นปัญหาอย่างชัดเจน:
iptables -I INPUT -p tcp --dport 224 -j ACCEPT
หรือบางสิ่งบางอย่างตามสายเหล่านั้น อย่าเรียกใช้คำสั่งไฟร์วอลล์ของคุณสุ่มสี่สุ่มห้าตามสิ่งที่คนแปลกหน้าบางคนบอกคุณบนอินเทอร์เน็ต พิจารณาสิ่งที่คุณทำ
หากไฟร์วอลล์ของคุณในกล่องอนุญาตการรับส่งข้อมูลที่คุณต้องการ บริษัท โฮสติ้งของคุณอาจใช้ไฟร์วอลล์ (เช่นพวกเขาอนุญาตให้ SSH (22 / tcp), HTTP (80 / tcp) และ HTTPS (443 / tcp) เท่านั้น และปฏิเสธการรับส่งข้อมูลอื่น ๆ ทั้งหมด) ในกรณีนี้คุณจะต้องเปิดตั๋วฝ่ายช่วยเหลือเพื่อแก้ไขปัญหานี้ แต่ฉันคิดว่าอาจมีบางอย่างใน cPanel ของคุณที่อาจอนุญาต
ฉันใช้คอมโบของnetstat
และlsof
:
netstat -an | grep <portnumber>
lsof -i:<portnumber>
เพื่อดูว่ามีการใช้พอร์ตและสิ่งที่ใช้อยู่
หากคุณเชื่อมต่อกับระบบและสามารถเรียกใช้คำสั่งในฐานะ root คุณสามารถตรวจสอบผลลัพธ์ของ iptables
iptables -L -vn
นี้จะแสดงรายการกฎไฟร์วอลล์และพอร์ตที่มีเป้าหมายเปิดACCEPT
และปิดพอร์ตใด ๆ REJECT
อย่างชัดเจนกำหนดเป้าหมาย
firewall-cmd --query-port=port/protocol
firewall-cmd --query-port=80/tcp
lsof -i :ssh
จะแสดงรายการกระบวนการทั้งหมดที่เปิดพอร์ต ssh ทั้งการเชื่อมต่อการฟังและการใช้งาน
sudo
ถ้ามันไม่ส่งคืนผลลัพธ์ใด ๆ