Audit bảo mật Linux server với Lynis: từ cài đặt đến hardening index 80+

Security tutorial - IT technology blog
Security tutorial - IT technology blog

Chạy audit bảo mật server ngay trong 5 phút

Bạn vừa nhận server mới — hoặc vừa deploy xong một con VPS — và câu hỏi đầu tiên nảy ra: server này có đang mở cửa cho hacker không? Lynis trả lời câu hỏi đó bằng đúng 3 lệnh:

# Cài Lynis (Ubuntu/Debian)
sudo apt install lynis -y

# Chạy audit toàn bộ hệ thống
sudo lynis audit system

# Xem kết quả tóm tắt
sudo lynis show details

Scan mất khoảng 2-3 phút. Cuối output sẽ xuất hiện dòng Hardening index — điểm bảo mật trên thang 100. Server Ubuntu mới cài thường đạt 55-65 điểm. Mục tiêu thực tế là đưa lên 80+.

Tại sao Lynis khác với các scanner khác?

Nessus hay OpenVAS quét server từ bên ngoài — như chụp X-quang từ xa. Lynis thì khác: nó chạy trực tiếp bên trong server, đọc thẳng file cấu hình, kernel parameters, user permissions và hơn 200 điểm kiểm tra mà scanner từ xa không thể thấy được.

Sau khi audit 10+ server thực tế, mình thấy hầu hết đều có chung một bộ lỗ hổng: SSH vẫn cho phép root login, firewall chưa bật, log rotation chưa cấu hình, file SUID/SGID không kiểm soát. Mỗi cái chỉ mất 5-10 phút fix — nhưng nếu không có tool scan thì rất dễ bỏ sót.

Lynis kiểm tra những gì?

  • Authentication: SSH config, PAM, sudo rules, password policy
  • File systems: mount options, world-writable files, SUID/SGID binaries
  • Kernel: sysctl parameters, kernel hardening
  • Networking: open ports, firewall status, TCP/IP stack settings
  • Software: package updates, malware scanners, log daemons
  • Users & groups: UID 0 accounts, empty passwords, home directory permissions

Đọc kết quả Lynis — hiểu từng dòng output

Terminal sau khi scan trông khá dọa — một tường chữ màu sắc dài vài trăm dòng. Thực ra cấu trúc rất đơn giản, chỉ cần nhớ 4 ký hiệu:

  • [OK] — Đạt, không cần làm gì
  • [WARNING] — Có vấn đề, nên fix sớm
  • [SUGGESTION] — Gợi ý cải thiện, tùy mức độ ưu tiên
  • [FOUND] — Phát hiện thứ gì đó đáng chú ý, cần review thêm

Scroll xuống cuối output là phần cần tập trung nhất — phần SuggestionsWarnings:

# Xem chi tiết warnings
grep -A 3 "Warning" /var/log/lynis.log

# Xem toàn bộ report
cat /var/log/lynis-report.dat

File /var/log/lynis-report.dat chứa tất cả kết quả dạng machine-readable, tiện để parse tự động hoặc đẩy vào script monitoring.

Một số warning phổ biến và cách fix

1. SSH root login được phép

# Fix: tắt root login SSH
sudo sed -i 's/^PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
sudo systemctl reload sshd

2. Firewall chưa active

# Bật UFW
sudo ufw enable
sudo ufw allow ssh
sudo ufw status

3. Kernel hardening — sysctl chưa tối ưu

# Thêm vào /etc/sysctl.conf
cat >> /etc/sysctl.conf << 'EOF'
# Disable IP forwarding (nếu không phải router)
net.ipv4.ip_forward = 0

# Chống SYN flood
net.ipv4.tcp_syncookies = 1

# Ẩn kernel pointer trong /proc
kernel.kptr_restrict = 2

# Giới hạn dmesg access
kernel.dmesg_restrict = 1
EOF

sudo sysctl -p

4. Không có malware scanner

# Cài rkhunter
sudo apt install rkhunter -y
sudo rkhunter --update
sudo rkhunter --check

Nâng cao: tùy chỉnh Lynis cho production

Chạy Lynis không tương tác (cho cron job)

# Chạy silent, không hỏi Enter
sudo lynis audit system --quiet --no-colors 2>&1 | tee /tmp/lynis-$(date +%Y%m%d).log

# Lưu report với timestamp
sudo cp /var/log/lynis-report.dat /var/backups/lynis-report-$(date +%Y%m%d).dat

Tạo cron job audit hàng tuần

# Thêm vào crontab
sudo crontab -e

# Chạy mỗi thứ Hai 3 giờ sáng
0 3 * * 1 /usr/bin/lynis audit system --quiet > /var/log/lynis-weekly.log 2>&1

Custom profile — bỏ qua các check không liên quan

Server chạy Docker và cố ý bật IP forwarding? Không cần Lynis cảnh báo mỗi lần scan. Tạo custom profile để loại trừ:

# Tạo custom profile
sudo cp /etc/lynis/default.prf /etc/lynis/custom.prf

# Thêm exception vào custom.prf
echo 'skip-test=NETW-3012' >> /etc/lynis/custom.prf

# Chạy với custom profile
sudo lynis audit system --profile /etc/lynis/custom.prf

Mã test ID (như NETW-3012) tìm trong output hoặc file /var/log/lynis-report.dat.

Theo dõi điểm hardening theo thời gian

# Lấy hardening index từ report
grep 'hardening_index' /var/log/lynis-report.dat

# Output dạng: hardening_index=67
# Sau khi fix các warning, chạy lại và so sánh

Tips thực tế khi dùng Lynis

Đừng fix tất cả suggestions cùng lúc. Lynis thường đưa ra 30-50 gợi ý, nhưng không phải cái nào cũng cần thiết. Xử lý Warnings trước, Suggestions sau. Trong Suggestions, ưu tiên những thứ liên quan đến authentication và network — đó là bề mặt tấn công lớn nhất.

Test trên staging trước khi đụng production. Một số thay đổi như sysctl hay PAM config có thể ảnh hưởng đến service đang chạy. Kinh nghiệm thực tế: từng fix kernel hardening trên production và làm mấy container bị lỗi network vì IP forwarding bị tắt. Staging trước, production sau — không có ngoại lệ.

Lynis audit cấu hình, không phải vulnerability của package — đó là giới hạn cần biết. Để vá đầy đủ, kết hợp thêm:

  • unattended-upgrades để tự động update security patches
  • fail2ban để block brute force
  • ClamAV hoặc rkhunter để scan malware

Lưu baseline ngay sau khi setup xong. Khi đã fix warning quan trọng và đạt hardening index 80+, lưu report làm baseline. Lần sau có thay đổi lớn, chạy lại và diff — cách nhanh nhất để phát hiện cấu hình bị drift.

# Lưu baseline
sudo lynis audit system
sudo cp /var/log/lynis-report.dat /root/lynis-baseline-$(date +%Y%m%d).dat

# So sánh sau này
diff /root/lynis-baseline-20240101.dat /var/log/lynis-report.dat | grep '^[<>]'

Mỗi lần onboard server mới, chạy Lynis nên là bước đầu tiên — trước cả khi deploy code. 30 phút scan và fix cơ bản hôm nay có thể tránh được một đêm ngồi trace incident sau này.

Share: