Tấn công từ chối dịch vụ (DDoS là gì) là một trong những mối đe dọa nghiêm trọng nhất đối với bất kỳ hệ thống máy chủ nào. Chúng có thể làm tê liệt hoàn toàn website của bạn, gây thiệt hại về doanh thu và uy tín. Đặc biệt, với các máy chủ web sử dụng Apache là gì trên hệ điều hành CentOS là gì 7, việc xây dựng một hàng rào phòng thủ vững chắc là cực kỳ cần thiết. Bảo vệ máy chủ không chỉ giúp duy trì hoạt động kinh doanh ổn định mà còn bảo vệ dữ liệu quan trọng của người dùng. Trong bài viết này, Bùi Mạnh Đức sẽ hướng dẫn bạn chi tiết các phương pháp và công cụ hiệu quả để chống lại các cuộc tấn công DDoS. Chúng ta sẽ cùng nhau tìm hiểu cách cài đặt, cấu hình và tối ưu hóa hệ thống để đảm bảo an toàn tối đa.
Giới thiệu
Trong thế giới số ngày nay, các cuộc tấn công từ chối dịch vụ (Denial of Service – DoS) và từ chối dịch vụ phân tán (DDoS) đã trở thành mối đe dọa thường trực. Chúng nhắm vào việc làm cạn kiệt tài nguyên của máy chủ, khiến người dùng hợp lệ không thể truy cập vào dịch vụ. Đối với các doanh nghiệp và cá nhân vận hành website trên máy chủ Apache và hệ điều hành CentOS 7, việc chủ động phòng chống là yếu tố sống còn.
Bảo vệ máy chủ không chỉ đơn thuần là duy trì hoạt động, mà còn là bảo vệ uy tín thương hiệu và tài sản số của bạn. Một hệ thống bị tấn công có thể dẫn đến mất mát doanh thu, suy giảm lòng tin của khách hàng và ảnh hưởng tiêu cực đến thứ hạng SEO.
Bài viết này sẽ cung cấp một cái nhìn toàn diện về cách bảo vệ máy chủ Apache trên CentOS 7. Chúng ta sẽ khám phá các công cụ mạnh mẽ như mod_evasive, Fail2ban, và cách tinh chỉnh tường lửa Firewall là gì để tạo nên một lá chắn vững chắc. Cấu trúc bài viết sẽ đi từ những khái niệm cơ bản về DDoS, cách nhận biết dấu hiệu tấn công, đến hướng dẫn cấu hình chi tiết và các lưu ý quan trọng khi triển khai trong môi trường thực tế. Hãy cùng nhau bắt đầu hành trình bảo vệ máy chủ của bạn!
Tìm hiểu về DOS và DDOS cũng như môi trường Apache trên CentOS 7
Để chống lại kẻ thù, trước hết chúng ta cần hiểu rõ về chúng. Việc nắm vững khái niệm về tấn công DoS/DDoS và môi trường hệ thống bạn đang vận hành là bước đầu tiên và quan trọng nhất để xây dựng một chiến lược phòng thủ hiệu quả.
Giới thiệu tấn công DOS và DDOS là gì?
Tấn công DoS (Denial of Service) là hình thức tấn công mà một máy tính (kẻ tấn công) gửi một lượng lớn yêu cầu đến một máy chủ (nạn nhân). Mục tiêu là làm quá tải tài nguyên của máy chủ như CPU, RAM, hoặc băng thông mạng, khiến máy chủ không thể xử lý các yêu cầu từ người dùng hợp lệ.
Tấn công DDoS (Distributed Denial of Service) là một biến thể tinh vi và nguy hiểm hơn. Thay vì sử dụng một máy tính, kẻ tấn công điều khiển một mạng lưới lớn các máy tính bị xâm nhập (Botnet là gì) để đồng loạt gửi yêu cầu đến máy chủ nạn nhân. Sự khác biệt cơ bản nằm ở quy mô: DDoS đến từ hàng ngàn, thậm chí hàng triệu nguồn khác nhau, khiến việc ngăn chặn trở nên vô cùng khó khăn.

Các hình thức tấn công phổ biến bao gồm:
- UDP Flood: Gửi một lượng lớn gói tin UDP đến các cổng ngẫu nhiên trên máy chủ, buộc máy chủ phải kiểm tra và phản hồi, gây cạn kiệt tài nguyên.
- SYN Flood: Khai thác lỗ hổng trong quá trình bắt tay ba bước của giao thức TCP, gửi nhiều yêu cầu kết nối nhưng không hoàn tất, làm máy chủ phải chờ và giữ kết nối mở, dẫn đến quá tải.
- HTTP Flood: Gửi vô số yêu cầu HTTP (GET/POST) có vẻ hợp lệ đến máy chủ web, buộc máy chủ phải xử lý và tiêu tốn tài nguyên CPU và bộ nhớ.
Tổng quan về máy chủ Apache và hệ điều hành CentOS 7
Apache HTTP Server, thường gọi là Apache, là một trong những phần mềm máy chủ web phổ biến nhất thế giới. Nó đóng vai trò trung gian, nhận yêu cầu từ trình duyệt của người dùng và trả về nội dung trang web tương ứng. Apache nổi tiếng với sự linh hoạt, cấu trúc module mạnh mẽ và khả năng tùy biến cao, cho phép quản trị viên tinh chỉnh để phù hợp với nhiều nhu cầu khác nhau.

Hệ điều hành CentOS 7 (Community ENTerprise Operating System) là một bản phân phối Linux miễn phí, được xây dựng dựa trên mã nguồn của Red Hat Enterprise Linux (RHEL). CentOS 7 được ưa chuộng trong môi trường máy chủ nhờ tính ổn định, bảo mật cao và vòng đời hỗ trợ dài hạn. Sự kết hợp giữa Apache và CentOS 7 tạo ra một nền tảng mạnh mẽ và đáng tin cậy để vận hành các ứng dụng web. Tuy nhiên, chính sự phổ biến này cũng khiến chúng trở thành mục tiêu hàng đầu của các cuộc tấn công DDoS.
Nhận biết các cuộc tấn công DOS/DDOS trên Apache
Phát hiện sớm một cuộc tấn công là yếu tố quyết định để giảm thiểu thiệt hại. Việc nhận biết các dấu hiệu bất thường và sử dụng công cụ giám sát đúng cách sẽ giúp bạn phản ứng nhanh chóng và chính xác.
Dấu hiệu nhận biết máy chủ đang bị tấn công
Một cuộc tấn công DDoS thường để lại những dấu vết rõ ràng nếu bạn biết cách quan sát. Các dấu hiệu phổ biến nhất bao gồm:
Tăng đột ngột lưu lượng truy cập: Đây là dấu hiệu rõ ràng nhất. Băng thông mạng của bạn có thể tăng vọt một cách bất thường mà không có lý do chính đáng như một chiến dịch marketing lớn. Các công cụ giám sát mạng sẽ hiển thị một biểu đồ dựng đứng thay vì dao động nhẹ nhàng như thường lệ.

Giảm hiệu suất xử lý và thời gian phản hồi lâu: Website của bạn trở nên chậm chạp một cách khó hiểu hoặc thậm chí không thể truy cập (lỗi 503 Service Unavailable). Khi kiểm tra, bạn sẽ thấy CPU của máy chủ hoạt động ở mức 100% trong thời gian dài, ngay cả khi lượng người dùng thực tế không cao.
Log server và các cảnh báo phổ biến: Tệp nhật ký (log) của Apache là một nguồn thông tin quý giá. Hãy kiểm tra tệp access_log và error_log (thường nằm ở /var/log/httpd/). Nếu bạn thấy một số lượng lớn các yêu cầu từ cùng một địa chỉ IP hoặc một dải IP nhỏ trong một khoảng thời gian ngắn, đó là một dấu hiệu đáng ngờ. Các lỗi như “MaxClients reached” trong error log cũng cho thấy máy chủ đang bị quá tải kết nối.
Sử dụng công cụ giám sát để phát hiện tấn công
Việc theo dõi thủ công là không đủ. Bạn cần các công cụ chuyên dụng để giám sát hệ thống liên tục và phát hiện các dấu hiệu tấn công một cách tự động.

Sử dụng lệnh netstat: Đây là công cụ dòng lệnh mạnh mẽ để kiểm tra các kết nối mạng. Một lệnh hữu ích để đếm số lượng kết nối từ mỗi địa chỉ IP đến máy chủ của bạn là:
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr
Lệnh này sẽ liệt kê các địa chỉ IP đang kết nối đến máy chủ, sắp xếp theo số lượng kết nối giảm dần. Nếu một IP có hàng trăm kết nối, đó là một dấu hiệu cảnh báo.
Công cụ tcpdump: Đây là một công cụ phân tích gói tin mạng chuyên sâu. Nó cho phép bạn “bắt” và xem chi tiết lưu lượng truy cập ra vào máy chủ. Dù hơi phức tạp cho người mới bắt đầu, tcpdump cực kỳ hữu ích để xác định loại hình tấn công (ví dụ: SYN flood, UDP flood) bằng cách phân tích các cờ (flag) trong gói tin TCP.
Các phần mềm giám sát khác: Các công cụ như top, htop, và atop giúp bạn theo dõi việc sử dụng CPU, RAM và các tiến trình đang chạy trong thời gian thực. Khi bị tấn công, bạn sẽ thấy tiến trình httpd (Apache) chiếm gần hết tài nguyên CPU. Ngoài ra, các hệ thống giám sát toàn diện như Nagios, Zabbix hay Prometheus có thể được cấu hình để gửi cảnh báo tự động khi phát hiện các chỉ số bất thường.
Cấu hình Apache và các công cụ chống tấn công hiệu quả
Sau khi đã nhận biết được các dấu hiệu tấn công, bước tiếp theo là triển khai các biện pháp phòng thủ. Việc kết hợp cấu hình Apache với các công cụ bảo mật chuyên dụng sẽ tạo ra một lá chắn đa lớp, giúp bảo vệ máy chủ của bạn một cách hiệu quả.
Thiết lập mod_evasive để phòng chống tấn công
mod_evasive là một module quan trọng cho Apache, được thiết kế đặc biệt để chống lại các cuộc tấn công DoS và DDoS ở lớp ứng dụng (HTTP Flood). Nó hoạt động bằng cách theo dõi số lượng yêu cầu từ mỗi địa chỉ IP và tạm thời chặn những IP có hành vi đáng ngờ.
Cài đặt trên CentOS 7:
Trước hết, bạn cần cài đặt EPEL repository, sau đó cài đặt mod_evasive:
sudo yum install epel-release -y
sudo yum install mod_evasive -y
Cấu hình mod_evasive:
Tệp cấu hình chính nằm tại /etc/httpd/conf.d/mod_evasive.conf. Bạn cần mở tệp này và tùy chỉnh các tham số cho phù hợp với website của mình. Dưới đây là các tham số quan trọng:
- DOSHashTableSize: Kích thước bảng băm để theo dõi IP. Giá trị mặc định thường là đủ cho hầu hết các trang web.
- DOSPageCount: Số lượng yêu cầu cho cùng một trang từ một IP trong một khoảng thời gian nhất định (mặc định là 1 giây) trước khi bị chặn. Bạn có thể tăng lên 3-5 để tránh chặn nhầm.
- DOSSiteCount: Tổng số yêu cầu cho bất kỳ đối tượng nào trên trang web từ một IP trong một khoảng thời gian nhất định (mặc định là 1 giây). Giá trị 50-100 là một điểm khởi đầu tốt.
- DOSBlockingPeriod: Thời gian (tính bằng giây) mà một IP sẽ bị chặn sau khi bị phát hiện tấn công. Giá trị 60 (1 phút) là hợp lý để bắt đầu.
- DOSEmailNotify: Bạn có thể cấu hình để
mod_evasive gửi email cảnh báo mỗi khi có một IP bị chặn. Điều này rất hữu ích để theo dõi.

Sau khi chỉnh sửa, hãy khởi động lại Apache để áp dụng thay đổi:
sudo systemctl restart httpd
Sử dụng Firewall và giới hạn kết nối
Tường lửa là lớp phòng thủ đầu tiên, giúp chặn các kết nối độc hại trước khi chúng đến được Apache. Trên CentOS 7, firewalld là công cụ quản lý tường lửa mặc định.
Thiết lập firewalld để giới hạn kết nối (Rate Limit):
Bạn có thể tạo các quy tắc để giới hạn số lượng kết nối mới từ một địa chỉ IP trong một khoảng thời gian nhất định. Ví dụ, để giới hạn mỗi IP chỉ được tạo tối đa 20 kết nối mỗi phút đến cổng HTTP (80), bạn có thể dùng lệnh:
sudo firewall-cmd --permanent --add-rich-rule='rule service name="http" accept limit value="20/m"'
Sau đó, tải lại firewalld:
sudo firewall-cmd --reload
Kết hợp với Fail2ban để khóa IP tấn công tự động:
Fail2ban là một công cụ tuyệt vời hoạt động song song với tường lửa. Nó quét các tệp log (của Apache, SSH,…) để tìm các mẫu hành vi độc hại (như yêu cầu quá nhiều lần, cố gắng đăng nhập sai) và tự động cập nhật quy tắc tường lửa để chặn các IP vi phạm. Đây là một phần quan trọng trong bảo mật để chống lại tấn công.

Cài đặt và cấu hình Fail2ban cho Apache:
1. Cài đặt Fail2ban:
sudo yum install fail2ban
2. Tạo tệp cấu hình tùy chỉnh cho Apache. Tạo một tệp mới tên là apache-ddos.conf trong /etc/fail2ban/jail.d/:
[apache-ddos]
enabled = true
port = http,https
filter = apache-ddos
logpath = /var/log/httpd/access_log
maxretry = 300
findtime = 300
bantime = 600
3. Tạo bộ lọc (filter). Tạo tệp apache-ddos.conf trong /etc/fail2ban/filter.d/ và thêm vào đó biểu thức chính quy để phát hiện các yêu cầu lặp lại.
4. Kích hoạt và khởi động Fail2ban:
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
Bằng cách này, Fail2ban sẽ tự động theo dõi log của Apache và chặn các IP có hơn 300 yêu cầu trong 5 phút (300 giây) trong vòng 10 phút (600 giây). Sự kết hợp giữa mod_evasive, firewalld và Fail2ban tạo ra một hệ thống phòng thủ tự động và cực kỳ mạnh mẽ.
Các vấn đề thường gặp trong quá trình chống DDoS
Triển khai các biện pháp bảo vệ là cần thiết, nhưng không phải lúc nào cũng suôn sẻ. Quá trình này có thể phát sinh một số vấn đề không mong muốn, ảnh hưởng đến người dùng hợp lệ. Hiểu rõ và biết cách xử lý các vấn đề này là chìa khóa để cân bằng giữa an ninh và trải nghiệm người dùng.

mod_evasive gây lỗi chặn nhầm người dùng hợp lệ
Đây là vấn đề phổ biến nhất khi sử dụng mod_evasive. Các quy tắc quá nghiêm ngặt có thể vô tình chặn những người dùng thực sự hoặc các bot máy tìm kiếm quan trọng như Googlebot.
Nguyên nhân:
Một người dùng hợp lệ có thể mở nhiều tab cùng lúc, hoặc một ứng dụng web phức tạp có thể yêu cầu nhiều tài nguyên từ máy chủ trong thời gian ngắn, vô tình kích hoạt ngưỡng chặn của mod_evasive. Tương tự, Googlebot khi thu thập dữ liệu trang web của bạn cũng có thể tạo ra một lượng lớn yêu cầu, dẫn đến việc bị chặn.
Cách khắc phục:
- Điều chỉnh tham số: Đây là cách tiếp cận đầu tiên. Hãy thử tăng giá trị của
DOSPageCount và DOSSiteCount trong tệp cấu hình mod_evasive.conf. Thay vì các giá trị mặc định quá thấp, bạn có thể bắt đầu với DOSPageCount = 5 và DOSSiteCount = 100. Theo dõi log và điều chỉnh dần để tìm ra con số phù hợp với lưu lượng truy cập của bạn.
- Sử dụng Whitelist (Danh sách trắng):
mod_evasive cho phép bạn tạo một danh sách các địa chỉ IP được miễn trừ khỏi việc kiểm tra. Đây là giải pháp lý tưởng cho các IP cố định của văn phòng, các dịch vụ bên thứ ba tin cậy, và đặc biệt là các dải IP của Googlebot. Bạn có thể thêm dòng sau vào tệp cấu hình: DOSWhitelist 127.0.0.1
Để thêm nhiều IP, bạn có thể lặp lại dòng DOSWhitelist hoặc thêm chúng vào cùng một dòng, cách nhau bởi khoảng trắng.
Firewall giới hạn kết nối ảnh hưởng hiệu suất truy cập
Việc giới hạn tốc độ kết nối (rate limiting) bằng tường lửa như firewalld là một biện pháp hiệu quả, nhưng nếu thiết lập quá chặt, nó có thể gây ra tác dụng phụ không mong muốn.
Nguyên nhân:
Khi bạn đặt giới hạn kết nối quá thấp (ví dụ: 5 kết nối mỗi phút), những người dùng có đường truyền mạng không ổn định hoặc những trang web có nhiều tài nguyên (hình ảnh, script, CSS) có thể bị tường lửa làm chậm hoặc thậm chí từ chối kết nối. Điều này tạo ra trải nghiệm tồi tệ, khiến người dùng cảm thấy trang web của bạn rất chậm.
Cách khắc phục:
- Cân bằng giữa bảo mật và trải nghiệm người dùng: Không có một con số hoàn hảo cho tất cả mọi người. Bạn cần phải thử nghiệm. Bắt đầu với một giới hạn tương đối cao (ví dụ: 30-40 kết nối/phút) và theo dõi phản hồi của người dùng cũng như hiệu suất máy chủ. Nếu vẫn thấy dấu hiệu tấn công, hãy giảm dần.
- Áp dụng quy tắc một cách có chọn lọc: Thay vì áp dụng giới hạn kết nối trên toàn bộ trang web, hãy xem xét áp dụng chúng cho các khu vực nhạy cảm hơn. Ví dụ, trang đăng nhập (
wp-login.php trên WordPress), các biểu mẫu tìm kiếm, hoặc các API endpoint là những mục tiêu tấn công phổ biến. Bạn có thể tạo các quy tắc tường lửa riêng biệt và nghiêm ngặt hơn cho các URL này trong khi giữ các quy tắc thoáng hơn cho phần còn lại của trang web.

Những lưu ý quan trọng khi bảo vệ máy chủ trong môi trường sản xuất
Việc triển khai các giải pháp chống DDoS trong môi trường thực tế (production) đòi hỏi sự cẩn trọng và tuân thủ các quy tắc vận hành nghiêm ngặt. Một sai sót nhỏ cũng có thể gây gián đoạn dịch vụ, ảnh hưởng đến hoạt động kinh doanh. Dưới đây là những lưu ý quan trọng bạn không thể bỏ qua.
Cập nhật thường xuyên phần mềm và bản vá bảo mật:
Đây là nguyên tắc vàng trong quản trị hệ thống. Các lỗ hổng bảo mật luôn được phát hiện trong phần mềm, từ hệ điều hành CentOS, máy chủ web Apache cho đến các ứng dụng bạn chạy trên đó. Kẻ tấn công thường khai thác các lỗ hổng đã được biết đến nhưng chưa được vá. Hãy đảm bảo bạn thường xuyên chạy lệnh sudo yum update để cập nhật hệ thống lên phiên bản mới nhất.
Sao lưu cấu hình trước khi thay đổi:
Không bao giờ thực hiện thay đổi trực tiếp trên máy chủ sản xuất mà không có bản sao lưu. Trước khi chỉnh sửa bất kỳ tệp cấu hình nào (httpd.conf, mod_evasive.conf, quy tắc firewalld, hay jail.conf của Fail2ban), hãy tạo một bản sao của tệp đó. Ví dụ: cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.bak. Nếu có sự cố xảy ra, bạn có thể nhanh chóng khôi phục lại cấu hình cũ.
Kiểm tra kỹ lưỡng sau khi cấu hình chống tấn công:
Sau khi áp dụng một thay đổi, đừng cho rằng mọi thứ đều ổn. Hãy tự mình kiểm tra trang web từ nhiều mạng và thiết bị khác nhau. Sử dụng các công cụ kiểm tra tốc độ trang web để đảm bảo hiệu suất không bị ảnh hưởng tiêu cực. Nhờ đồng nghiệp hoặc bạn bè truy cập thử để xác nhận rằng bạn không vô tình chặn người dùng hợp lệ.

Kết hợp nhiều lớp bảo vệ nâng cao tính an toàn:
Không có một công cụ duy nhất nào là giải pháp thần kỳ. An ninh mạng hiệu quả nhất được xây dựng dựa trên nguyên tắc “phòng thủ theo chiều sâu” (defense in depth). Hãy kết hợp nhiều lớp bảo vệ khác nhau:
- Tường lửa mạng (Network Firewall): Lớp ngoài cùng, chặn các truy cập không mong muốn ở cấp độ mạng.
- Tường lửa máy chủ (firewalld/
iptables): Giới hạn kết nối và chặn IP độc hại.
- Fail2ban là gì: Tự động hóa việc chặn IP dựa trên phân tích log.
mod_evasive: Bảo vệ Apache ở lớp ứng dụng.
- CDN/WAF (Content Delivery Network/Web Application Firewall): Sử dụng các dịch vụ như Cloudflare hay Akamai. Họ có hạ tầng khổng lồ để hấp thụ các cuộc tấn công DDoS quy mô lớn trước khi chúng chạm tới máy chủ của bạn. Đây là lớp bảo vệ mạnh mẽ và được khuyến khích nhất cho các hệ thống quan trọng.
Việc kết hợp các lớp này tạo ra một hệ thống phòng thủ vững chắc, khiến kẻ tấn công khó khăn hơn rất nhiều trong việc hạ gục máy chủ của bạn.
Kết luận
Qua bài viết này, chúng ta đã cùng nhau đi qua một hành trình chi tiết để xây dựng một hệ thống phòng thủ vững chắc chống lại các cuộc tấn công DoS và DDoS cho máy chủ Apache trên CentOS 7. Từ việc tìm hiểu bản chất của các cuộc tấn công, nhận biết dấu hiệu, cho đến việc triển khai các công cụ mạnh mẽ như mod_evasive, firewalld và Fail2ban là gì, bạn đã được trang bị những kiến thức cần thiết để bảo vệ tài sản số của mình.

Tóm lại, các bước chính bao gồm: giám sát liên tục để phát hiện sớm các dấu hiệu bất thường, cấu hình mod_evasive để ngăn chặn tấn công ở lớp ứng dụng, thiết lập firewalld để giới hạn kết nối và kết hợp với Fail2ban để tự động hóa việc chặn IP độc hại. Quan trọng hơn cả, hãy luôn nhớ rằng phòng chống tấn công là một quá trình liên tục, không phải là một công việc làm một lần rồi thôi. Việc chủ động cập nhật hệ thống, sao lưu cấu hình cẩn thận và kiểm tra kỹ lưỡng sau mỗi thay đổi là yếu tố then chốt để duy trì sự an toàn và ổn định cho máy chủ.
Bùi Mạnh Đức khuyến khích bạn áp dụng ngay những phương pháp đã được trình bày. Đừng chờ đến khi máy chủ bị tấn công mới hành động. An toàn của hệ thống nằm trong tay bạn. Hãy thường xuyên theo dõi tình trạng máy chủ, tìm hiểu thêm từ các tài liệu chính thức và không ngừng nâng cao kiến thức để đối phó với các mối đe dọa ngày càng tinh vi trong thế giới số.