เช็กลิสต์ความปลอดภัยหลังเปิด 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: สำรองข้อมูลและติดตามเครื่อง
- ตั้ง Backup อัตโนมัติไปยังที่อื่นนอกเครื่อง เช่น สำรองข้อมูลไปยังเซิร์ฟเวอร์อื่นด้วย rsync และ Cronjob และทดลองกู้คืนอย่างน้อยหนึ่งครั้ง
- ป้องกันดิสก์เต็มจาก Log ด้วย ตั้งค่า logrotate ไม่ให้ไฟล์ Log เต็มดิสก์
- ตั้งระบบแจ้งเตือนเมื่อเว็บล่ม ตาม ตั้งระบบแจ้งเตือนเมื่อเว็บไซต์ล่ม (Uptime Monitoring)
ตรวจสอบผลลัพธ์
หลังทำครบ ให้ทดสอบจากเครื่องคอมพิวเตอร์ของคุณ:
# ต้องถูกปฏิเสธ: 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/
- Categories:
- Cloud
- Tags:
- Cloud
- Cloud Server
Related Posts
หมวดหมู่ที่น่าสนใจ
- Account Settings
- AD Server
- AI
- Alibaba Cloud
- Anti-Spam Gateway
- AWS Amazon Web Services
- Campaign
- CentOS/AlmaLinux
- Cloud
- Cloud Backup
- Cloud Communication
- Cloud Migration
- Cloud Security
- Cloud Server Management
- Cloud Solution
- Cloud Solution for Government
- Cloud Solutions by Industry
- Cloud Storage
- Cloud VPS App Plus +
- Cloud VPS DirectAdmin
- Cloud VPS Plesk
- CSR
- Cyber Security
- Cybersecurity
- Data Sovereignty
- Database Server
- DDoS
- Digital Tranformation
- Digital Transformation
- Direct Mail
- Directadmin
- Domainname
- Ecommerce
- ERP
- Generative AI
- Getting Started
- Google Cloud
- Google G Suite
- Huawei Cloud
- IT News
- Linux Server
- Managed Cloud Services
- Managed Service Provider
- Manual
- Microsoft
- Microsoft 365
- Microsoft Azure
- News
- On-premise
- Private Mail Server
- Promotion
- Recommend Solution (Enterprise)
- Server
- Sovereign Cloud
- THAI DATA CLOUD Platform
- Ubuntu
- Ubuntu
- Uncategorized
- VMware
- VPS Server
- Web Design
- Web Hosting
- Web Hosting (DirectAdmin)
- Web Hosting (Plesk)
- Web Technologies
- Windows Server
- Wordpress
- Zimbra
- เรื่องราวความประทับใจ
- โซลูชันสำหรับธุรกิจการผลิตและยานยนต์
- โซลูชันสำหรับธุรกิจการศึกษา
- โซลูชันสำหรับธุรกิจการเงิน
- โซลูชันสำหรับธุรกิจขนส่งและกระจายสินค้า
- โซลูชันสำหรับธุรกิจค้าปลีก
- โซลูชันสำหรับธุรกิจท่องเที่ยว
- โซลูชันสำหรับธุรกิจบริการสุขภาพและโรงพยาบาล
- โซลูชันสำหรับธุรกิจประกันภัย
- โซลูชันสำหรับธุรกิจพลังงานและสาธารณูปโภค
- โซลูชันสำหรับธุรกิจสื่อสารมวลชนและเอ็นเตอร์เทนเมนท์
- โซลูชันสำหรับธุรกิจอสังหาริมทรัพย์
- โซลูชันสำหรับธุรกิจเทคโนโลยี


