forked from coop-cloud/traefik
Compare commits
10
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
14f0d953a4 | ||
|
|
7c8a44bd26 | ||
|
|
063e6b4a5a | ||
|
|
796434a9fe
|
||
|
|
5fc35796ea | ||
|
|
d48982ae9c | ||
|
|
1a18a99b8f | ||
|
|
0ff4ef759b | ||
|
|
e5229b9ad2 | ||
|
|
8a73e4e21a |
+6
-5
@@ -159,6 +159,10 @@ WRITE_TIMEOUT=0s
|
|||||||
#COMPOSE_FILE="$COMPOSE_FILE:compose.smtp.yml"
|
#COMPOSE_FILE="$COMPOSE_FILE:compose.smtp.yml"
|
||||||
#SMTP_ENABLED=1
|
#SMTP_ENABLED=1
|
||||||
|
|
||||||
|
## PGSQL recipe open port 5432
|
||||||
|
#COMPOSE_FILE="$COMPOSE_FILE:compose.pgsql.yml"
|
||||||
|
#PGSQL_ENABLED=1
|
||||||
|
|
||||||
## Compy
|
## Compy
|
||||||
#COMPOSE_FILE="$COMPOSE_FILE:compose.compy.yml"
|
#COMPOSE_FILE="$COMPOSE_FILE:compose.compy.yml"
|
||||||
#COMPY_ENABLED=1
|
#COMPY_ENABLED=1
|
||||||
@@ -223,11 +227,8 @@ WRITE_TIMEOUT=0s
|
|||||||
#ANUBIS_SERVE_ROBOTS_TXT=true
|
#ANUBIS_SERVE_ROBOTS_TXT=true
|
||||||
#ANUBIS_SLOG_LEVEL=INFO
|
#ANUBIS_SLOG_LEVEL=INFO
|
||||||
|
|
||||||
## Crowdsec
|
## Anubis metrics
|
||||||
#COMPOSE_FILE="$COMPOSE_FILE:compose.crowdsec.yml"
|
#COMPOSE_FILE="$COMPOSE_FILE:compose.anubis-metrics.yml"
|
||||||
#CROWDSEC_ENABLED=1
|
|
||||||
#CROWDSEC_BOUNCER_ENABLED=1
|
|
||||||
#CROWDSEC_TRAEFIK_BOUNCER_API_KEY="some-api-key"
|
|
||||||
|
|
||||||
## Enable onion service support
|
## Enable onion service support
|
||||||
#ONION_ENABLED=1
|
#ONION_ENABLED=1
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
> https://docs.traefik.io
|
> https://docs.traefik.io
|
||||||
|
|
||||||
<!-- metadata -->
|
<!-- metadata -->
|
||||||
* **Maintainer**: [@p4u1](https://git.coopcloud.tech/p4u1), [@decentral1se](https://git.coopcloud.tech/decentral1se), [@javielico](https://git.coopcloud.tech/javielico), Local-IT: [@moritz](https://git.coopcloud.tech/moritz), [@msimon](https://git.coopcloud.tech/simon), [@carla](https://git.coopcloud.tech/carla)
|
* **Maintainer**: [@p4u1](https://git.coopcloud.tech/p4u1), [@javielico](https://git.coopcloud.tech/javielico), Local-IT: [@moritz](https://git.coopcloud.tech/moritz), [@msimon](https://git.coopcloud.tech/simon), [@carla](https://git.coopcloud.tech/carla)
|
||||||
* **Status**: `stable`
|
* **Status**: `stable`
|
||||||
* **Category**: Utilities
|
* **Category**: Utilities
|
||||||
* **Features**: ?
|
* **Features**: ?
|
||||||
@@ -72,51 +72,8 @@ After deploying these changes, go to each recipe that supports Anubis
|
|||||||
and follow the process there. **Enabling Anubis here is not enough for
|
and follow the process there. **Enabling Anubis here is not enough for
|
||||||
protection your apps.**
|
protection your apps.**
|
||||||
|
|
||||||
## Crowdsec
|
If you want to collect Prometheus metrics for Anubis, for instance with
|
||||||
|
[monitoring-ng](/monitoring-ng), uncomment the "Anubis metrics" section.
|
||||||
IMPORTANT even though Crowdsec is Open Source, the software sends information of the attacker IP and what decision(ban or captcha) to a centralized server for communit managed block lists.
|
|
||||||
|
|
||||||
On first deployment you need to generate an empty secret, because the lapi key is created at runtime.
|
|
||||||
```
|
|
||||||
abra app secret insert <domain> crowdsec_lapi_key v1
|
|
||||||
```
|
|
||||||
|
|
||||||
Then deploy your traefik recipe with the crowdsec compose and variables enabled and set `CROWDSEC_BOUNCER_ENABLED=0` to prevent initializing the bouncer that has no key yet.
|
|
||||||
|
|
||||||
When traefik is running, generate the LAPI key with the following command:
|
|
||||||
```
|
|
||||||
abra app run <domain> crowdsec cscli bouncers add crowdsecBouncer
|
|
||||||
```
|
|
||||||
|
|
||||||
After that insert the LAPI key(command below) and redeploy traefik with `CROWDSEC_BOUNCER_ENABLED=1` and `CROWDSEC_TRAEFIK_CONFIG_VERSION=v2`.
|
|
||||||
```
|
|
||||||
abra app secret insert <domain> crowdsec_lapi_key v2 -f -t <path-to/lapi-key-file>
|
|
||||||
```
|
|
||||||
|
|
||||||
When it is up and running go to the recipe you want to protect and add the following snippet and redeploy.
|
|
||||||
```
|
|
||||||
---
|
|
||||||
version: "3.8"
|
|
||||||
services:
|
|
||||||
app:
|
|
||||||
deploy:
|
|
||||||
labels:
|
|
||||||
- "traefik.http.routers.${STACK_NAME}.middlewares=crowdsec@file"
|
|
||||||
```
|
|
||||||
|
|
||||||
You can see if it is working by checking the ban list.
|
|
||||||
```
|
|
||||||
abra app run <domain> crowdsec cscli decisions list
|
|
||||||
```
|
|
||||||
|
|
||||||
When there are not bans yet you can try by banning your own IP.
|
|
||||||
```
|
|
||||||
abra app run <domain> crowdsec cscli decisions add --ip <your-ip> -d 10m # this will be effective 10min
|
|
||||||
```
|
|
||||||
Remove it with:
|
|
||||||
```
|
|
||||||
abra app run <domain> crowdsec cscli decisions remove --ip <your-ip> # this can still take a few minutes because of cache
|
|
||||||
```
|
|
||||||
|
|
||||||
## Enabling onion service
|
## Enabling onion service
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
export TRAEFIK_YML_VERSION=v33
|
export TRAEFIK_YML_VERSION=v32
|
||||||
export FILE_PROVIDER_YML_VERSION=v15
|
export FILE_PROVIDER_YML_VERSION=v12
|
||||||
export ENTRYPOINT_VERSION=v5
|
export ENTRYPOINT_VERSION=v5
|
||||||
export CROWDSEC_TRAEFIK_CONFIG_VERSION=v1
|
export ANUBIS_YML_VERSION=v1
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
bots:
|
||||||
|
- import: (data)/meta/default-config.yaml
|
||||||
|
{{ if eq (env "ANUBIS_METRICS_ENABLED") "true" }}
|
||||||
|
metrics:
|
||||||
|
bind: ":9090"
|
||||||
|
network: "tcp"
|
||||||
|
{{ end }}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
---
|
||||||
|
version: "3.8"
|
||||||
|
services:
|
||||||
|
anubis:
|
||||||
|
environment:
|
||||||
|
ANUBIS_METRICS_ENABLED: "true"
|
||||||
|
deploy:
|
||||||
|
labels:
|
||||||
|
- "prometheus.io/scrape=true"
|
||||||
|
- "prometheus.io/port=9090"
|
||||||
|
- "prometheus.io/path=/metrics"
|
||||||
+10
-1
@@ -7,7 +7,7 @@ services:
|
|||||||
- "traefik.http.middlewares.anubis.forwardauth.address=http://anubis:8080/.within.website/x/cmd/anubis/api/check"
|
- "traefik.http.middlewares.anubis.forwardauth.address=http://anubis:8080/.within.website/x/cmd/anubis/api/check"
|
||||||
- "traefik.http.middlewares.anubis.forwardauth.trustForwardHeader=true"
|
- "traefik.http.middlewares.anubis.forwardauth.trustForwardHeader=true"
|
||||||
anubis:
|
anubis:
|
||||||
image: "ghcr.io/techarohq/anubis:v1.25.0"
|
image: "ghcr.io/techarohq/anubis:v1.27.0"
|
||||||
environment:
|
environment:
|
||||||
BIND: ":8080"
|
BIND: ":8080"
|
||||||
TARGET: " "
|
TARGET: " "
|
||||||
@@ -19,6 +19,10 @@ services:
|
|||||||
OG_CACHE_CONSIDER_HOST: "${ANUBIS_OG_CACHE_CONSIDER_HOST}"
|
OG_CACHE_CONSIDER_HOST: "${ANUBIS_OG_CACHE_CONSIDER_HOST}"
|
||||||
SERVE_ROBOTS_TXT: "${ANUBIS_SERVE_ROBOTS_TXT}"
|
SERVE_ROBOTS_TXT: "${ANUBIS_SERVE_ROBOTS_TXT}"
|
||||||
SLOG_LEVEL: "${ANUBIS_SLOG_LEVEL:-INFO}"
|
SLOG_LEVEL: "${ANUBIS_SLOG_LEVEL:-INFO}"
|
||||||
|
POLICY_FNAME: "/data/cfg/botPolicy.yaml"
|
||||||
|
configs:
|
||||||
|
- source: anubis_yml
|
||||||
|
target: /data/cfg/botPolicy.yaml
|
||||||
networks:
|
networks:
|
||||||
- proxy
|
- proxy
|
||||||
deploy:
|
deploy:
|
||||||
@@ -29,3 +33,8 @@ services:
|
|||||||
- "traefik.http.routers.anubis.entrypoints=web-secure"
|
- "traefik.http.routers.anubis.entrypoints=web-secure"
|
||||||
- "traefik.http.services.anubis.loadbalancer.server.port=8080"
|
- "traefik.http.services.anubis.loadbalancer.server.port=8080"
|
||||||
- "traefik.http.routers.anubis.service=anubis"
|
- "traefik.http.routers.anubis.service=anubis"
|
||||||
|
configs:
|
||||||
|
anubis_yml:
|
||||||
|
name: ${STACK_NAME}_anubis_yml_${ANUBIS_YML_VERSION}
|
||||||
|
file: anubis.yml.tmpl
|
||||||
|
template_driver: golang
|
||||||
|
|||||||
@@ -1,42 +0,0 @@
|
|||||||
version: "3.8"
|
|
||||||
services:
|
|
||||||
app:
|
|
||||||
deploy:
|
|
||||||
labels:
|
|
||||||
- "traefik.http.routers.${STACK_NAME}.middlewares=crowdsec@file"
|
|
||||||
secrets:
|
|
||||||
- crowdsec_lapi_key
|
|
||||||
crowdsec:
|
|
||||||
image: crowdsecurity/crowdsec:v1.7.8
|
|
||||||
environment:
|
|
||||||
GID: "${GID-1000}"
|
|
||||||
COLLECTIONS: "crowdsecurity/linux crowdsecurity/traefik"
|
|
||||||
volumes:
|
|
||||||
- crowdsec-db:/var/lib/crowdsec/data/
|
|
||||||
- crowdsec-config:/etc/crowdsec/
|
|
||||||
- traefik-logs:/var/log/traefik/:ro
|
|
||||||
configs:
|
|
||||||
- source: crowdsec_traefik_config
|
|
||||||
target: /etc/crowdsec/acquis.d/traefik_config.yaml
|
|
||||||
mode: 0555
|
|
||||||
networks:
|
|
||||||
- internal
|
|
||||||
deploy:
|
|
||||||
update_config:
|
|
||||||
failure_action: rollback
|
|
||||||
order: stop-first
|
|
||||||
|
|
||||||
configs:
|
|
||||||
crowdsec_traefik_config:
|
|
||||||
name: ${STACK_NAME}_crowdsec_traefik_${CROWDSEC_TRAEFIK_CONFIG_VERSION}
|
|
||||||
file: crowdsec_traefik_config.yaml.tmpl
|
|
||||||
template_driver: golang
|
|
||||||
|
|
||||||
secrets:
|
|
||||||
crowdsec_lapi_key:
|
|
||||||
external: true
|
|
||||||
name: ${STACK_NAME}_crowdsec_lapi_key_${SECRET_CROWDSEC_LAPI_KEY_VERSION}
|
|
||||||
|
|
||||||
volumes:
|
|
||||||
crowdsec-db:
|
|
||||||
crowdsec-config:
|
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
---
|
||||||
|
version: "3.8"
|
||||||
|
|
||||||
|
services:
|
||||||
|
app:
|
||||||
|
environment:
|
||||||
|
- PGSQL_ENABLED
|
||||||
|
ports:
|
||||||
|
- target: 5432
|
||||||
|
published: 5432
|
||||||
|
protocol: tcp
|
||||||
|
mode: host
|
||||||
+3
-5
@@ -3,7 +3,7 @@ version: "3.8"
|
|||||||
|
|
||||||
services:
|
services:
|
||||||
app:
|
app:
|
||||||
image: "traefik:v3.7.8"
|
image: "traefik:v3.7.10"
|
||||||
# Note(decentral1se): *please do not* add any additional ports here.
|
# Note(decentral1se): *please do not* add any additional ports here.
|
||||||
# Doing so could break new installs with port conflicts. Please use
|
# Doing so could break new installs with port conflicts. Please use
|
||||||
# the usual `compose.$app.yml` approach for any additional ports
|
# the usual `compose.$app.yml` approach for any additional ports
|
||||||
@@ -19,7 +19,6 @@ services:
|
|||||||
volumes:
|
volumes:
|
||||||
- "letsencrypt:/etc/letsencrypt"
|
- "letsencrypt:/etc/letsencrypt"
|
||||||
- "file-providers:/etc/traefik/file-providers"
|
- "file-providers:/etc/traefik/file-providers"
|
||||||
- "traefik-logs:/var/log/traefik"
|
|
||||||
configs:
|
configs:
|
||||||
- source: traefik_yml
|
- source: traefik_yml
|
||||||
target: /etc/traefik/traefik.yml
|
target: /etc/traefik/traefik.yml
|
||||||
@@ -58,12 +57,12 @@ services:
|
|||||||
- "traefik.http.routers.${STACK_NAME}.tls.certresolver=${LETS_ENCRYPT_ENV}"
|
- "traefik.http.routers.${STACK_NAME}.tls.certresolver=${LETS_ENCRYPT_ENV}"
|
||||||
- "traefik.http.routers.${STACK_NAME}.service=api@internal"
|
- "traefik.http.routers.${STACK_NAME}.service=api@internal"
|
||||||
- "traefik.http.routers.${STACK_NAME}.middlewares=security@file"
|
- "traefik.http.routers.${STACK_NAME}.middlewares=security@file"
|
||||||
- "coop-cloud.${STACK_NAME}.version=6.0.0+v3.7.7"
|
- "coop-cloud.${STACK_NAME}.version=6.1.0+v3.7.10"
|
||||||
- "coop-cloud.${STACK_NAME}.timeout=${TIMEOUT}"
|
- "coop-cloud.${STACK_NAME}.timeout=${TIMEOUT}"
|
||||||
- "backupbot.backup=${ENABLE_BACKUPS:-true}"
|
- "backupbot.backup=${ENABLE_BACKUPS:-true}"
|
||||||
|
|
||||||
socket-proxy:
|
socket-proxy:
|
||||||
image: lscr.io/linuxserver/socket-proxy:3.4.2
|
image: lscr.io/linuxserver/socket-proxy:3.4.3
|
||||||
deploy:
|
deploy:
|
||||||
endpoint_mode: dnsrr
|
endpoint_mode: dnsrr
|
||||||
environment:
|
environment:
|
||||||
@@ -122,4 +121,3 @@ configs:
|
|||||||
volumes:
|
volumes:
|
||||||
letsencrypt:
|
letsencrypt:
|
||||||
file-providers:
|
file-providers:
|
||||||
traefik-logs:
|
|
||||||
|
|||||||
@@ -1,5 +0,0 @@
|
|||||||
filenames:
|
|
||||||
- /var/log/traefik/*
|
|
||||||
labels:
|
|
||||||
type: traefik
|
|
||||||
|
|
||||||
+1
-11
@@ -22,16 +22,6 @@ http:
|
|||||||
basicAuth:
|
basicAuth:
|
||||||
usersFile: "/run/secrets/usersfile"
|
usersFile: "/run/secrets/usersfile"
|
||||||
{{ end }}
|
{{ end }}
|
||||||
{{ if eq (env "CROWDSEC_ENABLED") "1" }}
|
|
||||||
crowdsec:
|
|
||||||
plugin:
|
|
||||||
bouncer:
|
|
||||||
enabled: {{ if eq (env "CROWDSEC_BOUNCER_ENABLED") "1" }}true{{ else }}false{{ end }}
|
|
||||||
logLevel: DEBUG
|
|
||||||
crowdsecMode: live
|
|
||||||
crowdsecLapiKey: "{{ if eq (env "CROWDSEC_BOUNCER_ENABLED") "1" }}{{ secret "crowdsec_lapi_key" }}{{ else }}please_set_CROWDSEC_BOUNCER_ENABLED_to_1{{ end }}"
|
|
||||||
crowdsecLapiHost: crowdsec:8080
|
|
||||||
{{ end }}
|
|
||||||
security:
|
security:
|
||||||
headers:
|
headers:
|
||||||
frameDeny: true
|
frameDeny: true
|
||||||
@@ -71,4 +61,4 @@ tls:
|
|||||||
certificates:
|
certificates:
|
||||||
- certFile: /run/secrets/ssl_cert
|
- certFile: /run/secrets/ssl_cert
|
||||||
keyFile: /run/secrets/ssl_key
|
keyFile: /run/secrets/ssl_key
|
||||||
{{ end }}
|
{{ end }}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
Adds option ability to open ports for PGSQL recipe, new version of anubis, and ability to add anubis metrics on this release.
|
||||||
@@ -5,11 +5,6 @@ core:
|
|||||||
log:
|
log:
|
||||||
level: {{ env "LOG_LEVEL" }}
|
level: {{ env "LOG_LEVEL" }}
|
||||||
maxAge: {{ env "LOG_MAX_AGE" }}
|
maxAge: {{ env "LOG_MAX_AGE" }}
|
||||||
{{- if eq (env "CROWDSEC_ENABLED") "1" }}
|
|
||||||
filePath: "/var/log/traefik/traefik.log"
|
|
||||||
accessLog:
|
|
||||||
filePath: "/var/log/traefik/access.log"
|
|
||||||
{{- end }}
|
|
||||||
|
|
||||||
providers:
|
providers:
|
||||||
swarm:
|
swarm:
|
||||||
@@ -162,11 +157,3 @@ certificatesResolvers:
|
|||||||
- "1.1.1.1:53"
|
- "1.1.1.1:53"
|
||||||
- "9.9.9.9:53"
|
- "9.9.9.9:53"
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
|
||||||
{{ if eq (env "CROWDSEC_ENABLED") "1" }}
|
|
||||||
experimental:
|
|
||||||
plugins:
|
|
||||||
bouncer:
|
|
||||||
moduleName: github.com/maxlerebourg/crowdsec-bouncer-traefik-plugin
|
|
||||||
version: v1.6.0
|
|
||||||
{{- end }}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user