วิธีตั้งค่าความปลอดภัย VPS ใหม่ใน 10 นาที
ป้องกันการถูกสแกนหาช่องโหว่ทันทีที่ได้รับ IP ด้วยขั้นตอนการสร้าง User ใหม่ การตั้งค่า SSH Keys การปิด root login และการเปิดใช้งาน Firewall อย่างถูกต้อง
10 นาทีแรกคือตัวตัดสินความปลอดภัยของเซิร์ฟเวอร์คุณ
VPS ที่เพิ่งติดตั้งใหม่ยังไม่มีความปลอดภัย เมื่อได้รับ Public IP แล้ว สแกนเนอร์จะพยายามล็อกอินเข้าสู่ระบบทันที และ Image เริ่มต้นมักเป็นเป้าหมายที่ง่าย เนื่องจากมักเข้าถึง root ได้, อนุญาตให้ใช้รหัสผ่าน และไม่มี Firewall รวมถึงไม่มีการ Patch ระบบตามกำหนดการ ข่าวดีคือการปิดช่องโหว่ทั้งหมดนี้ใช้เวลาเพียงประมาณ 10 นาทีด้วยคำสั่งเพียงไม่กี่คำสั่ง นี่คือ Runbook ที่ผมใช้กับเซิร์ฟเวอร์ใหม่ทุกเครื่องก่อนจะเริ่มใช้งานจริง
ควรทำตามลำดับขั้นตอนเนื่องจากแต่ละขั้นตอนต้องอาศัยสิ่งที่ทำไว้ก่อนหน้า แต่ละขั้นตอนจะมีคู่มือแยกต่างหากซึ่งมีลิงก์ไว้ให้ หน้าเว็บนี้คือเส้นทางลัดที่รวบรวมขั้นตอนทั้งหมดเข้าด้วยกัน
Minute 1: Update everything
ล็อกอินด้วยสิทธิ์ root โดยใช้ข้อมูลที่ผู้ให้บริการระบุให้ และอัปเดตระบบให้เป็นเวอร์ชันล่าสุดก่อนทำอย่างอื่น:
apt update && apt upgrade -yเซิร์ฟเวอร์ที่ไม่ได้ Patch คือเป้าหมายที่ง่ายที่สุด ดังนั้นจึงต้องทำเป็นอันดับแรก เมื่อเสร็จสิ้นแล้ว ให้ตั้งค่าการอัปเดตความปลอดภัยอัตโนมัติเพื่อให้ระบบได้รับการ Patch โดยที่คุณไม่ต้องจำ
Minute 2: Create a normal user with sudo
อย่าทำงานด้วยสิทธิ์ root ต่อไป ให้สร้าง User สำหรับใช้งานเองและมอบสิทธิ์ sudo:
adduser matt
usermod -aG sudo mattหลังจากนี้ให้ล็อกอินด้วย User นี้และใช้ sudo สำหรับงานระดับ Admin การทำงานด้วย root ตลอดเวลาหมายความว่าหากเกิดข้อผิดพลาดหรือถูกเจาะระบบ ทุกอย่างจะเกิดขึ้นด้วยสิทธิ์สูงสุด ซึ่งเป็นสิ่งที่ การใช้งานด้วยสิทธิ์ unprivileged user มีไว้เพื่อป้องกัน
Minute 4: Set up SSH keys
รหัสผ่านสามารถถูกเดาได้ แต่ Key ทำไม่ได้ หากคุณยังไม่มี Key ในเครื่อง Laptop ของคุณ ให้สร้างขึ้นมาใหม่:
ssh-keygen -t ed25519จากนั้นคัดลอก Public Key ไปยังเซิร์ฟเวอร์:
ssh-copy-id matt@YOUR_SERVERssh-copy-id จำเป็นต้องเปิดการล็อกอินด้วยรหัสผ่านไว้สำหรับ User ใหม่ หากปิดไว้แล้ว ให้คัดลอก ~/.ssh/authorized_keys ของ root ไปยัง /home/matt/.ssh/authorized_keys (ซึ่งเป็นของ matt) หรือวาง Public Key ของคุณลงในไฟล์นั้นด้วยตนเอง
รายละเอียดเกี่ยวกับโมเดลการใช้หนึ่ง Key ต่อหนึ่งอุปกรณ์, สิทธิ์การเข้าถึงที่ทำให้การใช้ Key ล้มเหลว และการยกเลิก Key ที่สูญหาย มีอยู่ใน SSH key management basics
ล็อกเอาต์ออกแล้วล็อกอินกลับเข้ามาใหม่ด้วย matt โดยใช้ Key และตรวจสอบว่าใช้งานได้จริงก่อนเริ่มขั้นตอนถัดไป การล็อก SSH ก่อนที่จะเข้าใช้งานด้วย Key ได้สำเร็จ คือสาเหตุที่ทำให้ผู้ใช้ถูกล็อกออกจากระบบของตนเอง
Minute 6: Turn off root login and passwords
เมื่อ Key ใช้งานได้แล้ว ให้ปิดช่องทางสองช่องทางที่สแกนเนอร์ใช้ ให้ใช้ Drop-in file เพื่อป้องกันไม่ให้การอัปเดต Package เขียนทับการตั้งค่า ให้ตั้งชื่อไฟล์ว่า 00- เพื่อให้เรียงลำดับก่อน 50-cloud-init.conf ซึ่ง Ubuntu cloud images มาพร้อมกับ PasswordAuthentication yes เนื่องจาก sshd จะใช้ค่าแรกที่อ่านเจอ ดังนั้นไฟล์ที่เรียงลำดับทีหลังอาจถูกละเลย:
sudo nano /etc/ssh/sshd_config.d/00-hardening.confPasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin noจากนั้น Reload SSH:
sudo systemctl restart sshจากนั้นตรวจสอบการตั้งค่าที่ sshd ใช้งานจริง เพื่อป้องกันไม่ให้ Drop-in file ที่ผิดพลาดหลอกคุณ:
sudo sshd -T | grep -Ei 'passwordauthentication|permitrootlogin'เมื่อปิดการใช้รหัสผ่านและปิดการล็อกอินด้วย root แล้ว การโจมตีแบบ Brute-force ที่พุ่งเป้ามายังเซิร์ฟเวอร์ของคุณจะไม่สามารถสำเร็จได้ สำหรับวิธีการป้องกัน SSH อย่างเต็มรูปแบบ รวมถึงการเปลี่ยน Port (ทางเลือก) สามารถอ่านได้ใน SSH hardening on a VPS
Minute 8: Turn on the firewall
ตั้งค่า Default-deny สำหรับการเชื่อมต่อขาเข้าทั้งหมด จากนั้นจึงอนุญาตเฉพาะสิ่งที่จำเป็นเท่านั้น ต้องอนุญาต SSH ก่อนที่จะเปิดใช้งาน Firewall มิฉะนั้นคุณจะตัดการเชื่อมต่อของตนเอง:
sudo ufw default deny incoming
sudo ufw allow 22/tcp
sudo ufw enableเพิ่มกฎ allow สำหรับบริการที่คุณใช้งานจริง เช่น 80/tcp และ 443/tcp สำหรับเว็บไซต์ ตรวจสอบให้แน่ใจว่าครอบคลุมทั้ง IPv4 และ IPv6 เพราะ Firewall ที่กรองเฉพาะ IPv4 จะทำให้ ฝั่ง IPv6 เปิดกว้างไว้ สำหรับขั้นตอนโดยละเอียดสามารถอ่านได้ที่ Firewalls 101 on a VPS
Minute 10: Slow the scanners with Fail2ban
สุดท้าย ให้ติดตั้ง Fail2ban เพื่อขับไล่ IP ที่พยายามโจมตี Port ของคุณ:
sudo apt install -y fail2banบน Ubuntu 24.04 การติดตั้งมาตรฐานจะป้องกัน SSH ตั้งแต่การบูตครั้งแรก เมื่อตั้งค่าให้ใช้ Key แล้ว สิ่งนี้จะเป็นระบบป้องกันสำรองที่ช่วยลด Log noise และบล็อกผู้ที่พยายามโจมตีซ้ำ แทนที่จะเป็นระบบป้องกันหลัก
Your checklist
นั่นคือ Runbook ทั้งหมด ใช้เครื่องมือสร้างรายการด้านล่างเพื่อติ๊กถูกในแต่ละส่วน และสร้างรายการตรวจสอบส่วนบุคคลที่คุณสามารถเก็บไว้กับเซิร์ฟเวอร์ได้ พร้อมคำสั่งที่ถูกต้องสำหรับแต่ละขั้นตอน:
ทำตามนี้ทุกครั้งเมื่อมีเซิร์ฟเวอร์ใหม่ แล้วคุณจะทำได้อย่างชำนาญ การใช้เวลา 10 นาทีในตอนนี้ จะช่วยป้องกันปัญหาใหญ่ที่อาจตามมาหากเซิร์ฟเวอร์ถูกเจาะระบบ
เมื่อตั้งค่าพื้นฐานเสร็จแล้ว การอัปเดตความปลอดภัยอัตโนมัติบน Ubuntu จะช่วยให้เซิร์ฟเวอร์ทันสมัยอยู่เสมอโดยที่คุณไม่ต้องล็อกอินกลับเข้ามา
FAQ
What should I do first on a new VPS?
อัปเดตระบบด้วย apt update && apt upgrade -y จากนั้นสร้าง User ปกติที่มีสิทธิ์ sudo และหยุดใช้งานด้วยสิทธิ์ root หลังจากนั้นให้ตั้งค่า SSH keys, ปิดการล็อกอินด้วย root และการยืนยันตัวตนด้วยรหัสผ่าน, เปิดใช้งาน Firewall แบบ default-deny และติดตั้ง Fail2ban การทำตามลำดับนี้จะทำให้แต่ละขั้นตอนมีความปลอดภัยและไม่ทำให้คุณถูกล็อกออกจากระบบ
How do I avoid locking myself out while hardening SSH?
ตั้งค่าและทดสอบการล็อกอินด้วย SSH key ก่อนที่จะปิดการใช้รหัสผ่านหรือ root ให้ล็อกเอาต์และล็อกอินกลับเข้ามาด้วย Key เพื่อยืนยันว่าใช้งานได้ แล้วจึงปิด PasswordAuthentication และ PermitRootLogin เมื่อเปิดใช้งาน Firewall ให้อนุญาต Port 22 ก่อนที่จะรัน ufw enable หากคุณถูกล็อกออกจากระบบ Web console ของผู้ให้บริการจะช่วยให้คุณกลับเข้าสู่ระบบได้โดยไม่ต้องใช้ SSH
Do I really need all of these on a small server?
จำเป็น เพราะสแกนเนอร์ไม่สนใจว่าเซิร์ฟเวอร์ของคุณจะมีขนาดเล็กเพียงใด พวกมันพยายามสแกนทุก Public IP ในลักษณะเดียวกัน Runbook ทั้งหมดนี้ใช้เวลาเพียงประมาณ 10 นาที และช่วยกำจัดช่องทางที่ง่ายที่สุดออกไป ได้แก่ การล็อกอินด้วย root, การเดารหัสผ่าน, บริการที่ไม่ได้เลือก และช่องโหว่ที่ได้รับการ Patch อัตโนมัติ
What is the single most important step?
การใช้ SSH แบบ Key-only และปิดการล็อกอินด้วย root การโจมตีส่วนใหญ่บน VPS ใหม่คือการสแกนรหัสผ่านอัตโนมัติเพื่อเข้าถึง root การปิดทั้งสองอย่างนี้จะทำให้การโจมตีประเภทนี้เป็นไปไม่ได้ ส่วน Firewall และ Fail2ban จะช่วยจำกัดสิ่งที่เปิดเผยสู่ภายนอกและชะลอการโจมตีที่เหลืออยู่
How do I confirm the server is actually locked down?
ตรวจสอบ 3 อย่างด้วยตนเองก่อนที่จะไว้วางใจเซิร์ฟเวอร์ รัน sudo ss -tlnp และยืนยันว่ามีเฉพาะ Port ที่คุณต้องการเปิดเท่านั้นที่ Listening บน Public address โดยไม่มีบริการ 0.0.0.0 หรือ [::] ที่คุณลืมทิ้งไว้ รัน sudo ufw status verbose และยืนยันว่านโยบายขาเข้าเริ่มต้นคือ deny และมีทั้งกฎแบบธรรมดาและ (v6) และควรเปิด SSH session ที่สองทิ้งไว้เสมอในขณะที่ยังไม่ได้ปิด session แรก เพื่อป้องกันไม่ให้ความผิดพลาดในการตั้งค่า SSH ทำให้คุณถูกล็อกออกจากเซิร์ฟเวอร์ หากทั้งสามอย่างถูกต้อง แสดงว่าการป้องกันพื้นฐานเสร็จสมบูรณ์แล้ว