การตั้งค่า VPS Ubuntu ครั้งแรก - terminal commands สำหรับ server setup

ได้ VPS Ubuntu มาใหม่สักเครื่อง — ขั้นตอนต่อไปคืออะไร? หลายคนรีบติดตั้ง application ที่ต้องการทันที แต่นั่นเป็นความผิดพลาดที่อาจทำให้ server เสี่ยงต่อการโจมตีได้ทุกวัน การตั้งค่าพื้นฐานให้ถูกต้องตั้งแต่ต้นจะช่วยให้ server ปลอดภัย เสถียร และดูแลรักษาง่ายในระยะยาว บทความนี้รวม 10 ขั้นตอนแรกที่ต้องทำทันทีหลังได้ VPS Ubuntu เพื่อให้ server พร้อมใช้งานอย่างปลอดภัย

💡 สภาพแวดล้อมที่ใช้ในบทความนี้: Ubuntu 22.04 LTS / Ubuntu 24.04 LTS · ทดสอบบน AsiaGB VPS ไทย (CS Loxinfo) และ VPS สิงคโปร์ (OVHcloud SGP) · คำสั่งส่วนใหญ่ใช้ได้กับ Ubuntu ทุกเวอร์ชัน 20.04 ขึ้นไป

1 สร้าง Non-Root User

เมื่อ VPS ใหม่พร้อมใช้งาน คุณมักได้ข้อมูล root พร้อม IP มา ขั้นตอนแรกคือ สร้าง user ใหม่ที่มีสิทธิ์ sudo แล้วหยุดใช้ root โดยตรง เพราะ root มีสิทธิ์เต็มที่ในระบบ คำสั่งผิดพลาดเพียงครั้งเดียวอาจทำลาย server ทั้งหมดได้

# Login ด้วย root ก่อน
ssh root@YOUR_SERVER_IP

# สร้าง user ใหม่ (แทน username ด้วยชื่อที่ต้องการ)
adduser username

# เพิ่ม user เข้ากลุ่ม sudo
usermod -aG sudo username

# ทดสอบ login ด้วย user ใหม่ (เปิด terminal อีกอัน)
ssh username@YOUR_SERVER_IP

# ทดสอบ sudo
sudo whoami
# ควรได้: root
✅ แนะนำ: เลือกชื่อ user ที่ไม่ใช่คำทั่วไป เช่น admin, user, ubuntu เพราะ bot จะลองชื่อเหล่านี้อัตโนมัติ ใช้ชื่อที่เดาได้ยาก

2 ตั้งค่า SSH Key Authentication

SSH key ปลอดภัยกว่า password มาก เพราะใช้การเข้ารหัส asymmetric key ที่แทบเป็นไปไม่ได้ที่จะ brute-force ได้ ทำขั้นตอนนี้บนเครื่องของคุณ (ไม่ใช่บน server)

สร้าง SSH key pair บนเครื่องของคุณ

# บน macOS / Linux (เครื่องของคุณ)
ssh-keygen -t ed25519 -C "[email protected]"
# กด Enter ทุก prompt หรือตั้ง passphrase เพิ่ม security

# Copy public key ไปยัง server
ssh-copy-id username@YOUR_SERVER_IP

# หรือทำด้วยตนเอง
cat ~/.ssh/id_ed25519.pub | ssh username@YOUR_SERVER_IP "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys"

บน Windows (PowerShell / WSL)

# PowerShell (Windows 10/11)
ssh-keygen -t ed25519 -C "[email protected]"

# Copy key ไป server
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh username@YOUR_SERVER_IP "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

ทดสอบ login ด้วย SSH key ก่อนปิด password auth เสมอ:

ssh -i ~/.ssh/id_ed25519 username@YOUR_SERVER_IP

3 ปิด Root Login และ Password Authentication

หลังจาก SSH key ทำงานได้แล้ว ให้ปิด root login และ password auth ทันที เพื่อป้องกัน brute-force attack

# แก้ไข SSH config
sudo nano /etc/ssh/sshd_config

# หา และแก้ไขบรรทัดเหล่านี้:
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes

# รีสตาร์ท SSH service
sudo systemctl restart sshd

# ⚠️ อย่าปิด terminal เก่าก่อนทดสอบ!
# เปิด terminal ใหม่แล้ว test login ก่อนเสมอ
⚠️ คำเตือน: ก่อนปิด password auth ให้แน่ใจว่า SSH key ทำงานได้แล้วใน terminal แยก ถ้า SSH key ไม่ทำงานและปิด password ไปแล้ว คุณอาจถูกล็อคออกจาก server ต้องใช้ console จาก VPS control panel เพื่อเข้าใหม่

4 ตั้งค่า UFW Firewall

UFW (Uncomplicated Firewall) คือ frontend ของ iptables ที่ใช้งานง่าย ช่วยจำกัด traffic ที่เข้า server เฉพาะที่จำเป็น

# ตรวจสอบสถานะ UFW
sudo ufw status

# ตั้งค่า policy เริ่มต้น
sudo ufw default deny incoming
sudo ufw default allow outgoing

# เปิด SSH (สำคัญมาก — ต้องทำก่อน enable UFW)
sudo ufw allow ssh
# หรือถ้าเปลี่ยน SSH port แล้ว:
sudo ufw allow YOUR_SSH_PORT/tcp

# เปิด HTTP และ HTTPS (ถ้าเป็น web server)
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# Enable UFW
sudo ufw enable

# ตรวจสอบ rules ที่เปิด
sudo ufw status verbose

ตัวอย่าง Rules ตามการใช้งาน

การใช้งาน Port คำสั่ง UFW
SSH (default) 22/tcp sudo ufw allow ssh
Web Server HTTP 80/tcp sudo ufw allow 80/tcp
Web Server HTTPS 443/tcp sudo ufw allow 443/tcp
MySQL (local only) 3306/tcp ไม่ต้องเปิด (ใช้ localhost)
Custom SSH port เช่น 2222 sudo ufw allow 2222/tcp
Node.js app เช่น 3000 sudo ufw allow 3000/tcp

5 อัพเดต System Packages

Ubuntu VPS ใหม่มักมี package เก่าที่อาจมีช่องโหว่ความปลอดภัย การอัพเดตทันทีหลังตั้งค่าพื้นฐานเป็นสิ่งสำคัญ

# อัพเดต package list
sudo apt update

# อัพเกรด package ที่ติดตั้งทั้งหมด
sudo apt upgrade -y

# อัพเกรด kernel และ dependencies สำคัญ
sudo apt full-upgrade -y

# ลบ package ที่ไม่จำเป็นแล้ว
sudo apt autoremove -y
sudo apt autoclean

# รีบูต (ถ้ามีการอัพเดต kernel)
sudo reboot
💡 เคล็ดลับ: หลัง sudo apt full-upgrade ถ้ามีข้อความ "A reboot is required" ให้รีบูต server ทันที เพื่อให้ kernel ใหม่ทำงาน และ security patch มีผลจริง

6 ตั้งค่า Swap Space

Swap Space คือพื้นที่บน SSD ที่ใช้แทน RAM เมื่อ memory เต็ม ป้องกันระบบ crash เมื่อ RAM หมด แม้จะช้ากว่า RAM จริง แต่สำคัญมากสำหรับ VPS RAM ต่ำ

ขนาด Swap ที่แนะนำ

RAM ของ VPS Swap ที่แนะนำ หมายเหตุ
512MB - 1GB 1-2GB ใช้ swap บ่อยมาก — พิจารณาอัพเกรด RAM
2GB 2-4GB เหมาะสมสำหรับ WordPress, Node.js เล็กๆ
4GB 2-4GB ใช้ swap น้อย — mostly safety net
8GB+ 1-2GB (optional) ส่วนใหญ่ไม่จำเป็น
# ตรวจสอบ swap ปัจจุบัน
sudo swapon --show
free -h

# สร้าง swap file ขนาด 2GB
sudo fallocate -l 2G /swapfile
# หรือถ้า fallocate ไม่รองรับ:
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048

# ตั้งสิทธิ์ให้ถูกต้อง
sudo chmod 600 /swapfile

# เปิดใช้งาน swap
sudo mkswap /swapfile
sudo swapon /swapfile

# ตรวจสอบ
free -h

# ตั้งให้ใช้ swap ทุกครั้งที่รีบูต
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

# ปรับ swappiness (แนะนำ 10 สำหรับ server)
sudo sysctl vm.swappiness=10
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf

7 ตั้ง Timezone และ Hostname

Timezone ที่ถูกต้องทำให้ timestamp ใน log ไฟล์, cron job, และ SSL certificate ถูกต้องตามเวลาจริง ส่วน Hostname ช่วยระบุ server ได้ง่ายเมื่อมีหลายเครื่อง

# ดู timezone ปัจจุบัน
timedatectl

# ตั้ง timezone เป็นกรุงเทพ (สำหรับ server ไทย)
sudo timedatectl set-timezone Asia/Bangkok

# ดู timezone ที่มีทั้งหมด (ถ้าต้องการ zone อื่น)
timedatectl list-timezones | grep Asia

# ตั้ง Hostname
sudo hostnamectl set-hostname my-server-name

# อัพเดต /etc/hosts ด้วย
sudo nano /etc/hosts
# เพิ่ม: 127.0.1.1   my-server-name

# ยืนยัน
hostname
timedatectl
💡 UTC vs Asia/Bangkok: Server ที่ให้บริการผู้ใช้ไทยอาจตั้ง Asia/Bangkok เพื่อให้ log อ่านง่าย แต่หากมี user หลายประเทศ แนะนำใช้ UTC แล้วจัดการ timezone ใน application layer แทน

8 ติดตั้ง Fail2Ban

Fail2Ban คือโปรแกรมที่คอยตรวจ log ไฟล์แล้ว ban IP ที่พยายาม login ผิดพลาดหลายครั้งอัตโนมัติ ช่วยป้องกัน SSH brute-force attack ได้อย่างมีประสิทธิภาพ

# ติดตั้ง Fail2Ban
sudo apt install fail2ban -y

# สร้าง config ของตัวเอง (อย่าแก้ไฟล์ .conf โดยตรง)
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local

# ค้นหาและแก้ไข section [sshd]:
# enabled = true
# port    = ssh
# maxretry = 5
# bantime  = 3600
# findtime = 600

# เริ่มและ enable Fail2Ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

# ตรวจสอบสถานะ
sudo fail2ban-client status
sudo fail2ban-client status sshd

ดู IP ที่ถูก Ban และ Unban

# ดู IP ที่ถูก ban ทั้งหมด
sudo fail2ban-client status sshd

# Unban IP ที่ต้องการ
sudo fail2ban-client set sshd unbanip YOUR_IP_ADDRESS

# ดู log ของ Fail2Ban
sudo tail -f /var/log/fail2ban.log

9 เปิด Automatic Security Updates

การอัพเดต security patch ด้วยตนเองทุกวันเป็นเรื่องที่ทำได้ยากในทางปฏิบัติ การเปิด unattended-upgrades ช่วยให้ Ubuntu อัพเดต security patch อัตโนมัติ โดยไม่กระทบการทำงานปกติ

# ติดตั้ง unattended-upgrades
sudo apt install unattended-upgrades -y

# เปิดใช้งาน
sudo dpkg-reconfigure --priority=low unattended-upgrades
# เลือก "Yes" เพื่อเปิดใช้งาน

# ดู config ที่ตั้ง
cat /etc/apt/apt.conf.d/50unattended-upgrades

# ทดสอบว่าทำงาน (dry-run)
sudo unattended-upgrades --dry-run --debug
💡 แนะนำ: unattended-upgrades จะอัพเดตเฉพาะ security packages โดย default ไม่อัพเดต application packages ทั่วไป ทำให้ปลอดภัยและไม่กระทบ application ที่รันอยู่

10 ติดตั้ง Monitoring Tools พื้นฐาน

การมี tools ที่ช่วยดู resource usage แบบ real-time ช่วยให้วิเคราะห์ปัญหาได้เร็วกว่ามาก เป็นสิ่งที่ sysadmin ทุกคนควรมีไว้บน server

# ติดตั้ง essential monitoring tools
sudo apt install htop ncdu tree curl wget git -y

# htop — interactive process viewer
htop

# ncdu — disk usage analyzer แบบ interactive
ncdu /

# ดู disk usage
df -h

# ดู memory usage
free -h

# ดู network connections
ss -tulpn

# ดู CPU info
lscpu

# ดู system load
uptime

สรุปเครื่องมือที่ควรติดตั้ง

Tool ใช้ทำอะไร คำสั่ง
htop ดู process, CPU, RAM แบบ real-time htop
ncdu ดูไฟล์ที่กิน disk มากที่สุด ncdu /
ss ดู open ports และ connections ss -tulpn
fail2ban-client ตรวจ IP ที่ถูก ban fail2ban-client status
ufw status ตรวจ firewall rules sudo ufw status verbose

สรุป: Checklist 10 ขั้นตอนหลัง Deploy VPS

นี่คือ checklist สรุปทุกขั้นตอนที่ควรทำหลังได้ VPS Ubuntu ใหม่:

# ขั้นตอน ความสำคัญ เวลา
1 สร้าง non-root sudo user 🔴 บังคับ 2 นาที
2 ตั้งค่า SSH key authentication 🔴 บังคับ 5 นาที
3 ปิด root login และ password auth 🔴 บังคับ 2 นาที
4 ตั้งค่า UFW firewall 🔴 บังคับ 3 นาที
5 อัพเดต system packages 🔴 บังคับ 5-10 นาที
6 ตั้งค่า swap space 🟡 แนะนำ (RAM ต่ำ) 3 นาที
7 ตั้ง timezone และ hostname 🟡 แนะนำ 2 นาที
8 ติดตั้ง Fail2Ban 🟡 แนะนำ 5 นาที
9 เปิด automatic security updates 🟡 แนะนำ 2 นาที
10 ติดตั้ง monitoring tools 🟢 ทำได้เมื่อมีเวลา 2 นาที

การทำ 4 ขั้นตอนแรก (user, SSH key, ปิด root, firewall) ใช้เวลาไม่ถึง 15 นาที แต่ช่วยลดความเสี่ยงจากการโจมตีได้มากกว่า 90% เริ่มต้นจากขั้นตอนเหล่านี้ก่อนที่จะติดตั้ง application ใดๆ บน server เสมอ

ต้องการ VPS ที่พร้อมใช้งานทันที?

AsiaGB VPS ไทย (CS Loxinfo) พร้อม Ubuntu 22.04/24.04 LTS · SSD · Uptime 99% · รองรับ SSH key ตั้งแต่ Deploy · ทีมงานช่วยเหลือตลอด 24 ชั่วโมง

ดูแพ็กเกจ VPS ไทย