Bảo mật toàn diện cho VPS Linux mới khởi tạo
Cẩm nang bảo mật toàn diện cho VPS Linux mới khởi tạo: Những bước bắt buộc phải làm
Khi bạn vừa sở hữu một VPS (Virtual Private Server) chạy Linux, việc đầu tiên cần làm không phải là cài đặt ứng dụng hay mã nguồn web, mà là thắt chặt an ninh. Không gian mạng luôn tràn ngập các bot tự động thực hiện quét cổng (port scanning) và tấn công Brute-force chỉ vài phút sau khi một địa chỉ IP mới được kích hoạt. Bài viết này sẽ hướng dẫn bạn thiết lập một "pháo đài" vững chắc cho server của mình.
1. Cập nhật hệ thống - Nền tảng của sự an toàn
Trước khi cấu hình bất kỳ tính năng bảo mật nào, hãy đảm bảo hệ điều hành của bạn đang chạy các phiên bản phần mềm mới nhất để vá các lỗ hổng bảo mật (vulnerabilities) đã biết.
// Mô phỏng lệnh cập nhật hệ thống trên nền tảng quản lý (Node.js/TypeScript)
const updateSystem = async (os: "Ubuntu" | "CentOS"): Promise => {
const command = os === "Ubuntu"
? "sudo apt update && sudo apt upgrade -y"
: "sudo yum update -y";
console.log(`Đang thực thi: ${command}`);
return "Cập nhật hệ thống hoàn tất!";
};
updateSystem("Ubuntu").then(res => console.log(res));
2. Thay đổi cổng SSH mặc định (Port 22)
Mặc định, dịch vụ SSH chạy trên cổng 22. Đây là mục tiêu đầu tiên của các cuộc tấn công quét cổng tự động. Việc đổi cổng SSH sang một số ngẫu nhiên (ví dụ: 2289) sẽ giúp giảm thiểu đến 90% các nỗ lực đăng nhập trái phép từ bot.
Lưu ý: Hãy đảm bảo bạn đã mở cổng mới này trên tường lửa trước khi khởi động lại dịch vụ SSH, nếu không bạn sẽ bị khóa khỏi server của chính mình.
3. Thiết lập xác thực bằng SSH Key (Bỏ qua mật khẩu)
Xác thực bằng mật khẩu (Password Authentication) luôn tiềm ẩn rủi ro bị bẻ khóa. Sử dụng SSH Key là phương pháp xác thực dựa trên cặp khóa công khai (public key) và khóa cá nhân (private key). Đây là cách bảo mật mạnh mẽ nhất hiện nay.
- Khóa công khai: Được lưu trên server.
- Khóa cá nhân: Lưu tại máy tính của bạn và tuyệt đối không chia sẻ cho ai.
// Định nghĩa cấu hình SSH Key trong ứng dụng quản lý VPS
interface SSHKeyConfig {
label: string;
publicKey: string;
algorithm: "RSA" | "ED25519";
bits: number;
}
const userKey: SSHKeyConfig = {
label: "My-Work-Macbook",
publicKey: "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI...",
algorithm: "ED25519",
bits: 256
};
function generateSSHConfig(config: SSHKeyConfig): string {
return `Sử dụng thuật toán ${config.algorithm} cho độ bảo mật tối ưu.`;
}
console.log(generateSSHConfig(userKey));
4. Cấu hình tường lửa (Firewall) với UFW hoặc Firewalld
Tường lửa hoạt động như một bộ lọc, chỉ cho phép các kết nối từ các cổng được phê duyệt đi vào hệ thống. Trên Ubuntu, UFW (Uncomplicated Firewall) là lựa chọn hàng đầu nhờ sự đơn giản nhưng hiệu quả.
| Dịch vụ | Cổng mặc định | Trạng thái đề xuất |
|---|---|---|
| HTTP / HTTPS | 80 / 443 | Mở (ALLOW) |
| SSH (Đã đổi) | 2289 (Ví dụ) | Mở (ALLOW) |
| MySQL / PostgreSQL | 3306 / 5432 | Đóng (DENY) - Chỉ mở cho IP nội bộ |
// Logic kiểm tra trạng thái tường lửa trước khi triển khai
type FirewallStatus = "active" | "inactive";
interface FirewallCheck {
port: number;
protocol: "tcp" | "udp";
action: "ALLOW" | "DENY";
}
const rule1: FirewallCheck = { port: 443, protocol: "tcp", action: "ALLOW" };
function applyRule(rule: FirewallCheck): void {
console.log(`Đang thực thi: ufw ${rule.action.toLowerCase()} ${rule.port}/${rule.protocol}`);
}
applyRule(rule1);
5. Cài đặt Fail2ban - Lá chắn chống Brute-force
Dù bạn đã đổi cổng SSH, các hacker vẫn có thể tìm ra cổng mới và thử đăng nhập liên tục. Fail2ban là một công cụ giám sát các tệp log (như /var/log/auth.log) và tự động cấm (ban) địa chỉ IP của kẻ tấn công nếu chúng nhập sai mật khẩu quá số lần quy định.
Cơ chế hoạt động của Fail2ban thường dựa trên các thông số: bantime (thời gian cấm), findtime (khoảng thời gian theo dõi) và maxretry (số lần thử tối đa).
// Cấu hình mẫu cho Fail2ban qua TypeScript
interface Fail2banJailConfig {
service: string;
maxRetry: number;
banTime: string; // ví dụ: "1h", "1d"
enable: boolean;
}
const sshJail: Fail2banJailConfig = {
service: "sshd",
maxRetry: 3,
banTime: "24h",
enable: true
};
function statusFail2ban(config: Fail2banJailConfig): string {
return `Dịch vụ ${config.service} sẽ ban IP sau ${config.maxRetry} lần thử sai trong ${config.banTime}.`;
}
console.log(statusFail2ban(sshJail));
6. Vô hiệu hóa người dùng Root và sử dụng Sudo
Người dùng root là tài khoản quyền năng nhất nhưng cũng là mục tiêu bị nhắm đến nhiều nhất. Bạn nên tạo một người dùng mới có quyền sudo, sau đó vô hiệu hóa khả năng đăng nhập trực tiếp bằng root qua SSH.
7. Tổng kết: Quy trình làm việc (Workflow) an toàn
Bảo mật là một quá trình liên tục, không phải là thiết lập một lần rồi bỏ đấy. Bạn nên thực hiện kiểm tra định kỳ:
- Kiểm tra danh sách IP bị cấm bởi Fail2ban thường xuyên.
- Sử dụng các công cụ quét mã độc như ClamAV hoặc Lynis để đánh giá sức khỏe server.
- Luôn cập nhật bản vá bảo mật hàng tuần.
Bằng cách thực hiện nghiêm ngặt các bước trên, bạn đã xây dựng được một nền tảng VPS Linux cực kỳ an toàn, sẵn sàng cho việc triển khai các ứng dụng NestJS, ReactJS hay bất kỳ dự án nào của mình mà không phải lo lắng về những đợt tấn công cơ bản từ internet.
