Hướng dẫn cấu hình VPS chống DDoS cơ bản với fail2ban, Cloudflare và iptables
Giới thiệu: Mối đe dọa DDoS trong thời đại số
Trong môi trường kỹ thuật số ngày nay, các cuộc tấn công Từ chối Dịch vụ Phân tán (DDoS) đã trở thành một mối đe dọa phổ biến và nguy hiểm đối với mọi doanh nghiệp trực tuyến. Một cuộc tấn công DDoS thành công có thể làm tê liệt hoàn toàn máy chủ, khiến website ngừng hoạt động, gây thiệt hại nghiêm trọng về doanh thu, uy tín và trải nghiệm khách hàng. Đối với các doanh nghiệp vừa và nhỏ sử dụng VPS (Máy chủ Riêng Ảo), việc không có biện pháp phòng thủ có thể đồng nghĩa với thảm họa.
May mắn thay, bạn không cần phải là một chuyên gia bảo mật hay chi một khoản ngân sách lớn để thiết lập một lớp phòng thủ cơ bản hiệu quả. Bài viết này sẽ hướng dẫn bạn cách kết hợp ba công cụ mạnh mẽ: iptables (tường lửa tích hợp của Linux), fail2ban (công cụ giám sát và chặn tự động) và Cloudflare (dịch vụ proxy và bảo mật) để tạo ra một hệ thống phòng thủ đa tầng, giúp VPS của bạn có khả năng chống chịu tốt hơn trước các cuộc tấn công DDoS cơ bản và quét dò lỗ hổng.
Hiểu về DDoS và Chiến lược Phòng thủ Đa tầng
Một cuộc tấn công DDoS hoạt động bằng cách làm ngập máy chủ mục tiêu với một lượng khổng lồ lưu lượng truy cập giả mạo từ nhiều nguồn (thường là một mạng botnet), khiến tài nguyên (như băng thông, CPU, bộ nhớ) bị cạn kiệt và dịch vụ trở nên không khả dụng với người dùng hợp pháp.
Chiến lược hiệu quả không phải là dựa vào một giải pháp duy nhất, mà là xây dựng nhiều lớp phòng thủ (Defense in Depth):
- Lớp 1 (Edge/Proxy): Cloudflare đóng vai trò như một "tấm khiên" bên ngoài, lọc lưu lượng trước khi nó chạm tới VPS của bạn.
- Lớp 2 (Network/Firewall): iptables trên VPS kiểm soát lưu lượng ở mức mạng, chặn các kết nối đáng ngờ dựa trên IP, cổng và giao thức.
- Lớp 3 (Application/Log Monitoring): fail2ban giám sát nhật ký dịch vụ (như SSH, Nginx) và tự động chặn các IP có hành vi tấn công (như thử mật khẩu nhiều lần).
Sự kết hợp này giúp phân tán rủi ro và tăng cường đáng kể khả năng phòng thủ tổng thể.
Bước 1: Thiết lập và Cấu hình Cơ bản iptables
Iptables là tường lửa mặc định, mạnh mẽ trên hầu hết các bản phân phối Linux. Trước khi bắt đầu, hãy đảm bảo bạn đã kết nối SSH với quyền root hoặc sudo.
1.1. Kiểm tra trạng thái hiện tại
Chạy lệnh sau để xem các quy tắc hiện có:
iptables -L -v -n
1.2. Thiết lập chính sách mặc định (Policy)
Thiết lập chính sách mặc định cho các chain INPUT, FORWARD và OUTPUT. Một cách tiếp cận an toàn là chặn tất cả đầu vào, cho phép tất cả đầu ra.
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT1.3. Cho phép kết nối từ các phiên hiện có và localhost
Điều này đảm bảo các kết nối bạn đang thực hiện (như SSH) không bị ngắt.
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT1.4. Mở các cổng dịch vụ cần thiết
Chỉ mở những cổng thực sự cần thiết. Ví dụ, nếu bạn dùng SSH trên cổng 22 (nên đổi), web trên cổng 80/443:
# Cho phép SSH (thay 22 bằng cổng SSH tùy chỉnh của bạn)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Cho phép HTTP và HTTPS
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT1.5. Giới hạn tỷ lệ kết nối để giảm thiểu Flood
Đây là kỹ thuật chống DDoS cơ bản ở tầng mạng, giới hạn số kết nối mới đến một cổng trong một khoảng thời gian.
# Giới hạn 3 kết nối mới/giây cho cổng 80 (HTTP), vượt quá sẽ bị drop
iptables -A INPUT -p tcp --dport 80 -m limit --limit 3/second --limit-burst 10 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j DROP
# Tương tự cho cổng 443 (HTTPS)
iptables -A INPUT -p tcp --dport 443 -m limit --limit 3/second --limit-burst 10 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j DROP1.6. Lưu cấu hình iptables
Các quy tắc iptables sẽ mất sau khi khởi động lại. Để lưu vĩnh viễn (trên Ubuntu/Debian):
apt-get install iptables-persistent -y
netfilter-persistent saveTrên CentOS/RHEL:
service iptables save
# hoặc
chkconfig iptables onBước 2: Cài đặt và Cấu hình fail2ban
Fail2ban tự động quét nhật ký dịch vụ, tìm kiếm các mẫu thất bại (như đăng nhập SSH sai nhiều lần) và tạm thời chặn địa chỉ IP vi phạm bằng cách thêm quy tắc vào iptables.
2.1. Cài đặt fail2ban
apt-get update && apt-get install fail2ban -y # Ubuntu/Debian
yum install epel-release && yum install fail2ban -y # CentOS/RHEL2.2. Cấu hình cơ bản
Tạo một file cấu hình cục bộ để không bị ghi đè khi cập nhật:
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.localMở file /etc/fail2ban/jail.local bằng trình soạn thản (nano, vim) và điều chỉnh một số thông số trong phần [DEFAULT]:
[DEFAULT]
# Thời gian IP bị cấm (ví dụ: 1 giờ)
bantime = 3600
# Số lần thất bại tối đa trước khi bị ban
maxretry = 5
# Cửa sổ thời gian để đếm số lần thất bại
findtime = 600
# Địa chỉ email nhận cảnh báo (tùy chọn, cần cấu hình sendmail/postfix)
destemail = [email protected]
2.3. Kích hoạt các jail (nhà tù) cần thiết
Trong cùng file jail.local, tìm và kích hoạt các jail cho dịch vụ bạn đang chạy. Đặt enabled = true.
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
[nginx-http-auth] # Nếu bạn dùng Nginx với xác thực
enabled = true
[nginx-botsearch] # Chặn các bot quét lỗ hổng
enabled = true
2.4. Tạo jail tùy chỉnh cho Nginx chống Flood (DDoS cấp ứng dụng)
Tạo file /etc/fail2ban/filter.d/nginx-limit-req.conf:
[Definition]
failregex = ^.*limiting requests.*client: .*$
ignoreregex = Tạo file /etc/fail2ban/jail.d/nginx-limit-req.conf:
[nginx-limit-req]
enabled = true
filter = nginx-limit-req
logpath = /var/log/nginx/error.log # Đường dẫn log thực tế của bạn
maxretry = 10
findtime = 60
bantime = 1800
port = http,https2.5. Khởi động lại fail2ban
systemctl restart fail2ban
systemctl enable fail2banKiểm tra trạng thái: fail2ban-client status.
Bước 3: Tích hợp Cloudflare - Lớp Phòng thủ Biên
Cloudflare hoạt động như một Reverse Proxy. Tất cả lưu lượng truy cập vào website của bạn sẽ đi qua máy chủ Cloudflare trước, nơi nó được lọc sơ bộ, cache, và chỉ có lưu lượng "sạch" mới được chuyển tiếp đến VPS thật của bạn.
3.1. Điều chỉnh iptables để chỉ chấp nhận lưu lượng từ Cloudflare
Đây là bước quan trọng để ẩn địa chỉ IP thật của VPS. Chỉ cho phép kết nối HTTP/HTTPS từ dải IP của Cloudflare.
Đầu tiên, lấy danh sách IP của Cloudflare:
# IPv4
curl -s https://www.cloudflare.com/ips-v4
# IPv6
curl -s https://www.cloudflare.com/ips-v6Sau đó, trong iptables, xóa các quy tắc ACCEPT cũ cho cổng 80/443 và thay thế bằng:
# Cho phép HTTP (80) và HTTPS (443) CHỈ từ IP Cloudflare
# Lặp lại lệnh sau cho từng dải IPv4 bạn nhận được, ví dụ:
iptables -A INPUT -p tcp --dport 80 -s 173.245.48.0/20 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -s 173.245.48.0/20 -j ACCEPT
# ... thêm cho tất cả các dải IP.
# Cuối cùng, DROP mọi thứ khác đến cổng 80/443 (đã có quy tắc từ Bước 1.5).3.2. Cấu hình Web Server (Nginx/Apache) để nhận IP thật của người dùng
Khi dùng Cloudflare, IP kết nối đến VPS là IP của Cloudflare. Bạn cần cấu hình web server để nó nhận đúng IP người dùng từ header CF-Connecting-IP hoặc X-Forwarded-For.
Ví dụ với Nginx: Trong file cấu hình site (ví dụ /etc/nginx/sites-available/your_site), trong block server hoặc location /, thêm:
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 103.21.244.0/22;
# ... thêm tất cả dải IP IPv4 & IPv6 của Cloudflare
real_ip_header CF-Connecting-IP; # Hoặc X-Forwarded-For
# real_ip_recursive on;3.3. Kích hoạt các tính năng bảo mật trên Dashboard Cloudflare
- Under Attack Mode (I'm Under Attack): Bật khi nghi ngờ bị tấn công, nó sẽ hiển thị trang xác thực JavaScript trước khi cho phép truy cập.
- Security Level: Đặt ít nhất là "Medium".
- WAF (Web Application Firewall): Kích hoạt và cấu hình các quy tắc để chặn các mối đe dọa phổ biến.
- Rate Limiting: Thiết lập giới hạn request cho các endpoint quan trọng (có thể tính phí).
Bước 4: Kiểm tra, Giám sát và Bảo trì
4.1. Kiểm tra tính toàn vẹn của cấu hình
- Kiểm tra iptables:
iptables -L -v -n. - Kiểm tra fail2ban:
fail2ban-client status sshd(hoặc jail bạn dùng). - Kiểm tra log fail2ban:
tail -f /var/log/fail2ban.log. - Kiểm tra website vẫn hoạt động bình thường từ bên ngoài.
4.2. Công cụ giám sát
Cài đặt các công cụ để theo dõi tài nguyên và phát hiện bất thường:
# Cài đặt và chạy htop để xem tài nguyên thời gian thực
apt-get install htop -y
htop
# Theo dõi kết nối mạng
apt-get install nethogs iftop -y
iftop -i eth0 # (thay eth0 bằng interface của bạn)4.3. Cập nhật định kỳ
Luôn giữ hệ thống của bạn được cập nhật:
apt-get update && apt-get upgrade -y # Ubuntu/Debian
yum update -y # CentOS/RHELKết luận
Việc cấu hình VPS chống DDoS là một quá trình liên tục, không phải một lần thiết lập là xong. Hệ thống phòng thủ đa tầng sử dụng iptables, fail2ban và Cloudflare mà chúng ta vừa thiết lập cung cấp một nền tảng vững chắc, có khả năng ngăn chặn phần lớn các cuộc tấn công tự động, quét dò và DDoS quy mô nhỏ đến trung bình. Nó giúp giảm tải đáng kể cho VPS, bảo vệ tài nguyên và đảm bảo tính khả dụng của dịch vụ.
Tuy nhiên, hãy nhớ rằng không có giải pháp nào là tuyệt đối. Đối với các cuộc tấn công DDoS quy mô lớn, chuyên nghiệp (Layer 3/4 flood khổng lồ), bạn có thể cần đến các dịch vụ bảo vệ DDoS chuyên nghiệp hơn (như Cloudflare Pro/Business, các nhà cung cấp khác) hoặc sự hỗ trợ từ phía nhà cung cấp VPS/datacenter. Hãy luôn có kế hoạch sao lưu dữ liệu và sẵn sàng ứng phó sự cố. Bắt đầu từ những bước cơ bản này, bạn đã đi đúng hướng để xây dựng một môi trường trực tuyến an toàn và ổn định hơn cho doanh nghiệp của mình.
