Chống DDoS Cơ Bản Cho VPS
Giới Thiệu
Các cuộc tấn công từ chối dịch vụ phân tán (DDoS) là một trong những mối đe dọa phổ biến nhất đối với các máy chủ và dịch vụ trực tuyến. Mục tiêu của tấn công DDoS là làm quá tải tài nguyên của máy chủ, khiến dịch vụ trở nên không khả dụng hoặc hoàn toàn sập. Đối với một VPS (máy chủ riêng ảo), việc không có biện pháp bảo vệ DDoS cơ bản có thể dẫn đến gián đoạn dịch vụ, mất dữ liệu và thiệt hại về danh tiếng.
Hướng dẫn này sẽ trang bị cho bạn các kiến thức và bước thực hiện để triển khai một lớp phòng thủ DDoS cơ bản nhưng hiệu quả cho VPS của bạn, tập trung vào các công cụ miễn phí và có sẵn trên hầu hết các bản phân phối Linux. ⚠️ Lưu ý rằng các biện pháp này giúp chống lại các cuộc tấn công DDoS cấp độ thấp và trung bình; đối với các cuộc tấn công quy mô lớn, bạn có thể cần đến các dịch vụ chống DDoS chuyên nghiệp.
📋 Thời gian: 30 phút | Độ khó: Cơ bản
Yêu Cầu
Để thực hiện hướng dẫn này, bạn cần:
- Một VPS đang hoạt động với hệ điều hành Linux (ví dụ: Ubuntu, Debian, CentOS, RHEL).
- Quyền truy cập SSH vào VPS với tài khoản root hoặc một user có quyền
sudo. - Kiến thức cơ bản về sử dụng dòng lệnh Linux (CLI).
Các Bước Thực Hiện
Bước 1: Cập nhật Hệ thống và Cài đặt Công cụ Cần thiết
Việc đầu tiên và quan trọng nhất là đảm bảo hệ thống của bạn được cập nhật đầy đủ và cài đặt các công cư bảo mật cần thiết.
# Đối với hệ thống dựa trên Debian/Ubuntu
sudo apt update # Cập nhật danh sách gói
sudo apt upgrade -y # Nâng cấp các gói đã cài đặt lên phiên bản mới nhất
# Đối với hệ thống dựa trên CentOS/RHEL
# sudo yum update -y # Cập nhật các gói đã cài đặt
# sudo dnf update -y # Hoặc dùng dnf cho các phiên bản CentOS/RHEL mới hơn
Tiếp theo, chúng ta sẽ cài đặt Firewall (UFW cho Debian/Ubuntu hoặc Firewalld cho CentOS/RHEL) và Fail2Ban.
# Cài đặt UFW (Uncomplicated Firewall) cho Debian/Ubuntu
sudo apt install ufw -y
# Cài đặt Firewalld cho CentOS/RHEL (nếu chưa có)
# sudo yum install firewalld -y
# sudo systemctl start firewalld
# sudo systemctl enable firewalld
# Cài đặt Fail2Ban
sudo apt install fail2ban -y # Đối với Debian/Ubuntu
# sudo yum install epel-release -y && sudo yum install fail2ban -y # Đối với CentOS/RHEL
Bước 2: Cấu hình Firewall (UFW hoặc Firewalld)
Firewall là tuyến phòng thủ đầu tiên, giúp kiểm soát lưu lượng truy cập mạng đến và đi từ VPS của bạn. Chúng ta sẽ cấu hình firewall để chỉ cho phép các cổng dịch vụ cần thiết và chặn tất cả các lưu lượng khác.
💡 Quan trọng: Đảm bảo bạn đã mở cổng SSH (mặc định là 22) trước khi kích hoạt firewall để tránh bị khóa khỏi VPS.
Cấu hình UFW (cho Debian/Ubuntu)
# Cho phép cổng SSH (mặc định là 22). Nếu bạn dùng cổng SSH khác, hãy thay thế 22 bằng số cổng đó.
sudo ufw allow 22/tcp comment 'Cho phep truy cap SSH'
# Cho phép cổng HTTP (80) và HTTPS (443) nếu bạn đang chạy web server
sudo ufw allow 80/tcp comment 'Cho phep truy cap HTTP'
sudo ufw allow 443/tcp comment 'Cho phep truy cap HTTPS'
# Nếu bạn có các dịch vụ khác trên các cổng cụ thể, hãy thêm chúng vào đây.
# Ví dụ: sudo ufw allow 3306/tcp comment 'Cho phep truy cap MySQL'
# Mặc định chặn tất cả các kết nối đến và cho phép tất cả các kết nối đi
sudo ufw default deny incoming
sudo ufw default allow outgoing
# Kích hoạt UFW
sudo ufw enable
# Kiểm tra trạng thái của UFW
sudo ufw status verbose
# Nếu bạn muốn tắt UFW sau này: sudo ufw disable
⚠️ Sau khi kích hoạt sudo ufw enable, bạn sẽ được hỏi xác nhận. Gõ y và Enter.
Cấu hình Firewalld (cho CentOS/RHEL)
# Khởi động và kích hoạt Firewalld
sudo systemctl start firewalld
sudo systemctl enable firewalld
# Cho phép cổng SSH (mặc định là 22). Thay thế nếu bạn dùng cổng khác.
sudo firewall-cmd --permanent --add-service=ssh
# Cho phép cổng HTTP (80) và HTTPS (443)
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
# Nếu bạn có các dịch vụ khác trên các cổng cụ thể, hãy thêm chúng vào đây.
# Ví dụ: sudo firewall-cmd --permanent --add-port=3306/tcp
# Tải lại cấu hình Firewalld để áp dụng thay đổi
sudo firewall-cmd --reload
# Kiểm tra trạng thái và các quy tắc đã thêm
sudo firewall-cmd --list-all
Bước 3: Cài đặt và Cấu hình Fail2Ban
Fail2Ban là một công cụ giúp chặn các địa chỉ IP có hành vi độc hại, như thử đăng nhập SSH sai nhiều lần (brute-force) hoặc quét cổng. Nó hoạt động bằng cách quét các file log và tự động thêm các quy tắc chặn vào firewall.
# Tạo một bản sao của file cấu hình mặc định để tùy chỉnh
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
# Mở file jail.local để chỉnh sửa
sudo nano /etc/fail2ban/jail.local
Trong file jail.local, bạn sẽ thấy nhiều phần cấu hình. Dưới đây là một số thiết lập quan trọng bạn nần xem xét:
# --- Cấu hình mặc định cho tất cả các "jails" ---
[DEFAULT]
ignoreip = 127.0.0.1/8 ::1 # Các địa chỉ IP sẽ không bị chặn (ví dụ: IP của bạn)
bantime = 1h # Thời gian một IP bị chặn (ví dụ: 1 giờ = 3600 giây)
findtime = 10m # Thời gian mà các lỗi phải xảy ra để bị chặn (ví dụ: 10 phút)
maxretry = 5 # Số lần thử sai tối đa trước khi bị chặn
# --- Kích hoạt và cấu hình jail cho SSH ---
[sshd]
enabled = true # Kích hoạt jail cho dịch vụ SSH
port = ssh # Cổng SSH (mặc định 22)
logpath = %(sshd_log)s # Đường dẫn file log của SSH (thường là /var/log/auth.log hoặc /var/log/secure)
backend = %(sshd_backend)s # Phương pháp theo dõi log
# --- Bạn có thể kích hoạt các jails khác nếu cần (ví dụ: cho web server) ---
# [nginx-http-auth]
# enabled = true
# port = http,https
# logpath = /var/log/nginx/error.log
# [apache-auth]
# enabled = true
# port = http,https
# logpath = /var/log/apache2/error.log # hoặc /var/log/httpd/error_log
Sau khi chỉnh sửa, lưu file và thoát (Ctrl+X, Y, Enter).
# Khởi động lại dịch vụ Fail2Ban để áp dụng cấu hình mới
sudo systemctl restart fail2ban
# Kiểm tra trạng thái của Fail2Ban
sudo systemctl status fail2ban
# Kiểm tra các jails đang hoạt động và các IP bị chặn
sudo fail2ban-client status
sudo fail2ban-client status sshd # Kiểm tra trạng thái cụ thể của jail sshd
✅ Fail2Ban giờ đây sẽ tự động giám sát các file log và chặn các IP có hành vi đáng ngờ.
Bước 4: Tối ưu hóa Cấu hình Kernel (sysctl)
Bạn có thể thực hiện một số tinh chỉnh cấu hình kernel để tăng cường khả năng chống chịu của VPS trước các cuộc tấn công DDoS, đặc biệt là SYN Flood.
# Mở file cấu hình sysctl để chỉnh sửa
sudo nano /etc/sysctl.conf
Thêm các dòng sau vào cuối file:
# Bảo vệ chống SYN Flood
net.ipv4.tcp_syncookies = 1 # Bật SYN cookies để chống SYN flood
net.ipv4.tcp_max_syn_backlog = 2048 # Tăng hàng đợi cho các kết nối SYN
net.ipv4.tcp_synack_retries = 2 # Giảm số lần thử lại SYN-ACK
# Giảm thời gian chờ TIME_WAIT
net.ipv4.tcp_tw_reuse = 1 # Cho phép tái sử dụng các ổ cắm TIME_WAIT
net.ipv4.tcp_tw_recycle = 0 # Tắt tái chế TIME_WAIT (có thể gây vấn đề với NAT)
# Tăng giới hạn file descriptor
fs.file-max = 65536 # Tăng số lượng file tối đa mà hệ thống có thể mở
# Tắt phản hồi ICMP broadcast
net.ipv4.icmp_echo_ignore_broadcasts = 1
# Bảo vệ chống spoofing (kiểm tra ngược đường dẫn)
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# Tắt chấp nhận các gói tin nguồn định tuyến
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
# Giới hạn tỷ lệ ICMP
net.ipv4.icmp_ratelimit = 100
net.ipv4.icmp_ratemask = 88089
Lưu file và thoát (Ctrl+X, Y, Enter).
# Áp dụng các thay đổi mà không cần khởi động lại
sudo sysctl -p
✅ Các tinh chỉnh kernel đã được áp dụng, giúp VPS của bạn mạnh mẽ hơn trước một số kiểu tấn công mạng.
Troubleshooting
Dưới đây là một số vấn đề thường gặp và cách khắc phục:
-
Bị khóa khỏi VPS sau khi cấu hình Firewall:
- Nguyên nhân: Bạn đã kích hoạt firewall mà chưa mở cổng SSH.
- Giải pháp: Truy cập VPS thông qua giao diện console (thường có sẵn từ nhà cung cấp VPS của bạn). Từ đó, bạn có thể chỉnh sửa lại cấu hình firewall để mở cổng SSH hoặc tắt hoàn toàn firewall (
sudo ufw disablehoặcsudo systemctl stop firewalld). ⚠️ Luôn kiểm tra kỹ các quy tắc firewall trước khi kích hoạt.
-
Fail2Ban không chặn IP hoặc dịch vụ không hoạt động:
- Nguyên nhân:
logpathtrong filejail.localkhông đúng.- Dịch vụ Fail2Ban chưa chạy.
- Cấu hình
findtimehoặcmaxretryquá cao.
- Giải pháp:
- Kiểm tra log của Fail2Ban để xem có lỗi không:
sudo tail -f /var/log/fail2ban.log. - Đảm bảo đường dẫn file log của dịch vụ bạn muốn bảo vệ là chính xác.
- Xác minh dịch vụ Fail2Ban đang chạy:
sudo systemctl status fail2ban. - Điều chỉnh
bantime,findtime,maxretrycho phù hợp.
- Kiểm tra log của Fail2Ban để xem có lỗi không:
- Nguyên nhân:
-
Dịch vụ web (hoặc dịch vụ khác) không truy cập được sau khi cấu hình Firewall:
- Nguyên nhân: Cổng của dịch vụ đó chưa được mở trong firewall.
- Giải pháp:
- Kiểm tra các cổng đang mở:
sudo ufw statushoặcsudo firewall-cmd --list-all. - Thêm quy tắc cho phép cổng của dịch vụ (
sudo ufw allow <port>/tcphoặcsudo firewall-cmd --permanent --add-port=<port>/tcp). - Nhớ tư�i lại firewall (
sudo ufw reloadhoặcsudo firewall-cmd --reload).
- Kiểm tra các cổng đang mở:
Kết Luận
Bằng cách thực hiện các bước trong hướng dẫn này, bạn đã thiết lập một lớp bảo vệ cơ bản nhưng hiệu quả cho VPS của mình chống lại các cuộc tấn công DDoS phổ biến và các hành vi độc hại khác. Chúng ta đã cấu hình firewall để hạn chế truy cập, triển khai Fail2Ban để tự động chặn các IP tấn công, và tối ưu hóa kernel để tăng khả năng chịu tải của hệ thống.
Best practices để duy trì bảo mật cho VPS của bạn:
- Giám sát liên tục: Thường xuyên kiểm tra log của hệ thống và các công cụ bảo mật (Fail2Ban, firewall) để phát hiện sớm các dấu hiệu bất thường.
- Cập nhật định kỳ: Luôn giữ hệ điều hành và tất cả các gói phần mềm được cập nhật để vá các lỗ hổng bảo mật.
- Mật khẩu mạnh và SSH Keys: Sử dụng mật khẩu mạnh và duy nhất, kết hợp với xác thực bằng SSH keys thay vì mật khẩu để tăng cường bảo mật đăng nhập.
- Backup dữ liệu: Thường xuyên sao lưu dữ liệu quan trọng để có thể khôi phục nhanh chóng trong trường hợp xấu nhất.
- Dịch vụ chuyên nghiệp: Đối với các ứng dụng quan trọng hoặc khi đối mặt với các cuộc tấn công DDoS quy mô lớn, hãy cân nhắc sử dụng các dịch vụ chống DDoS chuyên nghiệp từ nhà cung cấp hoặc các giải pháp như Cloudflare.
Việc bảo mật là một quá trình liên tục. Hãy luôn cảnh giác và chủ động trong việc bảo vệ tài sản số của bạn.