30 Phút Đầu Tiên: Danh Sách Kiểm Tra Bảo Mật VPS
Một VPS mới bị quét SSH ngay trong vài phút sau khi có IP. Đây là trình tự chính xác tôi chạy trên mọi máy chủ mới — sẵn sàng copy-paste cho Debian 13, kèm bảng kiểm tra ở cuối.
Giả định: image Debian 13 mới từ bản triển khai VPSRento của bạn, bạn đang đăng nhập bằng root qua SSH, và IP ví dụ là 185.220.101.14 — thay bằng IP của bạn. Tổng thời gian: khoảng nửa giờ. Làm theo đúng thứ tự; bước 2 có thể khóa bạn ngoài nếu vội.
1. Tạo người dùng sudo của bạn
Làm việc với quyền root là cách mà lỗi đánh máy trở thành sự cố. Tạo một người dùng thật, cấp sudo, và làm mọi thứ từ đó:
# create the user (you'll set a password — still useful for sudo)
adduser ops
# grant sudo
usermod -aG sudo ops
Mọi thứ bên dưới điểm này chạy bằng ops trừ khi có ghi chú khác.
2. Chỉ SSH key — không mật khẩu, không đăng nhập root
Xác thực bằng mật khẩu là lỗ hổng lớn nhất trên một máy chủ kết nối internet. Bot quét cổng 22 với danh sách thông tin đăng nhập cả ngày lẫn đêm. Key khiến toàn bộ lớp tấn công này trở nên vô nghĩa. Trên máy cục bộ của bạn:
# generate a keypair if you don't have one (ed25519, no passphrase tradeoff is yours)
ssh-keygen -t ed25519 -C "ops@atlas"
# push the public key to the server
ssh-copy-id [email protected]
Xác minh bạn có thể đăng nhập bằng key trong một cửa sổ terminal — ssh [email protected] — trước khi đụng vào cấu hình. Giữ phiên root hiện tại mở làm cửa thoát hiểm. Sau đó chỉnh sửa /etc/ssh/sshd_config:
# /etc/ssh/sshd_config — the three lines that matter
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin prohibit-password
# validate the config, then reload (Debian 13 uses ssh.service)
sshd -t && systemctl reload ssh
prohibit-password thay vì một file phẳng no cho root có chủ đích: root vẫn có thể xác thực bằng key từ máy trạm của bạn, điều này thỉnh thoảng hữu ích cho việc khôi phục qua bảng điều khiển của nhà cung cấp — nhưng không mật khẩu nào sẽ hoạt động, cho bất kỳ ai, từ bất kỳ đâu. Xác nhận bằng sshd -T | grep -E 'passwordauthentication|permitrootlogin'.
3. Tường lửa: từ chối mặc định, chỉ cho phép những gì bạn chạy
ufw của Debian là một lớp mỏng, hợp lý trên nftables. Chính sách là bảo mật; các quy tắc chỉ là ngoại lệ cho chính sách đó:
apt update && apt install -y ufw
ufw default deny incoming
ufw default allow outgoing
# SSH stays open — add this BEFORE enabling
ufw allow 22/tcp comment 'SSH'
# whatever your box actually serves, e.g.:
ufw allow 80/tcp comment 'HTTP'
ufw allow 443/tcp comment 'HTTPS'
ufw enable
ufw status verbose
Mỗi cổng bạn mở phải có tên và lý do. Nếu bạn không thể nói cổng đó dùng để làm gì, nó không được có quy tắc.
4. fail2ban: làm chậm bot đến mức tối đa
Với xác thực mật khẩu bị vô hiệu hóa, tấn công brute force đã chết — nhưng fail2ban giữ nhật ký của bạn dễ đọc và chặn các trình quét dò vào mọi thứ khác:
apt install -y fail2ban
# /etc/fail2ban/jail.local
[sshd]
enabled = true
port = ssh
maxretry = 5
findtime = 10m
bantime = 1h
systemctl enable --now fail2ban
# watch it work
fail2ban-client status sshd
5. Cập nhật bảo mật tự động
CVE chưa vá là rủi ro lớn hơn việc khởi động lại. unattended-upgrades của Debian tự cài các bản cập nhật bảo mật:
apt install -y unattended-upgrades
# answer Yes to auto-install updates
dpkg-reconfigure -plow unattended-upgrades
Cấu hình mặc định trong /etc/apt/apt.conf.d/50unattended-upgrades chỉ lấy từ kho bảo mật — đúng thứ bạn cần trên máy chủ: vá lỗi bảo mật tự động, mọi thứ khác khi bạn chọn.
6. Tắt những gì bạn không chạy
Mỗi dịch vụ đang chạy là bề mặt tấn công bạn phải vá. Xem những gì thực sự đang lắng nghe:
# who is listening, on what, as which process
ss -tulpn
# everything enabled at boot
systemctl list-unit-files --state=enabled
# example: you don't run a print server — nobody does
systemctl disable --now cups
Quy tắc: nếu bạn không thể nói một listener làm gì, hãy tìm hiểu trước khi để nó tồn tại. Trên image VPSRento tối giản, sẽ có rất ít thứ ngoài sshd và ứng dụng của chính bạn.
7. Tùy chọn nhưng nên dùng: một mặt phẳng quản lý WireGuard
Phiên bản bảo mật SSH mạnh nhất là SSH không tiếp xúc internet. Chạy WireGuard trên máy, chỉ cho phép SSH bên trong tunnel, và cổng 22 biến mất khỏi mọi scanner trên thế giới:
apt install -y wireguard
# /etc/wireguard/wg0.conf — minimal management tunnel
# [Interface] Address = 10.8.0.1/24, ListenPort = 51820
# open the tunnel, not the shell
ufw allow 51820/udp comment 'WireGuard'
ufw allow in on wg0 to any port 22 proto tcp comment 'SSH via WG'
ufw delete allow 22/tcp
systemctl enable --now wg-quick@wg0
Sau đó bạn ssh [email protected] qua tunnel, và IP công khai chỉ trả lời trên đúng một cổng UDP. Hướng dẫn đầy đủ về WireGuard — key, peer, cấu hình client, mã QR điện thoại — nằm trong hướng dẫn đi kèm.
Danh sách kiểm tra 10 điểm
Chạy qua bảng này sau mỗi lần triển khai mới, và lặp lại sau mỗi dịch vụ bạn thêm:
| # | Mục | Nơi lưu trữ | Xác minh bằng |
|---|---|---|---|
| 1 | Người dùng sudo không phải root | /etc/passwd | id ops |
| 2 | Xác thực SSH chỉ bằng key | sshd_config | sshd -T | grep passwordauth |
| 3 | Tắt đăng nhập root bằng mật khẩu | sshd_config | sshd -T | grep permitrootlogin |
| 4 | Tường lửa chặn mọi kết nối đến mặc định | ufw | ufw status verbose |
| 5 | Chỉ mở các cổng được đặt tên | ufw | ufw status numbered |
| 6 | fail2ban sshd jail hoạt động | jail.local | fail2ban-client status sshd |
| 7 | Cập nhật bảo mật tự động | apt | systemctl status unattended-upgrades |
| 8 | Không có listener không rõ nguồn gốc | — | ss -tulpn |
| 9 | Quản lý qua WireGuard (tùy chọn) | wg0.conf | wg show |
| 10 | Snapshot sau khi tăng cường bảo mật | Tiện ích bổ sung trong khu vực client, $1.99/tháng | Dịch vụ → VPS của bạn → snapshots |
Mục 10 xứng đáng một câu: tăng cường bảo mật trước, snapshot sau, theo đúng thứ tự đó — snapshot của một máy sạch và đã được tăng cường là phương án khôi phục cho mọi sai lầm trong tương lai. Snapshot ngoài site hàng ngày là tiện ích bổ sung $1.99/tháng trong khu vực client. Ba mươi phút phòng ngừa, một cú nhấp chuột bảo hiểm.