ToniBlog.net
ToniBlog.netBlog Chia Sẻ Kỹ Thuật, Lập Trình Web & Tối Ưu VPS
#Linux#Ubuntu#vps

Hướng Dẫn Cấu Hình VPS Linux Bảo Mật Ubuntu 24.04 / Debian Từ A-Z

admin
•
2 tháng 10, 2026
•
7 phút đọc

Để thực hiện **cấu hình VPS Linux bảo mật** (cho Ubuntu 24.04 LTS hoặc Debian 12) đạt chuẩn production cho lập trình viên, bạn cần triển khai 7 lớp gia cố hạ tầng cốt lõi: Tạo Sudo User mới, vô hiệu hóa đăng nhập Root và Password qua SSH Key authentication trên cổng custom, cài đặt tường lửa UFW, cấu hình Fail2ban chống brute-force, bật tự động vá lỗi `unattended-upgrades`, tinh chỉnh sysctl kernel hardening, và khởi tạo Swap file chống tràn bộ nhớ OOM khi chạy Docker & Nginx.

Tóm Tắt Nhanh (AEO Direct Answer)

Để thực hiện **cấu hình VPS Linux bảo mật** (cho Ubuntu 24.04 LTS hoặc Debian 12) đạt chuẩn production cho lập trình viên, bạn cần triển khai 7 lớp gia cố hạ tầng cốt lõi: Tạo Sudo User mới, vô hiệu hóa đăng nhập Root và Password qua SSH Key authentication trên cổng custom, cài đặt tường lửa UFW, cấu hình Fail2ban chống brute-force, bật tự động vá lỗi `unattended-upgrades`, tinh chỉnh sysctl kernel hardening, và khởi tạo Swap file chống tràn bộ nhớ OOM khi chạy Docker & Nginx.

Khi bắt đầu triển khai một ứng dụng web (Next.js, Node.js, Python, Go, hay Laravel) hoặc dự án cá nhân, sai lầm phổ biến nhất của anh em lập trình viên là: **Hoặc quá chủ quan để VPS chạy với tài khoản `root` mặc định cùng mật khẩu đơn giản, hoặc vội vã cài đặt các Control Panel miễn phí cồng kềnh như AApanel, CyberPanel.**

Thực tế ghi nhận từ log của hệ thống **toniblog.net**: Chỉ sau chưa đầy **15 phút** khi một VPS mới với địa chỉ IP công khai được khởi tạo trên Cloud (Vultr, DigitalOcean, Hetzner hay AZDIGI), các con bot tự động từ khắp nơi trên thế giới sẽ liên tục thực hiện các đợt tấn công dò quét mật khẩu (Brute-force Attack) vào cổng SSH mặc định 22. Nếu bạn dùng mật khẩu yếu hoặc vô tình để lộ file cấu hình, máy chủ của bạn sẽ biến thành trạm phát tán thư rác (Spam botnet) hoặc máy đào coin đào trộm tài nguyên chỉ sau một đêm.

Mặt khác, việc cài các bộ quản trị giao diện (Control Panel) ngốn từ **300MB – 600MB RAM** chỉ để làm công việc điều phối web server là một sự lãng phí tài nguyên không cần thiết. Trong bài viết này, mình sẽ cùng anh em thực hành từng bước tự tay **cấu hình VPS Linux bảo mật** chạy **Ubuntu 24.04 LTS (Noble Numbat)** hoặc **Debian 12 (Bookworm)** tinh gọn, đạt tiêu chuẩn bảo mật "Hardening 7 Lớp" sẵn sàng đưa vào sản xuất (Production-ready).

1. Chuẩn Bị Hạ Tầng & Kết Nối Máy Chủ Ban Đầu

1.1. Yêu Cầu Cấu Hình Máy Chủ Khuyến Nghị

Để hệ thống vận hành mượt mà cho công việc lập trình và chạy containerization:
- **CPU**: 1 - 2 vCPU.
- **RAM**: Tối thiểu 1GB RAM (khuyến nghị 2GB RAM để build Docker không bị nghẽn).
- **Ổ cứng**: 20GB - 40GB NVMe SSD (tốc độ đọc/ghi I/O cao giúp nâng cao hiệu năng hệ thống).
- **Hệ điều hành**: **Ubuntu 24.04 LTS** (nhiều thư viện mới, cập nhật dài hạn đến 2029) hoặc **Debian 12** (siêu nhẹ, cực kỳ ổn định).

1.2. Kết Nối Vào Máy Chủ Lần Đầu Qua SSH

Sau khi tạo VPS trên bảng quản trị nhà cung cấp, bạn sẽ nhận được địa chỉ IP công khai (ví dụ: `103.145.68.99`) và mật khẩu root ban đầu. Mở Terminal (macOS/Linux) hoặc PowerShell/Git Bash (Windows) và gõ lệnh:

Nếu hệ thống yêu cầu xác nhận Fingerprint, gõ `yes` và nhập mật khẩu root. Tiến hành cập nhật toàn bộ danh mục gói phần mềm lên phiên bản mới nhất:

bash
apt update && apt upgrade -y

2. Quy Trình Cấu Hình VPS Linux Bảo Mật Với Sudo User & SSH Key

Chạy hệ thống bằng tài khoản `root` là nguyên nhân hàng đầu dẫn đến thảm họa bảo mật: Chỉ cần một lệnh gõ sai hoặc một lỗ hổng trong code ứng dụng, kẻ tấn công sẽ nắm toàn quyền kiểm soát toàn bộ máy chủ.

2.1. Tạo Sudo User Mới & Khóa Account Root

Chúng ta sẽ tạo một người dùng mới chuyên dụng (ví dụ: `tonidev`) và cấp quyền quản trị `sudo`:

bash
adduser tonidev
usermod -aG sudo tonidev
su - tonidev
sudo whoami

2.2. Tạo Cặp SSH Key Pair Trên Máy Local & Upload Lên VPS

SSH Key authentication sử dụng thuật toán mã hóa bất đối xứng (Ed25519 hoặc RSA 4096-bit), đảm bảo an toàn tuyệt đối ngay cả khi ai đó biết tên người dùng của bạn.

**Mở một cửa sổ Terminal MỚI tại máy tính cá nhân (Local Machine) của bạn:**

bash
ssh-keygen -t ed25519 -C "[email protected]"
ssh-copy-id -p 22 [email protected]

2.3. Cấu Hình SSH Hardening: Đổi Cổng 22 & Tắt Password Authentication

Bây giờ chúng ta sẽ vô hiệu hóa hoàn toàn phương thức đăng nhập bằng mật khẩu và chuyển SSH sang một cổng ngẫu nhiên (custom port, ví dụ: `2288`).

Trở lại cửa sổ Terminal của VPS, tạo file cấu hình đè chuẩn xác tại thư mục cấu hình SSH:

bash
sudo nano /etc/ssh/sshd_config.d/security.conf

Dán đoạn cấu hình bảo mật chuẩn Production sau vào file:

security.conf
bash
Port 2288
PermitRootLogin no
PasswordAuthentication no
PermitEmptyPasswords no
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 2
PubkeyAuthentication yes

Lưu file và khởi động lại dịch vụ SSH:

bash
sudo systemctl restart ssh

> ⚠️ **CẢNH BÁO BẢO MẬT QUAN TRỌNG**:
> **Tuyệt đối KHÔNG đóng cửa sổ Terminal hiện tại!** Hãy mở một cửa sổ Terminal mới trên máy tính của bạn và kiểm tra kết nối SSH với cổng mới và SSH Key vừa thiết lập:
> `ssh -p 2288 [email protected]`
> Nếu kết nối thành công không cần nhập mật khẩu, bạn mới được phép đóng phiên làm việc cũ.

3. Tường Lửa UFW & Chống Brute-Force Tối Ưu Bảo Mật VPS Linux

3.1. Thiết Lập Tường Lửa UFW (Uncomplicated Firewall)

UFW giúp bạn đóng toàn bộ các cổng không sử dụng trên máy chủ, ngăn ngừa việc lộ các service nội bộ (như Redis `6379`, MySQL `3306`, PostgreSQL `5432`) ra ngoài Internet.

bash
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 2288/tcp comment 'Custom SSH Port'
sudo ufw allow 80/tcp comment 'HTTP Web'
sudo ufw allow 443/tcp comment 'HTTPS Secure Web'
sudo ufw enable
sudo ufw status verbose

Đầu ra của `ufw status` sẽ hiển thị rõ ràng chỉ có cổng `2288`, `80`, `443` ở trạng thái `ALLOW IN`.

3.2. Cài Đặt & Cấu Hình Fail2ban Giám Sát Brute-Force

Fail2ban tự động quét các file log hệ thống (`/var/log/auth.log`). Nếu phát hiện một IP cố tình quét cổng hoặc thử đăng nhập sai quá số lần quy định, Fail2ban sẽ tự động thêm IP đó vào danh sách đen của tường lửa `iptables` để cấm kết nối.

bash
sudo apt install fail2ban -y
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local

Dán cấu hình tinh chỉnh sau vào cuối file `/etc/fail2ban/jail.local`:

/etc/fail2ban/jail.local
bash
[sshd]
enabled = true
port = 2288
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
findtime = 600
bantime = 86400
bash
sudo systemctl restart fail2ban
sudo fail2ban-client status sshd

4. Tự Động Cập Nhật Patch & Tinh Chỉnh Sysctl Hardening

4.1. Bật Tính Năng `unattended-upgrades` Tự Động Vá Lỗi Zero-Day

Việc bật tự động cài đặt các bản bản vá an ninh (Security updates) giúp VPS của bạn luôn được bảo vệ mà không cần thao tác cập nhật thủ công mỗi ngày.

bash
sudo apt install unattended-upgrades apt-listchanges -y
sudo dpkg-reconfigure -plow unattended-upgrades

4.2. Tinh Chỉnh Kernel Linux Với `sysctl.conf` Chống DDoS SYN Flood

File `/etc/sysctl.conf` quản lý các thông số mạng và bộ nhớ ở tầng nhân Linux Kernel. Chúng ta sẽ tinh chỉnh các tham số này để tăng khả năng chịu tải và chống lại các kiểu tấn công mạng phổ biến.

Tạo file cấu hình hardening riêng tại `/etc/sysctl.d/99-security.conf`:

bash
sudo nano /etc/sysctl.d/99-security.conf

Dán toàn bộ các thông số tối ưu bảo mật chuẩn kernel sau:

/etc/sysctl.d/99-security.conf
bash
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_synack_retries = 2
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
fs.file-max = 65535

Tải lại cấu hình `sysctl` ngay lập tức không cần reboot:

bash
sudo sysctl --system

5. Tối Ưu Tài Nguyên Hạ Tầng: Tạo Swap File & Phòng Chống Crash OOM

Khi tiến hành build dự án (ví dụ `npm run build` ở Next.js) hoặc khi database nhận truy vấn lớn trên VPS 1GB - 2GB RAM, bộ nhớ vật lý bị tràn sẽ khiến hệ thống kích hoạt tiến trình OOM Killer để giết chết ngẫu nhiên Docker hoặc MySQL.

5.1. Khởi Tạo Bộ Nhớ Đệm Swap File 2GB

Swap đóng vai trò là bộ nhớ ảo trên ổ đĩa SSD NVMe, giúp "gánh" bớt lượng bộ nhớ khi RAM vật lý chạm ngưỡng 100%.

bash
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

5.2. Tinh Chỉnh Giá Trị `swappiness` Chuẩn Xác

Đối với máy chủ VPS chạy NVMe SSD, giá trị `swappiness` tối ưu nhất là `10`:

bash
sudo sysctl vm.swappiness=10
sudo sysctl vm.vfs_cache_pressure=50
echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.d/99-security.conf
echo "vm.vfs_cache_pressure=50" | sudo tee -a /etc/sysctl.d/99-security.conf

Kiểm tra dung lượng RAM và Swap bằng lệnh `free -h`:

bash
free -h

6. Sẵn Sàng Môi Trường Deploy: Docker Engine & Nginx Reverse Proxy

Đến bước này, chiếc VPS của bạn đã là một pháo đài vô cùng an toàn. Bây giờ chúng ta sẽ trang bị các công cụ tiêu chuẩn để lập trình viên sẵn sàng đóng gói và triển khai ứng dụng.

6.1. Cài Đặt Docker Engine & Docker Compose Chính Chủ

Cài đặt phiên bản Docker chính thức từ Docker Inc:

bash
sudo apt install curl ca-certificates gnupg -y
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
sudo usermod -aG docker tonidev

**MẸO BẢO MẬT DOCKER**: Đăng xuất và SSH lại để nhóm `docker` có hiệu lực. Việc chạy Docker thông qua user thường trong group `docker` giúp nâng cao độ an toàn môi trường so với việc gõ `sudo docker` dưới quyền root.

6.2. Cài Đặt Nginx Reverse Proxy & Tự Động SSL Certbot

Để điều phối lưu lượng truy cập từ domain bên ngoài vào các container Docker đang lắng nghe ở cổng nội bộ (như `:3000`, `:8000`), chúng ta cài đặt Nginx trực tiếp trên máy chủ Host:

bash
sudo apt install nginx certbot python3-certbot-nginx -y
sudo systemctl status nginx

Bảng Tổng Kết Checklist 7 Lớp Cấu Hình VPS Linux Bảo Mật

Dưới đây là bảng tổng hợp danh mục kiểm tra (Checklist) để bạn nhanh chóng rà soát lại độ an toàn của VPS trước khi xuất bản dự án:

STT Hạng Mục Bảo Mật (Hardening Layer) Lệnh / File Cấu Hình Thực Thi Trạng Thái Đạt
1 User Management adduser tonidev && usermod -aG sudo tonidev [x] Đã khởi tạo
2 SSH Key Pair ssh-copy-id tonidev@IP [x] Đã xác thực
3 Disable Root & Password /etc/ssh/sshd_config.d/security.conf (PasswordAuthentication no) [x] Đã khóa
4 Custom SSH Port Port 2288 [x] Đã đổi
5 UFW Firewall ufw default deny incoming, ufw allow 2288,80,443/tcp [x] Đã kích hoạt
6 Anti Brute-Force Fail2ban jail.local (maxretry = 3, bantime = 86400) [x] Đã bật
7 System Hardening & Swap sysctl --system + fallocate -l 2G /swapfile (swappiness=10) [x] Đã tối ưu

Tổng Kết & Tài Nguyên Mẫu

Chỉ với khoảng 15 – 20 phút thực hành theo đúng quy trình cấu hình VPS Linux bảo mật** trong bài viết này, bạn đã tự tay biến một chiếc VPS giá rẻ thành một môi trường máy chủ Linux chuẩn doanh nghiệp: **Bảo mật tuyệt đối trước các đợt dò quét mật khẩu, không tốn tài nguyên cho các Control Panel thừa thãi, và sẵn sàng gánh tải mượt mà cho các container Docker production.

Nếu gặp bất kỳ khó khăn hay thông báo lỗi nào trong quá trình gõ lệnh terminal, anh em cứ để lại bình luận ngay bên dưới bài viết hoặc nhắn tin vào nhóm Telegram của **toniblog**, mình và các anh em khác luôn sẵn sàng hỗ trợ giải đáp!

Câu Hỏi Thường Gặp (FAQ)

Nếu bạn lỡ đóng Terminal và không thể SSH vào VPS:
- **Trường hợp dính Fail2ban**: Hãy đổi kết nối Internet sang mạng 4G/5G khác để có IP mới, sau đó SSH vào VPS và dùng lệnh `sudo fail2ban-client unban <Địa_chỉ_IP_cũ>` để gỡ ban.
- **Trường hợp mất SSH Key**: Đăng nhập vào bảng quản trị Web (VNC Console / Web Terminal) do nhà cung cấp VPS cung cấp (Vultr/Hetzner/AZDIGI đều có tính năng VNC). Đăng nhập bằng user `tonidev` hoặc `root` tại giao diện Console đó để kiểm tra lại file `~/.ssh/authorized_keys`.

Bình luận (0)

Anti-Spam Protected

Viết bình luận của bạn

Đánh giá:

Đang tải bình luận...

Hướng Dẫn Cấu Hình VPS Linux Bảo Mật Ubuntu 24.04/Debian A-Z | toniblog.net | ToniBlog.net