คำตอบสั้น ๆ: เช็กลิสต์ 10 ข้อที่ควรทำทันทีหลังเปิด Linux Server ใหม่ พร้อมคำสั่งตรวจว่าเครื่องของคุณผ่านแต่ละข้อแล้วหรือยัง ตั้งแต่ SSH ไปจนถึง Backup
คู่มือนี้อธิบาย Linux ทีละขั้นตอน พร้อมคำสั่งที่ใช้ได้จริงและปัญหาที่พบบ่อย
เซิร์ฟเวอร์ที่มี Public IP จะเริ่มถูกสแกนและเดารหัสผ่าน SSH จากบอตอัตโนมัติภายในไม่กี่นาทีหลังเปิดใช้งาน ช่วงชั่วโมงแรกก่อนติดตั้งเว็บหรือย้ายข้อมูลขึ้นไปจึงเป็นช่วงที่ดีที่สุดในการวางพื้นฐานความปลอดภัย เพราะยังไม่มีบริการที่ต้องระวังว่าจะหยุดทำงาน
บทความนี้เป็นเช็กลิสต์เรียงตามลำดับที่ควรทำ แต่ละข้อมีคำสั่งตรวจสอบสั้น ๆ ว่าเครื่องของคุณผ่านหรือยัง และลิงก์ไปยังบทความที่อธิบายวิธีตั้งค่าอย่างละเอียด ใช้ได้กับ Ubuntu 22.04/24.04 และ AlmaLinux/Rocky Linux 8-9
สิ่งที่ต้องเตรียม
- เซิร์ฟเวอร์ที่เพิ่งสร้าง และข้อมูลการเข้าสู่ระบบครั้งแรก (root หรือผู้ใช้เริ่มต้นของ Image)
- ช่องทางเข้าเครื่องสำรองที่ไม่ผ่าน SSH เช่น Console ผ่านหน้าเว็บ (ดู การ Remote เข้า Console Server ผ่าน Web UI) เผื่อตั้งค่าผิดแล้วเข้า SSH ไม่ได้
- เครื่องคอมพิวเตอร์ของคุณที่มี SSH Key แล้ว หรือพร้อมสร้าง
หมายเหตุ: กฎสำคัญที่สุดตลอดเช็กลิสต์นี้ ทุกครั้งที่แก้ SSH หรือ Firewall ให้เปิด SSH Session เดิมค้างไว้ แล้วเปิดหน้าต่างใหม่เพื่อทดสอบเข้าให้ได้ก่อน จึงค่อยปิดหน้าต่างเดิม ถ้าหน้าต่างใหม่เข้าไม่ได้ คุณยังแก้กลับจากหน้าต่างเดิมได้
ภาพรวมเช็กลิสต์
| ลำดับ | รายการ | ความเร่งด่วน |
|---|---|---|
| 1 | อัปเดตแพ็กเกจทั้งหมด | ทันที |
| 2 | สร้างผู้ใช้ทั่วไปที่มีสิทธิ์ sudo | ทันที |
| 3 | ใช้ SSH Key และปิด Login ด้วยรหัสผ่าน | ทันที |
| 4 | ปิด Login ด้วย root ผ่าน SSH | ทันที |
| 5 | เปิด Firewall ให้เฉพาะพอร์ตที่ใช้ | ทันที |
| 6 | ติดตั้ง Fail2ban | วันแรก |
| 7 | เปิด Security Update อัตโนมัติ | วันแรก |
| 8 | ตั้ง Timezone และซิงก์เวลา | วันแรก |
| 9 | ตรวจพอร์ตและ Service ที่ไม่จำเป็น | วันแรก |
| 10 | ตั้งระบบสำรองข้อมูลและแจ้งเตือน | ก่อนเปิดใช้งานจริง |
ข้อ 1: อัปเดตแพ็กเกจทั้งหมด
Image ที่ใช้สร้างเครื่องอาจถูกสร้างไว้หลายเดือน จึงมีช่องโหว่ที่แก้ไปแล้วค้างอยู่
# Ubuntu
sudo apt update && sudo apt full-upgrade -y
# AlmaLinux / Rocky Linux
sudo dnf upgrade -y
ถ้ามีการอัปเดตเคอร์เนล ให้รีบูต บน Ubuntu ตรวจได้จากไฟล์ /var/run/reboot-required บน AlmaLinux/Rocky ใช้ sudo dnf needs-restarting -r (ถ้าไม่มีคำสั่งนี้ ให้ติดตั้ง dnf-utils ก่อน)
ข้อ 2: สร้างผู้ใช้ทั่วไปที่มีสิทธิ์ sudo
งานประจำวันไม่ควรทำด้วย root โดยตรง สร้างผู้ใช้ของคุณเองตาม สร้างผู้ใช้ใหม่และให้สิทธิ์ sudo บน Linux ตรวจผลด้วย:
sudo -l -U ชื่อผู้ใช้
ตรวจด้วยว่าไม่มีบัญชีอื่นนอกจาก root ที่มี UID 0 และไม่มีบัญชีที่รหัสผ่านว่าง:
awk -F: '$3 == 0 {print $1}' /etc/passwd
sudo awk -F: '$2 == "" {print $1}' /etc/shadow
คำสั่งแรกควรแสดงแค่ root คำสั่งที่สองควรไม่แสดงอะไรเลย
ข้อ 3 และ 4: SSH Key, ปิดรหัสผ่าน และปิด root
ทำตาม ตั้งค่า SSH Key และปิดการเข้าสู่ระบบด้วยรหัสผ่านบน Linux ให้ครบ แล้วตรวจค่าที่ SSH ใช้จริง (ไม่ใช่แค่ค่าที่เขียนในไฟล์) ด้วย:
sudo sshd -T | grep -Ei '^(permitrootlogin|passwordauthentication|kbdinteractiveauthentication|pubkeyauthentication) '
ผลที่ต้องการ:
permitrootlogin no
pubkeyauthentication yes
passwordauthentication no
kbdinteractiveauthentication no
บน AlmaLinux/Rocky 8 ซึ่งใช้ OpenSSH รุ่นเก่ากว่า ค่าสุดท้ายจะแสดงเป็น challengeresponseauthentication no แทน ให้เพิ่มคำนี้ในคำสั่ง grep ด้วย
เหตุที่ต้องตรวจด้วย sshd -T คือ Ubuntu และ AlmaLinux รุ่นใหม่อ่านไฟล์ใน /etc/ssh/sshd_config.d/ ก่อนไฟล์หลัก และ SSH ใช้ค่าที่อ่านเจอครั้งแรก ไฟล์อย่าง 50-cloud-init.conf ที่มี PasswordAuthentication yes จึงชนะค่าที่คุณแก้ใน sshd_config ได้ ถ้าผลไม่ตรง ให้ค้นหาด้วย sudo grep -ri passwordauthentication /etc/ssh/
การเปลี่ยนพอร์ต SSH ไม่ใช่มาตรการความปลอดภัยหลัก แต่ช่วยลด Log จากบอตได้มาก ถ้าต้องการทำ ดู วิธีเปลี่ยน SSH Port บน Linux Server
ข้อ 5: เปิด Firewall
นโยบายที่ควรใช้คือ ปฏิเสธขาเข้าทั้งหมด แล้วเปิดเฉพาะที่จำเป็น เช่น SSH, 80 และ 443 ตั้งค่าตาม ตั้งค่า Firewall ด้วย UFW บน Ubuntu หรือ ตั้งค่า Firewall ด้วย firewalld บน AlmaLinux และ Rocky Linux ตรวจผลด้วย:
# Ubuntu
sudo ufw status verbose
# AlmaLinux / Rocky Linux
sudo firewall-cmd --list-all
หากเซิร์ฟเวอร์มี Security Group หรือ Firewall ภายนอกจากฝั่งผู้ให้บริการ ให้ตั้งให้สอดคล้องกัน คือเปิดเฉพาะพอร์ตที่ต้องใช้เช่นกัน
ข้อ 6: ติดตั้ง Fail2ban
Fail2ban อ่าน Log และแบน IP ที่เดารหัสผ่านผิดซ้ำ ๆ แม้คุณจะปิด Login ด้วยรหัสผ่านแล้ว ก็ยังช่วยลดภาระและ Log ขยะ ดู ป้องกันการเดารหัสผ่าน SSH ด้วย Fail2ban ตรวจผลด้วย sudo fail2ban-client status sshd