Hardening Ubuntu Server theo CIS Benchmark: Những bước cần làm trước tiên
Ubuntu Server “mặc định” không đồng nghĩa “an toàn mặc định”. Một server mới cài có thể đã có SSH mở, user sudo rộng quyền, service thừa, log chưa đủ, update chưa tự động, firewall chưa bật. Trong môi trường thật, chỉ một cấu hình yếu như SSH cho phép password, file quyền sai, hoặc port public không kiểm soát cũng đủ → rủi ro xâm nhập.
CIS Benchmark là bộ khuyến nghị hardening được dùng rộng rãi cho Linux, cloud, container, DB. Với Ubuntu, CIS giúp chuẩn hóa cấu hình bảo mật theo mức độ kiểm soát cụ thể. Tuy nhiên, không nên áp dụng “mù” toàn bộ benchmark ngay ngày đầu. Một số rule có thể làm hỏng app, khóa admin khỏi server, hoặc phá automation.Bài này tập trung vào những bước cần làm trước tiên: nền tảng, ít rủi ro, hiệu quả cao, phù hợp trước khi đi sâu audit level 1/2.
1. Xác định phạm vi trước khi hardening
Hardening không phải checklist copy-paste. Trước tiên cần biết server dùng để làm gì.
Cần trả lời
– Server chạy web, DB, queue, VPN, bastion, CI/CD? – Có public Internet không? – Admin đăng nhập qua SSH key hay SSO/bastion? – App cần port nào? – Có yêu cầu compliance: CIS Level 1, Level 2, PCI-DSS, ISO 27001? – Có snapshot/backup/console access không?
Vì sao quan trọng?
Một số CIS rule có thể ảnh hưởng vận hành:
– Tắt filesystem module → app legacy lỗi. – Cấu hình password aging → account service bị khóa. – Siết SSH quá mạnh → mất truy cập. – Bật auditd quá chi tiết → tăng I/O/log storage. – Vô hiệu hóa IPv6 → app/network phụ thuộc IPv6 lỗi.
Nguyên tắc: hardening theo rủi ro, test trước, rollback được.2. Cập nhật hệ thống ngay sau khi cài
Patch là lớp phòng thủ đầu tiên. Server chưa cập nhật → dễ dính CVE cũ.
sudo apt update
sudo apt full-upgrade -y
sudo rebootSau reboot:
uname -a
lsb_release -aBật security update tự động
Cài:
sudo apt install unattended-upgrades apt-listchanges -yBật:
sudo dpkg-reconfigure unattended-upgradesKiểm tra file:
sudo nano /etc/apt/apt.conf.d/50unattended-upgradesNên đảm bảo security repo được bật. Có thể bật auto reboot theo khung giờ bảo trì nếu phù hợp:
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "03:00";3. Tạo user admin riêng, hạn chế root
Không nên vận hành trực tiếp bằng root. Tạo user admin riêng:
sudo adduser adminuser
sudo usermod -aG sudo adminuserKiểm tra sudo:
su - adminuser
sudo whoamiKết quả mong muốn:
rootKhóa root login qua SSH
Sửa SSH config:
sudo nano /etc/ssh/sshd_configThiết lập:
PermitRootLogin noReload:
sudo systemctl reload ssh4. Hardening SSH: ưu tiên khóa, giảm bề mặt tấn công
SSH là cửa chính. CIS đặc biệt nhấn mạnh cấu hình SSH an toàn.
Dùng SSH key thay password
Trên máy local:
ssh-keygen -t ed25519 -C "admin@server"
ssh-copy-id adminuser@SERVER_IPTrên server, sửa:
sudo nano /etc/ssh/sshd_configKhuyến nghị ban đầu:
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
X11Forwarding no
AllowUsers adminuser
ClientAliveInterval 300
ClientAliveCountMax 2
LoginGraceTime 60
MaxAuthTries 4Kiểm tra config:
sudo sshd -tReload:
sudo systemctl reload sshĐừng đổi port SSH chỉ để “bảo mật”
Đổi port có thể giảm noise log, nhưng không thay thế key auth, firewall, fail2ban, monitoring. Nếu đổi port, phải cập nhật firewall, cloud security group, automation.
5. Bật firewall mặc định deny inbound
Ubuntu thường dùng UFW đơn giản, phù hợp bước đầu.
Chính sách cơ bản
sudo ufw default deny incoming
sudo ufw default allow outgoingCho phép SSH trước:
sudo ufw allow OpenSSHNếu SSH dùng port riêng:
sudo ufw allow 2222/tcpCho phép app cần thiết, ví dụ web:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcpBật firewall:
sudo ufw enable
sudo ufw status verboseNguyên tắc
– Chỉ mở port cần. – Không mở DB public nếu không bắt buộc. – Ưu tiên private network/VPN/bastion. – Đồng bộ UFW với cloud firewall/security group.
6. Gỡ hoặc tắt service không cần
Service thừa → port thừa → bug thừa.
Liệt kê service đang chạy:
systemctl --type=service --state=runningLiệt kê socket:
ss -tulpenGỡ package không cần, ví dụ:
sudo apt purge telnet rsh-client talk -y
sudo apt autoremove --purge -yTắt service không dùng:
sudo systemctl disable --now SERVICE_NAMEKiểm tra port public
sudo ss -tulpenTừ máy ngoài:
nmap -Pn SERVER_IPMục tiêu: chỉ thấy port đã chủ ý mở.
7. Thiết lập thời gian chuẩn: NTP/chrony
Log sai giờ → điều tra khó, audit yếu. CIS yêu cầu time sync.
Cài chrony:
sudo apt install chrony -y
sudo systemctl enable --now chronyKiểm tra:
chronyc tracking
timedatectlĐảm bảo:
System clock synchronized: yesVới môi trường doanh nghiệp, dùng NTP nội bộ thay pool public.
8. Bật auditd để ghi nhận sự kiện quan trọng
Audit log giúp truy vết: ai sửa file nhạy cảm, ai dùng sudo, thay đổi auth, module kernel, user/group.
Cài:
sudo apt install auditd audispd-plugins -y
sudo systemctl enable --now auditdKiểm tra:
sudo auditctl -sMột số file nên được theo dõi:
sudo auditctl -w /etc/passwd -p wa -k identity
sudo auditctl -w /etc/group -p wa -k identity
sudo auditctl -w /etc/shadow -p wa -k identity
sudo auditctl -w /etc/sudoers -p wa -k scope
sudo auditctl -w /etc/ssh/sshd_config -p wa -k sshdĐể rule bền sau reboot, cấu hình trong:
/etc/audit/rules.d/Ví dụ:
sudo nano /etc/audit/rules.d/hardening.rulesNội dung:
-w /etc/passwd -p wa -k identity
-w /etc/group -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/sudoers -p wa -k scope
-w /etc/ssh/sshd_config -p wa -k sshdLoad lại:
sudo augenrules --load9. Siết quyền sudo
Sudo quá rộng → leo thang đặc quyền dễ hơn. Kiểm tra group sudo:
getent group sudoSửa sudoers bằng:
sudo visudoKhuyến nghị:
– Chỉ admin thật sự cần → thuộc group sudo.
– Không dùng NOPASSWD tràn lan.
– Tách account cá nhân với account service.
– Log sudo command.
Có thể bật log sudo chi tiết:
Defaults logfile="/var/log/sudo.log"
Defaults log_input,log_outputlog_input/log_output có thể ghi dữ liệu nhạy cảm. Cân nhắc storage, quyền đọc, retention.
10. Cấu hình password policy nếu còn dùng password
Nếu SSH đã tắt password, password policy vẫn quan trọng cho sudo, console, account local.
Cài module:
sudo apt install libpam-pwquality -ySửa:
sudo nano /etc/security/pwquality.confVí dụ:
minlen = 14
dcredit = -1
ucredit = -1
lcredit = -1
ocredit = -1
maxrepeat = 3
retry = 3Cấu hình aging:
sudo nano /etc/login.defsVí dụ:
PASS_MAX_DAYS 365
PASS_MIN_DAYS 1
PASS_WARN_AGE 14Áp cho user hiện có:
sudo chage --maxdays 365 --mindays 1 --warndays 14 adminuserKhông áp máy móc cho account service nếu gây gián đoạn.
11. Bảo vệ filesystem, mount option
CIS thường khuyến nghị tách partition và dùng mount option như nodev, nosuid, noexec cho vùng rủi ro.
Các mount point nên xem xét:
– /tmp
– /var/tmp
– /dev/shm
– /home
– /var/log
– /var/log/audit
Kiểm tra:
findmntVí dụ /dev/shm:
sudo nano /etc/fstabThêm/sửa:
tmpfs /dev/shm tmpfs defaults,nodev,nosuid,noexec 0 0Áp dụng:
sudo mount -o remount /dev/shmKiểm tra:
findmnt /dev/shmnoexec trên /tmp có thể làm hỏng installer, agent, một số app. Test trước.
12. Log, rotate, centralize
Hardening không chỉ ngăn chặn; còn phải phát hiện.
Kiểm tra rsyslog:
sudo systemctl status rsyslogLog quan trọng:
/var/log/auth.log
/var/log/syslog
/var/log/audit/audit.log
/var/log/sudo.logĐảm bảo logrotate hoạt động:
ls /etc/logrotate.d/Với server production, nên đẩy log về nơi tập trung:
– SIEM – syslog server – cloud logging – EDR/XDR platform
Lý do: attacker vào được server có thể xóa log local. Log tập trung → khó che dấu hơn.
13. Dùng công cụ audit CIS: Lynis, OpenSCAP, CIS-CAT
Sau hardening nền, chạy audit để biết gap.
Lynis
sudo apt install lynis -y
sudo lynis audit systemReport:
/var/log/lynis.log
/var/log/lynis-report.datOpenSCAP
Có thể dùng với profile CIS/Ubuntu nếu phù hợp version. Mạnh hơn, nhưng cần hiểu profile, remediation, false positive.
CIS-CAT
CIS-CAT Pro là công cụ chính thức từ CIS, phù hợp tổ chức cần báo cáo compliance.
Quan trọng: Điểm audit cao không đồng nghĩa an toàn tuyệt đối. Điểm thấp cũng không luôn nghĩa nguy hiểm nếu có compensating control. Cần review theo ngữ cảnh.14. Thứ tự ưu tiên thực tế
Nếu chỉ có vài giờ đầu sau khi dựng server, làm theo thứ tự:
1. Snapshot/backup/console access. 2. Update OS + reboot. 3. Tạo admin user, khóa root SSH. 4. SSH key-only, tắt password auth. 5. Bật firewall, chỉ mở port cần. 6. Gỡ/tắt service thừa. 7. Bật chrony/NTP. 8. Bật auditd + rule cơ bản. 9. Siết sudo/user policy. 10. Chạy Lynis/CIS audit, xử lý gap theo rủi ro.
Thứ tự này giảm rủi ro lớn nhất trước: lỗ hổng đã biết, truy cập từ Internet, credential yếu, service thừa, thiếu log.
15. Những lỗi thường gặp khi áp dụng CIS
Áp toàn bộ benchmark không test
Kết quả: app lỗi, mất SSH, pipeline chết. Cách đúng: staging → test → change window → rollback plan.
Chỉ hardening OS, bỏ qua cloud layer
Security group mở 0.0.0.0/0 cho DB → OS firewall không đủ.
Cần kiểm soát cả cloud firewall, IAM, metadata service, disk encryption.
Không giám sát sau hardening
Hardening một lần rồi bỏ → cấu hình drift. Cần periodic audit, config management, alert.
Dùng chung user admin
Không truy vết được ai làm gì. Cần user cá nhân, sudo log, MFA/bastion nếu có.
Kết luận thực tế
CIS Benchmark là bản đồ tốt để hardening Ubuntu Server, nhưng giá trị thật nằm ở cách triển khai: ưu tiên đúng, test kỹ, ghi log đủ, duy trì liên tục. Đừng bắt đầu bằng hàng trăm rule phức tạp. Hãy bắt đầu bằng những lớp nền: cập nhật hệ thống, SSH an toàn, firewall mặc định deny, giảm service, audit log, sudo chặt, time sync chuẩn.
Sau đó mới tiến tới các kiểm soát sâu hơn: partition riêng, kernel parameter, MAC/AppArmor, audit rule đầy đủ, compliance scan, SIEM, config management. Hardening hiệu quả không phải “làm một lần cho xong”, mà là một chu trình: baseline → audit → fix → monitor → repeat.
Bình luận (0)
Chưa có bình luận. Hãy là người đầu tiên!