การตรวจสอบพอร์ตที่เปิดอยู่บน Linux เป็นทักษะพื้นฐานที่ขาดไม่ได้สำหรับทุกคนที่ดูแลเซิร์ฟเวอร์ แก้ปัญหาเครือข่าย หรือเสริมความปลอดภัยให้ระบบ พอร์ตที่เปิดอยู่เปรียบเหมือนประตูทางเข้าสู่ระบบของคุณ ถ้าไม่รู้ว่าประตูไหนเปิดอยู่บ้าง ก็ไม่มีทางรักษาความปลอดภัยได้อย่างถูกต้อง ไม่ว่าจะเป็นการรัน web server บน Ubuntu จัดการ VPS หรือวิเคราะห์ปัญหาการเชื่อมต่อ การดูรายการพอร์ตที่เปิดอยู่ช่วยให้เห็นภาพรวมชัดเจนว่าระบบกำลังเปิดเผยอะไรสู่เครือข่ายบ้าง คู่มือนี้รวบรวม 4 วิธีที่ใช้งานได้จริง พร้อมอธิบายการกรองผลลัพธ์ และแสดงวิธีปิดพอร์ตที่ไม่จำเป็นครับ
สรุปสิ่งสำคัญ:
- คำสั่ง
ssเป็นวิธีที่ทันสมัยและเร็วที่สุดในการแสดงรายการพอร์ตที่เปิดอยู่บน Linux nmapช่วยสแกนพอร์ตจากมุมมองภายนอก ซึ่งสะท้อนสิ่งที่ผู้โจมตีมองเห็นได้จริง- ใช้
lsofเพื่อระบุทันทีว่า process ใดครอบครองพอร์ตนั้นอยู่ - การปิดพอร์ตที่ไม่จำเป็นด้วย
ufwหรือiptablesเป็นวิธีตรงที่สุดในการลด attack surface
สารบัญ
- ทำไมการตรวจสอบพอร์ตที่เปิดอยู่บน Linux จึงสำคัญ
- วิธีที่ 1 - คำสั่ง ss (แนะนำ สมัยใหม่)
- วิธีที่ 2 - คำสั่ง netstat (เก่าแต่ยังนิยม)
- วิธีที่ 3 - การสแกนพอร์ตด้วย nmap (มุมมองภายนอก)
- วิธีที่ 4 - คำสั่ง lsof (แมป process กับพอร์ต)
- การกรองผลลัพธ์ตามพอร์ต, TCP, หรือ UDP
- การปิดหรือบล็อกพอร์ตด้วย ufw หรือ iptables
- สรุป
- FAQ - คำถามที่พบบ่อย
ทำไมการตรวจสอบพอร์ตที่เปิดอยู่บน Linux จึงสำคัญ
ทุก service ที่รันอยู่บนเครื่อง Linux จะ listen บนพอร์ตหนึ่งหรือหลายพอร์ต SSH listen บนพอร์ต 22, HTTP บนพอร์ต 80, HTTPS บนพอร์ต 443 แต่หลังจากติดตั้งและถอนซอฟต์แวร์มาหลายเดือน เซิร์ฟเวอร์มักมีพอร์ตที่เปิดค้างอยู่โดยไม่มีใครตั้งใจเปิดไว้ database daemon ที่ถูกลืมทิ้งไว้โดย listen บนพอร์ต 5432 โดยไม่มี firewall rule คุ้มกัน คือความเสี่ยงในโลกจริงที่เคยนำไปสู่การรั่วไหลของข้อมูลมาแล้ว
การตรวจสอบพอร์ตที่เปิดอยู่บน Linux ช่วยให้คุณ:
- ตรวจสอบว่า service ใดกำลังรันและเปิดเผยตัวเองอยู่จริง
- วิเคราะห์สาเหตุที่แอปพลิเคชันไม่สามารถเชื่อมต่อกับ service อื่นได้
- ยืนยันว่า firewall rule ทำงานได้ตามที่ตั้งใจไว้
- เตรียมพร้อมสำหรับการตรวจสอบความปลอดภัยหรือการทดสอบเจาะระบบ
วิธีการด้านล่างครอบคลุมทั้งการตรวจสอบจากภายใน (สิ่งที่เครื่องรายงานตัวเอง) และการสแกนจากภายนอก (สิ่งที่ remote host มองเห็น) ทั้งสองมุมมองล้วนสำคัญครับ
วิธีที่ 1 - คำสั่ง ss (แนะนำ สมัยใหม่)
คำสั่ง ss (socket statistics) เข้ามาแทนที่ netstat บน Linux distro สมัยใหม่ส่วนใหญ่แล้ว มันเร็วกว่า ให้รายละเอียดมากกว่า และเป็นส่วนหนึ่งของ package iproute2 ที่ติดมาพร้อมกับ Ubuntu, Debian, CentOS และ Fedora ตั้งแต่แรก
เพื่อแสดงรายการพอร์ตที่เปิดอยู่ทั้งหมดพร้อมชื่อ process ให้รัน:
sudo ss -tulnpความหมายของแต่ละ flag:
-t- แสดง TCP socket-u- แสดง UDP socket-l- แสดงเฉพาะ socket ที่กำลัง listen อยู่-n- แสดงเป็นตัวเลขพอร์ตแทนชื่อ service-p- แสดง process ที่ใช้งาน socket นั้น
ตัวอย่างจริง: บน Ubuntu server ที่เพิ่งติดตั้ง Nginx และ PostgreSQL ผลลัพธ์อาจออกมาแบบนี้:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
tcp LISTEN 0 128 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=1234,fd=6))
tcp LISTEN 0 128 127.0.0.1:5432 0.0.0.0:* users:(("postgres",pid=5678,fd=5))
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=910,fd=3))สังเกตว่า PostgreSQL ผูกอยู่กับ 127.0.0.1 เท่านั้น หมายความว่าไม่สามารถเข้าถึงได้จากภายนอก ส่วน SSH และ Nginx ผูกอยู่กับ 0.0.0.0 ซึ่งหมายความว่ารับการเชื่อมต่อจาก IP ใดก็ได้ ผลลัพธ์เพียงชุดเดียวนี้บอกเรื่องของ exposure ได้มากมายครับ
สำหรับข้อมูลอ้างอิงครบถ้วนเกี่ยวกับ option ทั้งหมดของ ss ดูได้ที่ หน้า man อย่างเป็นทางการของ ss
วิธีที่ 2 - คำสั่ง netstat (เก่าแต่ยังนิยม)
คำสั่ง netstat เป็นส่วนหนึ่งของ package เก่าอย่าง net-tools ปัจจุบันหลาย distro ไม่ได้ติดตั้งมาให้ตั้งแต่แรกแล้ว แต่ยังคงใช้กันอย่างแพร่หลายและควรรู้จักไว้ โดยเฉพาะเมื่อต้องทำงานกับระบบเก่า
ติดตั้งถ้ายังไม่มี:
sudo apt install net-tools # Debian/Ubuntu
sudo yum install net-tools # CentOS/RHELแสดงรายการพอร์ตที่เปิดอยู่บน Linux ด้วย netstat:
sudo netstat -tulnpความหมายของ flag เหมือนกับ ss ทุกประการ รูปแบบผลลัพธ์ต่างกันเล็กน้อย แต่ให้ข้อมูลหลักเหมือนกัน ได้แก่ protocol, local address, พอร์ต และ process ที่เป็นเจ้าของ
ข้อจำกัดที่ควรรู้ คือบนเซิร์ฟเวอร์ที่มีการเชื่อมต่อหลายพันรายการ netstat จะช้ากว่า ss อย่างเห็นได้ชัด แต่สำหรับงานทั่วไปบนเซิร์ฟเวอร์ปกติ ความแตกต่างนี้แทบไม่มีนัยสำคัญครับ
วิธีที่ 3 - การสแกนพอร์ตด้วย nmap (มุมมองภายนอก)
เครื่องมือข้างต้นแสดงสิ่งที่เครื่องรายงานจากภายใน แต่ nmap ใช้แนวทางที่ต่างออกไป มันสแกนพอร์ตผ่านเครือข่าย จำลองสิ่งที่ผู้โจมตีจากภายนอกหรือ remote client จะมองเห็น ซึ่งสำคัญมาก เพราะ firewall อาจบล็อกพอร์ตที่ ss ยังแสดงว่ากำลัง listen อยู่
ติดตั้ง nmap:
sudo apt install nmap # Debian/Ubuntu
sudo yum install nmap # CentOS/RHELสแกนเซิร์ฟเวอร์จากเครื่องอื่นในเครือข่ายเดียวกัน:
nmap -sT -p 1-1024 192.168.1.10สแกน 1,000 พอร์ตที่ใช้บ่อยที่สุดพร้อมตรวจจับเวอร์ชัน service:
nmap -sV 192.168.1.10flag -sV พยายามตรวจจับเวอร์ชันซอฟต์แวร์ที่รันอยู่บนแต่ละพอร์ตที่เปิด ซึ่งมีประโยชน์สำหรับการระบุ service ที่ล้าสมัยและต้องการ patch
สำคัญ: รัน nmap เฉพาะกับเซิร์ฟเวอร์ที่คุณเป็นเจ้าของหรือได้รับอนุญาตอย่างชัดเจนเท่านั้น การสแกนระบบของบุคคลที่สามโดยไม่ได้รับอนุญาตอาจผิดกฎหมายในเขตอำนาจศาลของคุณ
ถ้าต้องการตรวจสอบว่าพอร์ตหนึ่งเข้าถึงได้จากภายนอกเครือข่ายโดยไม่ต้องติดตั้ง nmap เครื่องมือ Port Checker ฟรีของเราจัดการได้ทันที ไม่ต้องตั้งค่าใดๆ ทั้งนั้นครับ
วิธีที่ 4 - คำสั่ง lsof (แมป process กับพอร์ต)
คำสั่ง lsof (list open files) มองว่า network socket เป็นไฟล์ ซึ่งสอดคล้องกับปรัชญา "everything is a file" ของ Linux มีประโยชน์เป็นพิเศษเมื่อต้องการตอบคำถามว่า "process ใดกำลังใช้พอร์ต 8080 อยู่?"
แสดง network connection ทั้งหมด:
sudo lsof -iค้นหา process ที่ใช้พอร์ตที่ระบุ (เช่น พอร์ต 3000):
sudo lsof -i :3000วิธีนี้มีประโยชน์มากเมื่อแอปพลิเคชัน Node.js ของนักพัฒนากำลังครอบครองพอร์ตอยู่ และต้องการระบุและหยุด process นั้นก่อนจะรีสตาร์ท service
การกรองผลลัพธ์ตามพอร์ต, TCP, หรือ UDP
ผลลัพธ์ดิบจากเครื่องมือเหล่านี้อาจดูรกตาได้ ต่อไปนี้คือรูปแบบการกรองที่มีประโยชน์ที่สุด:
แสดงเฉพาะพอร์ต TCP ที่กำลัง listen (ss):
sudo ss -tlnpแสดงเฉพาะพอร์ต UDP (ss):
sudo ss -ulnpตรวจสอบว่าพอร์ตที่ระบุเปิดอยู่หรือไม่ (grep ร่วมกับ ss):
sudo ss -tulnp | grep :443กรองตามพอร์ตด้วย nmap:
nmap -p 80,443,8080 192.168.1.10รูปแบบเหล่านี้ครอบคลุมความต้องการการกรองในงานประจำวันได้เกือบทั้งหมด สำหรับการแก้ปัญหา HTTP เฉพาะบนพอร์ต 80 ดูได้ที่ คู่มือแก้ปัญหา HTTP บนพอร์ต 80
ถ้าคุณใช้ Windows และต้องการคู่มือแบบเดียวกัน ดูได้ที่ คู่มือครบถ้วนสำหรับการตรวจสอบพอร์ตที่เปิดอยู่บน Windows 2026
การปิดหรือบล็อกพอร์ตด้วย ufw หรือ iptables
การพบพอร์ตที่เปิดอยู่โดยไม่จำเป็นเป็นเพียงครึ่งทางเท่านั้น ต่อไปนี้คือวิธีปิดพอร์ตด้วย firewall tool ที่นิยมใช้บน Linux สองตัว
ใช้ ufw (Uncomplicated Firewall) - แนะนำสำหรับ Ubuntu
บล็อก traffic ขาเข้าบนพอร์ต 8080:
sudo ufw deny 8080/tcpอนุญาตเฉพาะ SSH และ HTTPS และปฏิเสธทุกอย่างที่เหลือ:
sudo ufw default deny incoming
sudo ufw allow 22/tcp
sudo ufw allow 443/tcp
sudo ufw enableตรวจสอบสถานะ firewall ปัจจุบัน:
sudo ufw status verboseใช้ iptables - สำหรับการควบคุมขั้นสูง
ดรอป traffic ขาเข้าทั้งหมดบนพอร์ต 3306 (MySQL):
sudo iptables -A INPUT -p tcp --dport 3306 -j DROPบันทึก rule เพื่อให้คงอยู่หลังรีบูต:
sudo iptables-save | sudo tee /etc/iptables/rules.v4สำหรับข้อมูลอ้างอิงเชิงลึกเกี่ยวกับ syntax และลำดับ rule ของ iptables เอกสารอย่างเป็นทางการของ Netfilter คือแหล่งข้อมูลที่เชื่อถือได้ที่สุดครับ
เคล็ดลับ: การบล็อกพอร์ตด้วย ufw หรือ iptables ไม่ได้หยุด service ที่รันอยู่ แต่เพียงป้องกันไม่ให้การเชื่อมต่อจากภายนอกเข้าถึงได้ ถ้าต้องการหยุด service ทั้งหมด ให้ใช้ sudo systemctl stop servicename และถ้าต้องการให้ไม่เริ่มต้นใหม่หลังรีบูต ให้รัน sudo systemctl disable servicename ด้วย
สรุป
การตรวจสอบพอร์ตที่เปิดอยู่บน Linux ไม่จำเป็นต้องใช้เครื่องมือซับซ้อนหรือความเชี่ยวชาญลึกซึ้ง คำสั่ง ss ให้มุมมองจากภายในที่รวดเร็วและเชื่อถือได้ nmap แสดงสิ่งที่โลกภายนอกสามารถเข้าถึงได้ lsof ระบุได้ชัดเจนว่า process ใดครอบครองพอร์ตนั้น และ ufw หรือ iptables ช่วยปิดทุกอย่างที่ไม่ควรเปิดเผย การรันการตรวจสอบเหล่านี้เป็นประจำ โดยเฉพาะหลังติดตั้งซอฟต์แวร์ใหม่หรือเปลี่ยนการตั้งค่าเครือข่าย เป็นหนึ่งในนิสัยที่ง่ายที่สุดที่จะช่วยรักษาความปลอดภัยให้เซิร์ฟเวอร์ Linux ของคุณ เริ่มด้วย sudo ss -tulnp ตอนนี้เลย แล้วดูว่าเซิร์ฟเวอร์ของคุณกำลังเปิดเผยอะไรอยู่จริงๆ ครับ
ตรวจสอบพอร์ตบนเซิร์ฟเวอร์ Linux ของคุณ - ทันที
ไม่แน่ใจว่าพอร์ตนั้นเข้าถึงได้จากภายนอกจริงหรือเปล่า? เครื่องมือ Port Checker ฟรีของเราสแกนเซิร์ฟเวอร์จากมุมมองภายนอกภายในไม่กี่วินาที ไม่ต้องติดตั้ง ไม่ต้องตั้งค่าใดๆ ทั้งนั้น
ลองใช้เครื่องมือ Port Checker ฟรีของเรา →
FAQ - คำถามที่พบบ่อย
รัน sudo ss -tulnp ใน terminal ครับ วิธีนี้ใช้คำสั่ง ss สมัยใหม่เพื่อแสดงพอร์ต TCP และ UDP ที่กำลัง listen ทั้งหมดพร้อมชื่อ process เร็วกว่า netstat และมีให้ใช้งานตั้งแต่แรกบน Linux distro ปัจจุบันส่วนใหญ่ รวมถึง Ubuntu และ Debian
ทั้งสองคำสั่งแสดงพอร์ตที่เปิดอยู่และข้อมูล socket เหมือนกัน แต่ ss คือตัวแทนสมัยใหม่ของ netstat มันอ่านข้อมูลโดยตรงจาก kernel ทำให้เร็วกว่าและแม่นยำกว่าบนระบบที่มีงานหนัก ส่วน netstat ต้องการ package แยกต่างหากอย่าง net-tools ซึ่งหลาย distro ไม่ได้ติดตั้งมาให้ตั้งแต่แรกแล้ว
ใช้ nmap -p PORT TARGET_IP จากเครื่องอื่นในเครือข่ายครับ สำหรับการตรวจสอบจากภายนอกอย่างรวดเร็วโดยไม่ต้องติดตั้งอะไร ใช้เครื่องมือ port checker แบบเว็บได้เลย วิธีนี้ทดสอบว่าพอร์ตเข้าถึงได้จากภายนอกจริงหรือไม่ โดยคำนึงถึง firewall rule ที่เครื่องมืออย่าง ss ไม่สามารถสะท้อนได้
ใช้ sudo lsof -i :PORT หรือ sudo ss -tulnp | grep :PORT ครับ ทั้งสองคำสั่งแสดงชื่อ process และ PID ที่เชื่อมโยงกับพอร์ตนั้น วิธี lsof มีความชัดเจนเป็นพิเศษเพราะแสดง command, PID และ user ในรูปแบบที่อ่านง่าย
ไม่ครับ การบล็อกพอร์ตด้วย ufw หรือ iptables ป้องกันการเชื่อมต่อจากภายนอกไม่ให้เข้าถึง service ได้ แต่ตัว service ยังคงรันต่อไป เพื่อหยุดมันทั้งหมด ให้ใช้ sudo systemctl stop servicename และถ้าต้องการป้องกันไม่ให้เริ่มต้นใหม่หลังรีบูต ให้รัน sudo systemctl disable servicename ด้วยครับ