ในเครือข่าย พอร์ตเป็นคุณลักษณะที่น่าสนใจ เป็นช่องทางสำหรับการรับส่งข้อมูลเครือข่ายเพื่อระบุแอปหรือบริการปลายทาง แต่ละกระบวนการ/บริการได้รับพอร์ตที่ไม่ซ้ำกัน พอร์ตจะเชื่อมโยงกับที่อยู่ IP ของโฮสต์พร้อมกับโปรโตคอลเสมอ
นี่เป็นคำอุปมาที่ฉันชื่นชอบในการอธิบายว่าท่าเรือคืออะไร ลองนึกภาพเรือบรรทุกสินค้าซึ่งจะเดินทางไปยังดินแดนที่ห่างไกล ต้องใช้ข้อมูลอะไรบ้างในการไปถึงที่หมายอย่างถูกต้อง? เพื่อความง่าย สมมติว่าต้องการประเทศ (ที่อยู่ IP) และ ท่า เรือจะเทียบท่า
ในคู่มือนี้ ให้ดูวิธีการแสดงรายการพอร์ตที่เปิดอยู่บน Linux
พอร์ตบน Linux
พอร์ตทำหน้าที่เป็นจุดสิ้นสุดของการสื่อสาร เป็นตัวเลข 16 บิต (0 ถึง 65535 เป็นทศนิยม) แม้ว่าพอร์ตจะมีขนาดใหญ่ แต่เพื่อความสะดวกในการใช้งาน พอร์ตจะแบ่งออกเป็นสามประเภท แต่ละหมวดหมู่จะมีป้ายกำกับเป็นช่วงของค่าพอร์ต:
- 0 ถึง 1023: พอร์ตเหล่านี้เป็นพอร์ตที่รู้จักกันดี หรือที่เรียกว่าพอร์ตระบบ ซึ่งสงวนไว้สำหรับกระบวนการของระบบที่ให้บริการเครือข่ายที่หลากหลาย ในการผูกกับพอร์ตที่รู้จักกันดี กระบวนการต้องมีสิทธิ์ผู้ใช้ระดับสูง
- 1024 ถึง 49151: พอร์ตเหล่านี้คือพอร์ตที่ลงทะเบียน หรือที่เรียกว่าพอร์ตผู้ใช้ ซึ่งกำหนดโดย IANA สำหรับบริการเฉพาะ เมื่อมีการร้องขอ กระบวนการอาจเข้าถึงได้ ในกรณีของระบบส่วนใหญ่ ไม่ต้องการสิทธิ์ superuser ใด ๆ เพื่อใช้พอร์ตเหล่านี้
- 49152 ถึง 65535: เหล่านี้คือพอร์ตไดนามิกหรือที่เรียกว่าพอร์ตส่วนตัว พอร์ตเหล่านี้ไม่สามารถลงทะเบียนกับ IANA ได้ พอร์ตเหล่านี้เปิดให้ใช้สำหรับบริการส่วนตัวหรือแบบกำหนดเอง และอาจได้รับการจัดสรรโดยอัตโนมัติเป็นพอร์ตชั่วคราว (พอร์ตอายุสั้นที่ใช้โดย IP)
ใน Linux มีหลายวิธีในการตรวจสอบพอร์ตที่เปิดอยู่ โดยค่าเริ่มต้น พอร์ตใด ๆ จะยังคงปิดอยู่เว้นแต่ว่าแอพกำลังใช้งานอยู่ หากพอร์ตเปิดอยู่ จะต้องกำหนดให้กับบริการ/กระบวนการ
แสดงรายการพอร์ตที่เปิดอยู่
การระบุพอร์ตที่ใช้งานง่ายกว่าการระบุพอร์ตที่เปิดอยู่ นั่นเป็นเหตุผลที่ส่วนต่อไปนี้จะแสดงวิธีการแสดงรายการพอร์ตทั้งหมดที่ใช้งานอยู่ในปัจจุบัน ใน Linux มีเครื่องมือหลายอย่างที่พร้อมใช้งาน ส่วนใหญ่มาในตัวใน Linux distro ใด ๆ
การเรียนรู้ว่าพอร์ตใดที่เปิดอยู่ในปัจจุบันมีประโยชน์ในสถานการณ์ต่างๆ เป็นไปได้ที่จะกำหนดค่าพอร์ตเฉพาะสำหรับแอพพลิเคชั่นบางตัว พอร์ตที่เปิดอยู่อาจเป็นสัญญาณบ่งบอกถึงการบุกรุกในเครือข่ายได้เป็นอย่างดี
วิธีการต่อไปนี้แสดงให้เห็นบน Ubuntu 20.04.1 LTS
แสดงรายการโปรโตคอลและพอร์ตที่เปิดจาก /etc/services
ไฟล์ /etc/services มีข้อมูลเกี่ยวกับบริการที่กำลังทำงานอยู่ เป็นไฟล์ขนาดใหญ่พร้อมที่จะถูกครอบงำ
$แมว /ฯลฯ/บริการ| น้อย
แสดงรายการพอร์ตที่เปิดโดยใช้ netstat
เครื่องมือ netstat เป็นยูทิลิตี้สำหรับแสดงการเชื่อมต่อเครือข่ายสำหรับ TCP ตารางเส้นทาง และอินเทอร์เฟซเครือข่ายต่างๆ นอกจากนี้ยังมีสถิติโปรโตคอลเครือข่าย โดยใช้ netstat เราสามารถแสดงรายการพอร์ตที่เปิดอยู่ทั้งหมดของระบบได้
รันคำสั่ง netstat ต่อไปนี้:
$netstat -atu
มาดูรายละเอียดแฟล็กทั้งหมดที่เราใช้ในคำสั่งนี้กัน
- ถึง : บอกให้ netstat แสดง socket ทั้งหมด
- NS : บอกให้ netstat แสดงรายการพอร์ต TCP
- ยู : บอกให้ netstat แสดงรายการพอร์ต UDP
นี่เป็นอีกรูปแบบหนึ่งของคำสั่ง netstat:
$netstat -lntu
มีสองแฟล็กใหม่ที่ใช้ในคำสั่ง พวกเขาหมายถึงอะไร?
- NS : บอกให้ netstat พิมพ์เฉพาะซ็อกเก็ตการฟัง
- NS : บอกให้ netstat แสดงหมายเลขพอร์ต
ในการแสดง PID ของกระบวนการที่ใช้พอร์ต ให้ใช้แฟล็ก -p:
$netstat -Intup
แสดงรายการพอร์ตที่เปิดโดยใช้ ss
เครื่องมือ ss เป็นเครื่องมือสำหรับตรวจสอบซ็อกเก็ต การใช้งานคล้ายกับ netstat
ในการแสดงรายการพอร์ตที่เปิดอยู่ ให้รันคำสั่ง ss ต่อไปนี้:
$NS-lntu
แฟล็กนั้นคล้ายกับ netstat ฟังก์ชั่นที่พวกเขาอธิบายนั้นค่อนข้างคล้ายกัน
- NS : บอกให้ ss แสดงซ็อกเก็ตการฟัง
- NS : บอก ss อย่าพยายามแก้ชื่อบริการ
- NS : บอกให้ ss แสดง TCP sockets
- ยู : บอกให้ ss แสดงซ็อกเก็ต UDP
แสดงรายการพอร์ตที่เปิดโดยใช้lsof
คำสั่ง lsof คือแสดงรายการไฟล์ที่เปิดอยู่ อย่างไรก็ตาม สามารถใช้เพื่อแสดงพอร์ตที่เปิดอยู่ได้
รันคำสั่ง lsof ต่อไปนี้:
$lsof-ผม
ในการรับพอร์ตที่เปิดอยู่ของโปรโตคอลเฉพาะ (TCP, UDP เป็นต้น) จากนั้นให้กำหนดพอร์ตหลังแฟล็ก -i ให้ใช้:
$lsof-ผม <มาตรการ>
แสดงรายการพอร์ตที่เปิดโดยใช้ nmap
เครื่องมือ nmap เป็นเครื่องมือที่ทรงพลังสำหรับการสำรวจเครือข่ายและการรักษาความปลอดภัย/การสแกนพอร์ต สามารถรายงานพอร์ตที่เปิดอยู่ในระบบทั้งหมด
หากต้องการแสดงรายการพอร์ต TCP ที่เปิดอยู่ ให้เรียกใช้คำสั่ง nmap ต่อไปนี้ ที่นี่ ที่อยู่ IP เป็นของคอมพิวเตอร์โฮสต์:
$sudo nmap -เซนต์ -NS-localhost
ในที่นี้ อาร์กิวเมนต์คำสั่งมีสองส่วน
- -เซนต์ : ส่วนนี้บอกให้ nmap สแกนหาพอร์ต TCP
- -NS- : สิ่งนี้บอกให้ nmap สแกนหาพอร์ตทั้งหมด 65535 พอร์ต หากไม่ได้ใช้ nmap จะสแกนพอร์ตเพียง 1,000 พอร์ตตามค่าเริ่มต้น
หากคุณต้องการแสดงรายการพอร์ต UDP ที่เปิดอยู่ ให้รันคำสั่ง nmap ต่อไปนี้:
$sudo nmap -ของมัน -NS-localhost
ในการรับทั้งพอร์ต TCP และ UDP ที่เปิดอยู่ ให้ใช้คำสั่งต่อไปนี้:
$sudo nmap -NS -PN -เซนต์ -ของมัน -NS-localhostแสดงรายการพอร์ตที่เปิดโดยใช้ netcat
เครื่องมือ netcat เป็นยูทิลิตี้บรรทัดคำสั่งสำหรับการอ่านและเขียนข้อมูลผ่านการเชื่อมต่อเครือข่ายผ่านโปรโตคอล TCP และ UDP เครื่องมือนี้ยังสามารถใช้สำหรับแสดงรายการพอร์ตที่เปิดอยู่ สามารถทำการทดสอบกับพอร์ตเฉพาะหรือช่วงของพอร์ตได้
คำสั่ง netcat ต่อไปนี้จะสแกนพอร์ตตั้งแต่ 1 ถึง 1000 คำสั่ง netcat จะทำการสแกนบนโปรโตคอล TCP โดยค่าเริ่มต้น:
$nc-กับ -vlocalhost1-1000
นอกจากนี้ยังสามารถขยายไปยังรายการพอร์ตที่เป็นไปได้ทั้งหมด:
$nc-กับ -vlocalhost1-65535
มาดูรายละเอียดอย่างรวดเร็วของธงกัน
- กับ : บอกให้ netcat สแกนเฉพาะพอร์ตที่เปิดอยู่โดยไม่ส่งข้อมูลใดๆ
- วี : บอกให้ netcat ทำงานในโหมด verbose
หากต้องการรับเฉพาะพอร์ตที่เปิดอยู่จากรายการนี้ ให้กรองเอาต์พุตด้วย grep สำหรับคำที่สำเร็จ
$nc-กับ -vlocalhost0-65535 2> &1 | กริปที่ประสบความสำเร็จหากคุณต้องการสแกนบนโปรโตคอล UDP ให้เพิ่มแฟล็ก -u
$nc-กับ -v -ยูlocalhost0-65535 2> &1 | กริปที่ประสบความสำเร็จความคิดสุดท้าย
ดังที่แสดงไว้ มีหลายวิธีในการสแกนหาพอร์ตที่เปิดอยู่บน Linux ฉันขอแนะนำให้ลองใช้วิธีการทั้งหมดก่อนที่คุณจะตัดสินใจว่าจะใช้วิธีใดเป็นผู้เชี่ยวชาญ หากคุณกำลังใช้เครื่องมือบางอย่าง เช่น netcat หรือ nmap เป็นประจำ การเรียนรู้วิธีการที่เกี่ยวข้องจะเป็นประโยชน์มากที่สุด
มีความสุขในการคำนวณ!