Bảo mật VPS Linux: 8 việc nên làm ngay sau khi tạo VPS
Danh sách bảo mật VPS Ubuntu cho người mới: cập nhật tự động, SSH key, tắt đăng nhập bằng mật khẩu, tường lửa UFW, Docker, sao lưu và theo dõi log.
Bạn có toàn quyền root trên VPS, đồng nghĩa với việc bạn tự chịu trách nhiệm bảo mật bên trong nó. Tin tốt là chỉ vài bước dưới đây đã chặn được phần lớn các kiểu tấn công phổ biến. Các lệnh áp dụng cho Ubuntu.
1. Cập nhật hệ điều hành ngay
sudo apt update && sudo apt full-upgrade -y
sudo reboot # nếu có cập nhật kernel
2. Bật cập nhật bảo mật tự động
sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
Chọn Yes. Ubuntu sẽ tự cài các bản vá bảo mật hằng ngày.
Nếu đang dùng Ubuntu 18.04 hoặc 20.04 (đã hết hỗ trợ tiêu chuẩn), nên chuyển sang bản mới như 24.04 vì các bản cũ không còn nhận bản vá miễn phí.
3. Dùng SSH key và tắt đăng nhập bằng mật khẩu
Thêm SSH key theo hướng dẫn kết nối SSH, thử đăng nhập bằng key thành công rồi mới tạo file
/etc/ssh/sshd_config.d/99-hardening.conf:
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin no
sudo sshd -t && sudo systemctl reload ssh
Lỡ cấu hình sai mà không vào được SSH? Ở UHOST bạn vẫn vào được bằng Console trên web để sửa lại.
4. Bật tường lửa UFW
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw enable
sudo ufw status verbose
Luôn cho phép SSH trước khi bật UFW. Website chạy qua Cloudflare Tunnel
không cần mở thêm cổng nào, vì cloudflared kết nối ra ngoài và gọi vào ứng dụng qua localhost.
5. Hiểu SSH đi qua đâu trước khi dùng fail2ban
Ở UHOST, SSH từ bên ngoài đi qua Cloudflare Access: chỉ người nhập đúng mã gửi tới email chủ VPS mới tới được cổng SSH. Mọi kết nối SSH
vì vậy đến VPS từ cùng một địa chỉ cổng nội bộ. Nếu cài fail2ban cho SSH, một lần chặn sẽ chặn cả bạn. Với SSH qua Cloudflare Access và
đăng nhập bằng key, bạn không cần fail2ban cho SSH. Với website, nếu muốn chặn dò mật khẩu hãy dựa vào IP thật trong header
CF-Connecting-IP.
6. Chỉ mở dịch vụ trong VPS khi cần
sudo ss -tulpn
Lệnh liệt kê mọi cổng đang nghe. Database (MySQL, PostgreSQL, Redis) nên chỉ nghe ở 127.0.0.1. Với Docker, publish cổng dạng
127.0.0.1:8080:80: Docker tự thêm luật tường lửa và bỏ qua UFW, xem
hướng dẫn Docker.
7. Sao lưu dữ liệu ra ngoài VPS
Bạn tự chịu trách nhiệm sao lưu dữ liệu của mình. Một cách đơn giản là xuất database và nén thư mục quan trọng mỗi ngày bằng cron, rồi
chép ra nơi khác (máy tính của bạn qua scp, Google Drive bằng rclone, hoặc dịch vụ lưu trữ S3). Ví dụ xuất MySQL:
mysqldump --single-transaction tencsdl | gzip > ~/backup/tencsdl-$(date +%F).sql.gz
Thử khôi phục bản sao lưu ít nhất một lần, vì bản sao lưu chưa từng khôi phục thử thì chưa chắc dùng được.
8. Theo dõi đăng nhập và log
last -n 20 # các lần đăng nhập gần đây
sudo journalctl -u ssh --since today # log SSH hôm nay
sudo journalctl -p err -b # lỗi kể từ lần khởi động gần nhất
Danh sách kiểm tra nhanh
| Việc | Lệnh kiểm tra |
|---|---|
| Hệ thống đã cập nhật | apt list --upgradable |
| Cập nhật tự động bật | systemctl status unattended-upgrades |
| Tắt đăng nhập SSH bằng mật khẩu | sudo sshd -T | grep -i passwordauthentication |
| UFW đang bật | sudo ufw status |
| Không có cổng lạ | sudo ss -tulpn |
| Có bản sao lưu gần nhất | ls -lh ~/backup |
Cần hỗ trợ thêm, gửi email tới [email protected].
