Caddy Server

caddy mit duckdns bauen
go get -u github.com/caddyserver/xcaddy/cmd/xcaddy
~/go/bin/xcaddy build --with github.com/caddy-dns/duckdns
caddy mit docker bauen
docker pull caddy:2.5.2-builder-alpine
docker run --rm -it -v "$PWD":/build caddy:2.5.2-builder-alpine sh -c "xcaddy build && cp caddy /build"

automatische TLS Zertifikate

Man sollte zuerst mit dem Let’s Encrypt Staging Environment testen.

staging environment
# global
{
  email xoryves@googlemail.com
  acme_ca https://acme-staging-v02.api.letsencrypt.org/directory
}
# tls directive
tls {
  ca https://acme-staging-v02.api.letsencrypt.org/directory
}

crowdsec

Es kann die crowdsecurity/caddy collection verwendet werden.

Für Logs mit time_format iso8601 kann folgendes verwendet werden. Die crowdsecurity/base-http-scenarios collection und der Parser von x5s-infra/…​/caddy-logs.yaml. Der Parser muss unter /etc/crowdsec/parsers/s01-parse/ abgelegt werden. Es ist ein angepasster Parser aus der crowdsecurity/caddy collection. Das direkte Verändern des Parsers aus der collection würde zu einem tainted status führen.

/etc/crowdsec/acquis.yaml
filenames:
  - /var/log/caddy/*.log
labels:
  type: caddy
/etc/crowdsec/profiles.yaml
name: http_captcha_remediation
filters:
  - Alert.Remediation == true && Alert.GetScenario() contains '/http'
decisions:
  - type: captcha
    duration: 4h
on_success: break
/etc/crowdsec/parsers/s01-parse/caddy-logs.yaml
nodes:
  - nodes:
    - grok:
        pattern: '%{TIMESTAMP_ISO8601:timestamp}'
        expression: JsonExtract(evt.Line.Raw, 'ts')
        statics:
          - target: evt.StrTime
            expression: evt.Parsed.timestamp

Referenzen