# Checklist bảo mật VPS hosting: 40 mục cần kiểm tra

> Checklist bảo mật VPS chạy website với 40 mục: cập nhật, SSH, tường lửa, control panel, cách ly tài khoản, lớp web và backup.

Source: https://zopanel.net/vi/blog/hosting-server-security-checklist  
Updated: 2026-10-21

## Ý chính

- Server hosting cần nhiều hơn một hệ điều hành đã gia cố: control panel, từng tài khoản khách và lớp web đều cần kiểm tra riêng.
- Các mục tác động lớn nhất là cập nhật bảo mật, SSH key, tường lửa chặn mặc định, giới hạn cổng panel và backup ra ngoài server.
- Trên server dùng chung, cách ly tài khoản quyết định một website bị hack có dừng lại ở một website hay không.
- Hãy chạy lại checklist sau mỗi thay đổi lớn, không chỉ lúc cài đặt.

Một checklist bảo mật VPS chạy hosting gồm sáu nhóm: hệ điều hành và cập nhật, truy cập SSH, tường lửa mạng, control panel, cách ly giữa các tài khoản hosting, và lớp web cùng backup. 40 mục dưới đây viết cho VPS Ubuntu hoặc Debian chạy website của bạn hoặc của khách hàng. Nếu chỉ có một giờ, hãy làm trước các mục 3, 7 đến 9, 14, 16, 20 và 39: chúng đóng những lối vào phổ biến nhất.

Hướng dẫn gia cố VPS trống, như bài [10 bước bảo mật Ubuntu trong giờ đầu tiên](/vi/blog/secure-ubuntu-vps), lo phần hệ thống nền; server hosting còn có panel, các tài khoản khách không được chạm vào nhau, code PHP không do bạn viết, và email có thể khiến IP bị đưa vào blacklist.

Với mỗi mục, cột cuối cho biết ZoPanel đã làm sẵn hay chưa, dựa trên [tài liệu bảo mật](/vi/docs/security) và [hướng dẫn cài đặt](/vi/docs/install). "Có" nghĩa là tự động khi cài hoặc bật mặc định. "Một cú nhấp" nghĩa là Security Center có nút **Fix**. "Có kiểm tra" nghĩa là Security Center báo nhưng bạn tự xử lý. "Bạn làm" nghĩa là bạn phải tự làm, trên ZoPanel hay bất kỳ panel nào.

## Checklist bảo mật VPS hosting: 40 mục

| # | Mục kiểm tra | Vì sao quan trọng | ZoPanel đã làm tự động? |
| --- | --- | --- | --- |
| **Hệ thống và cập nhật** | | | |
| 1 | Dùng bản hệ điều hành còn nhận cập nhật bảo mật | Bản cũ không còn được vá | Một phần: bộ cài chỉ chạy trên bản Ubuntu/Debian được hỗ trợ |
| 2 | Nâng cấp toàn bộ gói trước khi chạy thật | Image mới tạo thường chậm vài tuần | Có (bộ cài) |
| 3 | Bật cập nhật bảo mật tự động | Nhiều vụ tấn công dùng lỗi đã có bản vá | Có (unattended-upgrades) |
| 4 | Khởi động lại sau khi cập nhật kernel, libc | Kernel đã vá chỉ có tác dụng khi đang chạy | Có kiểm tra (cần reboot) |
| 5 | Đồng bộ giờ hệ thống | Log, TLS và mã 2FA đều phụ thuộc vào giờ | Một cú nhấp |
| 6 | Gia cố tham số mạng của kernel (`sysctl`) | Bỏ các mặc định rủi ro như nhận redirect | Một cú nhấp |
| **SSH và truy cập quản trị** | | | |
| 7 | Đăng nhập bằng SSH key | Mật khẩu có thể bị đoán hoặc dùng lại | Bạn làm |
| 8 | Tắt đăng nhập root bằng mật khẩu | Root là tên đầu tiên mọi bot thử | Một cú nhấp (cần có key trước) |
| 9 | Tắt xác thực SSH bằng mật khẩu | Dò mật khẩu trở nên vô ích | Một cú nhấp (cần có key trước) |
| 10 | Giới hạn số lần thử xác thực SSH | Làm chậm việc dò trên mỗi kết nối | Một cú nhấp |
| 11 | Chặn IP đăng nhập SSH sai nhiều lần (Fail2ban) | Giảm brute force và rác trong log | Có (5 lần sai trong 10 phút, chặn 1 giờ) |
| 12 | Mỗi quản trị viên một tài khoản riêng, không dùng chung mật khẩu root | Thu hồi quyền một người mà không phải đổi mọi thứ | Bạn làm |
| 13 | Không có tài khoản UID 0 lạ, không có mật khẩu rỗng | Dấu hiệu kinh điển của backdoor | Có kiểm tra |
| **Mạng** | | | |
| 14 | Bật tường lửa, chặn mặc định, chỉ mở cổng cần thiết | Mọi dịch vụ đang lắng nghe đều là bề mặt tấn công | Có (UFW: SSH, 80, 443, 8888) |
| 15 | Database, Redis, công cụ quản trị không mở cổng công khai | Máy quét hàng loạt luôn tìm database lộ ra ngoài | Có kiểm tra (dịch vụ công khai) |
| 16 | Giới hạn cổng panel cho IP của bạn | Trang đăng nhập panel là mục tiêu hàng đầu | Bạn làm (danh sách IP cho phép) |
| 17 | Nhớ rằng Docker có thể vượt qua UFW | Cổng container được publish bỏ qua luật UFW | Có (container của panel chỉ publish trên 127.0.0.1) |
| 18 | Giới hạn tốc độ request theo website | Bot và flood đánh rất nặng vào PHP | Bạn làm (thiết lập theo website) |
| **Control panel** | | | |
| 19 | Giao diện web của panel không chạy bằng root | Một lỗi web không được bằng quyền root | Có |
| 20 | Xác thực hai lớp cho mọi admin và đại lý | Mật khẩu bị lộ hoặc dùng lại là lối vào phổ biến | Bạn làm (có thể bắt buộc) |
| 21 | Không dùng tên đăng nhập `admin` | Đó là tên đầu tiên bot thử | Có kiểm tra |
| 22 | Panel dùng chứng chỉ TLS hợp lệ | Tránh bị nghe lén khi đăng nhập quản trị | Bạn làm (đặt tên miền panel) |
| 23 | Chặn IP đăng nhập panel sai nhiều lần | Ngăn dò mật khẩu | Có (8 lần sai trong 15 phút) |
| 24 | Bản cập nhật có chữ ký và tự rollback nếu lỗi | Bản cập nhật bị sửa hoặc hỏng là rủi ro thật | Có |
| 25 | Rà soát và thu hồi API token không dùng | Token cũ là chìa khoá bị bỏ quên | Có kiểm tra (không dùng 90 ngày) |
| 26 | Nhật ký hoạt động chống sửa, có bản sao ngoài server | Kẻ xâm nhập luôn xoá dấu vết | Một phần: chuỗi hash có, syslog từ xa bạn làm |
| **Cách ly tài khoản** | | | |
| 27 | Mỗi tài khoản một user Linux và pool PHP-FPM riêng | Website này không đọc được website khác | Có |
| 28 | Giới hạn CPU, RAM, số tiến trình theo tài khoản | Một website không đánh sập cả server | Có (theo gói) |
| 29 | Disk quota và giới hạn inode được thực thi | Một tài khoản không làm đầy ổ đĩa | Có (kiểm tra trạng thái là enforced) |
| 30 | Ẩn tiến trình giữa các tài khoản (`hidepid`) | Dòng lệnh có thể làm lộ mật khẩu | Có |
| 31 | SFTP bị chroot, shell trong sandbox hoặc tắt | User có shell chỉ nên thấy thư mục home | Có |
| 32 | Giới hạn gửi mail theo tài khoản | Website bị hack gửi spam làm IP bị blacklist | Có (theo gói) |
| 33 | Container chạy trong user namespace | Root trong container không được là root trên host | Có (ứng dụng App Store) |
| **Lớp web** | | | |
| 34 | HTTPS mọi nơi, tự gia hạn chứng chỉ | Chứng chỉ hết hạn làm mất tin cậy và lỗi đăng nhập | Có (Let's Encrypt) |
| 35 | Chặn file ẩn và file dump (`.env`, `.git`, `.sql`, `.bak`) | Lộ file cấu hình là lộ database | Có |
| 36 | Chặn chạy PHP trong thư mục upload | Webshell tải lên không chạy được | Có khi dùng rewrite rules WordPress |
| 37 | Cập nhật core CMS, plugin và theme | Plugin cũ là lối vào phổ biến | Bạn làm (cập nhật tự động an toàn cho WordPress là một thiết lập) |
| 38 | Tường lửa ứng dụng web trước PHP | Chặn các kiểu chèn mã phổ biến và máy quét | Bạn làm (cài rồi bật theo website; không có trên Ubuntu 22.04) |
| **Phát hiện và khôi phục** | | | |
| 39 | Backup mã hoá ra ngoài server, khoá khôi phục cất ngoài server | Ransomware và hỏng ổ đĩa xoá luôn bản sao tại chỗ | Bạn làm (backup từ xa cần gói Pro) |
| 40 | Quét mã độc, cảnh báo và thử khôi phục | Bạn phát hiện sự cố trước khách hàng | Một phần: quét hằng tuần có, cảnh báo và thử khôi phục bạn làm |

## Chỉ có một giờ thì bắt đầu từ đâu?

Không phải mục nào cũng nặng như nhau. Thứ tự giảm rủi ro nhanh nhất:

1. **Cập nhật (2, 3).** Cập nhật bảo mật tự động trên Ubuntu và Debian do `unattended-upgrades` đảm nhận; [tài liệu Ubuntu](https://documentation.ubuntu.com/server/how-to/software/automatic-updates/) hướng dẫn cách kiểm tra và tinh chỉnh.
2. **SSH key, rồi tắt mật khẩu (7 đến 9).** Thêm key, thử ở một cửa sổ terminal thứ hai, rồi mới tắt đăng nhập bằng mật khẩu. Bài [chống brute force SSH](/vi/blog/ssh-brute-force-protection) có từng bước và các bẫy tự khoá mình thường gặp.
3. **Tường lửa và cổng panel (14 đến 16).** Chặn mặc định, rồi giới hạn panel cho IP văn phòng hoặc VPN của bạn. Nhiều sự cố panel tệ nhất những năm gần đây liên quan đến cổng quản trị mở cho cả internet, như chúng tôi tổng hợp trong [các sự cố bảo mật control panel 2024 đến 2026](/vi/blog/hosting-panel-security-incidents).
4. **2FA (20).** Bật cho chính bạn, rồi bắt buộc với mọi admin và đại lý.
5. **Backup ra ngoài server (39).** Mọi mục khác giảm khả năng gặp sự cố; backup quyết định sự cố tệ đến mức nào.

## Những mục hay làm sai

**Bẫy Docker và UFW (17).** Docker tự ghi luật iptables, nên cổng publish bằng `-p 8080:8080` có thể truy cập được từ internet dù UFW báo là đã chặn. Chính [tài liệu packet filtering của Docker](https://docs.docker.com/engine/network/packet-filtering-firewalls/) cảnh báo điều này. Chỉ publish container trên `127.0.0.1` và đặt chúng sau web server có SSL.

**Quota chỉ đo mà không chặn (29).** Nhiều hệ thống hiển thị dung lượng từng tài khoản nhưng không bao giờ thực thi, vì hệ thống file không được mount với hỗ trợ quota. Hãy kiểm tra kernel có thực sự áp quota, ví dụ bằng `repquota -a` hoặc trạng thái quota trong panel.

**Bật WAF ở chế độ chặn ngay ngày đầu (38).** Bật tường lửa ứng dụng web ở chế độ chặn ngay trên server dùng chung sẽ làm hỏng page builder và các thao tác import. Hãy chạy chế độ chỉ ghi log trước; cách tinh chỉnh có trong bài [cấu hình ModSecurity và OWASP CRS không chặn nhầm](/vi/blog/modsecurity-owasp-crs-hosting).

**Backup nằm trên chính server đó (39).** Backup tại chỗ cứu bạn khi cập nhật plugin lỗi, không cứu được khi gặp ransomware hay mất ổ đĩa. Bài [chiến lược backup website 3-2-1](/vi/blog/website-backup-strategy) giải thích cách giữ bản sao mà kẻ tấn công trên server không xoá được.

## Cách kiểm tra checklist trên server đang chạy

Vài lệnh trả lời phần lớn danh sách trên mọi server Ubuntu hoặc Debian:

```bash
# 3: cập nhật tự động
systemctl status unattended-upgrades --no-pager
# 4: có cần reboot không?
ls /var/run/reboot-required 2>/dev/null && echo "reboot needed"
# 8-10: thiết lập SSH đang có hiệu lực
sudo sshd -T | grep -Ei 'permitrootlogin|passwordauthentication|maxauthtries'
# 13: tài khoản root lạ
awk -F: '$3 == 0 {print $1}' /etc/passwd
# 14-15: tường lửa và dịch vụ đang lắng nghe
sudo ufw status verbose
sudo ss -tlnp | grep -v '127.0.0.1\|::1'
# 30: ẩn tiến trình
grep ' /proc ' /proc/mounts
# 29: quota có được thực thi
sudo repquota -a | head
```

Trên ZoPanel, **Security Center** ở đầu trang **Security** chạy phần lớn các kiểm tra này, chấm điểm server và có nút **Fix** một cú nhấp ở những chỗ an toàn. Các bản sửa SSH từ chối chạy khi chưa có SSH key, nên không thể làm bạn bị khoá ngoài. Muốn tiêu chuẩn sâu hơn, bộ [CIS Benchmarks](https://www.cisecurity.org/cis-benchmarks) cho Ubuntu và Debian đi xa hơn nhiều so với bất kỳ danh sách 40 mục nào.

## Những việc ZoPanel để bạn tự quyết

Nói rõ về cột ở trên: ZoPanel không tự quyết chính sách SSH thay bạn, không giới hạn cổng panel cho đến khi bạn nhập danh sách IP, không tự bật WAF (và không bật được trên Ubuntu 22.04, vì bản này không có module ModSecurity cho nginx), và không gửi backup ra ngoài server cho đến khi bạn cấu hình S3, việc này cần license Pro. Những lựa chọn đó phụ thuộc vào mạng và ngân sách của bạn. Panel khác cũng có khoảng trống tương tự; mục đích của checklist là lấp chúng dù bạn dùng panel nào. Bạn có thể xem các panel xử lý những phần này ra sao ở [trang so sánh](/vi/compare).

## Kết luận

Checklist bảo mật VPS không bao giờ xong hẳn: bạn đi qua nó lúc cài, rồi lại sau mỗi thay đổi lớn như lên phiên bản panel mới, thêm đại lý hay thêm ứng dụng. 40 mục ở trên bao phủ hệ thống, SSH, mạng, panel, cách ly tài khoản, lớp web và khôi phục. Chỉ cần làm các mục của giờ đầu tiên, bạn đã an toàn hơn phần lớn server trên internet.

Nếu muốn phần lớn cột "Có" được làm sẵn, hãy thử [gói Free của ZoPanel](/vi/pricing): 3 tài khoản hosting, 10 website và 10 database, không giới hạn thời gian, cài bằng `curl -fsSL https://get.zopanel.net | sudo bash`. Sau đó mở Security Center và xử lý nốt phần còn lại.

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

### Bước bảo mật quan trọng nhất cho server hosting mới là gì?

Bật cập nhật bảo mật tự động và chuyển SSH sang chỉ đăng nhập bằng key. Nhiều vụ xâm nhập dùng lỗ hổng đã biết hoặc mật khẩu bị đoán, và hai bước này xử lý cả hai. Giới hạn cổng control panel cho IP của bạn đứng ngay thứ ba.

### Bao lâu nên rà lại checklist bảo mật server một lần?

Lúc cài, sau mỗi thay đổi lớn (phiên bản panel mới, dịch vụ mới, đại lý mới) và ít nhất mỗi quý một lần. Công cụ kiểu Security Center giúp ích vì kiểm tra liên tục, nhưng rà tay mỗi quý còn bắt được những thứ không công cụ nào biết, như tài khoản của nhân viên đã nghỉ.

### Server hosting có cần tường lửa ứng dụng web không?

Đó là một lớp hữu ích, nhất là trên server dùng chung có nhiều website WordPress, nhưng nó đứng sau cập nhật, cách ly và backup. Hãy chạy chế độ chỉ ghi log trước để không chặn nhầm request hợp lệ từ page builder hay import.

### Cài control panel có làm VPS kém an toàn hơn không?

Panel thêm bề mặt tấn công, vì nó là ứng dụng web có quyền gần như root trên server. Panel giữ giao diện web không có quyền root, giới hạn cổng và bắt buộc 2FA sẽ giảm rủi ro đó; panel chạy bằng root và mở cho cả internet sẽ làm tăng nó.
