HaProxy + CloudFlare


0

Tôi đang cố gắng thiết lập HaProxy với các quy tắc bảo vệ DDoS (giới hạn tốc độ). Tuy nhiên, tôi nghĩ HaProxy hiện đang giới hạn tốc độ giới hạn IP của CloudFlare thay vì IP của khách truy cập / Real. (lưu ý: bản thân trang web của tôi vẫn ổn, vì tôi đã sửa nó trong mã PHP của trang web của tôi) Làm cách nào để khắc phục điều đó?

/Etc/haproxy/haproxy.cfg

global
      log 127.0.0.1 local0 notice
      maxconn 10000
      user haproxy
      group haproxy
defaults
      log global
      mode http
      option httplog
      option dontlognull
      retries 3
      option redispatch
      timeout http-request 10s
      timeout connect 5000
      timeout client 30s
      timesout server 5000

frontend domain
      bind *:80
      stick-table type ip size 1m expire 10s store gpc0,http_req_rate(10s)
      tcp-request connection track-sc1 src
      tcp-request connection reject if { src_get_gpc0 gt 0 }
      default_backend nginx

backend nginx
      mode http
      stats enable
      stats uri /HIDDEN
      stats realm Strictly\ Private
      stats auth USER:PASSWORD
      balance roundrobin
      option httpclose
      option httpchk HEAD / HTTP/1.1\r\nHost:domainhidden.eu
      acl abuse src_http_req_rate(domain) ge 100
      acl flag_abuser src_inc_gpc0(domain)
      tcp-request content reject if abuse flag_abuser
      server web1 iphere1:80 check
      server web2 iphere2:80 check
      server web3 iphere3:80 check

Tôi đã thay đổi tên miền, người dùng và mật khẩu trong cấu hình, vì nếu không mọi người có thể truy cập vào số liệu thống kê trang web của tôi: P (domainhidden.eu, USER: PASSWORD và 'iphere')

Câu trả lời:


2

Bạn phải đưa danh sách trắng IP của họ từ giới hạn tỷ lệ của bạn =).

https://www.cloudflare.com/ips

Vì vậy, ACL của bạn sẽ giống như (không chắc chắn nếu hoàn toàn đúng):

acl rate_whitelist src -f /path/to/whitelist-ips
acl abuse src_http_req_rate(domain) ge 100
acl flag_abuser src_inc_gpc0(domain)
tcp-request content reject if abuse flag_abuser !rate_whitelist

và sau đó whitelist-ipstệp của bạn sẽ là danh sách IP (tôi nghĩ, không chắc định dạng có đúng không):

199.27.128.0/21
173.245.48.0/20
103.21.244.0/22
103.22.200.0/22
103.31.4.0/22
141.101.64.0/18
108.162.192.0/18
190.93.240.0/20
188.114.96.0/20
197.234.240.0/22
198.41.128.0/17
162.158.0.0/15
104.16.0.0/12

Nhưng nếu ai đó đang tấn công qua CloudFlare thì sao? (tấn công lớp 7)
dùng1857116

3
CloudFlare có nên dừng điều đó không? Và nếu không, tôi thực sự không thấy một cách nào bạn có thể ngăn chặn nó mà không ảnh hưởng đến mọi người thông qua CloudFlare.
Wildex999

Bạn có thể xem ip từ X-Forwarded-For trong tiêu đề HTTP, rằng CloudFlare nên bao gồm và thực hiện giới hạn tốc độ dựa trên điều đó.
Wildex999

Bạn có thể đưa ra một ví dụ với cấu hình của tôi làm thế nào tôi nên áp dụng tiêu đề đó? Tôi không biết làm thế nào để làm điều đó trong HaProxy.
dùng1857116

0

Cloudflare đặt địa chỉ IP gốc trong CF-Connecting-IPtiêu đề HTTP. Vì vậy, để phân biệt kẻ tấn công đi qua máy chủ CF với những người khác đi qua cùng một máy chủ, giá trị tiêu đề này có thể được sử dụng làm khóa.

Đây là cấu hình giúp tôi chống lại ai đó vũ phu buộc URL trên trang web của tôi.

frontend www-https
    # ...
    # front-end config details skipped
    # ...

    default_backend www-backend

    # Use General Purpose Couter 0 in SC0 as a global abuse counter
    stick-table type string len 40 size 1m expire 300s store gpc0

    # wait for at most 5 seconds for HTTP headers
    tcp-request inspect-delay 5s
    # use CF-Connecting-IP header as identifier
    tcp-request content track-sc0 hdr(CF-Connecting-IP)

    tcp-request content reject if { sc0_get_gpc0 gt 0 }

backend www-backend
    # ...
    # back-end config details skipped
    # ...

    # prevent new requests for 300 seconds from someone who got more than 10 HTTP errors in 60 seconds
    stick-table type string len 40 size 1m expire 300s store http_err_rate(60s)
    acl abuse sc1_http_err_rate ge 10
    # tell front-end to reject future requests for this address
    # (replace www-https with your front-end name)
    acl flag_abuser sc0_inc_gpc0(www-https) gt 0

    # wait for at most 5 seconds for HTTP headers
    tcp-request inspect-delay 5s
    # use CF-Connecting-IP header as identifier
    tcp-request content track-sc1 hdr(CF-Connecting-IP)
    tcp-request content reject if abuse flag_abuser

Trong trường hợp bạn muốn xem các tiêu đề HTTP trong nhật ký, hãy thêm capturechỉ thị như sau:

    option httplog
    capture request header cf-connecting-ip len 100
    capture request header x-forwarded-for len 100
    log stdout format raw daemon
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.