Kinh nghiệm hạn chế ddos với apache server

adamdj

VIP Members
24/08/2016
91
130 bài viết
Kinh nghiệm hạn chế ddos với apache server
A/ Hiểu thế nào về DOS và DDOS

anh sua bai box ddos (2).png

1.Với DDOS chắc các bạn đã biết là rất tệ nạn hiện nay và về cơ bản nó rất độc hại và khó chống đỡ, chúng ta gọi là hạn chế thiệt hại.

- Một cách hiểu nôm na thế này, DOS (Deny of service) thì là tấn công đơn lẻ từ một IP, nó tạo ra nhiều kết nối cùng lúc tới server, hoặc gửi các yêu cầu xử lý syn tới máy chủ apache, khiến cho máy chủ server không thể xử lý được, và treo và die,....

- Với tấn công này thì rõ ràng xác định nó rất đơn giản, block IP đơn lẻ đó là xong. Hoặc viết 1 hàm bằng mã nguồn nào đó như PHP,... check số kết nối của nó tới server giới hạn là bao nhiêu vào deny tự động nếu quá mức là xong.

2. Với DDOS (Distributed Denial Of Service) nó là kiểu tấn công phân tán, có nghĩa là để làm cho máy chủ treo, nó sẽ tạo ra nhiều kết nối, nhiều yêu cầu gửi gói dữ liệu (SYN) tới server không chỉ một IP mà nhiều IP, Nhiều ip như thế cộng lại = 1 IP với số kết nối lớn như DDOS = Server nghẻo. Các thức DDOS như thế thường bắt nguồn từ một chương trình tự động và cấu hình sẵn, và thiết lập cơ bản là giống nhau. Đây sẽ là tiền đề để ta ngăn chặn DDOS.

B/ Cách thức ngăn chặn giảm thiệt hại

- Chúng ta sẽ phân ra 2 lĩnh vực bảo vệ đó là với một máy chủ riêng hoặc một hosting.

- Để chặn được DDOS bạn cần một kiến thức khá nhiều thứ để có thể ngăn chặn hiệu quả, như đọc file log của apache, biết sử dụng các rule hỗ trợ

1. Với một máy chủ riêng (máy chủ ảo và máy chủ thật) . Trong kinh nghiệm của mình thì dựa trên máy chủ server linux là chính, máy chủ windows thì chưa dùng cũng chưa biết hạn chế nó ra sao, nhưng chắc chắn rằng bạn sẽ cần cài chương trình kiểu như KASpersky cho nó

- Với máy chủ linux bạn có lợi thế firewall với nền tảng iptable.

- Với máy chủ này, bạn nên cài ngay cho mình thêm một mod hỗ trợ đó là
mod_sercurity cho apache server. mod này tạo firewall thì thật sự mạnh mẽ.

- Bạn có thể tải nó và cách cài đặt bạn xem tại trang chủ: ModSecurity: Open Source Web Application Firewall

Và việc viết rule của nó là cần thiết cho mỗi bạn, bạn có thể xem hướng dẫn tại: ModSecurity

- Cũng nên hiểu về cấu trúc regular_expressions: Learning to Use Regular Expressions

- Tôi nhấn mạnh rằng các bạn nên đọc tài liệu hướng dẫn tạo rule của Mod_sercurity thì các bạn hiểu và tạo Rule riêng của mình mới có thể ngăn chặn được. DDOS, được.

- Khi bạn đã hiểu chút chút về nó, hãy phân tích log file apache của bạn nó liệt kê những gì? (Ip nào tấn công, Tấn công hình thức nào (GET, POST,...) vào đâu, từ nguồn nào (user-agent)....

- Để hiểu rõ hơn về thông tin log apache bạn nên tìm hiểu tại đây:
Log Files - Apache HTTP Server

- Với mục đích bảo mật của forum này, mình sẽ không tiết lộ code rule bảo mật của nó, bạn có thể tự khai thác thông tin và viết rule giải quyết vấn đề.

---> Để an toàn cho server của mình, các bạn cũng nên cài thêm firewall quan trọng đó là CSF, nó cho phép chống gần như rất nhiều hình thức DDOS, cách cài đặt và cấu hình nó tham khảo tại:

CSF Install Guide - How To

Hi vọng các bạn sẽ có một kiến thức đủ lớn để giải quyết vấn đề DDOS

2. Chặn DDOS với mod_rewrite (htaccess)

- Với công cụ này cũng khá đơn giản để ngăn chặn. chúng ta sẽ quan tâm tới một số cách thức sử dụng sau:

+ Nếu xảy ra DDOS, các bạn hãy nhanh chóng đặt ngay pass website bằng cấu hình htaccess và htpaword để tiện xử lý.

+ Vô xem log file và tìm nguồn tấn công từ IP nào, - tính xem mỗi một phút IP đó tấn công liên tục vào đâu bao nhiêu lần, (liên tục vào cùng một địa chỉ - Có khác biệt so với member chỗ này, vì liên tục chỉ vào một vị trí - điểm yếu của auto)

+ Nếu là nguồn 1 IP thì ta thực hiện cấu hình chặn IP như sau: VD: order allow,deny

deny from 192.168.1.1
deny from 234.45.67.89
deny from 123.45.67.89
allow from all

+ Nếu từ nhiều IP, và các IP tấn công không quá nhiều, nhưng có chung một vị trí nện tại môt vị trí nào đó, chẳng hạn ( index.php), các IP đó có thể cùng một user-agent: VD log file:

195.158.101.197 - - [13/May/2011:18:19:48 -0700] "GET /@4rum/index.php HTTP/1.1" 403 301 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705)"
168.167.43.188 - - [13/May/2011:18:19:48 -0700] "GET /@4rum/index.php HTTP/1.1" 403 301 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705)"
60.29.131.18 - - [13/May/2011:18:19:48 -0700] "GET /@4rum/index.php HTTP/1.1" 403 301 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705)"
88.190.16.207 - - [13/May/2011:18:19:48 -0700] "GET /@4rum/index.php HTTP/1.1" 404 297 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705)"
94.125.160.159 - - [13/May/2011:18:19:48 -0700] "GET /@4rum/index.php HTTP/1.1" 403 301 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705)"
41.216.205.253 - - [13/May/2011:18:19:48 -0700] "GET /@4rum/index.php HTTP/1.1" 403 301 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705)"
194.85.80.107 - - [13/May/2011:18:19:48 -0700] "GET /@4rum/index.php HTTP/1.1" 403 301 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705)"
202.29.58.33 - - [13/May/2011:18:19:48 -0700] "GET /@4rum/index.php HTTP/1.0" 403 301 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705)"
210.245.85.33 - - [13/May/2011:18:19:48 -0700] "GET /@4rum/index.php HTTP/1.0" 403 301 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705)"
46.42.4.138 - - [13/May/2011:18:19:48 -0700] "GET /@4rum/index.php HTTP/1.0" 403 301 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705)"
218.210.199.254 - - [13/May/2011:18:19:48 -0700] "GET /@4rum/index.php HTTP/1.0" 404 297 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705)"
187.52.2.74 - - [13/May/2011:18:19:48 -0700] "GET /@4rum/index.php HTTP/1.1" 403 301 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705)"
72.232.2.94 - - [13/May/2011:18:19:48 -0700] "GET /@4rum/index.php HTTP/1.1" 403 301 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705)"
95.59.140.242 - - [13/May/2011:18:19:48 -0700] "GET /@4rum/index.php HTTP/1.0" 403 301 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705)"
213.7.200.186 - - [13/May/2011:18:19:48 -0700] "GET /@4rum/index.php HTTP/1.1" 403 301 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705)"
125.167.79.101 - - [13/May/2011:18:19:48 -0700] "GET /@4rum/index.php HTTP/1.0" 403 301 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705)"
95.59.140.242 - - [13/May/2011:18:19:48 -0700] "GET /@4rum/index.php HTTP/1.0" 403 301 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705)"
186.114.191.133 - - [13/May/2011:18:19:48 -0700] "GET /@4rum/index.php HTTP/1.0" 403 301 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR

Bạn sẽ thấy nó tấn công liên tiếp vào cùng một vị trí index.php nhưng nhiều IP khác nhau, nếu bạn chỉ sử dụng hàm chặn số lần kết nối trong 1 phút từ 1 IP này, chắc không tính ra được, và nhầm với IP thành viên thực.

- Bạn sẽ chú ý tới các user-agent:

Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705)
OK, rất giống nhau, ta block nó đi thôi.

- Nếu bạn block cả cụm đó, bạn sẽ thấy các máy sử dụng windows 5.1 (XP sp2) và sử dụng IE 6 (MSIE 6.0) sẽ cũng không vô được, vậy bạn không nên block tất nó, bạn hãy quan tâm tới phần riêng của nó, ở đây phần riêng là CLR 1.0.3705
OK, block nó thôi, sử dụng code htaccess:

RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^1.0.3705
RewriteRule ^(.*)$ http://tên-miền-muốn-gửi-sang

-Cách làm này dựa theo user-agent, chẳng hạn ở trên thì user-agent có chứa từ “1.0.3705”. Thật đơn giản đúng không? Khi máy chủ web kiểm tra có bot mà user-agent có chứa chuỗi bắt đầu với “1.0.3705”. Khi đó nó sẽ redirects sang cái trang mà bạn định link đến. VD

RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^1.0.3705
RewriteRule ^(.*)$ http://tên-miền-muốn-gửi-sang
Nếu không sử dụng được thì hãy dùng code sau:
RewriteCond %{HTTP_USER_AGENT} ^1.0.3705
RewriteRule ^/$ /homepage.max.html [L]

Thông tin thêm tại: mod_rewrite - Apache HTTP Server

Để block một User-agent mà không chuyển sử dụng:

RewriteCond %{HTTP_USER_AGENT} ^1.0.3705
RewriteRule ^.* - [F,L]

Một code khác sử dụng khá hiệu quả, nó block luôn và không chuyển đi đâu

SetEnvIfNoCase User-Agent "1.0.3705" bad_bot
Order Allow,Deny
Allow from all
Deny from env=bad_bot

Làm sao biết nó có hoạt động hay không? hãy thử với chỉnh user-agent của chính mình xem sau khi chặn, mình có vào được ko?

Cách xác định user-agent của mình:

- tại trình duyệt web, vào địa chỉ sau:
HTTP User Agent - Browser User Agent ID

Nó sẽ hiển thị user-agent của bạn tại Your Current Browser User Agent ID

- Nếu không sử dụng trang web trên, bạn copy và paste vào trình duyệt đoạn code sau:

javascript:alert(navigator.userAgent)

và user-agent của bạn sẽ hiển thị

Thông tin nhiều hơn tìm hiểu tại: Understanding User-Agent Strings

- Nếu một site nào đó lấy thông tin get nhiều file của bạn từ một trang web, hãy block kết nối trang web đó tới website của bạn:

RewriteEngine On
RewriteCond %{HTTP_REFERER} ^http://.*1-vài-ký-tự-trong-domain.com [NC]
RewriteRule .* - [F]

Hi vọng với việc làm này sẽ hạn chế được DDOS của bạn
Nguồn : Sưu tầm
 
Chỉnh sửa lần cuối bởi người điều hành:
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
Thẻ
apache server ddos
Bên trên