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.

Varnish Cache

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.

DDoS access.log

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.

32 Comments

  1. Steve Diện 21 comment

    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

  2. Pentester84 1 comment

    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.

    1. Luân Trần Admin

      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.

  3. Hưng Nguyễn 1 comment

    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 🙂

    1. Luân Trần Admin

      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.

    1. Luân Trần Admin

      Bạn cần đảm bảo đang ở đúng thư mục và file access.log có tồn tại nhé.

      1. longdhb 1 comment

        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

  4. noname 2 comment

    anh hướng dẫn chi tiết được không ạ, code đấy đặt ở file nào hả anh

    1. noname 2 comment

      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

  5. quangnhut123 19 comment

    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 !

  6. An 5 comment

    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?

    1. An 5 comment

      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.

    2. Luân Trần Admin

      Header này không có URL đặc biệt, không có agent gì có thể filter. Khó rồi.

      1. An 5 comment

        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 ạ 😀

        1. Luân Trần Admin

          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

  7. sine68 1 comment

    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…

  8. Sinh Viên Nghèo 5 comment

    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?

    1. Việt Phương Moderator

      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

  9. Trường 5 comment

    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?

    1. Luân Trần Admin

      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.

  10. Đào Công Thương 3 comment

    Có 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 .

    1. Đào Công Thương 3 comment

      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.

Comment của bạn

Your email address will not be published. Required fields are marked *