เพิ่งตั้ง Ubuntu VPS ใหม่? อย่าลืม 4 สเต็ปเทพ ปิดประตูใส่หน้าแฮกเกอร์!

พอดีว่าผมเพิ่งได้ฤกษ์ตั้ง Ubuntu VPS (Virtual Private Server) ตัวใหม่เอี่ยมเพื่อเอามาทำเว็บไซต์ของลูกค้ารายล่าสุดนี่เอง และในฐานะคนที่คลุกคลีกับการทำเว็บและดูแลเซิร์ฟเวอร์มาเป็นสิบปี สิ่งแรกที่ผมจะทำเสมอ (และอยากย้ำกับทุกคน) ก่อนที่จะลงมือทำอย่างอื่นเลยก็คือ "การวางรากฐานความปลอดภัยเบื้องต้น"

ทำไมน่ะเหรอ? ลองจินตนาการดูนะครับว่าเรากำลังสร้างบ้านหลังใหม่ที่สวยงาม แต่ดันลืมล็อกประตูหน้าต่างให้ดี โจรก็คงเข้ามาขนของไปสบายๆ ใช่ไหมล่ะครับ? เซิร์ฟเวอร์ก็ไม่ต่างกัน ถ้าเราละเลยเรื่อง Security ตั้งแต่แรก แล้วโดนผู้ไม่หวังดีเข้ามาป่วน ระบบล่ม ข้อมูลหาย หรือหนักกว่านั้นคือเอาเซิร์ฟเวอร์เราไปทำเรื่องผิดกฎหมายต่อ...

โอ้โห ไม่อยากจะคิดเลยครับว่าต้องเสียเวลา เสียแรง แถมอาจจะเสียชื่อเสียงไปอีกเท่าไหร่ มันไม่คุ้มกันเลยจริงๆ ครับ ดังนั้น วันนี้ผมเลยอยากจะมาบันทึกและแชร์ขั้นตอนการทำ Security เบื้องต้นที่ผมทำเป็นประจำหลังจากได้ Ubuntu VPS มาใหม่ๆ เผื่อจะเป็นประโยชน์กับเพื่อนๆ ที่กำลังจะตั้งเซิร์ฟเวอร์ใหม่ หรืออยากจะทบทวนความปลอดภัยของเซิร์ฟเวอร์เดิมกันครับ

4 ขั้นตอนเสริมความปลอดภัยเบื้องต้นให้ Ubuntu Server

เอาล่ะครับ มาดูกันว่ามีอะไรบ้างที่เราควรทำทันทีหลังจากได้ Ubuntu VPS มาสดๆ ร้อนๆ เพื่อให้มั่นใจว่าเซิร์ฟเวอร์ของเราจะปลอดภัยจากภัยคุกคามเบื้องต้น

1. อัปเดตและอัปเกรดแพ็กเกจ (Update & Upgrade Packages)

นี่คือสิ่งแรกที่ควรทำครับ เหมือนกับการตรวจเช็กสภาพบ้านก่อนเข้าอยู่ การอัปเดตและอัปเกรดแพ็กเกจต่างๆ ในระบบปฏิบัติการ Ubuntu ของเราให้เป็นเวอร์ชันล่าสุดอยู่เสมอ จะช่วยปิดช่องโหว่ที่อาจถูกค้นพบและช่วยให้ระบบทำงานได้อย่างราบรื่นและปลอดภัยยิ่งขึ้น

$ sudo apt update && apt -y upgrade

คำสั่งง่ายๆ เพียงเท่านี้ ก็เป็นการเริ่มต้นที่ดีในการเสริมความแข็งแกร่งให้เซิร์ฟเวอร์ของเราแล้วครับ

2. สร้างผู้ใช้งานที่ไม่ใช่ Root (Non-Root User) และปิดการใช้งาน Root โดยตรง

การใช้บัญชี root ซึ่งเป็นผู้ใช้งานที่มีสิทธิ์สูงสุดในระบบตลอดเวลานั้นมีความเสี่ยงสูงมากครับ หากบัญชี root ถูกเข้าถึงโดยผู้ไม่หวังดี นั่นหมายความว่าพวกเขาสามารถควบคุมทุกสิ่งทุกอย่างในเซิร์ฟเวอร์ของเราได้ เพื่อลดความเสี่ยงนี้ เราควรสร้างผู้ใช้งานใหม่ขึ้นมาใช้งานแทน และจำกัดสิทธิ์ของผู้ใช้งาน root ไม่ให้ล็อกอินเข้าระบบโดยตรง

เพิ่มผู้ใช้งานใหม่

$ adduser <user>

ระบบจะถามให้ตั้งรหัสผ่านสำหรับผู้ใช้งานใหม่ (อย่าลืมตั้งรหัสผ่านที่คาดเดายากนะครับ!) และกรอกข้อมูลส่วนตัวเพิ่มเติม ซึ่งสามารถข้ามไปได้

เพิ่มสิทธิ์ sudo ให้ผู้ใช้งานใหม่

$ usermod --append --groups sudo <user>

ในตอนนี้เราสามารถ logout แล้ว login ด้วย user ใหม่ได้แล้ว

จากนั้นก็มาปิดการล็อกอินด้วย Root โดยตรง และล็อกบัญชี Root

$ sudo usermod root --shell /sbin/nologin
$ sudo passwd --lock root

หลังจากนี้ การล็อกอินด้วยชื่อ root โดยตรงจะทำไม่ได้แล้ว แต่เรายังสามารถใช้ sudo -i หรือ sudo -s จากผู้ใช้งานใหม่ที่มีสิทธิ์ sudo เพื่อสลับไปเป็น root ได้เมื่อจำเป็นจริงๆ เท่านั้น

3. ปลอดภัยกว่าด้วย SSH Key Authentication (และปิด Password Authentication ซะ!)

การล็อกอินเข้าเซิร์ฟเวอร์ผ่าน SSH ด้วยรหัสผ่าน ถึงจะตั้งให้ยากแค่ไหน ก็ยังมีความเสี่ยงจากการเดาสุ่ม (Brute-force attack) หรือรหัสผ่านรั่วไหลได้อยู่ดีครับ ผมจึงเปลี่ยนไปใช้ SSH Key เสมอ มันเหมือนเรามีกุญแจพิเศษส่วนตัวในการเข้าบ้าน ปลอดภัยกว่าการใช้รหัสผ่านที่ใครๆ ก็อาจจะแอบรู้ได้

สร้าง SSH Key (Ed25519) บนเครื่องคอมพิวเตอร์ของเรา (ถ้ายังไม่มี)

$ ssh-keygen -t ed25519

คัดลอก Public Key ไปยังเซิร์ฟเวอร์ (ด้วยผู้ใช้งานใหม่ที่เราสร้าง)

$ ssh-copy-id -i ~/.ssh/id_ed25519.pub newuser@YOUR_SERVER_IP

หลังจากนี้ เราจะล็อกอินเข้าเซิร์ฟเวอร์ด้วย ssh newuser@YOUR_SERVER_IP ได้โดยไม่ต้องใส่รหัสผ่านแล้วครับ

ปรับแต่ง SSH Server Configuration เพื่อความปลอดภัยสูงสุด หลังจากล็อกอินเข้าเซิร์ฟเวอร์ แล้วเปิดไฟล์ /etc/ssh/sshd_config (เช่น sudo nano /etc/ssh/sshd_config) แล้วแก้ไขหรือเพิ่มบรรทัดเหล่านี้เข้าไป (เอา # ข้างหน้าออกถ้ามี)

Protocol 2
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
ChallengeResponseAuthentication no
UsePAM no # หรือตรวจสอบให้แน่ใจว่าไม่ได้ถูกตั้งค่าให้ใช้ Password Authentication ผ่าน PAM
MaxAuthTries 3 # ลดจำนวนครั้งที่อนุญาตให้ลองล็อกอินผิดพลาด
# X11Forwarding no (ถ้าไม่ได้ใช้งาน GUI)

คำอธิบาย:

  • Protocol 2: บังคับใช้ SSH Protocol 2 ที่ปลอดภัยกว่า
  • PermitRootLogin no: ปิดการล็อกอินด้วย Root ผ่าน SSH โดยสิ้นเชิง
  • PasswordAuthentication no: ปิดการล็อกอินด้วยรหัสผ่าน บังคับใช้ SSH Key เท่านั้น
  • PubkeyAuthentication yes: เปิดใช้งานการยืนยันตัวตนด้วย Public Key
  • ChallengeResponseAuthentication no และ UsePAM no (หรือปรับแต่ง PAM ให้เหมาะสม): เป็นการเสริมเพื่อให้แน่ใจว่าไม่มีช่องทางอื่นในการใช้รหัสผ่าน
  • MaxAuthTries 3: ลดโอกาสการถูก Brute-force

จากนั้นก็รีสตาร์ท SSH service เพื่อให้การตั้งค่าใหม่มีผล

$ sudo systemctl restart ssh

ข้อควรระวัง: ตรวจสอบให้แน่ใจว่าเราสามารถล็อกอินด้วย SSH Key ได้ ก่อน ที่จะตั้งค่า PasswordAuthentication no นะครับ ไม่งั้นอาจจะล็อกตัวเองออกจากเซิร์ฟเวอร์ได้!

4. เปิดใช้งาน Firewall (UFW - Uncomplicated Firewall) คัดกรองผู้บุกรุก

Firewall คือยามหน้าประตูบ้านที่จะคอยตรวจตราว่าใครได้รับอนุญาตให้เข้าออกบ้าง สำหรับ Ubuntu แล้ว UFW เป็นเครื่องมือที่ใช้งานง่ายและมีประสิทธิภาพมากครับ

ติดตั้ง UFW (ถ้ายังไม่มี ปกติ Ubuntu Server จะมีมาให้)

$ sudo apt install ufw -y

ตั้งค่าเบื้องต้น (อนุญาตเฉพาะที่จำเป็น)

$ sudo ufw default deny incoming  # ปฏิเสธการเชื่อมต่อเข้าทั้งหมดเป็นค่าเริ่มต้น
$ sudo ufw default allow outgoing # อนุญาตการเชื่อมต่อออกทั้งหมดเป็นค่าเริ่มต้น
$ sudo ufw allow ssh             # หรือ sudo ufw allow 22/tcp (สำคัญมาก! ไม่งั้นจะเข้าเซิร์ฟเวอร์ไม่ได้)
$ sudo ufw allow http            # หรือ sudo ufw allow 80/tcp (ถ้าทำเว็บเซิร์ฟเวอร์)
$ sudo ufw allow https           # หรือ sudo ufw allow 443/tcp (ถ้าทำเว็บเซิร์ฟเวอร์)

เปิดใช้งาน UFW

$ sudo ufw enable

ระบบจะถามยืนยัน ก็ตอบ y ไปครับ

ตรวจสอบสถานะ

$ sudo ufw status verbose

คำสั่งนี้จะแสดงสถานะและกฎที่เราตั้งค่าไว้

บทสรุป

และนี่ก็คือ 4 ขั้นตอนพื้นฐานที่ผมทำเป็นประจำเพื่อเสริมเกราะป้องกันให้กับ Ubuntu VPS ที่เพิ่งตั้งขึ้นใหม่ครับ อาจจะดูเหมือนมีหลายขั้นตอน แต่เชื่อเถอะครับว่าการลงทุนเวลาเพียงเล็กน้อยตรงนี้ จะช่วยให้เรานอนหลับได้สนิทขึ้นเยอะ และลดความเสี่ยงจากปัญหาปวดหัวที่อาจตามมาในอนาคตได้อย่างมหาศาล การดูแลเรื่องความปลอดภัยไม่ใช่เรื่องที่ทำครั้งเดียวแล้วจบนะครับ มันเป็นกระบวนการที่ต้องใส่ใจและอัปเดตอยู่เสมอ แต่การเริ่มต้นที่ดีด้วยพื้นฐานที่แข็งแรงแบบนี้ ถือเป็นก้าวที่สำคัญที่สุดครับ!