Cấu hình VPS mới: các bước cơ bản an toàn
Quy trình dựng một VPS Ubuntu/Debian mới an toàn: tạo user sudo, đăng nhập bằng SSH key, siết cấu hình sshd, bật tường lửa UFW và tắt ping.
Mục lục
Khi vừa nhận một VPS mới, bạn nên làm ba việc trước tiên: tạo một user thường có quyền sudo (không dùng root), chuyển sang đăng nhập bằng SSH key thay vì mật khẩu, và bật tường lửa. Bài này đi lần lượt từng bước, các lệnh copy-paste được ngay.
Trong toàn bài, thay <username> bằng tên user bạn muốn, <server-ip> bằng IP VPS
của bạn. Các IP ví dụ (203.0.113.x) chỉ là placeholder.
Tạo user thường có quyền sudo
Đăng nhập lần đầu bằng root (dùng mật khẩu nhà cung cấp gửi):
ssh root@<server-ip>Cập nhật gói hệ thống, tạo user mới và thêm vào nhóm sudo:
apt update && apt upgrade -y
adduser <username>
usermod -aG sudo <username>Đăng xuất rồi đăng nhập lại bằng user mới, kiểm tra sudo hoạt động:
ssh <username>@<server-ip>
sudo -vNếu không báo lỗi là được. Tạo thư mục chứa SSH key cho user này:
mkdir ~/.ssh && chmod 700 ~/.sshĐăng nhập bằng SSH key
Sinh key trên máy local của bạn (không phải trên VPS).
Nếu bạn đã có sẵn SSH key cho một VPS khác (ví dụ id_ed25519), ĐỪNG chạy lệnh
mặc định rồi Enter liên tục - nó sẽ ghi đè key cũ và bạn mất quyền vào VPS kia.
Hãy đặt tên riêng cho key mới bằng cờ -f.
Trường hợp đây là VPS đầu tiên:
ssh-keygen -t ed25519 -C "[email protected]"Trường hợp đã có key khác - đặt tên riêng (ví dụ VPS tên "vps2"):
# Windows (PowerShell)
ssh-keygen -t ed25519 -C "[email protected]" -f $env:USERPROFILE\.ssh\id_ed25519_vps2
# macOS / Linux
ssh-keygen -t ed25519 -C "[email protected]" -f ~/.ssh/id_ed25519_vps2Đẩy public key lên VPS (thay tên file .pub cho đúng nếu đã đặt tên riêng):
# Windows (PowerShell)
scp $env:USERPROFILE/.ssh/id_ed25519.pub <username>@<server-ip>:~/.ssh/authorized_keys
# macOS
scp ~/.ssh/id_ed25519.pub <username>@<server-ip>:~/.ssh/authorized_keys
# Linux
ssh-copy-id <username>@<server-ip>Nếu đặt tên key khác mặc định, SSH sẽ không tự nhận ra key đó. Thêm cấu hình vào
~/.ssh/config (trên Windows là C:\Users\<username>\.ssh\config, không có đuôi
.txt):
# VPS dùng key mặc định
Host vps1
HostName <server-ip-1>
User <username>
IdentityFile ~/.ssh/id_ed25519
# VPS dùng key tên riêng
Host vps2
HostName <server-ip-2>
User <username>
IdentityFile ~/.ssh/id_ed25519_vps2Từ giờ chỉ cần ssh vps1 hoặc ssh vps2, không phải nhớ IP hay đường dẫn key.
Siết cấu hình SSH (hardening)
Mở file cấu hình sshd:
sudo nano /etc/ssh/sshd_configSửa ba dòng sau để tắt IPv6 (bớt một bề mặt tấn công), tắt đăng nhập mật khẩu và tắt đăng nhập bằng root:
AddressFamily inet
PasswordAuthentication no
PermitRootLogin noNếu có file .conf được include, xóa hết nội dung trong đó để nó không ghi đè:
sudo nano /etc/ssh/sshd_config.d/*.confKhởi động lại SSH (một số bản phân phối dùng sshd thay vì ssh):
sudo systemctl restart sshĐăng xuất và thử lại: chắc chắn không còn đăng nhập được bằng root hay bằng mật khẩu.
Bật tường lửa UFW
Cài UFW, cho phép SSH/HTTP/HTTPS rồi bật:
sudo apt install ufw
sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https
sudo ufw enable
sudo ufw statusTắt ping (ICMP echo) rồi reboot
Để server không trả lời khi bị ping, mở file rules:
sudo nano /etc/ufw/before.rulesThêm dòng sau vào ngay dưới khối # ok icmp codes for INPUT:
-A ufw-before-input -p icmp --icmp-type echo-request -j DROPCuối cùng khởi động lại server và đăng nhập lại khi máy đã lên:
sudo rebootLưu ý
| Triệu chứng | Cách xử lý |
|---|---|
| Đẩy key rồi vẫn bị hỏi mật khẩu | Key đặt tên khác mặc định - thêm IdentityFile vào ~/.ssh/config hoặc dùng ssh -i <đường-dẫn-key> |
| Restart SSH báo không tìm thấy service | Thử sudo systemctl restart sshd |
| Lỡ tắt PasswordAuthentication khi chưa đẩy key | Dùng console web của nhà cung cấp VPS để vào sửa lại |