Files
serverAppConfigs/shared/searxng/limiter.toml
T
Frank c390135d56 SearXNG: trusted group needs Caddy XFF; trust the podman bridge
A direct hit on the published port has no X-Forwarded-For header, so the
bot-detection cannot resolve a client and returns 429. SearXNG must be
reached through Caddy (search.dankclaw.local), which sets X-Forwarded-For.
Add the podman bridge subnets to trusted_proxies so Caddy's source is
trusted for XFF extraction; note the CIDR is dynamic and should be pinned.
Verified agentic JSON search returns 26-31 relevant results via this path.
2026-08-18 17:52:44 -07:00

52 lines
1.7 KiB
TOML

# SearXNG limiter / bot-detection config.
# Deployed to /opt/searxng/config/limiter.toml on Dankclaw (mounted at
# /etc/searxng/limiter.toml). Loaded when server.limiter: true in settings.yml.
#
# The "trusted group" lives HERE, not in settings.yml.
# Docs: https://docs.searxng.org/admin/searx.limiter.html
[botdetection]
# Number of leading bits compared to group addresses into a (client) network.
ipv4_prefix = 32
ipv6_prefix = 48
# If the request IP is in trusted_proxies, the real client IP is read from the
# X-Forwarded-For / X-Real-IP headers (set by the Caddy reverse proxy).
# SearXNG must be reached through Caddy (search.dankclaw.local): a direct hit on
# the published port has no X-Forwarded-For header, so the bot-detection cannot
# resolve a client and rate-limits it. Caddy connects from the podman bridge, so
# the bridge subnet must be trusted here. NOTE: rootless podman assigns the bridge
# CIDR dynamically; pin the network (podman network create with a fixed --subnet)
# so these entries stay stable.
trusted_proxies = [
'127.0.0.0/8',
'::1',
'192.168.0.0/24',
'10.88.0.0/24',
'10.89.1.0/24',
]
[botdetection.ip_limit]
# Link-local addresses (fe80::/10, 169.254.0.0/16) are not monitored.
filter_link_local = false
# link_token: per-session URL bypass token. Keep off.
link_token = false
[botdetection.ip_lists]
# ip_lists outranks every other method: an IP in pass_ip gets unrestricted
# access and is not checked by user-agent or other bot detection.
# The whole homelab LAN is trusted.
pass_ip = [
'192.168.0.0/24',
]
# Blocklist (none).
block_ip = []
# Keep the SearXNG org passlist (e.g. check.searx.space) enabled.
pass_searxng_org = true