From c84a41457072f87734f200d7a6f2f08e3133b08d Mon Sep 17 00:00:00 2001 From: Xe Iaso Date: Mon, 29 Dec 2025 10:58:11 -0500 Subject: [PATCH] docs: add iplist2rule docs Signed-off-by: Xe Iaso --- docs/docs/admin/iplist2rule.mdx | 50 +++++++++++++++++++++++++++++++ docs/docs/admin/robots2policy.mdx | 11 ++++--- utils/cmd/iplist2rule/main.go | 8 +++-- 3 files changed, 63 insertions(+), 6 deletions(-) create mode 100644 docs/docs/admin/iplist2rule.mdx diff --git a/docs/docs/admin/iplist2rule.mdx b/docs/docs/admin/iplist2rule.mdx new file mode 100644 index 00000000..4ff1d3df --- /dev/null +++ b/docs/docs/admin/iplist2rule.mdx @@ -0,0 +1,50 @@ +--- +title: iplist2rule CLI tool +--- + +The `iplist2rule` tool converts IP blocklists into Anubis challenge policies. It reads common IP block list formats and generates the appropriate Anubis policy file for IP address filtering. + +## Installation + +Install directly with Go + +```bash +go install github.com/TecharoHQ/anubis/utils/cmd/iplist2rule@latest +``` + +## Usage + +Basic conversion from URL: + +```bash +iplist2rule https://raw.githubusercontent.com/7c/torfilter/refs/heads/main/lists/txt/torfilter-1m-flat.txt filter-tor.yaml +``` + +Explicitly allow every IP address on a list: + +```bash +iplist2rule --action ALLOW https://raw.githubusercontent.com/7c/torfilter/refs/heads/main/lists/txt/torfilter-1m-flat.txt filter-tor.yaml +``` + +Add weight to requests matching IP addresses on a list: + +```bash +iplist2rule --action WEIGH --weight 20 https://raw.githubusercontent.com/7c/torfilter/refs/heads/main/lists/txt/torfilter-1m-flat.txt filter-tor.yaml +``` + +## Options + +| Flag | Description | Default | +| :------------ | :----------------------------------------------------------------------------------------------- | :-------------------------------- | +| `--action` | The Anubis action to take for the IP address in question, must be in ALL CAPS. | `DENY` (forbids traffic) | +| `--rule-name` | The name for the generated Anubis rule, should be in kebab-case. | (not set, inferred from filename) | +| `--weight` | When `--action=WEIGH`, how many weight points should be added or removed from matching requests? | 0 (not set) | + +## Using the Generated Policy + +Save the output and import it in your main policy file: + +```yaml +bots: + - import: "./filter-tor.yaml" +``` diff --git a/docs/docs/admin/robots2policy.mdx b/docs/docs/admin/robots2policy.mdx index 30f0eab0..fdbab6ff 100644 --- a/docs/docs/admin/robots2policy.mdx +++ b/docs/docs/admin/robots2policy.mdx @@ -12,6 +12,7 @@ Install directly with Go: ```bash go install github.com/TecharoHQ/anubis/cmd/robots2policy@latest ``` + ## Usage Basic conversion from URL: @@ -35,8 +36,8 @@ robots2policy -input robots.txt -action DENY -format json ## Options | Flag | Description | Default | -|-----------------------|--------------------------------------------------------------------|---------------------| -| `-input` | robots.txt file path or URL (use `-` for stdin) | *required* | +| --------------------- | ------------------------------------------------------------------ | ------------------- | +| `-input` | robots.txt file path or URL (use `-` for stdin) | _required_ | | `-output` | Output file (use `-` for stdout) | stdout | | `-format` | Output format: `yaml` or `json` | `yaml` | | `-action` | Action for disallowed paths: `ALLOW`, `DENY`, `CHALLENGE`, `WEIGH` | `CHALLENGE` | @@ -47,6 +48,7 @@ robots2policy -input robots.txt -action DENY -format json ## Example Input robots.txt: + ```txt User-agent: * Disallow: /admin/ @@ -57,6 +59,7 @@ Disallow: / ``` Generated policy: + ```yaml - name: robots-txt-policy-disallow-1 action: CHALLENGE @@ -77,8 +80,8 @@ Generated policy: Save the output and import it in your main policy file: ```yaml -import: - - path: "./robots-policy.yaml" +bots: + - import: "./robots-policy.yaml" ``` The tool handles wildcard patterns, user-agent specific rules, and blacklisted bots automatically. diff --git a/utils/cmd/iplist2rule/main.go b/utils/cmd/iplist2rule/main.go index e26b090c..db49d1a0 100644 --- a/utils/cmd/iplist2rule/main.go +++ b/utils/cmd/iplist2rule/main.go @@ -25,15 +25,19 @@ func init() { flag.Usage = func() { fmt.Printf(`Usage of %[1]s: - %[1]s [--action=DENY|ALLOW] [--rule-name=] + %[1]s [flags] Grabs the contents of the blocklist, converts it to an Anubis ruleset, and writes it to filename. + +Flags: `, filepath.Base(os.Args[0])) + + flag.PrintDefaults() } } var ( - action = flag.String("action", "DENY", "Anubis action to take (ALLOW / DENY)") + action = flag.String("action", "DENY", "Anubis action to take (ALLOW / DENY / WEIGH)") manualRuleName = flag.String("rule-name", "", "If set, prefer this name over inferring from filename") weight = flag.Int("weight", 0, "If set to any number, add/subtract this many weight points when --action=WEIGH") )