Bảo Mật VPS Mới: Checklist Cơ Bản
Giới Thiệu
Khi bạn vừa nhận được một VPS (Máy Chủ Riêng Ảo) mới, việc đầu tiên cần làm không phải là triển khai ứng dụng mà là bảo mật nó. Một VPS mới thường đi kèm với cấu hình mặc định, có thể ẩn chứa nhiều lỗ hổng bảo mật nếu không được xử lý đúng cách. Bài hướng dẫn này sẽ cung cấp một checklist cơ bản nhưng hiệu quả để "cứng hóa" VPS của bạn, giúp chống lại các mối đe dọa phổ biến từ internet.
Việc bỏ qua các bước bảo mật ban đầu có thể khiến VPS của bạn trở thành mục tiêu dễ dàng cho các cuộc tấn công, từ đó gây mất dữ liệu, gián đoạn dịch vụ hoặc thậm chí là bị lợi dụng cho các hoạt động độc hại. Hãy dành thời gian để thiết lập nền tảng bảo mật vững chắc cho máy chủ của bạn ngay từ đầu.
📋 Thời gian: 30-60 phút | Độ khó: Cơ bản
Yêu Cầu
Để thực hiện theo hướng dẫn này, bạn cần:
- Quyền truy cập root (hoặc tài khoản sudo) vào VPS của bạn thông qua SSH.
- Một ứng dụng SSH client (ví dụ: Terminal trên Linux/macOS, PuTTY hoặc WSL trên Windows).
- Kiến thức cơ bản về dòng lệnh Linux.
- Có khả năng tạo và quản lý SSH key pair trên máy tính cục bộ của bạn.
Các Bước Thực Hiện
Bước 1: Cập Nhật Hệ Thống
Luôn luôn là bước đầu tiên và quan trọng nhất. Cập nhật hệ thống giúp vá các lỗ hổng bảo mật đã biết và đảm bảo bạn đang chạy các phiên bản phần mềm ổn định nhất.
# Cập nhật danh sách gói phần mềm
sudo apt update
# Nâng cấp tất cả các gói đã cài đặt lên phiên bản mới nhất
# Cờ -y sẽ tự động đồng ý với các yêu cầu xác nhận
sudo apt upgrade -y
# (Tùy chọn) Khởi động lại VPS nếu có các bản cập nhật kernel hoặc các thành phần hệ thống quan trọng
# Chỉ khởi động lại sau khi chắc chắn bạn có thể đăng nhập lại qua SSH
# sudo reboot
✅ Sau khi cập nhật, VPS của bạn sẽ được bảo vệ tốt hơn khỏi các lỗ hổng đã được vá.
Bước 2: Tạo Người Dùng Mới và Vô Hiệu Hóa Đăng Nhập Root
Đăng nhập trực tiếp bằng tài khoản root là một rủi ro bảo mật lớn. Thay vào đó, bạn nên tạo một người dùng thông thường có quyền sudo (superuser do) và sử dụng tài khoản này cho các hoạt động hàng ngày.
# Tạo một người dùng mới (thay 'ten_nguoi_dung_moi' bằng tên bạn muốn)
sudo adduser ten_nguoi_dung_moi
# Thêm người dùng mới vào nhóm 'sudo' để cấp quyền quản trị
sudo usermod -aG sudo ten_nguoi_dung_moi
# Chuyển sang người dùng mới để kiểm tra
su - ten_nguoi_dung_moi
# Kiểm tra quyền sudo (thử chạy một lệnh sudo)
sudo apt update
Sau khi xác nhận người dùng mới có quyền sudo, bạn có thể đăng xuất khỏi tài khoản root và đăng nhập lại bằng tài khoản mới.
Bước 3: Cấu Hình SSH Key Authentication
Sử dụng SSH key pair để đăng nhập an toàn hơn nhiều so với mật khẩu. SSH key pair bao gồm một khóa công khai (public key) được đặt trên VPS và một khóa riêng tư (private key) được giữ an toàn trên máy tính cục bộ của bạn.
3.1. Tạo SSH Key Pair (trên máy tính cục bộ của bạn) Nếu bạn chưa có, hãy tạo một SSH key pair trên máy tính của mình.
# Mở Terminal (Linux/macOS) hoặc Git Bash/WSL (Windows)
ssh-keygen -t rsa -b 4096 -C "[email protected]"
# Nhấn Enter để lưu vào vị trí mặc định (~/.ssh/id_rsa) và đặt mật khẩu (passphrase) cho khóa riêng tư.
3.2. Sao Chép Public Key Lên VPS
# Từ máy tính cục bộ của bạn, sao chép khóa công khai lên VPS
# Thay 'ten_nguoi_dung_moi' và 'dia_chi_ip_vps' bằng thông tin của bạn
ssh-copy-id ten_nguoi_dung_moi@dia_chi_ip_vps
Nếu ssh-copy-id không có sẵn hoặc không hoạt động, bạn có thể làm thủ công:
- Đăng nhập vào VPS bằng SSH (dùng mật khẩu).
- Tạo thư mục
.sshvà fileauthorized_keysnếu chưa có:mkdir -p ~/.ssh
chmod 700 ~/.ssh
nano ~/.ssh/authorized_keys - Trên máy tính cục bộ, hiển thị public key:
cat ~/.ssh/id_rsa.pub - Sao chép toàn bộ nội dung của public key (bắt đầu bằng
ssh-rsahoặcecdsa-sha2-nistp256và kết thúc bằng email của bạn) và dán vào fileauthorized_keystrên VPS. Lưu và đóng file (Ctrl+X,Y,Entertrong nano). - Đặt quyền cho file
authorized_keys:chmod 600 ~/.ssh/authorized_keys
3.3. Cấu Hình SSH Daemon Sau khi SSH key đã được thiết lập, bạn có thể vô hiệu hóa đăng nhập bằng mật khẩu và đăng nhập root.
# Mở file cấu hình SSH daemon
sudo nano /etc/ssh/sshd_config
Tìm và sửa đổi các dòng sau:
# Vô hiệu hóa đăng nhập bằng mật khẩu
PasswordAuthentication no
# Vô hiệu hóa đăng nhập root trực tiếp
PermitRootLogin no
# (Tùy chọn) Thay đổi cổng SSH mặc định (22) để giảm thiểu các cuộc tấn công quét cổng tự động
# Thay '2222' bằng một số cổng khác (ví dụ: 1024-65535, tránh các cổng phổ biến)
Port 2222
Lưu và đóng file. Sau đó, khởi động lại dịch vụ SSH:
sudo systemctl restart sshd
⚠️ Cảnh báo: Trước khi đóng phiên SSH hiện tại, hãy mở một phiên SSH mới và thử đăng nhập bằng người dùng mới và SSH key của bạn (và cổng mới nếu bạn đã thay đổi). Nếu bạn không thể đăng nhập, đừng đóng phiên cũ cho đến khi bạn khắc phục được sự cố.
Bước 4: Cài Đặt và Cấu Hình Firewall (UFW)
Firewall là tuyến phòng thủ đầu tiên, kiểm soát lưu lượng truy cập mạng vào và ra khỏi VPS của bạn. UFW (Uncomplicated Firewall) là một giao diện dễ sử dụng cho iptables.
# Cài đặt UFW
sudo apt install ufw -y
# Đặt chính sách mặc định: Từ chối tất cả lưu lượng truy cập đến, cho phép tất cả lưu lượng truy cập đi
sudo ufw default deny incoming
sudo ufw default allow outgoing
# Cho phép lưu lượng truy cập SSH (quan trọng! Nếu bạn đã đổi cổng SSH, hãy dùng cổng đó)
# Ví dụ nếu cổng SSH là 2222:
sudo ufw allow 2222/tcp
# Nếu bạn giữ cổng mặc định 22:
# sudo ufw allow ssh
# Cho phép lưu lượng truy cập HTTP (cổng 80) và HTTPS (cổng 443) nếu bạn định chạy web server
sudo ufw allow http
sudo ufw allow https
# Kích hoạt firewall
sudo ufw enable
# Kiểm tra tr�ưng thái firewall
sudo ufw status verbose
⚠️ Cảnh báo: Đảm bảo bạn đã cho phép cổng SSH TRƯỚC KHI kích hoạt UFW, nếu không bạn sẽ bị khóa khỏi VPS.
Bước 5: Cài Đặt Fail2Ban
Fail2Ban giúp bảo vệ VPS của bạn khỏi các cuộc tấn công brute-force bằng cách tự động chặn các địa chỉ IP cố gắng đăng nhập không thành công nhiều lần.
# Cài đặt Fail2Ban
sudo apt install fail2ban -y
# Tạo một bản sao của file cấu hình mặc định để tùy chỉnh
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
# Mở file jail.local để cấu hình (tùy chọn)
sudo nano /etc/fail2ban/jail.local
Trong file jail.local, bạn có thể điều chỉnh các cài đặt như bantime (thời gian chặn IP), findtime (thời gian để tìm kiếm các lần thử không thành công) và maxretry (số lần thử tối đa trước khi bị chặn).
Ví dụ, bạn có thể sửa đổi phần [sshd] để tăng tính bảo mật:
[sshd]
enabled = true
port = ssh,<your_ssh_port_if_changed> # Ví dụ: port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 1h
💡 Mẹo: bantime = 1h chặn IP trong 1 giờ. bantime = -1 sẽ chặn vĩnh viễn.
# Kích hoạt và khởi động dịch vụ Fail2Ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
# Kiểm tra trạng thái của Fail2Ban
sudo systemctl status fail2ban
# Kiểm tra các jail đang hoạt động
sudo fail2ban-client status
✅ Fail2Ban sẽ tự động bảo vệ VPS của bạn khỏi các nỗ lực đăng nhập không hợp lệ.
Bước 6: Cấu Hình Tùy Chọn Bảo Mật Khác (Nâng Cao)
6.1. Cấu hình Tự động Cập nhật (Unattended Upgrades) Để đảm bảo VPS của bạn luôn được cập nhật các bản vá bảo mật mới nhất mà không cần can thiệp thủ công thường xuyên, bạn có thể cấu hình tự động cập nhật.
# Cài đặt gói unattended-upgrades
sudo apt install unattended-upgrades -y
# Cấu hình tự động cập nhật (chọn Yes khi được hỏi)
sudo dpkg-reconfigure --priority=low unattended-upgrades
Bạn có thể kiểm tra và chỉnh sửa file cấu hình tại /etc/apt/apt.conf.d/50unattended-upgrades để tùy chỉnh các loại gói được cập nhật tự động.
6.2. Gỡ bỏ các gói không cần thiết Giảm thiểu "diện tích tấn công" bằng cách gỡ bỏ bất kỳ phần mềm hoặc dịch vụ nào bạn không sử dụng.
# Liệt kê các gói đã cài đặt
dpkg -l
# Gỡ bỏ các gói không cần thiết (thay 'ten_goi_phan_mem' bằng gói bạn muốn gỡ)
# Cờ --purge sẽ xóa cả file cấu hình
sudo apt remove --purge ten_goi_phan_mem -y
# Xóa các gói không còn cần thiết và các phần phụ thuộc
sudo apt autoremove --purge -y
⚠️ Cảnh báo: Hãy cẩn thận khi gỡ bỏ gói, đảm bảo bạn không xóa các thành phần quan trọng của hệ thống.
Troubleshooting
-
Bị khóa khỏi VPS sau khi cấu hình SSH/Firewall:
- Nguyên nhân: Cấu hình SSH sai (ví dụ:
PasswordAuthentication nomà chưa thiết lập SSH key), hoặc UFW chặn cổng SSH. - Cách xử lý: Hầu hết các nhà cung cấp VPS đều cung cấp truy cập Console qua bảng điều khiển của họ. Sử dụng Console để đăng nhập trực tiếp vào VPS (thường là với tài khoản root) và kiểm tra lại file
/etc/ssh/sshd_confighoặc trạng thái UFW (sudo ufw status). Khắc phục lỗi và khởi động lại dịch vụ SSH/UFW.
- Nguyên nhân: Cấu hình SSH sai (ví dụ:
-
Fail2Ban không hoạt động:
- Nguyên nhân: Cấu hình sai trong
jail.local, đường dẫn log sai, hoặc dịch vụ Fail2Ban chưa khởi động. - Cách xử lý: Kiểm tra log của Fail2Ban (
sudo cat /var/log/fail2ban.log) để tìm lỗi. Đảm bảo đường dẫnlogpathtrongjail.locallà chính xác và dịch vụ đang chạy (sudo systemctl status fail2ban).
- Nguyên nhân: Cấu hình sai trong
-
Không thể truy cập dịch vụ web (HTTP/HTTPS) sau khi cấu hình UFW:
- Nguyên nhân: UFW chưa cho phép cổng 80 (HTTP) hoặc 443 (HTTPS).
- Cách xử lý: Chạy
sudo ufw allow httpvàsudo ufw allow https(hoặcsudo ufw allow 80/tcpvàsudo ufw allow 443/tcp), sau đó kiểm tra lại vớisudo ufw status.
Kết Luận
Việc bảo mật một VPS mới là một bước không thể thiếu để đảm bảo an toàn cho dữ liệu và dịch vụ của bạn. Bằng cách thực hiện checklist cơ bản này, bạn đã thiết lập một nền tảng bảo mật vững chắc, giảm thiểu đáng kể rủi ro bị tấn công.
Best practices (Thực hành tốt nhất):
- Cập nhật thường xuyên: Luôn giữ hệ thống và phần mềm của bạn được cập nhật.
- Sao lưu định kỳ: Thực hiện sao lưu dữ liệu quan trọng thường xuyên.
- Giám sát log: Thường xuyên kiểm tra các file log hệ thống để phát hiện hoạt động đáng ngờ.
- Mật khẩu mạnh: Sử dụng mật khẩu mạnh cho bất kỳ tài khoản nào vẫn yêu cầu mật khẩu.
- Nguyên tắc đặc quyền tối thiểu: Cấp cho người dùng và ứng dụng chỉ những quyền cần thiết để thực hiện công việc của họ.
- Tắt dịch vụ không cần thiết: Gỡ bỏ hoặc vô hiệu hóa bất kỳ dịch vụ nào bạn không sử dụng.
Bảo mật là một quá trình liên tục, không phải là một nhiệm vụ một lần. Hãy luôn cảnh giác và cập nhật kiến thức bảo mật để giữ cho VPS của bạn an toàn.