CHIA SẺ:

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.

24 Comments

  1. Steve Diện 21

    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

    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

    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

        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

    1. noname 2

      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

  4. quangnhut123 19

    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 !

  5. An 5

    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

      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

        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

  6. sine68 1

    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…

Comment của bạn

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