Tới nội dung
Cloudj

Hướng dẫn VPS

Bảo mật VPS trong giờ đầu tiên: checklist cho Ubuntu và Debian

Checklist bảo mật VPS Ubuntu, Debian trong giờ đầu: cập nhật hệ thống, tạo user sudo, chỉ dùng SSH key, bật firewall, fail2ban và tự động cập nhật bảo mật.

Cập nhật · 5 phút đọc

Bảo mật VPS hiệu quả nhất là làm ngay trong giờ đầu tiên sau khi triển khai, trước khi cài bất cứ thứ gì khác. Máy chủ có IP public bắt đầu nhận các lượt dò đăng nhập SSH tự động chỉ sau vài phút, và mọi dịch vụ bạn thêm sau này đều dễ bảo vệ hơn khi nền tảng đã được gia cố. Checklist này đưa một máy Ubuntu hoặc Debian mới qua các bước thiết yếu theo đúng thứ tự: cập nhật, tạo user thường, chỉ cho phép SSH bằng key, bật firewall, cài fail2ban và bật tự động cập nhật bảo mật.

Bài viết giả định bạn đã triển khai máy với SSH key. Nếu chưa có key, hãy làm theo bài tạo SSH key cho VPS trước. Còn nếu đang phân vân chọn khu vực, xem hướng dẫn các vị trí VPS.

Trước khi bắt đầu: luôn giữ một đường lui

Gia cố SSH là bước duy nhất có thể khiến bạn tự khóa mình ở ngoài. Hai thói quen giúp tránh chuyện đó:

  • Giữ nguyên phiên SSH đang mở trong lúc sửa cấu hình SSH, và thử đăng nhập bằng một terminal thứ hai trước khi đóng phiên đầu.
  • Biết rõ đường lui của mình. Với máy chủ Cloudj, bạn có thể mở SSH console ngay trên trình duyệt từ trang máy chủ trong console, và có thể đặt lại mật khẩu root ở đó khi cần.

Các lệnh dưới đây chạy bằng root ở lần đăng nhập đầu, và chạy với sudo sau khi bạn đã tạo user riêng. Hãy thay deploy bằng tên user bạn muốn.

Phút 0 đến 10: cập nhật hệ thống

Cài các gói mới nhất trước tiên, để bạn không mất công gia cố một hệ thống còn lỗ hổng đã biết.

apt update
apt full-upgrade -y

Nếu đợt nâng cấp có kernel mới, hãy khởi động lại ngay khi máy chưa chạy gì quan trọng. Trên Ubuntu, file /run/reboot-required sẽ xuất hiện khi cần reboot; trên Debian, hãy reboot nếu đợt nâng cấp có gói linux-image.

ls /run/reboot-required
reboot

Trong lúc chờ, kiểm tra hostname và múi giờ. Giờ hệ thống đúng rất quan trọng cho log và cho TLS:

timedatectl

Phút 10 đến 20: tạo user có quyền sudo

Làm việc bằng root cả ngày thì mỗi lần gõ nhầm có thể thành lỗi toàn hệ thống. Hãy tạo một user thường có quyền sudo:

adduser deploy
usermod -aG sudo deploy

Sao chép SSH key đã được cấp quyền của root sang user mới để đăng nhập bằng cùng một key:

install -d -m 700 -o deploy -g deploy /home/deploy/.ssh
install -m 600 -o deploy -g deploy ~/.ssh/authorized_keys /home/deploy/.ssh/authorized_keys

Bây giờ mở một terminal thứ hai trên máy tính của bạn và xác nhận đăng nhập bằng user mới hoạt động, kể cả sudo:

ssh [email protected]
sudo whoami

Lệnh cuối phải in ra root. Đừng làm tiếp khi bước này chưa thành công.

Phút 20 đến 30: bảo mật VPS ở tầng SSH

Khi đã chắc chắn user mới đăng nhập được bằng key, hãy tắt đăng nhập bằng mật khẩu và chặn root đăng nhập trực tiếp. Dùng một file drop-in thay vì sửa file cấu hình chính, để các bản nâng cấp gói không ghi đè thay đổi của bạn.

Có một chi tiết quan trọng: OpenSSH dùng giá trị đọc được đầu tiên cho mỗi thiết lập, và các file drop-in được đọc theo thứ tự bảng chữ cái. Một số cloud image có sẵn file như 50-cloud-init.conf bật đăng nhập bằng mật khẩu, nên hãy đặt tên file của bạn sao cho nó được đọc trước:

sudo tee /etc/ssh/sshd_config.d/00-hardening.conf > /dev/null <<'EOF'
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
EOF

Kiểm tra cú pháp, xác nhận giá trị thực tế đang có hiệu lực, rồi khởi động lại SSH:

sudo sshd -t
sudo sshd -T | grep -Ei 'permitrootlogin|passwordauthentication|kbdinteractive'
sudo systemctl restart ssh

Trên cả Ubuntu lẫn Debian, dịch vụ này tên là ssh. Giữ phiên hiện tại và thử đăng nhập mới từ một terminal khác. Sau đó xác nhận root đã bị từ chối:

ssh [email protected]

Bạn sẽ thấy Permission denied (publickey). Đó chính là kết quả mong muốn.

Đổi cổng SSH khỏi 22 là tùy chọn. Việc này giảm rác trong log nhưng không tăng thêm bao nhiêu bảo mật khi đã tắt mật khẩu; nếu đổi, hãy mở cổng mới trên firewall trước khi khởi động lại SSH.

Phút 30 đến 40: bật firewall

ufw là firewall đơn giản nhất trên Ubuntu và Debian. Ubuntu thường đã cài sẵn, còn Debian thì cần cài trước. Nhớ cho phép SSH trước khi bật, nếu không bạn sẽ tự cắt phiên của mình:

sudo apt install ufw
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw enable
sudo ufw status verbose

Chỉ mở những gì máy chủ thực sự phục vụ. Với web server thường là:

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

Cơ sở dữ liệu, trang quản trị và cache không nên mở ra internet. Hãy bind chúng vào 127.0.0.1 hoặc chỉ cho phép từ một số IP cụ thể. Bài cấu hình firewall ufw cho VPS đi sâu hơn vào cách viết rule. Nếu định chạy container, hãy đọc phần firewall trong bài cài Docker trên VPS, vì mặc định các cổng Docker publish sẽ đi vòng qua rule của ufw.

Phút 40 đến 50: chặn đăng nhập sai lặp lại bằng fail2ban

Khi đã tắt mật khẩu, brute force không thể thành công, nhưng fail2ban vẫn giúp log gọn hơn và làm chậm các máy quét bằng cách cấm những IP đăng nhập sai nhiều lần.

sudo apt install fail2ban python3-systemd

Tạo file jail cục bộ. Dùng backend systemd sẽ chạy được trên cả Ubuntu lẫn các bản Debian mới, nơi log SSH có thể chỉ nằm trong journal:

sudo tee /etc/fail2ban/jail.local > /dev/null <<'EOF'
[sshd]
enabled = true
backend = systemd
maxretry = 5
findtime = 10m
bantime = 1h
EOF
sudo systemctl enable --now fail2ban
sudo systemctl restart fail2ban
sudo fail2ban-client status sshd

Nếu lỡ tự chặn IP của chính mình, hãy vào bằng console trên trình duyệt và gỡ chặn với sudo fail2ban-client set sshd unbanip YOUR_IP. Điều này hay xảy ra với mạng gia đình ở Việt Nam, nơi nhiều người dùng chung một IP public của nhà mạng.

Phút 50 đến 60: tự động cập nhật bảo mật

Bản vá bảo mật chỉ có tác dụng khi được cài. unattended-upgrades sẽ tự áp dụng chúng hằng ngày:

sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades

Chọn "Yes" để bật tự động cập nhật. Mặc định công cụ này chỉ cài bản cập nhật bảo mật, đây là lựa chọn an toàn cho phần lớn máy chủ. Bạn có thể xem nó đã làm gì trong /var/log/unattended-upgrades/.

Tóm tắt checklist

BướcLệnh hoặc thiết lậpHoàn thành khi
Cập nhậtapt full-upgradeKhông còn bản cập nhật chờ, đã reboot nếu cần
User sudoadduser, usermod -aG sudosudo whoami in ra root
Gia cố SSH00-hardening.confRoot và đăng nhập mật khẩu bị từ chối
Firewallufw đã cho phép SSHufw status chỉ hiện các cổng cần thiết
fail2banJail [sshd], backend systemdfail2ban-client status sshd chạy được
Tự động cập nhậtunattended-upgradesĐã bật trong dpkg-reconfigure

Sau giờ đầu tiên

Bảo mật không dừng ở đây. Hãy lên kế hoạch sao lưu trước khi có dữ liệu đáng giá; bài chiến lược backup VPS trình bày các lựa chọn. Theo dõi CPU, RAM và lưu lượng mạng trong phần số liệu của console để dễ nhận ra hoạt động bất thường. Nếu chạy web app, hãy đặt nó sau một reverse proxy có TLS thay vì mở thẳng cổng của ứng dụng.

Câu hỏi thường gặp

Chỉ chạy SSH thì có cần firewall không?

Vẫn nên có. Firewall mặc định chặn hết sẽ bảo vệ bạn khi sau này cài một dịch vụ lắng nghe trên mọi interface mà bạn không để ý.

Đã dùng SSH key thì có cần tắt đăng nhập root không?

Có. Một user sudo có tên riêng giúp lịch sử thao tác rõ ràng hơn, và chặn root loại bỏ tên đăng nhập bị nhắm tới nhiều nhất.

Nếu lỡ tự khóa mình ở ngoài thì sao?

Dùng SSH console trên trình duyệt ở trang máy chủ trong console Cloudj để đăng nhập và sửa cấu hình, hoặc đặt lại mật khẩu root tại đó.

Checklist này có áp dụng cho Windows server không?

Không. Windows server trên Cloudj dùng đăng nhập bằng mật khẩu và cần cách gia cố riêng như mật khẩu mạnh, Windows Update và giới hạn truy cập RDP.

Bắt đầu với một máy chủ sạch

Hãy triển khai một máy Ubuntu hoặc Debian mới trong console Cloudj với SSH key đã gắn sẵn, rồi làm hết checklist này trước mọi việc khác. Bạn có thể so sánh các vị trí trên trang máy chủ cloud và xem giá trực tiếp trên trang bảng giá.

Triển khai máy chủ hoặc mua proxy

Chọn vị trí trong console, xem giá trực tiếp và thanh toán từ số dư tài khoản.