ลดความยุ่งยากในการใช้คลาวด์ พูดคุยกับเจ้าหน้าที่

Home เช็กลิสต์ความปลอดภัยหลังเปิด Linux Server ใหม่

เช็กลิสต์ความปลอดภัยหลังเปิด Linux Server ใหม่

เซิร์ฟเวอร์ที่มี 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

ข้อ 7: เปิด Security Update อัตโนมัติ

บน Ubuntu ตั้ง unattended-upgrades ตาม อัปเดตแพ็กเกจและเปิด Security Update อัตโนมัติบน Ubuntu บน AlmaLinux/Rocky ใช้ dnf-automatic:

sudo dnf install -y dnf-automatic
sudo sed -i 's/^upgrade_type.*/upgrade_type = security/; s/^apply_updates.*/apply_updates = yes/' /etc/dnf/automatic.conf
sudo systemctl enable --now dnf-automatic.timer

ตรวจว่า Timer ทำงานด้วย systemctl list-timers | grep -E "apt|dnf"

ข้อ 8: Timezone และเวลา

เวลาที่ผิดทำให้ Log อ่านยาก ใบรับรอง SSL ตรวจสอบผิดพลาด และรหัส 2FA ใช้ไม่ได้ ตั้งค่าตาม ตั้งค่า Timezone และซิงก์เวลาอัตโนมัติบน Linux Server ตรวจด้วย timedatectl ต้องเห็น System clock synchronized: yes

ข้อ 9: ตรวจพอร์ตและ Service ที่ไม่จำเป็น

sudo ss -tulpn
systemctl list-units --type=service --state=running

ทุกพอร์ตที่ Listen บน 0.0.0.0 หรือ [::] ต้องอธิบายได้ว่าคืออะไรและทำไมต้องเปิด ฐานข้อมูลและ Redis ควร Listen ที่ 127.0.0.1 เท่านั้น วิธีอ่านผลอยู่ใน ตรวจสอบพอร์ตที่เปิดอยู่บน Linux ด้วย ss และ lsof Service ที่ไม่ใช้ให้ปิดด้วย sudo systemctl disable --now ชื่อservice

บน AlmaLinux/Rocky ให้คง SELinux ไว้ที่ Enforcing ตรวจด้วย getenforce ถ้าเจอปัญหาสิทธิ์ ให้แก้ตาม ใช้งาน SELinux บน AlmaLinux และ Rocky Linux โดยไม่ต้องปิด แทนการปิด

ข้อ 10: สำรองข้อมูลและติดตามเครื่อง

ตรวจสอบผลลัพธ์

หลังทำครบ ให้ทดสอบจากเครื่องคอมพิวเตอร์ของคุณ:

# ต้องถูกปฏิเสธ: root login
ssh [email protected]

# ต้องถูกปฏิเสธ: บังคับใช้รหัสผ่าน
ssh -o PubkeyAuthentication=no ชื่อผู้ใช้@203.0.113.10

# ต้องเข้าได้: ผู้ใช้ของคุณด้วย Key
ssh ชื่อผู้ใช้@203.0.113.10

สองคำสั่งแรกควรได้ Permission denied (publickey) จากนั้นดูประวัติการเข้าระบบเพื่อยืนยันว่ามีแต่คุณ:

last -n 20
sudo lastb -n 20

last แสดงการเข้าระบบที่สำเร็จ lastb แสดงความพยายามที่ล้มเหลว ถ้ามีเป็นจำนวนมากก่อนตั้ง Fail2ban ถือว่าปกติ

ปัญหาที่พบบ่อย

ปิดรหัสผ่านแล้ว แต่ยัง Login ด้วยรหัสผ่านได้

มีไฟล์ใน /etc/ssh/sshd_config.d/ ตั้งค่าทับอยู่ หรือยังไม่ได้ reload SSH ตรวจด้วย sudo sshd -T ตามข้อ 3 แล้วใช้ sudo systemctl reload ssh (Ubuntu) หรือ sudo systemctl reload sshd (AlmaLinux/Rocky)

เปิด Firewall แล้วถูกตัดออกจากเครื่อง

ลืมอนุญาตพอร์ต SSH ก่อนเปิด หรือเปลี่ยนพอร์ต SSH แล้วอนุญาตแค่พอร์ต 22 เข้าผ่าน Console บนหน้าเว็บ แล้วเพิ่มกฎอนุญาตพอร์ต SSH ที่ใช้จริง

Fail2ban แบน IP สำนักงานของตัวเอง

ปลดแบนด้วย sudo fail2ban-client set sshd unbanip IP แล้วเพิ่ม IP คงที่ของสำนักงานใน ignoreip ของ jail.local

หากต้องการให้ช่วยตรวจการตั้งค่าความปลอดภัยของเซิร์ฟเวอร์ ติดต่อทีมซัพพอร์ต THAI DATA CLOUD ได้ที่ https://thaidata.cloud/contact/

ผู้ให้บริการคลาวด์ไทย
เพื่อธุรกิจของคนไทย

"มุ่งมั่น" และ "มั่นคง"
พร้อมรับมือทุกการเติบโต
Trust Cloud
คลาว์ที่ปลอดภัย
คือรากฐานที่มั่นคง
cloud security