Hardening Ubuntu theo CIS: 7 bước đầu tiên phải làm

13/05/2026 · P T P · Chung

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 reboot

Sau reboot:

uname -a
lsb_release -a

Bật security update tự động

Cài:

sudo apt install unattended-upgrades apt-listchanges -y

Bật:

sudo dpkg-reconfigure unattended-upgrades

Kiểm tra file:

sudo nano /etc/apt/apt.conf.d/50unattended-upgrades

Nê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";

Lưu ý: Với DB hoặc app critical, auto reboot cần maintenance window rõ ràng.


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 adminuser

Kiểm tra sudo:

su - adminuser
sudo whoami

Kết quả mong muốn:

root

Khóa root login qua SSH

Sửa SSH config:

sudo nano /etc/ssh/sshd_config

Thiết lập:

PermitRootLogin no

Reload:

sudo systemctl reload ssh

Quan trọng: Mở session SSH mới để test trước khi đóng session cũ.


4. 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_IP

Trên server, sửa:

sudo nano /etc/ssh/sshd_config

Khuyến nghị ban đầu:

PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
X11Forwarding no
AllowUsers adminuser
ClientAliveInterval 300
ClientAliveCountMax 2
LoginGraceTime 60
MaxAuthTries 4

Kiểm tra config:

sudo sshd -t

Reload:

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 outgoing

Cho phép SSH trước:

sudo ufw allow OpenSSH

Nếu SSH dùng port riêng:

sudo ufw allow 2222/tcp

Cho phép app cần thiết, ví dụ web:

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

Bật firewall:

sudo ufw enable
sudo ufw status verbose

Nguyê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=running

Liệt kê socket:

ss -tulpen

Gỡ package không cần, ví dụ:

sudo apt purge telnet rsh-client talk -y
sudo apt autoremove --purge -y

Tắt service không dùng:

sudo systemctl disable --now SERVICE_NAME

Kiểm tra port public

sudo ss -tulpen

Từ máy ngoài:

nmap -Pn SERVER_IP

Mụ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 chrony

Kiểm tra:

chronyc tracking
timedatectl

Đảm bảo:

System clock synchronized: yes

Vớ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 auditd

Kiểm tra:

sudo auditctl -s

Mộ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.rules

Nộ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 sshd

Load lại:

sudo augenrules --load

9. Siết quyền sudo

Sudo quá rộng → leo thang đặc quyền dễ hơn. Kiểm tra group sudo:

getent group sudo

Sửa sudoers bằng:

sudo visudo

Khuyế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_output

Lưu ý: log_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 -y

Sửa:

sudo nano /etc/security/pwquality.conf

Ví dụ:

minlen = 14
dcredit = -1
ucredit = -1
lcredit = -1
ocredit = -1
maxrepeat = 3
retry = 3

Cấu hình aging:

sudo nano /etc/login.defs

Ví 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 adminuser

Khô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:

findmnt

Ví dụ /dev/shm:

sudo nano /etc/fstab

Thêm/sửa:

tmpfs /dev/shm tmpfs defaults,nodev,nosuid,noexec 0 0

Áp dụng:

sudo mount -o remount /dev/shm

Kiểm tra:

findmnt /dev/shm

Cẩn thận: noexec 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 rsyslog

Log 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 system

Report:

/var/log/lynis.log
/var/log/lynis-report.dat

OpenSCAP

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.

#buoc #hardening #theo #tien #ubuntu
Chia sẻ:
← Trước
Secure Ubuntu cho WordPress: Nginx, PHP-FPM, SSL, quyền file

Bài viết tương tự

Bình luận

Chưa có bình luận. Hãy là người đầu tiên!