crowdsec helm

No introduction found. Create it?

More popular helm chart found

crowdsec from crowdsecurity/helm-charts/crowdsec is more popular with 12 repositories.

Install

Install with:

helm repo add crowdsec https://crowdsecurity.github.io/helm-charts/
helm install crowdsec crowdsec/crowdsec -f values.yaml

Examples

See examples from other people.

Top Repositories (1 out of 9)

NameRepoStarsVersionTimestamp
crowdsecxunholy/k8s-gitops6400.24.2a month ago

Values

See the most popular values for this chart:

KeyTypes
string
lapi.env[].name (7)
DISABLE_ONLINE_API
ENROLL_KEY
ENROLL_INSTANCE_NAME
string
lapi.env[].value (6)
false
${CSKEY}
cluster
string
lapi.env[].valueFrom.secretKeyRef.key (4)
enroll-key
INIT_POSTGRES_HOST
INIT_POSTGRES_PASS
envoy-bouncer-key
opnsense-bouncer-key
string
lapi.env[].valueFrom.secretKeyRef.name (4)
crowdsec-secret
crowdsec-initdb-secret
crowdsec-initdb-secret
crowdsec-secret
crowdsec-secret
string
boolean
boolean
boolean
boolean
string
string
string
string
string
string
lapi.dashboard.ingress.annotations."traefik.ingress.kubernetes.io/router.middlewares" (2)
traefik-chain-basic@kubernetescrd,traefik-bouncer@kubernetescrd,traefik-local@kubernetescrd
string
string
string
lapi.dashboard.ingress.tls[].hosts[] (1)
- crowdsec-dashboard.internal.${SECRET_DOMAIN}
string
boolean
string
string
string
boolean
string
string
string
string
string
string
string
boolean
string
string
boolean
string
lapi.extraVolumes[].hostPath.path (1)
/home/elraro/home-ops/volumes/crowdsec/http.yaml
string
boolean
lapi.ingress.host (1)
crowdsec.internal.${SECRET_DOMAIN}
string
string
lapi.ingress.tls[].hosts[] (1)
- crowdsec.internal.${SECRET_DOMAIN}
string
number
string
string
string
boolean
boolean
string
string
string
string
lapi.extraInitContainers[].command[] (1)
- sh
- -c
- cp -a /staging/var/lib/crowdsec/data/. /data/
string
string
lapi.extraInitContainers[].image (1)
ghcr.io/home-operations/postgres-init:18.6.0@sha256:b6d3af974df781c673d37e49bdddfa14a6f5be28b18d2cb7713f0449bea4057b
crowdsecurity/crowdsec:v1.8.1
string
string
string
string
string
string
boolean
boolean
string
string
string
string
boolean
boolean
agent.env[].name (5)
PARSERS
COLLECTIONS
DISABLE_PARSERS
string
agent.env[].value (5)
crowdsecurity/cri-logs
crowdsecurity/traefik
crowdsecurity/whitelists
string
boolean
string
string
string
string
boolean
string
number
agent.extraVolumeMounts[].mountPath (2)
/nextcloud.log
/var/log/containers
/var/log/pods
string
agent.extraVolumeMounts[].name (2)
nextcloud-log
var-log-containers
var-log-pods
string
boolean
agent.extraVolumes[].name (2)
nextcloud-log
var-log-containers
var-log-pods
string
agent.extraVolumes[].hostPath.path (1)
/mnt/sdc1/nextcloud/data/nextcloud.log
/var/log/containers
/var/log/pods
string
boolean
string
string
string
boolean
boolean
string
number
boolean
number
number
string
string
boolean
string
boolean
string
string
string
string
string
number
string
number
string
string
boolean
boolean
number
boolean
number
config."config.yaml.local" (4)
api: server: auto_registration: enabled: true token: "${REGISTRATION_TOKEN}" allowed_ranges: - "127.0.0.1/32" - "192.168.0.0/16" - "10.0.0.0/8" - "172.16.0.0/12" db_config: type: postgresql user: crowdsec password: "${DB_PASSWORD}" db_name: crowdsec host: "${DB_HOST}" port: 5432 sslmode: require
string
config."profiles.yaml" (4)
# Test-only profile: fires on the hub's http-generic-test scenario so # we can validate the notification pipeline without triggering a real # ban. `on_success: continue` keeps the remediation profiles below in # play. Safe to leave (test scenario only matches a magic path) but # can be removed once the Discord wiring is confirmed. name: notify_test filters: - Alert.Scenario == "crowdsecurity/http-generic-test" notifications: - discord on_success: continue --- name: default_ip_remediation filters: - Alert.Remediation == true && Alert.GetScope() == "Ip" decisions: - type: ban duration: 4h notifications: - http_alertmanager - discord on_success: break --- name: default_range_remediation filters: - Alert.Remediation == true && Alert.GetScope() == "Range" decisions: - type: ban duration: 4h notifications: - http_alertmanager - discord on_success: break
string
config.notifications."http.yaml" (2)
type: http name: http_alertmanager log_level: info format: | [ {{ range . -}} { "labels": { "alertname": "CrowdSecDecision", "source": "crowdsec", "scenario": "{{ (index .Decisions 0).Scenario }}", "ip": "{{ (index .Decisions 0).Value }}", "scope": "{{ (index .Decisions 0).Scope }}", "type": "{{ (index .Decisions 0).Type }}", "severity": "warning" }, "annotations": { "summary": "{{ .Scenario }} triggered for {{ (index .Decisions 0).Value }}", "duration": "{{ (index .Decisions 0).Duration }}" } }{{ if not (last) }},{{ end }} {{ end }} ] url: http://kube-prometheus-stack-alertmanager.monitoring.svc.cluster.local:9093/api/v2/alerts method: POST headers: Content-Type: application/json
string
config.notifications."discord.yaml" (1)
type: http name: discord log_level: info group_wait: 5s group_threshold: 1 # Taunts only fire when .Decisions is non-empty (actual remediation, # not informational alerts like crowdsecurity/http-generic-test). # Index is seconds-of-minute mod list length: cheap rotation without # needing a stable random seed across alerts. format: | {{- $taunts := list "L Bozo." "I can't let you do that Dave." "Skill issue." "Press S to Spit" "WASTED" "L + ratio + IP banned." "360 noscoped." "Get rekt." "Scrape these." "Get bezongled" "Hasta La Vista, Baby" "Yeeted into the void." "Thanks for playing. Try again in 4 hours." "Sorry, your vulnerable box is in another castle" "lmao no" -}} {{- $idx := mod (now | date "05" | atoi) (len $taunts) -}} {{ range . -}} { "username": "CrowdSec", "embeds": [ { "title": "{{ if .Decisions }}Intruder Locked Out{{ else }}CrowdSec alert{{ end }}", {{- if .Decisions }} "description": "{{ index $taunts $idx }}", {{- end }} "color": 15158332, "fields": [ {"name": "Scenario", "value": "`{{ .Scenario }}`", "inline": false}, {"name": "Source", "value": "`{{ .Source.Value }}`", "inline": true}, {"name": "Scope", "value": "`{{ .Source.Scope }}`", "inline": true}, {{- if .Decisions }} {"name": "Action", "value": "`{{ (index .Decisions 0).Type }}` for `{{ (index .Decisions 0).Duration }}`", "inline": false}, {"name": "Origin", "value": "`{{ (index .Decisions 0).Origin }}`", "inline": true}, {{- end }} {"name": "Events", "value": "{{ .EventsCount }}", "inline": true} ] } ] } {{ end }} url: ${DISCORD_WEBHOOK_URL} method: POST headers: Content-Type: application/json
string
config."console.yaml" (1)
share_manual_decisions: true share_custom: true share_tainted: true share_context: true
string
config.parsers.s01-parse."client-ip.yaml" (1)
# Prefer the Cloudflare-injected edge client IP over the node-local # downstream_remote_address the hub envoy parser derives. Runs after # the hub s01 envoy parser (only it has unmarshaled the JSON); when # the key is absent nothing here matches and the hub fallback wins. filter: evt.Unmarshaled.envoy != nil && evt.Unmarshaled.envoy["cf_connecting_ip"] != nil && evt.Unmarshaled.envoy["cf_connecting_ip"] != "" statics: - meta: source_ip expression: evt.Unmarshaled.envoy["cf_connecting_ip"] onsuccess: break
string
config.parsers.s01-parse."istio-envoy.yaml" (1)
filter: "evt.Parsed.program == 'istio-ingress' && evt.Parsed.message startsWith '{'" onsuccess: next_stage name: custom/istio-envoy description: "Parse Istio ingressgateway JSON access logs" # evt.Parsed.message is the raw JSON envoy access log line; we can # JsonExtract directly from it without a grok step. A grok like # %{DATA:json_log} would *not* work here: DATA is lazy and matches # zero chars at position 0, leaving json_log empty. # # Fields required downstream: # meta.service=http and meta.log_type -> http-logs s02 filter # parsed.request (path with query) -> http-logs grok -> file_name/static_ressource/http_args # parsed.verb, parsed.target_fqdn -> http-* scenario filters and groupby statics: - meta: log_type value: http_access-log - meta: service value: http - parsed: program value: istio - meta: source_ip expression: 'JsonExtract(evt.Parsed.message, "downstream_remote_address")' - meta: http_status expression: 'JsonExtract(evt.Parsed.message, "response_code")' - meta: http_path expression: 'JsonExtract(evt.Parsed.message, "path")' - meta: http_verb expression: 'JsonExtract(evt.Parsed.message, "method")' - meta: http_user_agent expression: 'JsonExtract(evt.Parsed.message, "user_agent")' - parsed: verb expression: 'JsonExtract(evt.Parsed.message, "method")' - parsed: request expression: 'JsonExtract(evt.Parsed.message, "path")' - parsed: target_fqdn expression: 'JsonExtract(evt.Parsed.message, "authority")' - parsed: http_user_agent expression: 'JsonExtract(evt.Parsed.message, "user_agent")'
string
config.scenarios."http-istio-test.yaml" (1)
type: trigger name: custom/http-istio-test description: "Custom HTTP test trigger for the Istio acquisition chain" filter: | evt.Meta.log_type in ["http_access-log", "http_error-log"] and evt.Meta.http_path == "/crowdsec-test-NtktlJHV4TfBSK3wvlhiOBnl" blackhole: 5m groupby: "evt.Meta.source_ip" labels: confidence: 0 spoofable: 3 behavior: "http:test" label: "CrowdSec Generic Test Scenario" service: http remediation: false
string
boolean
string
boolean
boolean
boolean
string
string
string
string
appsec.acquisitions[].appsec_config (1)
crowdsecurity/appsec-default
string
appsec.acquisitions[].appsec_configs[] (1)
- crowdsecurity/appsec-default
string
string
appsec.env[].value (2)
crowdsecurity/appsec-virtual-patching crowdsecurity/appsec-generic-rules
string
number
string
string
string
image.repository (3)
ghcr.io/crowdsecurity/crowdsec
string
string
string
string
string
string
string