SSH Port Customization บน Cloud VPS

Port 22 คือ Default Port ของ SSH ที่ทุก Automated Bot และ Scanner รู้จักดี ทำให้ Server ที่เปิด Port 22 สู่ Internet ต้องรับ Login Attempt จากทั่วโลกตลอด 24 ชั่วโมง การเปลี่ยน Port ไปยังเลขอื่นเป็นวิธีง่ายๆ ที่ช่วยลด Noise ใน Log และลดโอกาสถูก Automated Attack ได้อย่างมีนัยสำคัญ

บทความนี้อธิบายวิธีเปลี่ยน SSH Port บน Linux Server พร้อมขั้นตอนที่ต้องทำก่อนและหลังการเปลี่ยน เพื่อป้องกันการถูก Lock ออกจาก Server

ทำไมถึงควรเปลี่ยน SSH Port

การเปลี่ยน Port ไม่ใช่ Security Through Obscurity อย่างสมบูรณ์ เพราะ Port Scanner อย่าง nmap สามารถ Scan ทุก Port ได้ แต่ประโยชน์หลักคือการลด Automated Brute Force Attack ที่เล็งเป้า Port 22 โดยตรง หลังเปลี่ยน Port ใน Log จะพบการพยายาม Login ที่ไม่ได้รับอนุญาตลดลงอย่างเห็นได้ชัด ทำให้ Fail2ban ทำงานน้อยลงและ Log อ่านง่ายขึ้น

เลือก Port ที่เหมาะสม

Port ที่ดีสำหรับ SSH ควรอยู่ในช่วง 1024–65535 (เพื่อไม่ซ้อนทับกับ Well-Known Ports) และไม่ตรงกับ Port ที่ Service อื่นใช้งานอยู่ ตัวอย่าง Port ที่นิยมใช้ได้แก่ 2222, 8022, 22000, หรือ Port เฉพาะที่ทีมกำหนดเอง ควรหลีกเลี่ยง Port ที่ Service ทั่วไปใช้ เช่น 3306 (MySQL), 6379 (Redis), 8080 (Web)

ขั้นตอนเปลี่ยน SSH Port

กระบวนการเปลี่ยน Port ต้องทำอย่างระมัดระวัง เพราะถ้าทำผิดขั้นตอนอาจถูก Lock ออกจาก Server ได้ ลำดับขั้นตอนที่ปลอดภัยคือ

ขั้นตอนที่ 1: เปิด Firewall Port ใหม่ก่อน

# Ubuntu/Debian — UFW
sudo ufw allow 2222/tcp
sudo ufw status

# RHEL/CentOS — firewalld
sudo firewall-cmd --add-port=2222/tcp --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --list-ports

ขั้นตอนที่ 2: แก้ไข sshd_config

# แก้ไขไฟล์ /etc/ssh/sshd_config
# หา line "Port 22" แล้วเปลี่ยนเป็น port ใหม่
# หรือเพิ่ม Port ทั้งสองไว้พร้อมกันชั่วคราว

Port 22
Port 2222

ขั้นตอนที่ 3: ทดสอบ Config และ Reload

# ตรวจสอบ syntax ก่อน reload
sudo sshd -t

# Reload SSH Service
sudo systemctl reload sshd

# ตรวจสอบว่า Port ใหม่เปิดอยู่
sudo ss -tlnp | grep sshd

ขั้นตอนที่ 4: ทดสอบ Connection บน Port ใหม่ใน Session ใหม่

# ทดสอบ Login ผ่าน Port ใหม่ใน Terminal ใหม่ (อย่าปิด Session เดิม)
ssh -p 2222 user@server-ip

# ถ้า Login สำเร็จ จึงลบ Port 22 ออกจาก sshd_config
# แก้ไข /etc/ssh/sshd_config ให้เหลือแค่
Port 2222

# Reload อีกครั้ง
sudo systemctl reload sshd

ขั้นตอนที่ 5: ปิด Port 22 ใน Firewall

# Ubuntu/Debian — UFW
sudo ufw delete allow 22/tcp
sudo ufw status

# RHEL/CentOS — firewalld
sudo firewall-cmd --remove-service=ssh --permanent
sudo firewall-cmd --remove-port=22/tcp --permanent
sudo firewall-cmd --reload

SELinux — เพิ่มเติมสำหรับ RHEL/CentOS

บน RHEL-based Systems ที่เปิด SELinux อยู่ต้องแจ้ง SELinux ให้รู้จัก Port ใหม่ด้วย ไม่เช่นนั้น SSH จะไม่สามารถ Listen บน Port นั้นได้แม้จะแก้ไข sshd_config แล้วก็ตาม

# ติดตั้ง semanage tool
sudo dnf install policycoreutils-python-utils -y

# เพิ่ม Port ใหม่ใน SELinux Policy
sudo semanage port -a -t ssh_port_t -p tcp 2222

# ตรวจสอบ
sudo semanage port -l | grep ssh

อัพเดต SSH Client Config

หลังเปลี่ยน Port Server แล้ว ต้องอัพเดต Client Config ด้วย ไม่เช่นนั้นต้องระบุ -p ทุกครั้งที่ Login

# ~/.ssh/config บนเครื่อง Client
Host prod-server
    HostName 203.0.113.10
    User deploy
    Port 2222
    IdentityFile ~/.ssh/id_ed25519

# Login โดยไม่ต้องระบุ port
ssh prod-server

Cloud VPS Security Group / Network ACL

บน Cloud VPS หลายผู้ให้บริการมี Firewall ระดับ Network (Security Group หรือ Network ACL) ที่อยู่นอกเหนือจาก OS Firewall อย่าง UFW หรือ firewalld ต้องตรวจสอบและอัพเดตกฎใน Control Panel ของผู้ให้บริการด้วย ไม่เช่นนั้น Port ใหม่จะยังถูก Block โดย Network Layer แม้จะเปิดใน OS แล้วก็ตาม

สรุป

การเปลี่ยน SSH Port เป็นขั้นตอนง่ายที่ให้ผลลัพธ์ชัดเจนในแง่ของการลด Noise จาก Automated Attack ลำดับที่ปลอดภัยคือเปิด Firewall Port ใหม่ก่อน แล้วจึงแก้ไข sshd_config และ Reload จากนั้นทดสอบ Connection บน Port ใหม่ใน Session แยก แล้วจึงปิด Port 22 บน RHEL-based Systems ต้องอย่าลืมอัพเดต SELinux Policy ด้วย

แนะนำบริการ DE

การเปลี่ยน SSH Port และกำหนดค่า Firewall ต้องการสิทธิ์ root และ Network Access Control ที่ยืดหยุ่น Cloud VPS ของ DE ให้สิทธิ์ root เต็มรูปแบบพร้อม Network Firewall ที่จัดการได้ผ่าน Control Panel เหมาะสำหรับทดลองตั้งค่า SSH Port และ Hardening บน Server จริง

หากต้องการโฮสต์เว็บไซต์โดยไม่ต้องจัดการ SSH Port หรือ Firewall เอง Cloud Hosting ของ DE มีระบบความปลอดภัยที่ดูแลให้อัตโนมัติ