update config for crawler-whitelist, cleanup a few things in the example

This commit is contained in:
Thomas Lynch
2023-06-04 13:04:13 +10:00
parent 2ec52e804d
commit 10c875e689
8 changed files with 54 additions and 40 deletions

View File

@ -12,15 +12,15 @@ NOTE: Use either HCAPTCHA_ or RECAPTHCA_, not both.
- HMAC_COOKIE_SECRET - different random string, a salt for pow cookies - HMAC_COOKIE_SECRET - different random string, a salt for pow cookies
- TOR_CONTROL_PORT_PASSWORD - the control port password for tor daemon - TOR_CONTROL_PORT_PASSWORD - the control port password for tor daemon
- RAY_ID - string to identify the HAProxy node by - RAY_ID - string to identify the HAProxy node by
- CHALLENGE_EXPIRY - how long solution cookies last for, in seconds
- CHALLENGE_INCLUDES_IP - any value, whether to lock solved challenges to IP or tor circuit
- BACKEND_NAME - Optional, name of backend to build from hosts.map - BACKEND_NAME - Optional, name of backend to build from hosts.map
- SERVER_PREFIX - Optional, prefix of server names used in server-template - SERVER_PREFIX - Optional, prefix of server names used in server-template
- ARGON_TIME - argon2 iterations - VERIFY_BACKEND_SSL - whether to verify backend ssl, requires you have a private CA, install the cert on the proxies, and CA signed certs on your origins.
- ARGON_KB - argon2 memory usage in KB - CHALLENGE_EXPIRY - how long solution cookies last for, in seconds
- POW_DIFFICULTY - pow difficulty - CHALLENGE_INCLUDES_IP - any value, whether to lock solved challenges to IP or tor circuit
- ARGON_TIME - default argon2 iterations
- ARGON_KB - default argon2 memory usage in KB
- POW_DIFFICULTY - default pow difficulty
- POW_TYPE - type of ahsh algorithm for pow "argon2" or "sha256" - POW_TYPE - type of ahsh algorithm for pow "argon2" or "sha256"
- VERIFY_BACKEND_SSL - whether to verify backend ssl, requires you have a private CA on the proxy and using it to sign your backend certs
#### Run in docker (for testing/development) #### Run in docker (for testing/development)
@ -37,7 +37,6 @@ Requires HAProxy compiled with lua support, and version >=2.5 for the native lua
- Clone the repo somewhere. `/var/www/haproxy-protection` works. - Clone the repo somewhere. `/var/www/haproxy-protection` works.
- Copy [haproxy.cfg](haproxy/haproxy.cfg) to `/etc/haproxy/haproxy.cfg`. - Copy [haproxy.cfg](haproxy/haproxy.cfg) to `/etc/haproxy/haproxy.cfg`.
- Please note this configuration is very minimal, and is simply an example configuration for haproxy-protection. You are expected to customise it significantly or otherwise copy the relevant parts into your own haproxy config.
- Copy/link [scripts](src/lua/scripts) to `/etc/haproxy/scripts`. - Copy/link [scripts](src/lua/scripts) to `/etc/haproxy/scripts`.
- Copy/link [libs](src/lua/libs) to `/etc/haproxy/libs`. - Copy/link [libs](src/lua/libs) to `/etc/haproxy/libs`.
- Copy/link [template](haproxy/template) to `/etc/haproxy/template`. - Copy/link [template](haproxy/template) to `/etc/haproxy/template`.
@ -51,6 +50,8 @@ sudo luarocks install argon2
``` ```
- Test your haproxy config, `sudo haproxy -c -V -f /etc/haproxy/haproxy.cfg`. You should see "Configuration file is valid". - Test your haproxy config, `sudo haproxy -c -V -f /etc/haproxy/haproxy.cfg`. You should see "Configuration file is valid".
NOTE: the provided configuration is only an example. You are expected to customise it significantly or otherwise copy the relevant parts into your own haproxy config.
If you have problems, read the error messages before opening an issue that is simply a bad configuration. If you have problems, read the error messages before opening an issue that is simply a bad configuration.
### Tor ### Tor

View File

@ -12,6 +12,7 @@ services:
volumes: volumes:
- ./haproxy/haproxy.cfg:/etc/haproxy/haproxy.cfg - ./haproxy/haproxy.cfg:/etc/haproxy/haproxy.cfg
- ./haproxy/dataplaneapi.hcl:/etc/haproxy/dataplaneapi.hcl - ./haproxy/dataplaneapi.hcl:/etc/haproxy/dataplaneapi.hcl
- ./haproxy/errors/:/etc/haproxy/errors/
- ./haproxy/map/:/etc/haproxy/map/ - ./haproxy/map/:/etc/haproxy/map/
- ./haproxy/template/:/etc/haproxy/template/ - ./haproxy/template/:/etc/haproxy/template/
- ./src/lua/scripts/:/etc/haproxy/scripts/ - ./src/lua/scripts/:/etc/haproxy/scripts/
@ -38,12 +39,12 @@ services:
- POW_TYPE=argon2 - POW_TYPE=argon2
- TOR_CONTROL_PORT_PASSWORD=changeme - TOR_CONTROL_PORT_PASSWORD=changeme
nginx: # nginx:
ports: # ports:
- 81:80 # - 81:80
image: "nginx:latest" # image: "nginx:latest"
volumes: # volumes:
- ./nginx:/usr/share/nginx/html # - ./nginx:/usr/share/nginx/html
# tor: # tor:
# build: # build:

View File

@ -5,13 +5,11 @@ name = "basedflare"
mode = "single" mode = "single"
dataplaneapi { dataplaneapi {
host = "127.0.0.1" host = "127.0.0.1"
port = 2001 port = 2001
advertised = {}
user "admin" { scheme = ["http"]
insecure = true
password = "admin"
}
transaction { transaction {
transaction_dir = "/tmp/haproxy" transaction_dir = "/tmp/haproxy"
@ -22,7 +20,10 @@ dataplaneapi {
ssl_certs_dir = "/etc/haproxy/ssl" ssl_certs_dir = "/etc/haproxy/ssl"
} }
advertised {} user "admin" {
insecure = true
password = "admin"
}
} }
haproxy { haproxy {

View File

@ -18,6 +18,14 @@ defaults
timeout client 50000ms timeout client 50000ms
timeout server 50000ms timeout server 50000ms
timeout tarpit 5000ms timeout tarpit 5000ms
http-error status 400 content-type "text/html; charset=utf-8" lf-file /etc/haproxy/errors/400.http
http-error status 403 content-type "text/html; charset=utf-8" lf-file /etc/haproxy/errors/403.http
http-error status 408 content-type "text/html; charset=utf-8" lf-file /etc/haproxy/errors/408.http
http-error status 429 content-type "text/html; charset=utf-8" lf-file /etc/haproxy/errors/429.http
http-error status 500 content-type "text/html; charset=utf-8" lf-file /etc/haproxy/errors/500.http
http-error status 502 content-type "text/html; charset=utf-8" lf-file /etc/haproxy/errors/502.http
http-error status 503 content-type "text/html; charset=utf-8" lf-file /etc/haproxy/errors/503.http
http-error status 504 content-type "text/html; charset=utf-8" lf-file /etc/haproxy/errors/504.http
program api program api
command dataplaneapi -f /etc/haproxy/dataplaneapi.hcl --update-map-files command dataplaneapi -f /etc/haproxy/dataplaneapi.hcl --update-map-files
@ -68,6 +76,7 @@ frontend http-in
# acl for lua check whitelisted IPs/subnets and some excluded paths # acl for lua check whitelisted IPs/subnets and some excluded paths
acl is_excluded src,map_ip(/etc/haproxy/map/whitelist.map) -m found acl is_excluded src,map_ip(/etc/haproxy/map/whitelist.map) -m found
acl is_excluded src -m found -f /etc/haproxy/map/crawler-whitelist.map
acl is_excluded path /favicon.ico /.basedflare/pow-icon #add more acl is_excluded path /favicon.ico /.basedflare/pow-icon #add more
# acl ORs for when ddos_mode_enabled # acl ORs for when ddos_mode_enabled
@ -83,7 +92,7 @@ frontend http-in
# acl for domains in maintenance mode to return maintenance page (after challenge page htp-request return rules, for the footerlogo) # acl for domains in maintenance mode to return maintenance page (after challenge page htp-request return rules, for the footerlogo)
acl maintenance_mode hdr(host),lower,map_str(/etc/haproxy/map/maintenance.map) -m found acl maintenance_mode hdr(host),lower,map_str(/etc/haproxy/map/maintenance.map) -m found
http-request lua.set-lang-json if maintenance_mode http-request lua.set-lang-json
http-request return lf-file /etc/haproxy/template/maintenance.html status 200 content-type "text/html; charset=utf-8" hdr "Cache-Control" "private, max-age=30" if maintenance_mode http-request return lf-file /etc/haproxy/template/maintenance.html status 200 content-type "text/html; charset=utf-8" hdr "Cache-Control" "private, max-age=30" if maintenance_mode
# rewrite specific domain+path to domain or domain+path # rewrite specific domain+path to domain or domain+path
@ -119,23 +128,17 @@ frontend http-in
# optional alt-svc header (done after cache so not set in cached responses # optional alt-svc header (done after cache so not set in cached responses
http-response set-header Alt-Svc %[var(txn.xcn),map(/etc/haproxy/map/alt-svc.map)] http-response set-header Alt-Svc %[var(txn.xcn),map(/etc/haproxy/map/alt-svc.map)]
acl c0 res.hdr(Cache-Control,0) -m sub max-age=0 # header checks for no caching
acl c0 res.hdr(Cache-Control,1) -m sub max-age=0 # acl auth_cookie_set res.hdr(Set-Cookie),lower -m found
acl c0 res.hdr(Cache-Control,2) -m sub max-age=0 # acl cache_control_max_age_0 res.fhdr(Cache-Control,0) -m sub "max-age=0"
acl cf0 res.fhdr(Cache-Control,0) -m sub max-age=0 # acl cache_control_max_age_0 res.fhdr(Cache-Control,1) -m sub "max-age=0"
acl cf0 res.fhdr(Cache-Control,1) -m sub max-age=0 # acl cache_control_max_age_0 res.fhdr(Cache-Control,2) -m sub "max-age=0"
acl cf0 res.fhdr(Cache-Control,2) -m sub max-age=0
http-response set-header X-c0 true if c0 # basic caching
http-response set-header X-cf0 true if cf0 # http-response set-header Cache-Control no-cache if auth_cookie_set
http-response set-header X-res-hdr0-Cache-Control %[res.hdr(Cache-Control,0)] # http-response cache-store basic_cache if !auth_cookie_set !cache_control_max_age_0
http-response set-header X-res-hdr1-Cache-Control %[res.hdr(Cache-Control,1)] # http-request cache-use basic_cache
http-response set-header X-res-hdr2-Cache-Control %[res.hdr(Cache-Control,2)]
http-response set-header X-res-fhdr0-Cache-Control %[res.fhdr(Cache-Control,0)]
http-response set-header X-res-fhdr1-Cache-Control %[res.fhdr(Cache-Control,1)]
http-response set-header X-res-fhdr2-Cache-Control %[res.fhdr(Cache-Control,2)]
http-request cache-use basic_cache
http-response cache-store basic_cache
default_backend servers default_backend servers
cache basic_cache cache basic_cache

View File

@ -0,0 +1,10 @@
2001:4860:4801:10::/64
2001:4860:4801:11::/64
2001:4860:4801:12::/64
2001:4860:4801:13::/64
2001:4860:4801:14::/64
2001:4860:4801:15::/64
2001:4860:4801:16::/64
2001:4860:4801:17::/64
2001:4860:4801:18::/64
2001:4860:4801:19::/64

View File

@ -1,3 +1,2 @@
localhost 1
127.0.0.1 1 127.0.0.1 1
127.0.0.1/captcha 2 127.0.0.1/captcha 2

View File

@ -1 +1 @@
localhost {"pd":23,"pt":"sha256","cip":true,"cex":600} 127.0.0.1 {"pd":"argon2","pt":23,"cip":false,"cex":43200}

View File

@ -1,2 +1 @@
127.0.0.1 127.0.0.1:81 127.0.0.1 127.0.0.1:81
localhost 127.0.0.1:8200