Secure Ubuntu server trên cloud: những cấu hình bảo mật bắt buộc sau khi khởi tạo VPS
Vừa tạo xong một VPS Ubuntu trên cloud, nhiều người có cảm giác “server đã chạy là đủ”. Nhưng thực tế, khoảng thời gian ngay sau khi khởi tạo mới là lúc máy chủ dễ bị tổn thương nhất. IP public của VPS có thể bị bot quét chỉ trong vài phút: dò SSH, tìm mật khẩu yếu, kiểm tra port phổ biến, thậm chí khai thác các cấu hình mặc định chưa được siết chặt.
Điều nguy hiểm là phần lớn sự cố không đến từ các lỗ hổng “cao siêu”, mà đến từ những sai sót cơ bản: vẫn cho phép đăng nhập root, mở quá nhiều port, không cập nhật bản vá, không bật firewall, hoặc thiếu cơ chế giới hạn đăng nhập. Nếu bạn xem VPS là nền móng cho website, API, database hay môi trường production, thì bước hardening ban đầu là bắt buộc, không phải “làm sau cũng được”.
Dưới đây là checklist bảo mật quan trọng nhất để secure một Ubuntu server trên cloud ngay sau khi khởi tạo.
1. Cập nhật hệ điều hành và vá bảo mật ngay lập tức
Việc đầu tiên sau khi SSH vào server không phải là cài ứng dụng, mà là cập nhật toàn bộ package hệ thống. Image Ubuntu từ nhà cung cấp cloud có thể đã cũ vài ngày hoặc vài tuần, đồng nghĩa với việc bạn đang mang sẵn những gói phần mềm chưa vá lỗi.
– Vá các CVE đã được công bố công khai.
– Giảm nguy cơ bị khai thác bởi bot tự động.
– Đảm bảo các thành phần như OpenSSH, OpenSSL, kernel ở trạng thái an toàn hơn.
Một server “mới tạo” nhưng chưa update chưa bao giờ là server sạch về mặt bảo mật.
2. Tạo user riêng và vô hiệu hóa đăng nhập root
Rất nhiều VPS cho phép đăng nhập trực tiếp bằng root. Đây là thói quen cực kỳ rủi ro. Tài khoản root là mục tiêu đầu tiên của mọi cuộc brute-force SSH. Giải pháp đúng là tạo một user quản trị riêng, cấp quyền sudo, rồi tắt đăng nhập root.
Tạo user mới:
adduser adminuser
usermod -aG sudo adminuser
Kiểm tra đăng nhập bằng user mới trước khi thay đổi SSH config. Sau đó sửa file:
sudo nano /etc/ssh/sshd_config
Đặt các giá trị:
PermitRootLogin no
Khởi động lại SSH:
sudo systemctl restart ssh
Lợi ích
– Giảm bề mặt tấn công nhắm vào root.
– Dễ audit hành động quản trị thông qua sudo.
– Hạn chế rủi ro thao tác sai gây hỏng hệ thống.
Đừng tắt root login trước khi xác nhận user mới có thể SSH và dùng sudo, nếu không bạn có thể tự khóa chính mình khỏi server.
3. Bắt buộc dùng SSH key, tắt đăng nhập bằng mật khẩu
Mật khẩu mạnh vẫn không an toàn bằng SSH key. Trên môi trường public internet, đăng nhập SSH bằng password gần như là lời mời cho brute-force. Cách tiếp cận chuẩn là dùng cặp khóa public/private, sau đó tắt hoàn toàn xác thực bằng mật khẩu.
Sau khi xác nhận login bằng key hoạt động, chỉnh SSH config:
PasswordAuthentication no
PubkeyAuthentication yes
ChallengeResponseAuthentication no
Restart SSH:
sudo systemctl restart ssh
Mẹo thực tế
– Ưu tiên ed25519 thay vì RSA nếu môi trường hỗ trợ.
– Dùng passphrase cho private key.
– Nếu có nhiều quản trị viên, mỗi người nên có key riêng, không dùng chung.
Điều này giúp bạn kiểm soát truy cập tốt hơn và thu hồi quyền dễ hơn khi nhân sự thay đổi.
4. Đổi port SSH không thay thế bảo mật, nhưng vẫn nên cân nhắc
Đổi port SSH khỏi 22 không phải là biện pháp bảo mật cốt lõi. Nó không ngăn được một attacker có chủ đích. Tuy nhiên, nó giúp giảm đáng kể lượng scan và brute-force tự động từ bot phổ thông.
Trong /etc/ssh/sshd_config, đổi:
Port 2222
Sau đó mở port mới trên firewall trước khi restart SSH. Nếu quên bước này, bạn có thể mất kết nối.
Cần hiểu đúng
– Đổi port chỉ là giảm nhiễu, không phải “bảo mật thật”.
– Vẫn phải kết hợp với SSH key, tắt password, và firewall.
– Nếu tổ chức của bạn có yêu cầu vận hành rõ ràng, có thể giữ port 22 và dựa vào các lớp bảo vệ khác.
5. Bật firewall và chỉ mở đúng những port cần thiết
Một nguyên tắc vàng của bảo mật server là default deny: chỉ cho phép những gì thực sự cần. Ubuntu có ufw khá dễ dùng và đủ mạnh cho hầu hết tình huống phổ biến.
Nếu bạn dùng SSH port mặc định thì thay 2222 bằng 22.
Những sai lầm phổ biến
– Mở database port như 3306, 5432, 6379 ra internet mà không giới hạn IP.
– Enable firewall trước khi allow SSH.
– Mở quá nhiều service “để đó dùng sau”.
Nếu database chỉ phục vụ ứng dụng trên cùng server hoặc trong private network, tuyệt đối không public port đó ra ngoài.
6. Cài fail2ban để chặn brute-force tự động
Ngay cả khi đã tắt password login, bạn vẫn nên dùng fail2ban để giảm spam kết nối và khóa các IP có hành vi bất thường. Công cụ này theo dõi log và tự động ban IP sau một số lần thất bại.
Nếu thấy service không cần thiết như web server cũ, mail daemon, database test, agent lạ hoặc package mặc định không dùng đến, hãy disable hoặc remove.
Nguyên tắc nên nhớ
– Không cài gì “cho chắc”.
– Mỗi package thêm vào là thêm trách nhiệm vá lỗi.
– Một service không dùng nhưng đang mở port vẫn là rủi ro thực sự.
Với production, mô hình tốt nhất là server làm đúng vai trò của nó, không ôm quá nhiều chức năng.
8. Thiết lập giám sát log và đồng bộ thời gian
Bảo mật không dừng ở cấu hình chặn truy cập. Bạn còn cần khả năng nhìn thấy điều gì đang xảy ra. Tối thiểu, hãy biết đọc các log quan trọng như:
– /var/log/auth.log cho SSH và xác thực
– log của Nginx/Apache nếu chạy web
– log ứng dụng và systemd journal
Ngoài ra, hãy bảo đảm đồng bộ thời gian bằng systemd-timesyncd hoặc chrony. Timestamp sai sẽ làm hỏng việc điều tra sự cố, correlation log và cả cơ chế token/chứng chỉ.
9. Bảo vệ ở tầng cloud: Security Group, snapshot, backup
Nhiều người chỉ hardening bên trong Ubuntu mà quên lớp bảo vệ từ nhà cung cấp cloud. Nếu bạn dùng AWS, GCP, Azure, DigitalOcean, Vultr hay Hetzner, hãy tận dụng firewall/security group ở tầng hạ tầng.
Nên làm ngay
– Chỉ allow port cần thiết từ internet.
– Giới hạn SSH theo IP quản trị nếu có thể.
– Bật snapshot định kỳ hoặc backup tự động.
– Tách private network cho database và dịch vụ nội bộ.
Nếu server bị compromise hoặc update lỗi, backup sạch là khác biệt giữa “khôi phục trong 10 phút” và “mất cả ngày”.
10. Đừng quên kiểm tra định kỳ sau khi hardening
Một server an toàn lúc khởi tạo chưa chắc an toàn sau 3 tháng. Cấu hình drift, package mới được cài thêm, port bị mở tạm rồi quên đóng, user cũ chưa bị xóa — tất cả đều rất phổ biến.
Hãy biến hardening thành checklist định kỳ:
– Rà soát user và SSH key còn hiệu lực.
– Kiểm tra port đang mở.
– Xem firewall rule có bị nới lỏng không.
– Kiểm tra cập nhật bảo mật.
– Audit các service mới phát sinh.
Bảo mật hiệu quả không đến từ một lệnh duy nhất, mà từ thói quen vận hành nhất quán.
Kết luận
Nếu chỉ nhớ một điều, hãy nhớ điều này: một VPS Ubuntu mới khởi tạo trên cloud không hề “an toàn mặc định”. Bạn cần coi bước hardening ban đầu là bắt buộc, giống như khóa cửa trước khi rời nhà.
Bộ cấu hình tối thiểu nên có gồm: cập nhật hệ thống, tạo user sudo, tắt root login, bắt buộc SSH key, vô hiệu hóa password login, bật firewall, cài fail2ban, đóng các service không cần thiết và tận dụng security group của nhà cung cấp cloud. Đây không phải các tinh chỉnh “nâng cao”, mà là nền tảng tối thiểu để giảm phần lớn rủi ro phổ biến.
Làm tốt những bước này không đảm bảo server bất khả xâm phạm, nhưng nó loại bỏ rất nhiều lỗi sơ đẳng mà attacker thường khai thác đầu tiên. Trong bảo mật server, phần thắng thường thuộc về người kỷ luật hơn, không phải người cấu hình phức tạp hơn. Nếu bạn đang triển khai production, hãy bắt đầu từ checklist cơ bản này trước khi nghĩ đến các lớp phòng thủ nâng cao hơn như IDS, VPN quản trị, MFA cho access layer hay compliance audit.