Chặn IPs với Cloudflare

Discussion in 'Hỏi Đáp Kỹ Thuật' started by command, Oct 13, 2021.

  1. command

    command Bang Chúng

    Chào ae,

    Hôm qua ngồi xem logs của Nginx thì mới phát hiện có trường hợp bot giả Googlebot và lọt qua Cloudflare (vì origin web server ghi nhận logs thì nó vượt qua Cloudflare được).

    Ví dụ 1 log ghi nhận như sau:
    Code:
    [12/Oct/2021:14:01:31 +0200] 2a06:98c0:3600::103 - US - 172.68.65.233 - - "GET /xxxxxxxxx  HTTP/1.1" 200 42455 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
    [Bổ sung] Cấu trúc log_format trong nginx như sau:
    Code:
    log_format custom '[$time_local] $http_cf_connecting_ip - $http_cf_ipcountry - $remote_addr - $remote_user "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent";
    Ở đây IPv6 2a06:98c0:3600::103 là IP source của user, còn 172.68.65.233 là Cloudflare proxy. Check IP 2a06:98c0:3600::103 thì IPv6 này lại thuộc Cloudflare.
    [​IMG]

    Rồi dùng lệnh wc -l để count thử xem IPv6 này có bao nhiêu logs trong 1 ngày thì hơn 70k. Ôi da, sao nhiều thế này!

    Thế là, mình chặn IP này (action là Block) trên Firewall rule:
    Code:
    (ip.src eq 2a06:98c0:3600::103) or (http.x_forwarded_for eq "2a06:98c0:3600::103")
    Vậy mà sau 12 tiếng thì cái Firewall rule đó ko có Block được request nào, trong khi, Nginx logs thì vẫn ghi nhận IPv6 2a06:98c0:3600::103 này vào site.

    Mình cấu hình Cloudflare firewall có gì sai thế?

    Mong ae tư vấn giúp, thanks
     
    Last edited: Oct 13, 2021
  2. money

    money Hương Chủ

    Ko liên quan vụ chặn nhưng anh thắc mắc là đã dùng DNS của CF thì làm sao nó request thẳng đến webserver của mình được nhỉ?

    Đây là mô hình hoạt động của CF. Theo mô hình này thì chỉ duy nhất CF truy cập đến webserver của mình (đương nhiên bỏ qua các trường hợp bị lộ IP, bị hack, ...).

    [​IMG]
     
  3. command

    command Bang Chúng

    Nó đâu có biết IP của origin server của e đâu a @money , bot đó request site e qua Cloudflare proxy mà, cụ thể trong trường hợp trên là Cloudflare proxy 172.68.65.233 á.

    E có thay đổi cấu hình ghi nhận logs trên nginx lại,
    cụ thể, trong block http của nginx.conf:
    Code:
    log_format custom '[$time_local] $http_cf_connecting_ip - $http_cf_ipcountry - $remote_addr - $remote_user "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent";
    Do đó, log của Nginx là:
    Code:
    [12/Oct/2021:14:01:31 +0200] 2a06:98c0:3600::103 - US - 172.68.65.233 - - "GET /xxxxxxxxx  HTTP/1.1" 200 42455 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"

    Ngoài ra, e cũng tò mò, làm sao nó dùng được IPv6 2a06:98c0:3600::103 của Cloudflare? Worker Cloudflare chăng? Nhưng gần như khẳng định đây là bot ko phải của Google.
     
    Last edited: Oct 13, 2021
  4. EDM

    EDM Sơ Nhập Giang Hồ

    Ip client rq vào CF => bot CF nó query tới nginx và giữ nguyên ref client chứ bác.
     
  5. command

    command Bang Chúng

    Bác @EDM đang nói vấn đề nào vậy bác? Mình đọc vào ko hiểu, ở trên đâu có nói gì đến IP của client bị đổi gì đâu, ref client là giá trị nào thế?
     
  6. fkphua

    fkphua Tân Thủ Thôn

    Thắc mắc là nếu cloudflare chặn bằng 503 thì nó có tính là 1 request trên nginx không hay là chỉ tính trên cloudflare nhỉ ?
     
  7. money

    money Hương Chủ

    Vì em nói như này nên mọi người thắc mắc nè. Cái IPv6 kia cũng là của CF chứ đâu phải user.

    Và em làm sao em biết đó là 1 user fake googlebot? Có thể đó chính là gbot và nó vào site em nhưng nó phải đi qua CF, rồi CF mới requets đến site em --> do đó em không thấy được IP của gbot mà em chỉ thấy IP của CF.
     
  8. Hoa Mãn Lâu

    Hoa Mãn Lâu Trưởng Môn

    Ặc hình như 4rum củng chưa làm vụ nầy,hèn gì chặn theo country có vẻ ko ổn lắm. Vẫn bị spam. Có cách nòa cài đơn giản hơn ko nhỉ? Log vô server cài lỡ có gì toi bà cái 4rum quá.
     
  9. firefox

    firefox Bang Chúng

    bác backup lại nguyên cái VPS đi lỡ nghịch ngu chỉ cần bấm nút restore
     
  10. money

    money Hương Chủ

    Lấy real visitor IP thì cũng không có gì khó, như bạn này đã chỉ.

    Còn anh thì dùng code cho lẹ, đỡ mất công cài.

    Code:
    $cf_ip = $_SERVER['REMOTE_ADDR'];
    $user_ip = (isset($_SERVER["HTTP_CF_CONNECTING_IP"])?$_SERVER["HTTP_CF_CONNECTING_IP"]:$_SERVER['REMOTE_ADDR']);
    --- Double Post Merged, Oct 13, 2021, Original Post Date: Oct 13, 2021 ---
    Kệ bọn nó em ơi, cài chi mất công. 4rum mình spam nhiều nhưng để cho tăng traffic cũng tốt :D
     
    EDM likes this.
  11. EDM

    EDM Sơ Nhập Giang Hồ

    Ý mình như anh Money có giải thích ở dưới, khi user rq thì qua tường lửa CF sẽ là ip CF vào rq site bác, và nó giữ user-agent của client. Nên bác check ra ip CF nhưng UA là gg-bot. Để chính xác bác nên lấy real ip client check là rõ ah. Trong firewall của CF nó có show đầy đủ.
     
  12. command

    command Bang Chúng

    @money như e bổ sung cấu trúc log_format mà e thay đổi trong nginx ở comment thứ 2, giá trị IPv6 2a06:98c0:3600::103 là từ biến $http_cf_connecting_ip, nó là user IP á anh.

    Code:
    [12/Oct/2021:14:01:31 +0200] 2a06:98c0:3600::103 - US - 172.68.65.233 - - "GET /xxxxxxxxx  HTTP/1.1" 200 42455 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"

    Trong trường hợp này $http_cf_connecting_ip và $remote_addr đều là IP của Cloudflare (check với ip2location.com), sẽ rất vô lý nếu Cloudflare xử lý request theo cách:
    user IP --> Cloudflare proxy 1 (2a06:98c0:3600::103) --> Cloudflare proxy 2 (172.68.65.233) --> origin server
    . Trong phần lớn log nginx của server này thì đường đi request là IP user --> Cloudflare proxy --> origin server đều được Nginx ghi nhật ký đúng, chỉ trừ trường hợp này với số lượng requests cũng đủ lớn (~70k). Nên trường hợp này khả dĩ nhất là người dùng cuối sử dụng thủ thuật nào đó để lấy IP 2a06:98c0:3600::103 (ko rõ có phải sử dụng Cloudflare workers ko?) để giả lập request với mục đích là cào được site và ko bị Cloudflare chặn.

    E đoán nó fake Googlebot bằng cách nào đó sử dụng IPv6 2a06:98c0:3600::103 được để request như giải thích ở trên. Hơn nữa, khi so sánh số lượng Googlebot cùng ngày trên Cloudflare, trên Nginx logs có sự khác biệt lớn với Google Search Console. Thống kê này giữa số Cloudflare và Nginx logs chắc chắn khác nhau được vì Nginx logs ko ghi nhận request nào được cache trên CF.

    Giá trị IPv6 2a06:98c0:3600::103 là từ biến $http_cf_connecting_ip đó bác @EDM, mình có bổ sung nginx config log_format ở comment thứ 2, nên nó được xem là real IP user rồi.

    --- Double Post Merged, Oct 13, 2021, Original Post Date: Oct 13, 2021 ---
    Uhm, mình có thay đổi cấu trúc của log_format trong nginx để lấy thêm giá trị $http_cf_connecting_ip và $http_cf_ipcountry
    --- Double Post Merged, Oct 13, 2021 ---
    Theo mình, code 503 thì sẽ ko có request đến origin server.
     
    Last edited: Oct 14, 2021
  13. fkphua

    fkphua Tân Thủ Thôn

    CF detect được bot của search engine nên nếu nó allow thì khả năng cao là bot thật đấy bác :D
     
  14. Cái bang

    Cái bang Sơ Nhập Giang Hồ

    Đơn giản là nó scan qua warp của cloudflare.
    Cloudflare còn có free VPN nữa mà.
     
    command likes this.
  15. Phan Thị

    Phan Thị Bang Chúng

    Cái này dùng worker js nhé. confirm vừa check . Định ko comment nhưng thấy thớt vất vả quá nên vào check lại

    [​IMG]
    --- Double Post Merged, Oct 14, 2021, Original Post Date: Oct 14, 2021 ---
    Mình biết site thớt nhé. Hôm trc vừa cào một ít bằng cf hnay đã lên đây kêu rồi.
     
    command likes this.
  16. command

    command Bang Chúng

    À, thanks bác, có thể VPN của Cloudflare nữa, mình chưa dùng chức năng này luôn.

    Ko biết vô tình đúng site hay là trùng hợp ngẫu nhiên với site khác. Nếu là bạn thật thì cân nhắc và vui lòng cào site vài k urls/ngày thôi, ko chỉ site này và nhiều site khác nữa vì chúng ta đều là webmaster thì nên hiểu cảnh ngộ bị cào tần suất nhiều thì sẽ ảnh hưởng webmaster khác. Mình cảm thấy ae auto Việt Nam cũng nhiều người có thói quen, hở cào site nào là quét cào sạch data victim site nhanh nhất. Mình cũng là người đi cào, nhưng mình ko bao giờ cào quá 5k/day site nào vừa và nhỏ, còn site to dùng thì tầm 30k/day. Mình làm như thế vì cơ bản để site họ phục vụ tốt users thật, cào tần suất quá cao sẽ làm site họ chậm lại hoặc thậm chí quá tải, vì đâu phải chỉ có mình mình cào site đó đâu, có thể rất nhiều người khác cũng đang cào site đó. Ví dụ trường hợp site này của mình, ko phải tự nhiên mà mình xem Nginx logs đâu, vì số lượng "522 Origin Connection Time-out" trên Cloudflare thống kê tăng cao đột biến nên mình mới nghĩ có gì khác lạ và check site.
     
    Last edited: Oct 14, 2021
    laogiavn and Tony Vu like this.
  17. Phan Thị

    Phan Thị Bang Chúng

    Thím nhạy cảm rồi. MÌnh đùa thôi. Mấy site mầy craw thì chắc chắn ko phải ae trong này rồi.
     
  18. thitgaluoc

    thitgaluoc Hương Chủ

    chết dở, 522 nhiều thì có khi em cào đấy, thớt inbox em site em xem có phải không nào
     
  19. command

    command Bang Chúng

    Có biết site mình cũng chẳng có gì vì thế nào cũng có người Việt biết site này theo thống kê của Google Analytics nhưng biết mình phát triển thì hên xui, làm site thì phải chấp nhận có trường hợp bị cào site rồi. Nếu ae biết thì nhiều khi còn nhận được góp ý cần hoàn thiện gì để site phát triển nữa là :)
    --- Double Post Merged, Oct 14, 2021, Original Post Date: Oct 14, 2021 ---
    đã ib, nhờ bác check giúp nha {baffle}
     
    Last edited: Oct 14, 2021
  20. quoc nguyen

    quoc nguyen Sơ Nhập Giang Hồ

    nếu req bằng cf worker thì thằng cf worker sẽ thêm rất nhiều field vào trong header, rất dễ dàng check và chặn bác nhé, ở origin server bác check nhẹ xíu header và drop những req đó là xong.