Vấn đề thực tế: Ảo tưởng về tính an toàn của cấu hình máy chủ mặc định
Khi khởi tạo một máy chủ Ubuntu 24.04 hoặc Rocky Linux 9 mới tinh trên AWS hoặc DigitalOcean, mọi thứ trông có vẻ rất an toàn và gọn gàng. Bạn thêm SSH public key, bật UFW để mở cổng 443 và khởi chạy ứng dụng trong container. Nhìn từ bên ngoài, máy chủ của bạn dường như đã được bảo vệ nghiêm ngặt.
Nhưng thực tế thường không phải như vậy. Các bản phân phối Linux mặc định luôn ưu tiên tính tương thích của phần mềm theo kiểu “cắm là chạy” hơn là khả năng phòng thủ trước môi trường thù địch. Các image gốc xuất xưởng với hàng loạt thiết lập bảo mật lỏng lẻo. Giá trị umask tạo file quá thoáng, các giao thức mạng lỗi thời, biểu ngữ (banner) đăng nhập OS hiển thị quá nhiều thông tin chi tiết, cùng các file cấu hình cho phép mọi người dùng đọc (world-readable) vẫn đang hoạt động. Một kẻ tấn công khi giành được quyền thực thi cấp thấp thông qua một ứng dụng web chưa vá lỗ hổng có thể lợi dụng những cấu hình mặc định này để leo thang đặc quyền cục bộ chỉ trong vài phút.
Kiểm tra bảo mật thủ công cho cả máy chủ là công việc cực kỳ gian nan. Một máy chủ Linux tiêu chuẩn có hơn 1.800 chỉ thị cấu hình nằm rải rác trong /etc/, /proc/sys/ và /var/log/. Nếu không có công cụ tự động, bạn không thể biết chắc giá trị nào đang vi phạm các tiêu chuẩn bảo mật CIS benchmark.
Phân tích nguyên nhân gốc rễ: Vì sao cấu hình Linux mặc định chưa đạt chuẩn an toàn
Các nhóm duy trì hệ điều hành luôn phải đánh đổi. Họ cần đảm bảo cơ sở dữ liệu, các dịch vụ daemon doanh nghiệp cũ và chuỗi công cụ của lập trình viên có thể chạy ngay từ ngày đầu tiên mà không gặp lỗi ngầm. Do đó, các thiết lập mặc định từ upstream luôn nghiêng về tính tương thích thay vì bảo mật.
Có ba nguyên nhân cốt lõi khiến các máy chủ mới khởi tạo không vượt qua được các bài đánh giá bảo mật cơ bản:
- Thiết lập Kernel mặc định quá lỏng lẻo: Linux kernel kích hoạt sẵn các tính năng dành cho router như chấp nhận gói tin ICMP redirect và điều hướng gói tin nguồn (source packet routing). Những thiết lập này khiến các máy chủ web và API riêng biệt dễ bị tấn công giả mạo gói tin (packet spoofing) và điều hướng lại lộ trình mạng.
- Thiếu cơ chế thực thi chính sách tập trung: Linux không có một hệ thống registry cấu hình duy nhất. Các chính sách bảo mật nằm phân mảnh trên nhiều cấu hình riêng biệt của OpenSSH, PAM, systemd và auditd. Nếu không kiểm tra định kỳ bằng công cụ tự động, hiện tượng trôi dạt cấu hình (configuration drift) sẽ âm thầm diễn ra trong nhiều tháng mà không ai hay biết.
- Điểm mù tại các phân vùng mount cục bộ và gói cài đặt: Các đội ngũ kỹ thuật thường giám sát rất kỹ tường lửa chu vi bên ngoài. Thế nhưng họ lại hiếm khi kiểm tra xem
/tmpvà/var/tmpđã được mount trên các phân vùng riêng biệt với các tùy chọnnoexec,nosuid,nodevhay chưa. Bên cạnh đó, các trình biên dịch không sử dụng nhưgccvẫn thường xuyên xuất hiện trên các production image, vô tình cung cấp sẵn công cụ khai thác cho kẻ tấn công.
So sánh các giải pháp: Lựa chọn chiến lược đánh giá bảo mật phù hợp
Các đội ngũ kỹ thuật thường lựa chọn một trong ba hướng tiếp cận kiểm tra bảo mật sau:
1. Checklist thủ công theo chuẩn CIS Benchmark
Center for Internet Security (CIS) cung cấp các bộ hướng dẫn gia cố bảo mật rất toàn diện. Bộ tài liệu benchmark cho Linux của họ dày hơn 800 trang bao gồm các bước kiểm tra thủ công, lệnh shell và script xác thực.
- Ưu điểm: Độ bao phủ chuyên sâu; giúp bạn hiểu sâu về các cơ chế nội tại cấp thấp của hệ điều hành.
- Nhược điểm: Tiêu tốn từ 10 đến 15 giờ kỹ thuật cho mỗi máy chủ. Phương pháp này không thể mở rộng trên hàng chục máy chủ, và sự mệt mỏi của con người chắc chắn sẽ dẫn đến việc bỏ sót các hạng mục kiểm tra.
2. Trình quét mạng doanh nghiệp chuyên dụng (Nessus, OpenVAS, Qualys)
Các nền tảng doanh nghiệp này (như OpenVAS) thực hiện quét cổng từ xa và đối chiếu danh mục gói phần mềm đã cài đặt với cơ sở dữ liệu CVE công khai.
- Ưu điểm: Quét rất tốt các lỗ hổng vòng ngoài, phát hiện các phiên bản thư viện lỗi thời và khám phá mạng.
- Nhược điểm: Chi phí bản quyền hàng năm đắt đỏ, tiêu tốn nhiều tài nguyên hệ thống, đồng thời thiếu chiều sâu trong việc kiểm tra các cờ sysctl nội bộ, tính toàn vẹn của file shadow hay cấu hình ngăn xếp PAM.
3. Lynis: Công cụ kiểm tra bảo mật host gọn nhẹ
Lynis là công cụ audit mã nguồn mở được viết hoàn toàn bằng POSIX shell. Công cụ này chạy trực tiếp trên máy chủ, thực hiện hơn 300 bước kiểm tra tự động đối chiếu với các tiêu chuẩn CIS và ISO 27001, và hoàn thành toàn bộ quá trình chỉ dưới 90 giây. Nó không cần daemon chạy nền và không yêu cầu bất kỳ dependency nặng nề nào.
- Ưu điểm: Nhanh chóng, linh hoạt, chạy được trên hầu hết mọi Unix shell, chấm điểm cụ thể qua chỉ số Hardening Index (0–100) và xuất chính xác mã định danh để khắc phục.
- Nhược điểm: Lynis chỉ phát hiện vấn đề chứ không tự động sửa lỗi. Đây là chủ đích thiết kế, bởi việc tự động vá lỗi một cách mù quáng trên môi trường production rất dễ làm gián đoạn các dịch vụ đang chạy.
Cách tiếp cận tối ưu: Từng bước kiểm tra và gia cố Linux với Lynis
Một quy trình bảo mật chuẩn mực là kết hợp giữa việc quét tự động bằng Lynis và khắc phục thủ công có chủ đích. Chiến lược này giúp nâng cao năng lực phòng thủ rõ rệt mà vẫn đảm bảo tính ổn định tuyệt đối cho các hệ thống production.
Bước 1: Cài đặt Lynis từ kho lưu trữ chính thức của Cisofy
Tránh sử dụng kho mirror mặc định của hệ điều hành vì chúng thường cập nhật chậm hơn nhiều tháng so với các bộ quy tắc tuân thủ mới nhất. Hãy sử dụng trực tiếp kho upstream chính thức từ Cisofy.
Trên Debian và Ubuntu:
# Cài đặt các gói transport cốt lõi
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg
# Nhập khóa ký kho lưu trữ Cisofy
curl -fsSL https://packages.cisofy.com/keys/cisofy-software-public.key | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/cisofy.gpg
# Thêm mục kho lưu trữ upstream
echo "deb https://packages.cisofy.com/community/lynis/deb/ stable main" | sudo tee /etc/apt/sources.list.d/cisofy-lynis.list
# Cài đặt Lynis
sudo apt-get update
sudo apt-get install -y lynis
Trên RHEL, Rocky Linux hoặc AlmaLinux 9:
sudo dnf install -y epel-release
sudo dnf install -y lynis
Bước 2: Chạy quét toàn diện hệ thống
Thực thi Lynis với quyền root để bộ quét có thể đánh giá mã băm file shadow, cây sysctl bị hạn chế quyền và cấu hình tường lửa:
sudo lynis audit system
Lynis sẽ phân tích các cơ chế bảo vệ bộ nhớ, hệ thống con xác thực, các tầng lưu trữ và các cổng mạng đang mở. Quá trình quét hoàn tất trong khoảng 60 đến 90 giây.
Khi hoàn tất, Lynis sẽ hiển thị một bảng tổng kết với điểm số Hardening Index của hệ thống. Một máy chủ cloud Ubuntu hoặc Rocky nguyên bản thường chỉ đạt từ 58 đến 64 trên thang điểm 100.
Lynis lưu toàn bộ dữ liệu quét vào hai file cục bộ để phục vụ phân tích:
/var/log/lynis.log: Toàn bộ log chi tiết quá trình thực thi kèm các thông điệp gỡ lỗi (debug)./var/log/lynis-report.dat: Dữ liệu dạng key-value có cấu trúc phục vụ tự động hóa và trích xuất báo cáo tùy chỉnh.
Bước 3: Lọc các cảnh báo và đề xuất ưu tiên cao
Kết quả hiển thị trên terminal có thể vượt quá 3.000 dòng. Hãy tập trung vào các phát hiện có rủi ro cao bằng cách lọc trực tiếp file log:
# Liệt kê các vi phạm bảo mật trực tiếp
sudo grep -E "Warning:" /var/log/lynis.log
# Liệt kê các đề xuất gia cố bảo mật sắp xếp theo mã kiểm tra (test ID)
sudo grep -E "Suggestion:" /var/log/lynis.log
Mỗi đề xuất đều đi kèm một Test ID cụ thể, ví dụ như KRNL-5820 (cấu hình sysctl cho kernel) hoặc AUTH-9288 (chính sách hết hạn mật khẩu). Bạn chỉ cần tra cứu mã này trên cổng thông tin của Cisofy để đọc tài liệu giải thích chi tiết về bối cảnh bảo mật đằng sau từng khuyến nghị.
Bước 4: Khắc phục các lỗ hổng phổ biến trên môi trường Production
Xử lý bốn nhóm cấu hình phổ biến dưới đây sẽ giải quyết được phần lớn các cảnh báo mức độ nghiêm trọng cao từ Lynis.
1. Gia cố ngăn xếp mạng của Kernel
Cấu hình mạng mặc định thường chấp nhận các hành vi định tuyến lỏng lẻo. Hãy tạo một file cấu hình drop-in tại /etc/sysctl.d/99-security-hardening.conf để ghi đè chúng:
# Vô hiệu hóa tính năng định tuyến trừ khi máy chủ là cổng VPN hoặc NAT đang hoạt động
net.ipv4.ip_forward = 0
# Bỏ qua các yêu cầu ping broadcast để ngăn chặn tấn công Smurf
net.ipv4.icmp_echo_ignore_broadcasts = 1
# Bỏ qua các gói tin ICMP redirect để ngăn chặn chiếm quyền điều hướng gói tin
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv6.conf.default.accept_redirects = 0
# Không cho phép gửi ICMP redirect
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
# Kích hoạt TCP SYN cookie để chống chịu các đợt tấn công SYN flood
net.ipv4.tcp_syncookies = 1
# Ghi log các gói tin có địa chỉ nguồn bất hợp lệ (martian packets)
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.log_martians = 1
Áp dụng ngay các thiết lập mới mà không cần khởi động lại máy chủ:
sudo sysctl --system
2. Siết chặt Umask tạo file và bảo mật tài khoản
Các tài khoản Linux tiêu chuẩn mặc định có giá trị umask là 022. Thiết lập này khiến các file mới tạo ra có thể bị đọc bởi mọi người dùng cục bộ khác. Hãy siết chặt hành vi này bằng cách đổi umask mặc định của hệ thống thành 027 trong /etc/login.defs:
UMASK 027
Các tài khoản dịch vụ và thông tin đăng nhập bảo trì luôn đòi hỏi độ ngẫu nhiên cao (entropy). Khi khởi tạo tài khoản quản trị và người dùng cơ sở dữ liệu ban đầu, hãy tránh đặt mật khẩu đơn giản. Tôi thường dùng công cụ tạo mật khẩu client-side tại toolcraft.app/vi/tools/security/password-generator để tạo mật khẩu ngẫu nhiên 24 ký tự kèm ký tự đặc biệt. Vì công cụ này sinh khóa trực tiếp ngay trong trình duyệt mà không gửi request tới API bên ngoài, mật khẩu sẽ không bao giờ bị rò rỉ qua mạng hay lưu lại trong lịch sử dòng lệnh.
3. Thiết lập biểu ngữ cảnh báo trước khi đăng nhập
Các tiêu chuẩn tuân thủ luôn yêu cầu hiển thị biểu ngữ cảnh báo pháp lý trước khi cấp quyền truy cập shell. Biểu ngữ này xác lập ranh giới vận hành rõ ràng và loại trừ các khiếu nại về hành vi truy cập trái phép. Thêm cảnh báo của bạn vào /etc/issue.net:
sudo tee /etc/issue.net << 'EOF'
********************************************************************
* Chi danh cho truy cap duoc uy quyen. Moi hoat dong deu duoc ghi log.*
* Hay ngat ket noi ngay lap tuc neu ban khong phai nguoi van hanh. *
********************************************************************
EOF
Mở file /etc/ssh/sshd_config, đảm bảo có dòng cấu hình Banner /etc/issue.net, kiểm tra cú pháp và tải lại cấu hình OpenSSH:
sudo sshd -t && sudo systemctl reload sshd
4. Kích hoạt tính năng kiểm toán tiến trình và lời gọi hệ thống
Lynis sẽ gắn cờ cảnh báo nếu hệ thống hoạt động mà không có cơ chế kiểm toán sự kiện kernel theo thời gian thực. Việc cài đặt Linux Audit Daemon (auditd) sẽ giúp bạn theo dõi chi tiết các thao tác chỉnh sửa file, chuyển đổi quyền hạn và các system call trái phép:
# Trên Debian hoặc Ubuntu
sudo apt-get install -y auditd audispd-plugins
sudo systemctl enable --now auditd
# Trên RHEL hoặc Rocky Linux 9
sudo dnf install -y audit
sudo systemctl enable --now auditd
Bước 5: Xác minh kết quả sau khi gia cố
Kiểm chứng hiệu quả của các thay đổi bằng cách chạy lại Lynis ở chế độ quét nhanh:
sudo lynis audit system --quick
Sau khi đã tinh chỉnh tham số kernel, siết chặt umask mặc định, khởi chạy auditd và thiết lập banner pháp lý, điểm Hardening Index thường sẽ tăng từ mức ~60 lên khoảng 82–88 điểm. Quan trọng hơn cả là bạn đã triệt tiêu được các điểm yếu cấu hình thực tế có thể bị khai thác.
Bước 6: Tự động hóa việc kiểm tra định kỳ với Cron
Mức độ an toàn của hệ thống có xu hướng suy giảm theo thời gian. Các đợt cài đặt gói phần mềm thường nhật, cập nhật cấu hình hay các phiên debug tạm thời đều có thể gây ra hiện tượng trôi dạt cấu hình. Hãy thiết lập một cron job định kỳ để quét ngầm và phát hiện sớm các nguy cơ thụt lùi bảo mật:
sudo crontab -e
Thêm dòng sau để tự động thực hiện quét vào lúc 03:00 sáng Thứ Hai hàng tuần:
0 3 * * 1 /usr/sbin/lynis audit system --cronjob --log-file /var/log/lynis-cron.log
Đẩy file log /var/log/lynis-cron.log về Datadog, Grafana Loki hoặc thông qua một script gửi cảnh báo tới webhook Slack. Thiết lập cảnh báo này sẽ giúp bạn phát hiện kịp thời các sơ hở bảo mật mới phát sinh trước khi kẻ tấn công kịp khai thác.

