Lynis: ตรวจความปลอดภัย Linux Server และแก้ตามคำแนะนำ
คำตอบสั้น ๆ: ใช้ Lynis ตรวจความปลอดภัย Linux Server อ่าน Warnings, Suggestions และ Hardening index แก้รายการสำคัญอย่าง SSH และ sysctl ข้ามข้อที่ไม่เกี่ยว และตั้งตรวจทุกเดือน
คู่มือนี้อธิบาย Lynis ทีละขั้นตอน พร้อมคำสั่งที่ใช้ได้จริงและปัญหาที่พบบ่อย
Lynis คือเครื่องมือตรวจความปลอดภัยแบบโอเพนซอร์สของ CISOfy ที่รันบนเครื่อง Linux โดยตรง ไม่ต้องติดตั้ง agent หรือเปิดพอร์ตเพิ่ม Lynis ไล่ตรวจหลายร้อยรายการ ตั้งแต่การตั้งค่า SSH, kernel, ไฟร์วอลล์, การอัปเดตแพ็กเกจ, สิทธิ์ไฟล์ ไปจนถึงบริการที่เปิดอยู่ แล้วสรุปเป็นคำเตือน (Warnings) คำแนะนำ (Suggestions) และคะแนน Hardening index ให้เห็นภาพรวม
คู่มือนี้เหมาะกับผู้ดูแล Linux Server ที่ต้องการรู้ว่าเครื่องของตัวเองยังมีจุดอ่อนตรงไหน หรือต้องเตรียมหลักฐานการตรวจความปลอดภัยให้ผู้ตรวจสอบ เมื่อทำครบ คุณจะติดตั้ง Lynis รุ่นล่าสุด อ่านผลการตรวจเป็น เลือกแก้รายการที่คุ้มที่สุดก่อน ข้ามรายการที่ไม่เกี่ยวกับเครื่องคลาวด์อย่างมีเหตุผล และตั้งให้ตรวจซ้ำอัตโนมัติทุกเดือน
สิ่งที่ต้องเตรียม
- สิทธิ์ root หรือ sudo เพราะการตรวจแบบเต็มต้องอ่านไฟล์ระบบที่ผู้ใช้ทั่วไปเปิดไม่ได้
- Snapshot หรือข้อมูลสำรองก่อนแก้ค่าตามคำแนะนำ โดยเฉพาะค่า SSH และ sysctl ที่ทำให้เข้าเครื่องไม่ได้ถ้าตั้งผิด
- ทางเข้าสำรองอย่าง Console ของผู้ให้บริการ เผื่อแก้ SSH แล้วล็อกตัวเองออก
- รายการบริการที่เครื่องต้องให้บริการจริง เพื่อใช้ตัดสินใจว่าคำแนะนำข้อใดใช้ได้ เช่น เครื่องที่รัน Docker ต้องเปิด IP forwarding ไว้
Lynis ตรวจอย่างเดียว ไม่แก้อะไรเอง ทุกการแก้ไขเป็นการตัดสินใจของผู้ดูแล
ขั้นตอนที่ 1: ติดตั้ง Lynis รุ่นล่าสุด
แพ็กเกจในคลังของดิสโทร (apt install lynis หรือ dnf install lynis จาก EPEL) มักเก่ากว่ารุ่นปัจจุบัน ทำให้ขาดการตรวจใหม่ ๆ แนะนำให้ใช้คลังของ CISOfy หรือดึงจาก GitHub วิธีที่ง่ายที่สุดคือ git ซึ่งใช้ได้ทุกดิสโทร
sudo git clone https://github.com/CISOfy/lynis /usr/local/lynis
cd /usr/local/lynis
sudo ./lynis show version
โคลนด้วย sudo เพื่อให้ไฟล์เป็นของ root เพราะ Lynis ตรวจสิทธิ์ไฟล์ของตัวเองก่อนรัน ถ้าไฟล์เป็นของผู้ใช้อื่นจะหยุดและเตือนให้แก้ความเป็นเจ้าของ อัปเดตครั้งต่อไปด้วย sudo git -C /usr/local/lynis pull ถ้าต้องการติดตั้งเป็นแพ็กเกจจากคลังของ CISOfy บน Ubuntu และ Debian ให้ทำตามขั้นตอนใน CISOfy Community Repository แล้วใช้คำสั่ง lynis แทน ./lynis ในขั้นตอนถัดไป
ขั้นตอนที่ 2: รันการตรวจ Lynis audit system
cd /usr/local/lynis
sudo ./lynis audit system
การตรวจใช้เวลาไม่กี่นาที และไม่เปลี่ยนค่าใด ๆ ในเครื่อง ระหว่างรันจะแสดงผลทีละหมวด เช่น Boot and services, Kernel, Users and groups, Networking, SSH Support พร้อมสถานะ OK, WARNING, SUGGESTION หรือ FOUND ค่าเริ่มต้นไม่หยุดรอการกดปุ่ม ถ้าต้องการให้หยุดอ่านทีละหมวดให้เพิ่ม --wait เมื่อจบจะมีสรุปท้ายหน้าจอ และเขียนไฟล์สองไฟล์
/var/log/lynis.log: รายละเอียดทุกการตรวจ ใช้ดูว่าทำไมผลออกมาแบบนั้น
/var/log/lynis-report.dat: ผลแบบเครื่องอ่านได้ เช่น hardening_index=64 และบรรทัด suggestion[]= ใช้เปรียบเทียบระหว่างรอบ
แต่ละคำแนะนำมีรหัสการตรวจกำกับ ใช้รหัสนี้ค้นรายละเอียดหรือข้ามใน custom.prf
ขั้นตอนที่ 3: อ่าน Warnings, Suggestions และ Hardening index
อ่านจากบนลงล่างตามลำดับความสำคัญ
- Warnings คือสิ่งที่ควรแก้ก่อน เช่น ไม่มีไฟร์วอลล์ทำงาน มีแพ็กเกจที่มีช่องโหว่ หรือมีอัปเดตความปลอดภัยค้าง
- Suggestions คือคำแนะนำเพื่อเพิ่มความแข็งแรง แต่ละข้อมีรหัสการตรวจในวงเล็บ เช่น
[SSH-7408] และบรรทัด Details บอกค่าที่พบ
- Hardening index คือคะแนน 0–100 ตามสัดส่วนการตรวจที่ผ่าน ใช้ดูแนวโน้มของเครื่องเดียวกันระหว่างเดือน ไม่ใช่คะแนนผ่านหรือตกตามมาตรฐานใด และไม่ควรเทียบข้ามเครื่องที่ทำหน้าที่ต่างกัน
ดูรายละเอียดของการตรวจแต่ละรหัสได้ด้วย sudo ./lynis show details SSH-7408 ซึ่งดึงบรรทัดที่เกี่ยวข้องจาก lynis.log มาแสดง หรือเปิดลิงก์ cisofy.com/lynis/controls/ ที่แนบท้ายคำแนะนำแต่ละข้อ
ขั้นตอนที่ 4: แก้รายการที่คุ้มที่สุดก่อน
คำแนะนำมักมีหลายสิบข้อ ไม่จำเป็นต้องแก้ทุกข้อ เริ่มจากกลุ่มที่ลดความเสี่ยงได้มากและกระทบงานน้อย
อัปเดตความปลอดภัยและไฟร์วอลล์
ถ้ามีคำเตือนเรื่องอัปเดต (เช่น PKGS-7392 บน Ubuntu) ให้อัปเดตและเปิดการอัปเดตอัตโนมัติตาม คู่มือ Security Update อัตโนมัติบน Ubuntu ถ้า FIRE-4590 แจ้งว่าไม่มีไฟร์วอลล์ ให้เปิดตาม คู่มือ UFW บน Ubuntu หรือ firewalld บน AlmaLinux
การตั้งค่า SSH (SSH-7408)
Lynis ตรวจตัวเลือกของ sshd ทีละค่า แนะนำให้เขียนค่าที่เลือกไว้ในไฟล์แยก /etc/ssh/sshd_config.d/01-hardening.conf ซึ่ง Ubuntu และ AlmaLinux 9 อ่านก่อนไฟล์หลัก ตั้งชื่อขึ้นต้นด้วยเลขน้อย เพราะ sshd ใช้ค่าแรกที่อ่านเจอ และไฟล์ของดิสโทรในโฟลเดอร์เดียวกัน เช่น 50-redhat.conf บน AlmaLinux อาจตั้งบางค่าไว้แล้ว
LogLevel VERBOSE
MaxAuthTries 3
X11Forwarding no
AllowAgentForwarding no
ClientAliveCountMax 2
เลือกเฉพาะค่าที่ไม่กระทบงาน เช่น AllowTcpForwarding no จะทำให้การต่อฐานข้อมูลผ่าน SSH Tunnel ใช้ไม่ได้ และ MaxSessions 2 อาจทำให้เครื่องมือที่เปิดหลาย session พร้อมกันอย่าง VS Code Remote ทำงานผิดปกติ ตรวจด้วย sudo sshd -t แล้วรีโหลด sshd และทดสอบเข้าจากหน้าต่างใหม่ก่อนปิดหน้าต่างเดิม
ค่า kernel (KRNL-6000)
สร้างไฟล์ /etc/sysctl.d/90-hardening.conf ด้วยค่าที่ปลอดภัยกับเซิร์ฟเวอร์ทั่วไป แล้วโหลดด้วย sudo sysctl --system
kernel.kptr_restrict = 2
kernel.dmesg_restrict = 1
kernel.sysrq = 0
fs.suid_dumpable = 0
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
อย่าตั้ง net.ipv4.conf.all.forwarding = 0 บนเครื่องที่รัน Docker, Kubernetes หรือทำหน้าที่ VPN และ NAT เพราะคอนเทนเนอร์จะออกอินเทอร์เน็ตไม่ได้ทันที
รายการอื่นที่แก้ได้เร็ว
- ACCT-9628 แนะนำให้เปิด auditd ทำตาม คู่มือ auditd บันทึกว่าใครทำอะไรบน Linux Server
- HRDN-7230 แนะนำให้มีเครื่องมือสแกนมัลแวร์ เช่น rkhunter หรือ ClamAV
- BANN-7126 แนะนำให้ใส่ข้อความแจ้งเตือนทางกฎหมายใน
/etc/issue และ /etc/issue.net
- PKGS-7346 แนะนำให้ล้างแพ็กเกจที่ถอดแล้วแต่ค่ายังค้าง ด้วย
sudo apt purge ตามรายการที่ Lynis แจ้ง
แก้ข้อที่ลดความเสี่ยงได้จริงก่อน ข้อที่ไม่เหมาะกับคลาวด์ให้ข้ามพร้อมบันทึกเหตุผล
ขั้นตอนที่ 5: ข้ามรายการที่ไม่เกี่ยวด้วย custom.prf
บางคำแนะนำไม่เหมาะกับเครื่องคลาวด์ เช่น FILE-6310 ที่ให้แยก /tmp, /home และ /var เป็นพาร์ทิชันต่างหาก หรือการตั้งรหัสผ่าน GRUB (BOOT-5122) บนเครื่องที่เข้าถึง Console ได้เฉพาะผ่านพอร์ทัล ให้บันทึกการตัดสินใจไว้ในไฟล์โปรไฟล์ แทนการปล่อยให้ขึ้นซ้ำทุกเดือน
# /usr/local/lynis/custom.prf (ถ้าติดตั้งเป็นแพ็กเกจ ใช้ /etc/lynis/custom.prf)
skip-test=FILE-6310
skip-test=BOOT-5122
# ข้ามเฉพาะค่า forwarding บนเครื่อง Docker
skip-test=KRNL-6000:net.ipv4.conf.all.forwarding
# ข้ามเฉพาะการตรวจเลขพอร์ต SSH
skip-test=SSH-7408:port
เขียนเหตุผลกำกับทุกบรรทัดในเอกสารของทีม เพราะผู้ตรวจสอบจะถามว่าทำไมข้าม จากนั้นรันการตรวจซ้ำ แล้วเทียบ Hardening index กับรอบแรก
ขั้นตอนที่ 6: ตั้งให้ Lynis ตรวจซ้ำทุกเดือน
ตัวเลือก --cronjob ทำให้ Lynis รันแบบไม่ถามอะไรและไม่ใส่สีในผลลัพธ์ เหมาะกับงานตั้งเวลา สร้างสคริปต์ /usr/local/sbin/lynis-monthly.sh ที่เก็บรายงานแต่ละเดือนแยกไฟล์
#!/bin/sh
cd /usr/local/lynis || exit 1
./lynis audit system --cronjob > /var/log/lynis-cron.log 2>&1
cp /var/log/lynis-report.dat "/var/log/lynis-report-$(date +%F).dat"
grep -E '^hardening_index=' /var/log/lynis-report.dat | logger -t lynis
sudo chmod 700 /usr/local/sbin/lynis-monthly.sh
echo '30 3 1 * * root /usr/local/sbin/lynis-monthly.sh' | sudo tee /etc/cron.d/lynis-monthly
งานนี้รันเวลา 03:30 ของวันที่ 1 ทุกเดือน และเขียนคะแนนลง syslog ด้วย ถ้าใช้ systemd timer แทน cron ดูวิธีได้ที่ คู่มือ systemd Timer เทียบรายการคำแนะนำระหว่างสองเดือนด้วย diff <(grep '^suggestion' ไฟล์เดือนก่อน) <(grep '^suggestion' ไฟล์เดือนนี้) เพื่อดูว่ามีอะไรใหม่เกิดขึ้นหลังติดตั้งซอฟต์แวร์หรือเปลี่ยนค่า
ปัญหาที่พบบ่อยเกี่ยวกับ Lynis
Hardening index ควรได้เท่าไรถึงจะปลอดภัย?
ไม่มีตัวเลขที่ถือว่าปลอดภัย คะแนนสะท้อนจำนวนการตรวจที่ผ่าน ไม่ได้ถ่วงตามความเสี่ยงจริง เครื่องที่ได้ 70 แต่ปิดพอร์ตที่ไม่ใช้และอัปเดตตลอดอาจปลอดภัยกว่าเครื่องที่ได้ 85 แต่เปิดฐานข้อมูลสู่อินเทอร์เน็ต ใช้คะแนนดูแนวโน้มของเครื่องเดียวกัน และอ่านคำเตือนทุกข้อเสมอ
Lynis แก้ค่าในเครื่องให้อัตโนมัติหรือไม่?
ไม่ Lynis เป็นเครื่องมือตรวจอย่างเดียว ทุกการแก้ไขต้องทำเอง ซึ่งดีกว่าเพราะผู้ดูแลได้ตัดสินใจว่าค่าใดเหมาะกับงานของเครื่อง ถ้าต้องการรายการตั้งค่าเครื่องใหม่แบบครบชุด ดู เช็กลิสต์ความปลอดภัยหลังเปิด Linux Server ใหม่
รัน Lynis บนเครื่อง production ปลอดภัยหรือไม่?
ปลอดภัยในแง่ที่ไม่เปลี่ยนค่าระบบ แต่ใช้ CPU และดิสก์ช่วงสั้น ๆ ระหว่างตรวจ ควรรันนอกเวลาที่มีผู้ใช้มาก และเก็บไฟล์รายงานไว้ในที่ที่จำกัดสิทธิ์อ่าน เพราะมีรายละเอียดของระบบที่ผู้โจมตีใช้ประโยชน์ได้
Lynis ใช้แทนการสแกนช่องโหว่จากภายนอกได้หรือไม่?
ไม่ได้ Lynis มองจากภายในเครื่อง เห็นค่าตั้งและแพ็กเกจ แต่ไม่ได้ทดสอบว่าบริการที่เปิดสู่อินเทอร์เน็ตมีช่องโหว่ทางเว็บหรือไม่ ควรใช้ร่วมกับการสแกนพอร์ตและเว็บจากภายนอก
ถ้าต้องการให้ทีมงานช่วยอ่านผล Lynis จัดลำดับการแก้ไข หรือดูแลความปลอดภัยของเซิร์ฟเวอร์อย่างต่อเนื่อง ติดต่อทีมงาน THAI DATA CLOUD ได้ และดูรายละเอียดบริการได้ที่หน้า Managed Security Services
อ่านเพิ่มเติมเกี่ยวกับ Lynis