วิธีเปิด Port บน Linux Server แบบละเอียดทุกขั้นตอน
การเปิด port บน Linux คือการตั้งค่า firewall ให้อนุญาตการเชื่อมต่อเข้ามายัง port ที่ต้องการ สามารถทำได้ผ่านเครื่องมือ 3 ตัวหลัก ได้แก่ iptables, firewalld และ ufw ขึ้นอยู่กับ Linux distribution ที่ใช้ บทความนี้จะอธิบายวิธีเปิด port ครบทุกเครื่องมือพร้อมข้อควรระวังด้านความปลอดภัย
ทำความเข้าใจเรื่อง Port และ Firewall
Port คือหมายเลขที่ใช้ระบุ service หรือ application ที่ทำงานอยู่บนเซิร์ฟเวอร์ เช่น port 80 สำหรับ HTTP, port 443 สำหรับ HTTPS, port 22 สำหรับ SSH โดยปกติ firewall ของ Linux จะบล็อกการเชื่อมต่อเข้ามาทุก port ยกเว้นที่อนุญาตไว้
สำหรับผู้ที่ใช้บริการ VPS หรือ Dedicated Server การตั้งค่า firewall ที่ถูกต้องเป็นพื้นฐานสำคัญของการรักษาความปลอดภัยของเซิร์ฟเวอร์
ตรวจสอบ Port ที่เปิดอยู่ก่อน
ก่อนจะเปิด port ใหม่ ควรตรวจสอบก่อนว่ามี port ไหนเปิดอยู่แล้ว ใช้คำสั่ง ss ดังนี้
sudo ss -tulnp
ตัวอย่างผลลัพธ์:
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:((sshd,pid=1234,fd=3))
LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:((nginx,pid=5678,fd=6))
LISTEN 0 511 0.0.0.0:443 0.0.0.0:* users:((nginx,pid=5678,fd=7))
หากต้องการตรวจสอบ port เฉพาะ เช่น port 3306:
sudo ss -tulnp | grep 3306
เปิด Port ด้วย iptables
iptables เป็น firewall พื้นฐานที่มีอยู่ในทุก Linux distribution
เปิด port TCP
sudo iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
เปิด port สำหรับ IP เฉพาะ
sudo iptables -A INPUT -p tcp -s 192.168.1.100 --dport 3306 -j ACCEPT
เปิดช่วง port
sudo iptables -A INPUT -p tcp --dport 8000:8100 -j ACCEPT
บันทึกกฎ iptables
กฎที่เพิ่มด้วย iptables จะหายไปเมื่อรีบูต ต้องบันทึกไว้
บน CentOS หรือ RHEL:
sudo service iptables save
บน Ubuntu หรือ Debian:
sudo apt install iptables-persistent
sudo netfilter-persistent save
ดูกฎทั้งหมดที่ตั้งค่าไว้:
sudo iptables -L -n -v
เปิด Port ด้วย firewalld
firewalld เป็น firewall manager ที่มาพร้อมกับ CentOS 7 ขึ้นไป และ Fedora ใช้งานง่ายกว่า iptables เพราะมีระบบ zone
เปิด port แบบถาวร
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --reload
เปิด service แทนการระบุ port
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=https --permanent
sudo firewall-cmd --reload
ตรวจสอบ port ที่เปิดอยู่
sudo firewall-cmd --zone=public --list-ports
sudo firewall-cmd --zone=public --list-services
เปิด Port ด้วย UFW
UFW (Uncomplicated Firewall) เป็น firewall ที่ออกแบบมาให้ใช้งานง่าย มาพร้อมกับ Ubuntu
เปิด port
sudo ufw allow 8080/tcp
เปิด port สำหรับ IP เฉพาะ
sudo ufw allow from 192.168.1.100 to any port 3306 proto tcp
ตรวจสอบสถานะ
sudo ufw status verbose
ตัวอย่างผลลัพธ์:
Status: active
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
8080/tcp ALLOW Anywhere
3306/tcp ALLOW 192.168.1.100
ทดสอบว่า Port เปิดสำเร็จหรือไม่
หลังจากเปิด port แล้ว ควรทดสอบจากเครื่องอื่น:
nc -zv 203.0.113.10 8080
หรือใช้ nmap สแกน:
nmap -p 8080 203.0.113.10
ถ้าเชื่อมต่อได้แสดงว่า port เปิดสำเร็จ ถ้าไม่ได้ให้ตรวจสอบว่ามี service กำลัง listen อยู่ที่ port นั้นหรือไม่ และ firewall rule ถูกต้องหรือไม่
ข้อควรระวังในการเปิด Port
การเปิด port ทุกครั้งหมายความว่าเพิ่มช่องทางที่ผู้ไม่ประสงค์ดีอาจใช้โจมตีเซิร์ฟเวอร์ได้ ควรเปิดเฉพาะ port ที่จำเป็น และจำกัด source IP ถ้าเป็นไปได้
ไม่ควรเปิด port ของ database เช่น 3306 (MySQL) หรือ 5432 (PostgreSQL) ให้เข้าถึงได้จากทุก IP ควรจำกัดเฉพาะ IP ที่ต้องการเท่านั้น
สำหรับผู้ที่ใช้บริการ Hosting ที่มี control panel มักจะมี firewall GUI ให้ตั้งค่าได้สะดวก ไม่ต้องใช้ command line
คำถามที่พบบ่อย
เปิด port แล้วทำไมยังเชื่อมต่อไม่ได้?
สาเหตุที่พบบ่อยคือไม่มี service กำลัง listen อยู่ที่ port นั้น ลองตรวจสอบด้วย:
sudo ss -tlnp | grep <port>
นอกจากนี้อาจมี firewall อื่นบล็อกอยู่ เช่น cloud provider firewall (Security Group)
iptables กับ ufw ใช้ตัวไหนดีกว่า?
ufw เหมาะสำหรับผู้เริ่มต้นเพราะใช้งานง่ายกว่า ส่วน iptables เหมาะสำหรับผู้ที่ต้องการควบคุมรายละเอียดมากขึ้น ทั้งสองทำงานบน netfilter เหมือนกัน
เปิด port ช่วง 1-65535 ทั้งหมดได้ไหม?
ทำได้แต่ไม่แนะนำอย่างยิ่ง เพราะจะเปิดช่องโหว่ให้ถูกโจมตีได้ง่าย ควรเปิดเฉพาะ port ที่ใช้งานจริงเท่านั้น
เปิด port แล้วต้อง restart server ไหม?
ไม่ต้อง การเปิด port ผ่าน firewall มีผลทันที ไม่จำเป็นต้อง restart server แต่สำหรับ firewalld ต้อง reload ด้วยคำสั่ง:
sudo firewall-cmd --reload
ตั้งค่า Firewall ได้ง่ายกับ DriteStudio
การเปิด port บน Linux สามารถทำได้ผ่าน iptables, firewalld หรือ ufw ขึ้นอยู่กับ distribution ที่ใช้ สิ่งสำคัญคือเปิดเฉพาะ port ที่จำเป็นและจำกัดการเข้าถึงให้มากที่สุด หากคุณต้องการ VPS หรือ Dedicated Server ที่ตั้งค่า firewall มาให้พร้อมใช้งาน ติดต่อ DriteStudio วันนี้เพื่อรับเซิร์ฟเวอร์ที่ปลอดภัยและพร้อมใช้งานทันที