{"id":20118739,"url":"https://github.com/m0zgen/cactusd","last_synced_at":"2025-05-06T14:31:53.269Z","repository":{"id":68391956,"uuid":"564109733","full_name":"m0zgen/cactusd","owner":"m0zgen","description":"🌵 Command and Action routine Server","archived":false,"fork":false,"pushed_at":"2025-05-02T12:12:06.000Z","size":15089,"stargazers_count":14,"open_issues_count":7,"forks_count":0,"subscribers_count":2,"default_branch":"dev","last_synced_at":"2025-05-02T13:09:41.865Z","etag":null,"topics":["adblock","adguard-blocklist","aggregator","bld-dns","blocklist","blocklist-aggregator","blocklist-converter","blocklist-data","golang-application","ip-blocklist","merge-sort","open-bld","pi-hole-blocklists","self-hosted"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/m0zgen.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-11-10T02:19:29.000Z","updated_at":"2025-02-06T14:30:54.000Z","dependencies_parsed_at":"2024-04-17T01:33:56.876Z","dependency_job_id":"dba3eac0-bc28-4f3e-a713-e61459a25b7b","html_url":"https://github.com/m0zgen/cactusd","commit_stats":null,"previous_names":[],"tags_count":21,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/m0zgen%2Fcactusd","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/m0zgen%2Fcactusd/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/m0zgen%2Fcactusd/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/m0zgen%2Fcactusd/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/m0zgen","download_url":"https://codeload.github.com/m0zgen/cactusd/tar.gz/refs/heads/dev","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252703416,"owners_count":21790882,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["adblock","adguard-blocklist","aggregator","bld-dns","blocklist","blocklist-aggregator","blocklist-converter","blocklist-data","golang-application","ip-blocklist","merge-sort","open-bld","pi-hole-blocklists","self-hosted"],"created_at":"2024-11-13T19:12:27.943Z","updated_at":"2025-05-06T14:31:52.364Z","avatar_url":"https://github.com/m0zgen.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/m0zgen/cactusd/release.yml \"Release\")](https://github.com/m0zgen/cactusd/actions/workflows/release.yml)\n[![GitHub go.mod Go version](https://img.shields.io/github/go-mod/go-version/m0zgen/cactusd \"Go version\")](#)\n[![GitHub Release Date](https://img.shields.io/github/release-date/m0zgen/cactusd \"Latest release date\")](https://github.com/m0zgen/cactusd/releases)\n[![GitHub latest version](https://img.shields.io/github/v/release/m0zgen/cactusd \"Latest version\")](https://github.com/m0zgen/cactusd/releases)\n[![Go Report Card](https://goreportcard.com/badge/github.com/m0zgen/cactusd)](https://goreportcard.com/report/github.com/m0zgen/cactusd)\n[![CodeQL](https://github.com/m0zgen/cactusd/actions/workflows/codeql.yml/badge.svg?branch=dev\u0026event=push)](https://github.com/m0zgen/cactusd/actions/workflows/codeql.yml)\n\n# CACTUSD (Command and Actions Routine Server Daemon)\n\nDownload/Upload, merge, divide by category and publish a domain name block lists and IP addresses as merged files.\n\n* Block and Allow lists periodically updated (every 12 hours), you can download lists from links bellow.\n* Merged files already to download (from [config.yml](https://github.com/m0zgen/cactusd/blob/dev/config.yml)).\n\n![today](https://raw.githubusercontent.com/m0zgen/cactusd/data/badge_date.svg)\n\n* [![bl total](https://raw.githubusercontent.com/m0zgen/cactusd/data/badge_total_bl.svg)](https://raw.githubusercontent.com/m0zgen/cactusd/data/bl.txt) - Common merged block lists\n* [![bl plain total](https://raw.githubusercontent.com/m0zgen/cactusd/data/badge_total_bl_plain.svg)](https://raw.githubusercontent.com/m0zgen/cactusd/data/bl_plain.txt) - Merged lists from \n[BLD Agregator](https://github.com/m0zgen/bld-agregator) and [dns-hole](https://github.com/m0zgen/dns-hole) regex files\n* [![wo total](https://raw.githubusercontent.com/m0zgen/cactusd/data/badge_total_wl.svg)](https://raw.githubusercontent.com/m0zgen/cactusd/data/wl.txt) - Common whitelisted domains from [dns-hole](https://github.com/m0zgen/dns-hole)\n* [![wl plain total](https://raw.githubusercontent.com/m0zgen/cactusd/data/badge_total_wl_plain.svg)](https://raw.githubusercontent.com/m0zgen/cactusd/data/wl_plain.txt) - Regex lists from [dns-hole](https://github.com/m0zgen/dns-hole)\n* [![IP total](https://raw.githubusercontent.com/m0zgen/cactusd/data/badge_total_ip.svg)](https://github.com/m0zgen/cactusd/raw/data/ip_plain.txt) - IP Block List (\nC\u0026C servers associated with Dridex, Emotet, TrickBot, QakBot, BazarLoader, Bruteforce bots, Spammers/Malicious IP addresses from Internet).\n\nThese lists updating every 12 hours. \n\nCredits: [FadeMind](https://github.com/FadeMind/hosts.extras), \n[StevenBlack](https://github.com/StevenBlack/hosts), \n[notracking](https://github.com/notracking/hosts-blocklists),\n[davidonzo](https://github.com/davidonzo/Threat-Intel), \n[mitchellkrogza](https://github.com/mitchellkrogza/Badd-Boyz-Hosts), \n[PolishFiltersTeam](https://raw.githubusercontent.com/PolishFiltersTeam/KADhosts/master/KADhosts.txt), \n[dns-hole](https://github.com/m0zgen/dns-hole), \n[bld-agregator](https://github.com/m0zgen/bld-agregator),\n[digitalside](https://osint.digitalside.it/Threat-Intel/lists/latestips.txt),\n[firehol level1](https://iplists.firehol.org/files/firehol_level1.netset), \n[firehol level2](https://raw.githubusercontent.com/firehol/blocklist-ipsets/master/firehol_level2.netset), \n[feodotracker](https://feodotracker.abuse.ch/downloads/ipblocklist_recommended.txt), \n[stamparm](https://raw.githubusercontent.com/stamparm/ipsum/master/levels/2.txt), [dns-blocklists](https://github.com/hagezi/dns-blocklists)\n\n## Client Configs\n\nIf you are using `open-bld` or `blocky` DNS blocking servers, you can use these lists in `config.yml`, example:\n\n```shell\n...\nblocking:\n  blackLists:\n    bld:\n      - https://raw.githubusercontent.com/m0zgen/cactusd/data/bl.txt\n      - https://raw.githubusercontent.com/m0zgen/cactusd/data/bl_plain.txt\n  whiteLists:\n    bld:\n      - https://raw.githubusercontent.com/m0zgen/cactusd/data/wl.txt\n      - https://raw.githubusercontent.com/m0zgen/cactusd/data/wl_plain.txt\n...\n```\n\nYou can combine blocking solution with `firewalld` and `ipset` with [ip2drop](https://github.com/m0zgen/ip2drop) \nconfiguration, example config for malicious IP relaxator: \n\n`conf.d/relax-ip.ini`\n```shell\n[DEFAULT]\nIP_TIMEOUT = 604800\nIP_THRESHOLD = -1\nEXPORT_COMMAND = curl -s https://raw.githubusercontent.com/m0zgen/cactusd/data/ip_plain.txt\nEXPORT_LOG = relax-ip.log\nENABLED = Yes\nGROUP_NAME = relax-ip\nEXPORT_TO_UPLOAD = No\nDROP_DIRECTLY = Yes\n```\n\n## Self-Hosting Configuration\n\n### Server Config\n* `port` - Web severer port listening \n* `update_interval` - Heart beat in minutes (like as 30m)\n* `download_dir` - lists download catalog\n* `upload_dir` - catalog for remote file uploading\n* `public_dir` - public web folder for downloaded, uploaded and merged files\n\n## Lists Config\n\nBlock, White lists contains DNS names usually usage for DNS servers like as \nad-guard, pi-hole, [open bld](https://lab.sys-adm.in) and etc.)\n\nIP list - merging and aggregating IP lists from different sources (like as [bld-agregator](https://github.com/m0zgen/bld-agregator), [bld-server](https://github.com/m0zgen/bld-server))\n\nConditionally the `lists` are divided into several categories:\n* `bl`, `wl` - blocking/white lists, hosts list with comments which \nneed to clean and merge in solid file fo reducing size, remote server requests\n* `bl_plain`, `wl_plain`, `ip_plain` - lists juts merging and clean empty spaces and lines and hashtags.\n\nIf you not need some list category, like as `wl_plain` or `ip_plain` just set `none` parameter:\n\n```yaml\n...\n  wl_plain:\n    - none\n  ip_plain:\n    - none\n```\n\nEvery category will merge and publish in finally in `publish/files` catalog as solid files:\n* `public/files/bl.txt`\n* `public/files/wl.txt`\n* `public/files/bl_plain.txt` - usually regex-based allowing lists for DNS\n* `public/files/wl_plain.txt` - usually regex-based allowing/exception lists for DNS\n* `public/files/ip_plain.txt` - blocking IP addresses (like example for [ip2drop](https://github.com/m0zgen/ip2drop) scripts or just for `ipset` blocking) \n* `public/files/dropped_ip.txt` - from remote [ip2drop](https://github.com/m0zgen/ip2drop) servers, oe any another script or routines\n\n## Ping Config\n\nYou can define target IP and port in `ping` section in `config.yml`:\n\n```shell\n...\nping:\n  - host:\n      name: 1.1.1.1\n      port: 443\n  - host:\n      name: 9.9.9.9\n      port: 53\n  - host:\n...\n```\n\nAnd next, you can see status in self-hosted embed web server:\n\n![cactusd web ui](docs/images/embed-web-ui.jpg)\n\n## Run Cactusd\n\nFrom terminal:\n\n```shell\n./cactusd -config config.yml\n```\n\nFrom `systemd`:\n\n```shell\n...\n#\nExecStart=/path/to/cactusd --config config-prod.yml\n...\n```\n\n## Additional Info\n\n* all functionality moved from deprecated [BLD-Server](https://github.com/m0zgen/bld-server)\n* as \"client\" for `cactusd` server you can use [ip2drop](https://github.com/m0zgen/ip2drop)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fm0zgen%2Fcactusd","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fm0zgen%2Fcactusd","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fm0zgen%2Fcactusd/lists"}