Thông thường Varnish sử dụng chính để làm cache front end, tuy nhiên bạn hoàn toàn có thể cấu hình sử dụng để chống DDoS.
Hướng dẫn này viết từ trường hợp thực tế, mình đã chống DDoS thành công cho một người bạn. Nếu bạn cũng đang đau đầu về việc bị DDoS, hãy tham khảo bài viết này biết đâu có thể áp dụng được.
Ngay khi kết nối SSH, mình kiểm tra file access.log thì thấy ngay đúng là server đang bị DDoS.
Một loạt request có cách thức giống nhau, cùng một user-agent, IP khác nhau. Tính sơ sơ cũng phải đến cả trăm request mỗi giây, hỏi sao server không bị overload.
Nếu sử dụng CSF để block từng IP thì không ổn, vì quá nhiều IP. May thay các request này đều có một điểm chung là user-agent trong header giống nhau, như vậy có thể block lại được toàn bộ những request này dễ dàng.
Do CSF không hỗ trợ block theo header, nên mình phải sử dụng Varnish để filter riêng những request này ra và trả về Error 403. Với một đoạn code ngắn bên dưới để trong block sub vcl_recv { ... }
, mình đã khống chế hoàn toàn được vụ DDoS.
sub vcl_recv { if (req.http.user-agent ~ "Hotbar") { return(synth(403,"Not allowed.")); }
Ý nghĩa của đoạn code trên là filter những request có user-agent chứa Hotbar, nếu có thì trả lại lỗi 403, ngược lại thì pass cho Nginx webserver xử lý.
Varnish quả thật tuyệt vời 😀
Update: bạn có thể block request trực tiếp với Nginx.
Chào admin.
Mình mở file varnish với lệnh “nano /etc/varnish/default.vcl”.
Trong đó điều có dấu # trước code.
Mình nên thêm theo cách 1 ( trong link demo bên dưới ) hay cách 2 ạ.
Link: https://pastebin.com/5GyZFA1q
Cảm ơn admin.
Mọi người cho mình hỏi , mình dùng Varnish làm Reverse Proxy Server để ẩn danh server chính thì cái Reverse Proxy server này cần phải cấu hính mạnh để chạy ko hay chỉ cần server tầm tầm , còn chịu tải nằm ở phần Server chính vậy mọi người
Chào anh, hiện tại mình đang sdụng vps dùng varnish + nginx + apache
Mình muốn hỏi là có cách nào chống được số kết nối từ 1 ip đến (mình sự dụng Apache Benchmark để tạo kết nối đến website) thì web đơ cứng ngay
Mình có cấu hình cfs, iptable, nginx…. cả rồi nhưng vẫn không thể đỡ nổi cái đó
Nếu ip thay đổi ít thì bạn block theo IP còn không lần nổi IP thì bạn block theo header
Dùng 1 ip nhưng nó không block thím ơi
Bạn dùng iptables hay gì để block. Cấu hình block như thế nào.
CSF có block ip mà.
mình thử cả varnish và csf rồi nhưng tạo 1000kết nối + 1000truy vấn cùng 1 lúc trên 1 ip mà không thấy nó block
Thế chắc bạn cấu hình có vấn đề. Bạn thử tự block chính mình xem có hoạt động không
Tự block thì được chứ tự động thì không đc
Ok mình upgrade luôn nhưng ko bật ssl 443 ở đoạn
listen 443 ssl http2; Vẫn để 80 như bình thường là chưa kích hoạt phải ko ạ.
Uhm, kiểu nó chỉ ở trong bản Nginx nhưng không dùng đến đó. Bạn chỉ cần build Nginx với nó còn không cần cấu hình trong Nginx Conf
Ok vậy mình chưa có nhu cầu dùng ssl, như vậy có cần copy source sbin ko ạ? Hay Mình copy code cũ và thêm module geo thôi. Sorry mình hỏi cho chắc sợ bị lỗi thì khổ m…
Bạn vẫn phải upgrade openssl thôi. Bạn chưa dùng nhưng module trong Nginx vẫn cần upgrade, trừ phi bạn loại hết module ssl
Hơi ngoài lề nhưng mình đang tiếp tục cmt ở trên đấy bạn, mình đang thêm modules để block ip geo đấy bạn.
À. Vì các module gốc của Nginx có module ssl/https (bạn Ctrl F đám module cũ là thấy). Nên khi rebuild bạn cân tích hợp thêm OpenSSL bản mới (nếu trc đó bạn tưng cài HTTP2 thì k cần)Nó như thế này : https://hocvps.com/http2-nginx/
Tức là cùng 1 lần compile, bạn tích hợp cả geo và openssl
/configure: error: SSL modules require the OpenSSL library.
You can either do not enable the modules, or install the OpenSSL library
into the system, or build the OpenSSL library statically from the source
with nginx by using –with-openssl= option.
Build dính lỗi này thì sao ạ? Mình không xài ssl, có bật cloudflare, thì có config gì thêm ko? Để biết mình make íntall hic hic bị spam quá rồi
Varnish có cần rebuild lại Nginx đâu? Bạn đã làm gì cơ?
Xin bác VP hướng dẫn mình từ bước 1 được không? Là phải vào thư mục nào để chạy configure hay là dơnload nginx 1.12.1 về thư mục gốc rồi configure lại? Mình đang băn khoăn? Bài tren lỗi là do mình xài từ source down về thư mục root rồi chạy. Với cho mình hỏi là nếu chạy qua cloudflare thì có cần làm thêm bước gì để lấy IP nữa ko?
Tình hình là đang bị dính spam mail nặng nên mình sẽ chặn tạm thời. Thanks
https://pastebin.com/TuHRhTE9
Nằm trong link này bạn ơi. Mình cài tùm lum luôn chả nhớ cài gì nữa, nhưng nginx vẫn reload bình thương ko lỗi. Ko biết có bài nào kích hoạt moudle này ko nữa hic hic
Thanks bạn
Nó thông báo đúng rồi. Bạn
make
rồimake install
Tuy vậy, bạn cài thế là remove hết configure gốc của Nginx trong VPS. Bạn phải configure cùng với toàn bộ các configure gốc
Bạn xem
nginx -V
để xem các config gốcCó phần mềm nào phân biệt và chặn IP nước ngoài vào VPS không admin. Mình làm server game trên VPS ubuntu mà ngày nào cũng bị ddos hết .
Mình chỉ chạy server ở VN nên mình muốn chặn hết tất cả các IP nước ngoài pijng vào.
Bạn tham khảo dùng GeoIP Module với Database về GeoIP nhé. Cụ thể
https://www.howtoforge.com/nginx-how-to-block-visitors-by-country-with-the-geoip-module-debian-ubuntu
Mình đang dùng Hocvps 1.8, làm như hướng dẫn trong bài nhưng bước chạy ./configure –with-http_geoip_module thì bị lỗi và không biết ntn là thành công cả. Mình đang muốn chặn tất cả các IP khác chỉ cho VN truy cập. VPS mình dang bị dính malware và spam mail liên tục. Mình đang muốn khắc phục trình trạng xấu trước sau, bạn nào có kinh nghiệm giúp mình với được ko?
Bạn thêm module hiện thông báo như thế nào?
Admin cho hỏi mình có mua gói DDoS-Filtered IP Address của Ramnode. Sau khi mua xong thì sử dụng thế nào vậy?
Bạn truy cập thằng vào IP đã mua coi ok không, nếu ổn rồi thì trỏ domain về IP này, không dùng IP gốc.
104.224.145.75 – – [31/Mar/2017:11:53:44 +0700] “GET / HTTP/1.1” 403 467 “-” “Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36”
158.69.209.181 – – [31/Mar/2017:11:53:44 +0700] “GET / HTTP/1.1” 403 524 “-” “Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36”
của mình như này thì user-agent là cái nào thế bạn?
Header này không có URL đặc biệt, không có agent gì có thể filter nên không tìm được đặc điểm chung theo cách này để block rồi
ok Cám ơn bạn nhiều
cái ddos này là chống ddos proxy qua url domain…chống ddos với varnish là chống ddos trên domain url ..còn nếu ddos proxy thẵng vào ip server thì conect vẫn vào như thường vì port 80 lúc đó mở …có thể sử dụng iptables filter để chặn từ đầu lọc request và band ip không cho vào server…
Em bị DDOS và chỉ có thông tin trong file log như sau:
“GET / HTTP/1.0” 500 251 “-” “Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36”
Có cách nào để chặn nó không bác?
Em cài đặt VESTA ạ :D, có cài thêm cả csf nữa nhưng cứ chặn 1 IP thì nó lại dùng IP khác tấn công.
Header này không có URL đặc biệt, không có agent gì có thể filter. Khó rồi.
Vâng, cũng may mỗi lần tấn công nó chỉ dùng 1 IP đơn lẻ, nên thấy là lại chặn, chỉ ức chế kiểu cứ lai rai mệt mỏi ạ 😀
Thường thì mình phân tích URI hoặc header để tìm ra đặc điểm chung, sau đó block lại.
Với trường hợp không có thông tin gì chung thì hơi khó, bạn đăng ký thêm các dịch vụ theo dõi uptime như https://uptimerobot.com/ để theo dõi site, khi nào bị tấn công thì biết ngay
Hi bác LT qua kinh nghiệm làm việc của em thì kết hợp nginx block header dạng này bên trong trả về 444 và bên ngoài dùng CSF block theo connections/s và chỉnh lại thời gian lấy mẫu là ok.
Thêm vào đó enable CDN là biện pháp chia nhỏ request tốt nhất vì sẽ được filter phần cứng của CDN provider nó làm bớt cho mình !
dùng Apache thì làm sao a nhỉ
Làm sao là làm sao nhỉ
anh hướng dẫn chi tiết được không ạ, code đấy đặt ở file nào hả anh
Mình không hiểu bạn hỏi gì?
Cái code sub vcl_recv {
if (req.http.user-agent ~ “Hotbar”) {
return(synth(403,”Not allowed.”));
} này đặt ở đâu hả anh. em chưa rõ lắm
Bạn đọc bài này kỹ để biết được nó đặt ở đâu: https://hocvps.com/cai-dat-varnish/
sao minh go lenh head -n 50 access.log gõ hoài không thấy ra
Bạn cần đảm bảo đang ở đúng thư mục và file access.log có tồn tại nhé.
kiếm nữa ngày mới ra là vì cài vestacp nên nó ko phài tên access.log, dùng lênh locate logs hay locate cái domain để kiếm
với hocvps script thì làm sao kiểm tra dc log hay access.log thế ad
Mình đang để dạng comment trong file cấu hình domain.conf đó, nếu cần dùng thì bạn bỏ comment đi là ok.
Cám ơn ad nhiều.
Dùng Nginx là có thể block đc theo user-agent và trả về 403 rồi
Mà tốt hơn thì nên trả về 444 🙂
Hic, quên mất không nghĩ ra @@
Nếu request sử dụng nhiều User agent thì không thể filter theo User agent được nữa. Do vậy cách này cũng chỉ là biện pháp tạm thời.
Trường hợp đó thì phải tìm cách xử lý khác, còn ví dụ trong bài này có thể đoán được user-agent giống nhau nên mới block được.
Bị yêu SSL nên site nào của mình cũng dùng SSL. Mà mình lại k biết cấu hình cái SSL Termination để Varnish chạy với SSL nên đành từ bỏ varnish nhưng tốc độ vẫn nhanh chán, một kinh nghiệm tăng tôca khi dùng SSL trên Nginx là dùng cái LibreSSL thay cho OpenSSl cho tốc độ nhanh hơn mà lại hỗ trợ các cipher mới nhất như chacha20_poly1305
😀 https://www.crazytut.com