Checklist hardening secure Ubuntu server: 20 bước thực hành không nên bỏ qua
Một Ubuntu server “vừa cài xong” gần như chưa bao giờ là một server “đủ an toàn” để đưa lên Internet. Rất nhiều cuộc tấn công không bắt đầu bằng zero-day phức tạp, mà xuất phát từ những lỗi vận hành rất cơ bản: mật khẩu yếu, SSH mở quá rộng, dịch vụ thừa, log không được theo dõi, hoặc bản vá bị trì hoãn nhiều tuần. Tin tốt là bạn không cần một đội security riêng để cải thiện đáng kể mức an toàn. Chỉ cần một checklist rõ ràng và kỷ luật thực hiện.
Bài viết này tổng hợp 20 bước hardening thực hành dành cho Ubuntu server, phù hợp cho VPS, máy chủ web, API, database nội bộ hoặc bastion host. Mục tiêu không phải là “bất khả xâm phạm”, mà là giảm bề mặt tấn công, tăng khả năng phòng thủ, và giúp bạn phát hiện sự cố sớm hơn.
1. Cập nhật hệ điều hành ngay sau khi khởi tạo
Bước đầu tiên luôn là cập nhật toàn bộ gói hệ thống. Nhiều image Ubuntu trên cloud đã cũ vài tuần hoặc vài tháng so với thời điểm deploy.
– Chạy apt update && apt upgrade -y
– Nếu cần, dùng thêm apt full-upgrade -y
– Kiểm tra kernel, OpenSSH, OpenSSL, sudo, systemd
Vì sao quan trọng: bản vá bảo mật thường khắc phục các lỗ hổng đã bị công khai. Chậm vá đồng nghĩa với việc bạn đang “mở cửa” cho những kỹ thuật tấn công đã có sẵn exploit.
2. Bật cập nhật bảo mật tự động
Không phải hệ thống nào cũng được chăm sóc mỗi ngày. Vì vậy, unattended-upgrades là lớp bảo vệ cơ bản nhưng rất hiệu quả.
– Cài unattended-upgrades
– Cấu hình chỉ áp dụng security updates nếu muốn thận trọng
– Bật thông báo email hoặc kiểm tra log định kỳ
Lưu ý: tự động cập nhật không thay thế kiểm thử, nhưng giúp bạn giảm thời gian phơi nhiễm với lỗ hổng đã biết.
3. Tạo user riêng và tắt đăng nhập trực tiếp bằng root
Không nên làm việc hằng ngày bằng tài khoản root. Hãy tạo user quản trị riêng, gán vào nhóm sudo, và dùng sudo khi cần.
– Tạo user mới
– Cấp quyền sudo
– Kiểm tra quyền trước khi vô hiệu hóa root login
Lợi ích: tăng khả năng audit, giảm rủi ro thao tác nhầm, và khiến attacker khó nhắm vào mục tiêu mặc định hơn.
4. Hardening SSH: đổi cấu hình mặc định
SSH thường là cửa ngõ quan trọng nhất của server. Nếu cấu hình lỏng lẻo, mọi biện pháp khác đều yếu đi.
Các việc nên làm:
– Đổi PermitRootLogin no
– Đặt PasswordAuthentication no nếu đã dùng key
– Tắt ChallengeResponseAuthentication nếu không dùng
– Hạn chế user được phép SSH bằng AllowUsers hoặc AllowGroups
– Cân nhắc đổi port mặc định nếu phù hợp vận hành
Đừng thần thánh hóa việc đổi port, nhưng nó vẫn giúp giảm một phần bot scan rác.
5. Dùng SSH key thay cho mật khẩu
SSH key là tiêu chuẩn tối thiểu cho môi trường production.
– Tạo khóa mạnh: Ed25519 hoặc RSA 4096
– Bảo vệ private key bằng passphrase
– Không chia sẻ chung một key cho nhiều người
– Thu hồi key ngay khi nhân sự thay đổi
Thực tế: rất nhiều sự cố đến từ mật khẩu bị dò, bị reuse hoặc bị lộ qua thiết bị cá nhân.
6. Bật xác thực đa yếu tố cho truy cập quản trị
Nếu server quan trọng, hãy cân nhắc MFA cho SSH hoặc ít nhất cho VPN/bastion trước khi vào server.
– Dùng TOTP qua PAM
– Hoặc đặt lớp MFA ở cổng VPN / jump host
– Kiểm tra kỹ kịch bản mất thiết bị để tránh tự khóa mình
MFA đặc biệt hữu ích khi private key bị đánh cắp hoặc tài khoản quản trị bị lộ.
7. Cấu hình firewall tối thiểu quyền
Trên Ubuntu, ufw là lựa chọn đơn giản và đủ mạnh cho đa số nhu cầu.
Checklist cơ bản:
– default deny incoming
– default allow outgoing hoặc siết chặt hơn tùy hệ thống
– Chỉ mở đúng cổng cần thiết: 22, 80, 443, hoặc cổng ứng dụng
– Giới hạn IP quản trị nếu có thể
Nguyên tắc: chỉ mở những gì thật sự dùng. Mọi cổng dư thừa đều là một cơ hội để bị quét và khai thác.
8. Gỡ hoặc vô hiệu hóa dịch vụ không cần thiết
Sau khi dựng server, hãy rà lại các service đang chạy:
– ss -tulpn
– systemctl list-units --type=service
– Gỡ FTP, Telnet, Samba, NFS hoặc daemon không dùng
– Tắt service khởi động cùng hệ thống nếu không cần
Ít dịch vụ hơn = ít lỗ hổng hơn, ít cấu hình sai hơn, và log cũng dễ theo dõi hơn.
9. Bật AppArmor và hiểu profile đang áp dụng
Ubuntu tích hợp AppArmor rất hữu ích để hạn chế hành vi của tiến trình.
– Kiểm tra AppArmor đã enabled chưa
– Xem các profile đang ở chế độ enforce
– Với dịch vụ nhạy cảm, cân nhắc tinh chỉnh profile
Đây là một lớp kiểm soát kiểu least privilege ở cấp ứng dụng, giúp giảm tác động nếu một service bị khai thác.
10. Siết quyền file, thư mục và secret
Nhiều hệ thống bị lộ không phải vì exploit, mà vì file .env, backup SQL hoặc private key đặt sai quyền.
– Dùng chmod/chown đúng mức cần thiết
– Secret chỉ nên đọc được bởi user chạy dịch vụ
– Tách user chạy app, database, deploy nếu có thể
– Không lưu secret trong thư mục public hoặc repo
Kiểm tra kỹ các file như /etc/ssh/, chứng chỉ TLS, khóa API, token CI/CD.
11. Tắt hoặc giới hạn IPv6 nếu không dùng
Nếu hạ tầng của bạn chưa quản lý IPv6 tốt, việc để mặc định bật có thể tạo ra khoảng trống chính sách.
– Nếu không dùng, tắt một cách có kiểm soát
– Nếu dùng, phải áp dụng firewall và monitoring tương đương IPv4
Sai lầm phổ biến: khóa IPv4 rất chặt nhưng quên mất lưu lượng IPv6 vẫn đi qua.
12. Đồng bộ thời gian chính xác
Thời gian hệ thống lệch gây ra nhiều vấn đề: log khó đối chiếu, chứng chỉ lỗi, token hết hạn sai, điều tra sự cố khó khăn.
– Dùng systemd-timesyncd, chrony hoặc NTP phù hợp
– Đồng bộ timezone theo chuẩn vận hành
– Kiểm tra drift định kỳ
Trong bảo mật, thời gian chính xác là nền tảng cho log và forensic.
13. Thiết lập fail2ban hoặc cơ chế chặn brute-force
fail2ban vẫn hữu ích để chặn các đợt dò quét tự động vào SSH, web login hoặc dịch vụ công khai.
– Bật jail cho SSH
– Tinh chỉnh bantime, findtime, maxretry
– Có thể mở rộng cho Nginx, Apache, ứng dụng auth riêng
Nó không thay thế xác thực mạnh, nhưng giúp giảm nhiễu và hạ tải từ các đợt tấn công cơ hội.
14. Cấu hình audit và log đầy đủ
Không có log, bạn gần như mù khi sự cố xảy ra.
Những điểm nên có:
– Kiểm tra journald, rsyslog
– Ghi log đăng nhập, sudo, SSH, thay đổi service
– Cân nhắc dùng auditd cho máy chủ quan trọng
– Thiết lập log rotation để tránh đầy ổ đĩa
Mục tiêu không chỉ là lưu log, mà là lưu đúng log để điều tra được.
15. Đẩy log về máy tập trung
Nếu attacker chiếm được server, họ thường tìm cách xóa dấu vết. Vì vậy, hãy đẩy log ra ngoài máy chủ nếu có thể.
– Gửi về syslog tập trung, SIEM, hoặc nền tảng log cloud
– Tách quyền truy cập giữa server và nơi lưu log
– Đặt retention hợp lý
Đây là bước tạo khác biệt lớn giữa “có cảm giác an toàn” và “thực sự quan sát được rủi ro”.
16. Kiểm tra cổng mở từ bên ngoài, không chỉ từ bên trong
Những gì bạn nghĩ là đang đóng có thể vẫn lộ qua NAT, security group hoặc reverse proxy.
– Dùng ss, nmap
– Kiểm tra từ một máy khác trên Internet
– Đối chiếu với cloud firewall/security group
Hardening phải nhìn từ góc nhìn attacker, không chỉ từ cấu hình nội bộ.
17. Bảo vệ kernel và network stack bằng sysctl
Một số tham số sysctl giúp giảm rủi ro từ spoofing, redirect hoặc các hành vi bất thường trên mạng.
Ví dụ nhóm cấu hình thường được xem xét:
– net.ipv4.conf.all.rp_filter
– net.ipv4.icmp_echo_ignore_broadcasts
– net.ipv4.conf.all.accept_redirects
– net.ipv4.conf.all.send_redirects
– kernel.randomize_va_space
Hãy áp dụng có kiểm thử, vì một số môi trường mạng đặc thù có thể bị ảnh hưởng.
18. Mã hóa và bảo vệ dữ liệu sao lưu
Backup không an toàn có thể nguy hiểm không kém production server.
– Mã hóa backup khi lưu trữ
– Giới hạn quyền truy cập kho backup
– Kiểm tra khả năng restore định kỳ
– Không đặt file backup trong web root hoặc cùng server chính quá lâu
Backup tốt là backup khôi phục được và không trở thành nguồn rò rỉ dữ liệu.
19. Quét lỗ hổng và kiểm tra cấu hình định kỳ
Hardening không phải việc làm một lần rồi quên.
– Dùng lynis để audit cấu hình hệ thống
– Quét package có CVE đã biết
– Kiểm tra cấu hình SSH, TLS, web server định kỳ
– Đặt lịch review hàng tháng hoặc sau mỗi thay đổi lớn
Càng nhiều thay đổi triển khai, nguy cơ drift cấu hình càng cao.
20. Ghi lại baseline và quy trình phản ứng sự cố
Một server an toàn không chỉ cần cấu hình tốt, mà còn cần tài liệu vận hành rõ ràng.
Nên lưu lại:
– Danh sách cổng được phép mở
– Service hợp lệ đang chạy
– User có quyền sudo
– Chính sách cập nhật và backup
– Các bước xử lý khi phát hiện truy cập bất thường
Khi sự cố xảy ra, tài liệu tốt giúp đội ngũ phản ứng nhanh hơn, ít hoảng loạn hơn, và tránh quyết định sai.
Một thứ tự triển khai thực tế nên áp dụng
Nếu bạn không thể làm cả 20 bước ngay lập tức, hãy ưu tiên theo thứ tự này:
1. Cập nhật hệ thống và bật auto security updates
2. Tạo user sudo, tắt root login, dùng SSH key
3. Bật firewall và giới hạn cổng
4. Gỡ dịch vụ thừa, siết quyền file
5. Bật fail2ban, log, đồng bộ thời gian
6. Thiết lập backup an toàn và review định kỳ
Cách làm này cho bạn 80% hiệu quả phòng thủ từ 20% nỗ lực đầu tiên.
Kết luận
Hardening Ubuntu server không phải là một “bài tập lý thuyết”, mà là chuỗi quyết định nhỏ nhưng tác động rất lớn đến an toàn thực tế. Không có cấu hình nào đảm bảo tuyệt đối rằng server sẽ không bị tấn công. Tuy nhiên, một hệ thống được hardening bài bản sẽ khó bị xâm nhập hơn, khó bị leo thang đặc quyền hơn, và dễ phát hiện dấu hiệu bất thường hơn.
Điều quan trọng nhất là tính kỷ luật: dùng checklist, áp dụng theo chuẩn, kiểm tra lại sau mỗi lần thay đổi, và đừng đợi đến khi có sự cố mới bắt đầu quan tâm đến bảo mật. Với 20 bước trong bài viết này, bạn đã có một nền tảng rất tốt để biến một Ubuntu server “mặc định” thành một máy chủ an toàn hơn, gọn gàng hơn và đáng tin cậy hơn trong vận hành thực tế.