Apache là máy chủ web phổ biến nhưng dễ trở thành mục tiêu của các cuộc tấn công DoS và DDoS, gây gián đoạn dịch vụ. Trong bài viết này, mình sẽ hướng dẫn bạn cách cài đặt, cấu hình và sử dụng mod_evasive trên server để chống tấn công DoS và DDoS cho Apache trên CentOS 7. Điều này giúp tăng cường bảo mật và đảm bảo hệ thống hoạt động ổn định.
Những điểm chính
- Giới thiệu về mod_evasive (mod_dosevasive): Hiểu được khái niệm mod_evasive trong việc bảo vệ máy chủ web Apache khỏi các cuộc tấn công DoS/DDoS và Brute-force và nắm được cách thức hoạt động của module này.
- Yêu cầu hệ thống: Biết được các yêu cầu cần thiết để cài đặt và sử dụng mod_evasive trên CentOS 7, chuẩn bị môi trường phù hợp trước khi thực hiện cài đặt.
- Hướng dẫn chống tấn công DOS và DDoS cho Apache trên Centos 7: Cung cấp hướng dẫn chi tiết từng bước từ cài đặt, cấu hình, kiểm tra.
- Giới thiệu về Vietnix: Biết được Vietnix là một nhà cung cấp dịch vụ hosting và VPS uy tín tại Việt Nam.
Module Apache mod_evasive là gì?
Module Apache mod_evasive, còn được gọi là mod_dosevasive, là một công cụ mạnh mẽ giúp bảo vệ web server Apache trước các cuộc tấn công DoS, DDoS (tấn công từ chối dịch vụ phân tán) và brute force. Module này không chỉ giúp phát hiện, ngăn chặn các yêu cầu độc hại mà còn có thể gửi cảnh báo qua email hoặc ghi nhận vào hệ thống syslog để quản trị viên kịp thời xử lý.

Cách hoạt động của mod_evasive:
Module này theo dõi các yêu cầu từ địa chỉ IP và URI, sau đó tự động từ chối truy cập nếu phát hiện:
- Một IP gửi quá nhiều yêu cầu đến cùng một trang trong vài giây.
- Thực hiện đồng thời hơn 50 yêu cầu trên cùng một tiến trình con mỗi giây.
- Tiếp tục gửi yêu cầu trong khi đang bị tạm thời chặn.
Nếu vi phạm một trong những điều kiện trên, hệ thống sẽ trả về mã lỗi 403, đồng thời ghi nhận và có thể chặn IP đó. Ngoài ra, mod_evasive còn cho phép gửi thông báo email hoặc thực thi lệnh để xử lý IP bị chặn, giúp bảo vệ server hiệu quả hơn.
Yêu cầu để chống tấn công DOS và DDoS cho Apache trên Centos 7
Để thực hiện các bước trong bài viết này, bạn cần đạt được những yêu cầu sau:
- Máy chủ CentOS 7 64 bit (có thể hoạt động với CentOS 6).
- Người dùng non-root có quyền sudo.
- Web server Apache đang chạy trên máy chủ.
Nếu bạn chưa sở hữu máy chủ hoặc đang tìm kiếm giải pháp thuê máy chủ tiết kiệm chi phí thì VPS Việt Nam tại Vietnix sẽ là giải pháp phù hợp. VPS Vietnix cung cấp các gói dịch vụ chất lượng cao với nhiều tùy chọn theo nhu cầu sử dụng của khách hàng như VPS Giá Rẻ, VPS SSD, VPS AMD, VPS NVMe, VPS GPU.
Vietnix hỗ trợ khách hàng 247 với đội ngũ kỹ thuật viên giàu kinh nghiệm để giải quyết các vấn đề liên quan đến máy chủ. Do đó bạn có thể yên tâm sử dụng VPS Vietnix để phát triển và vận hành các dịch vụ trên mạng. Liên hệ để được tư vấn chi tiết nhất.
Hướng dẫn chống tấn công DOS và DDoS cho Apache trên Centos 7
Bước 1: Cài đặt mod_evasive
Trong bước này, bạn sẽ cài đặt các package required cho mod_evasive hoạt động. Sau đó là cài đặt mod_evasive.
Đầu tiên, bạn cần cài đặt repo yum EPEL (Extra Packages for Enterprise Linux) trên server. EPEL là một nhóm lợi ích đặc biệt của Fedora tạo ra nhằm duy trì và quản lý một bộ các gói phần mềm mã nguồn mở chất lượng cao cho Enterprise Linux. Hãy chạy lệnh sau để cài đặt và kích hoạt kho lưu trữ EPEL trên server của bạn.
Trên CentOS 7, bạn hãy gõ lệnh:
sudo rpm -ivh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
Trên CentOS 6:
sudo rpm -ivh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
Hãy xác minh kho lưu trữ EPEL đã được kích hoạt bằng cách sử dụng lệnh:
sudo yum repolist
Nếu kho lưu trữ được kích hoạt, bạn sẽ thấy nó được liệt kê trong output:
epel/x86_64
Tiếp theo, bạn cần bảo vệ các base package từ EPEL bằng cách sử dụng plugin yum protectbase:
sudo yum install yum-plugin-protectbase.noarch -y
Mục đích của plugin protectbase là bảo vệ một số kho lưu trữ yum khỏi các cập nhật từ những kho lưu trữ khác. Các gói trong kho được bảo vệ sẽ không bị cập nhật hoặc ghi đè bởi các gói không được bảo vệ, ngay cả khi chúng có phiên bản mới.
Bây giờ bạn đã sẵn sàng cài đặt mod_evasive. Chạy lệnh sau để cài đặt:
sudo yum install mod_evasive -y
Bước 2: Xác nhận cài đặt
Khi mod_evasive đã được cài đặt, bạn cần xác nhận rằng file cấu hình cũng đã được cài đặt và module đang được tải.
Trong quá trình này, file cấu hình mod_evasive /etc/httpd/conf.d/mod_evasive.conf
đã được thêm vào. Chạy lệnh sau để xác nhận:
sudo ls -al /etc/httpd/conf.d/mod_evasive.conf
Output sẽ tương tự như sau:
-rw-r--r-- 1 root root 3473 Jul 21 01:41 /etc/httpd/conf.d/mod_evasive.conf
Mặc định, dòng LoadModule
sẽ được thêm vào đầu file cấu hình mod_evasive.conf
. Mở file và thêm dòng này nếu chưa có. Dòng này cho phép web server Apache tải và sử dụng module mod_evasive.
Trên CentOS 7 sẽ có dạng:
LoadModule evasive20_module modules/mod_evasive24.so
Trên CentOS 6, dòng này sẽ như sau:
LoadModule evasive20_module modules/mod_evasive20.so
Hãy liệt kê các module đã tải cho web server Apache và tìm mod_evasive bằng lệnh:
sudo httpd -M | grep evasive
Output sẽ hiển thị như sau:
evasive20_module (shared)
Bước 3: Cấu hình mod_evasive
Sau khi cài đặt hoàn tất và được xác nhận, bạn cần xem xét cấu hình của module. mod_evasive có thể tùy chỉnh dễ dàng thông qua file cấu hình mod_evasive.conf
.
Một trong những tùy chọn cấu hình bạn cần thay đổi là DOSEmailNotify
. Tùy chọn này cho phép máy chủ gửi email thông báo đến địa chỉ email đã chỉ định mỗi khi một địa chỉ IP nào đó được đưa vào danh sách đen của máy chủ. Nội dung email sẽ hiển thị mod_evasive HTTP Blacklisted 111.111.111.111
.
Ví dụ, nếu bạn muốn gửi cảnh báo mod_evasive đến địa chỉ vietnix@example.com
, hãy chỉnh sửa file bằng lệnh:
sudo nano /etc/httpd/conf.d/mod_evasive.conf
Bỏ chú thích dòng DOSEmailNotify
bằng cách loại bỏ dấu # ở đầu dòng và thay đổi địa chỉ email thành của bạn:
DOSEmailNotify vietnix@example.com
Một tham số khác mà bạn có thể muốn thiết lập là DOSWhitelist
. Khi sử dụng tùy chọn này, địa chỉ IP của các client đáng tin cậy có thể được thêm vào danh sách trắng để đảm bảo họ sẽ không bị từ chối truy cập. Mục đích của danh sách trắng là bảo vệ phần mềm, script, local search bot hoặc các tool tự động không bị từ chối khi yêu cầu lượng dữ liệu lớn từ máy chủ.
Để thêm vào danh sách trắng một địa chỉ IP, ví dụ như 111.111.111.111, bạn hãy thêm một mục vào file cấu hình như sau:
DOSWhitelist 111.111.111.111
Wildcards có thể được sử dụng đến 3 octet cuối cùng của địa chỉ IP nếu cần thiết.
Để cho phép truy cập từ nhiều địa chỉ IP khác nhau, bạn có thể thêm các dòng DOSWhitelist trong file cấu hình như sau:
DOSWhitelist 111.111.111.111
DOSWhitelist 222.222.222.222
DOSPageCount
và DOSSiteCount
là hai tham số nên thay đổi để tránh trường hợp khách hàng bị chặn truy cập không cần thiết.
DOSPageCount
là giới hạn cho số lượng yêu cầu tối đa đến một trang từ một địa chỉ IP trong một khoảng thời gian nhất định (thường là 1 giây). Khi ngưỡng cho khoảng thời gian đó đã vượt quá, địa chỉ IP của client sẽ được thêm vào danh sách bị chặn. Giá trị mặc định được đặt khá thấp ở mức 2. Bạn có thể thay đổi thành giá trị cao hơn, ví dụ như 20, bằng cách chỉnh sửa trong /etc/httpd/conf.d/mod_evasive.conf
như sau:
DOSPageCount 20
DOSSiteCount
giới hạn tổng số yêu cầu được thực hiện đến cùng một trang web theo địa chỉ IP trong một khoảng thời gian nhất định. Theo mặc định, thời gian này là 1 giây. Để thay đổi nó thành một giá trị lớn hơn như 100 giây, bạn hãy gõ lệnh sau:
DOSSiteCount 100
Còn một số tham số khác bạn có thể thay đổi để trang web đạt được hiệu suất tốt hơn.
Một trong số đó là DOSBlockingPeriod
. Đây là thời gian (tính bằng giây) mà một client (địa chỉ IP) sẽ bị chặn nếu được thêm vào danh sách bị chặn. Trong thời gian này, tất cả các yêu cầu tiếp theo từ client sẽ dẫn đến lỗi 403 (Forbidden) và timer sẽ được đặt lại (mặc định là 10 giây).
Ví dụ, nếu bạn muốn tăng thời gian chặn lên 300 giây, hãy gõ lệnh sau:
DOSBlockingPeriod 300
Một tham số khác là DOSLogDir
. Đây là là một tùy chọn cấu hình được sử dụng để chỉ định thư mục tạm thời được sử dụng bởi mod_evasive. Theo mặc định, thư mục /tmp
sẽ được sử dụng để lưu trữ các khóa. Tuy nhiên điều này có thể gây ra các vấn đề bảo mật nếu hệ thống của bạn cho phép người dùng shell truy cập vào thư mục này. Nếu có người dùng shell non-privileged, bạn nên tạo một thư mục chỉ có thể ghi bởi người dùng Apache (thường là apache) và đặt tham số này trong file cấu hình mod_evasive.conf.
Ví dụ, để đặt thư mục được sử dụng bởi mod_evasive thành /var/log/mod_evasive
, hãy tạo thư mục bằng cách sử dụng lệnh:
sudo mkdir /var/log/mod_evasive
Tiếp theo, đặt sở hữu cho người dùng apache
:
sudo chown -R apache:apache /var/log/mod_evasive
Sau đó, chỉnh sửa cấu hình mod_evasive và thay đổi thư mục như sau:
DOSLogDir "/var/log/mod_evasive"
Tham số tiếp theo là DOSSystemCommand
. Nếu một giá trị được đặt, lệnh sẽ được thực thi bất cứ khi nào một địa chỉ IP được đưa vào danh sách đen. Khi sử dụng tham số này, bạn có thể tích hợp mod_evasive với tường lửa hoặc các lệnh shell khác trên server để chặn các địa chỉ IP được đưa vào danh sách đen.
Bước 4: Tải module mod_evasive
Sau khi đã thay đổi file cấu hình, bạn cần khởi động lại web server Apache để thay đổi có hiệu lực. Hãy chạy lệnh sau để khởi động lại Apache.
Trên CentOS 7, bạn hãy dùng lệnh:
sudo systemctl restart httpd.service
Trên CentOS 6, dùng lệnh sau:
sudo service httpd restart
Lưu ý
mod_evasive có thể xung đột với FrontPage Server Extensions. Bạn nên kiểm tra cài đặt của web server Apache để đảm bảo mod_evasive hoạt động tốt.
Bước 5: Kiểm tra mod_evasive
Hãy thực hiện một bài test ngắn để xem module hoạt động đúng cách hay không. Bạn sẽ sử dụng một script perl test.pl được viết bởi các nhà phát triển mod_evasive. Để thực thi script, bạn cần cài đặt gói perl
trên server:
sudo yum install -y perl
Test script được cài đặt cùng với mod_evasive tại đường dẫn sau:
/usr/share/doc/mod_evasive-1.10.1/test.pl
Mặc định, test script yêu cầu cùng một trang từ web server Apache 100 lần liên tiếp để kích hoạt mod_evasive. Trong bước trước, bạn đã sửa đổi mod_evasive để chấp nhận nhiều yêu cầu hơn trong một giây đến cùng một trang. Bạn cần thay đổi script để thành 200 yêu cầu liên tiếp thay vì 100 để đảm bảo tất cả các phương thức thông báo của mod_evasive được kích hoạt.
Chỉnh sửa /usr/share/doc/mod_evasive-1.10.1/test.pl
bằng lệnh dưới đây:
sudo nano /usr/share/doc/mod_evasive-1.10.1/test.pl
Sau đó, bạn tìm dòng sau:
for(0..100) {
Tiếp theo, thay 100
bằng 200
:
for(0..200) {
Cuối cùng, lưu file và thoát.
Để thực thi script, bạn chạy lệnh sau:
sudo perl /usr/share/doc/mod_evasive-1.10.1/test.pl
Bạn nên thấy output tương tự như sau:
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
...
Script tạo 100 yêu cầu đến web server của bạn. Mã phản hồi 403 cho thấy truy cập bị từ chối bởi web server. mod_evasive cũng lưu vào syslog khi địa chỉ IP bị chặn. Để kiểm tra log file, bạn hãy sử dụng lệnh:
sudo tailf /var/log/messages
Output chỉ ra địa chỉ IP đã bị chặn bởi mod_evasive:
Jul 29 00:11:18 servername mod_evasive[18290]: Blacklisting address 127.0.0.1: possible DoS attack.
Nếu bạn đã cấu hình mod_evasive để gửi email cảnh báo khi một địa chỉ IP bị chặn, một email sẽ được gửi tới hộp thư đến với nội dung sau:
mod_evasive HTTP Blacklisted 127.0.0.1
Vietnix: Uy tín dẫn đầu trong lĩnh vực hosting và VPS
Vietnix là đơn vị uy tín trong lĩnh vực cung cấp dịch vụ hosting, VPS và Firewall chống DDoS tại Việt Nam. Với hơn một thập kỷ hoạt động, Vietnix đã xây dựng được uy tín vững chắc thông qua việc cung cấp các giải pháp công nghệ tiên tiến, dịch vụ khách hàng chuyên nghiệp và hệ thống hạ tầng mạnh mẽ.
Không chỉ đáp ứng nhu cầu của các doanh nghiệp lớn, Vietnix còn mang đến các gói dịch vụ phù hợp cho cá nhân và doanh nghiệp vừa và nhỏ, đảm bảo sự linh hoạt và hiệu quả.
Sự tin tưởng từ hàng chục nghìn khách hàng là minh chứng rõ ràng nhất cho cam kết về chất lượng và sự tận tâm của Vietnix trong hành trình đồng hành cùng sự thành công của doanh nghiệp Việt Nam.
Thông tin liên hệ:
- Địa chỉ: 265 Hồng Lạc, Phường 10, Quận Tân Bình, Thành Phố Hồ Chí Minh
- Hotline: 1800 1093
- Email: sales@vietnix.com.vn
- Website: https://vietnix.vn/
Cách chống tấn công DOS và DDoS cho Apache trên CentOS 7 với mod_evasive là một bước quan trọng để đảm bảo sự ổn định và an toàn cho hệ thống. Bằng cách cài đặt và cấu hình mod_evasive, bạn có thể giảm thiểu nguy cơ bị tấn công, ngăn chặn các yêu cầu độc hại và duy trì hiệu suất hoạt động cho máy chủ. Hy vọng bài viết này đã giúp bạn hiểu rõ hơn về cách chống DoS, DDoS trên CentOS 7. Nếu có bất kỳ thắc mắc nào, hãy để lại bình luận để được hỗ trợ nhanh chóng!