# Настройка Nginx Proxy Manager + Crowdsec

**URL:** <https://383.su/t/nastrojka-nginx-proxy-manager-crowdsec/165>\
**Category:** Софт\
**Tags:** гайд, сервер, self-hosted\
**Created:** [11.Сентябрь.2023 04:02:32 UTC](https://383.su/t/nastrojka-nginx-proxy-manager-crowdsec/165 "2023-09-11T04:02:32Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![Cyber.Craft](https://383.su/user_avatar/383.su/cyber.craft/32/945_2.png) [@Cyber.Craft](https://383.su/u/Cyber.Craft)\
**Post date:** [11.Сентябрь.2023 04:02:32 UTC](https://383.su/t/nastrojka-nginx-proxy-manager-crowdsec/165/1 "2023-09-11T04:02:32Z")

</div>

![Crowdsec](https://383.su/uploads/default/original/1X/24db1fe469656bab71e87433af663661f066dffd.jpeg)

## Что вам понадобится

- Небольшой опыт использования docker
- Машина с docker уже настроена для этого руководства я буду использовать экземпляр portainer
- Домен, уже указывающий на ваш старый экземпляр Nginx proxy manager (я предполагаю, что вы настроили его с помощью базы данных)

## Настройка Nginx Proxy Manager

Во-первых, нам нужно будет настроить Nginx Proxy Manager через его docker-compose Я буду использовать форк baudneo, потому что нам все равно нужно будет использовать этот форк позже. Убедитесь, что вы установили для своих паролей к базе данных что-то другое.  
Вам также нужно будет выполнить следующее перед запуском `docker-compose up -d`

```auto
mkdir /Nginx-Proxy-Manger
touch /Nginx-Proxy-Manger/crowdsec-openresty-bouncer.conf

```

```auto
# https://hub.docker.com/r/baudneo/nginx-proxy-manager
# https://www.crowdsec.net/blog/crowdsec-with-nginx-proxy-manager
version: "3"
services:
  app:
    # image: 'jc21/nginx-proxy-manager:latest'
    image: 'baudneo/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      # These ports are in format :
      - '80:80' # Public HTTP Port
      - '443:443' # Public HTTPS Port
      - '81:81' # Admin Web Port
      # Add any other Stream port you want to expose
      # - '21:21' # FTP
    environment:
      # crowdsec config
      TZ: Europe/Moscow
      ADMIN_PANEL_LOG: "1"
      CROWDSEC_BOUNCER: "1"
      OPENRESTY_DEBUG: "0"

      CROWDSEC_LAPI: "http://crowdsecip:8080/"
      CROWDSEC_KEY: "yourkeyhere"

      DB_MYSQL_HOST: "172.25.0.3"
      DB_MYSQL_PORT: 3306
      DB_MYSQL_USER: "npm"
      DB_MYSQL_PASSWORD: "Verygoodpassword"
      DB_MYSQL_NAME: "npm"
      # Uncomment this if IPv6 is not enabled on your host
      # DISABLE_IPV6: 'true'
    volumes:
      - /Nginx-Proxy-Manger/data:/data
      - /Nginx-Proxy-Manger/letsencrypt:/etc/letsencrypt
      - /Nginx-Proxy-Manger/crowdsec-openresty-bouncer.conf:/data/crowdsec/crowdsec-openresty-bouncer.conf
    depends_on:
      - db
    networks:
      nginx:
        ipv4_address: 172.25.0.2

  db:
    image: 'jc21/mariadb-aria:latest'
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: 'Verygoodpassword'
      MYSQL_DATABASE: 'npm'
      MYSQL_USER: 'npm'
      MYSQL_PASSWORD: 'Verygoodpassword'
    volumes:
      - /Nginx-Proxy-Manger/data/mysql:/var/lib/mysql
    networks:
      nginx:
        ipv4_address: 172.25.0.3

networks:
  nginx:
    ipam:
      driver: default
      config:
        - subnet: 172.25.0.0/16

```

Теперь запустите `docker-compose up -d –force-recreate`

Теперь перейдите по ссылке [http://dockerhost:81](http://dockerhost:81) и войдите в систему

### Пароль по умолчанию при первой настройке

**Логин** : “admin@example.com”  
**Пароль** : “changeme”

## Настройка Crowdsec и Метабазы

Теперь нам нужно будет настроить Crowdsecs agent для отслеживания журналов наших прокси-менеджеров Nginx.

#### Шаг первый выполните следующие команды

`nano ./crowdsec/acquis.yaml`

Теперь поместите в этот файл следующее

```auto
# https://www.reddit.com/r/selfhosted/comments/ujdzwu/how_do_i_install_crowdsec_on_my_nginx_proxy/
# https://hub.crowdsec.net/author/crowdsecurity/collections/nginx-proxy-manager
filenames:
 - /var/logs/default-host_access.log
 - /var/logs/proxy-host-*_access.log
 - /var/logs/proxy-host-*_error.log
labels:
  type: nginx-proxy-manager

```

#### Шаг второй отредактируйте / создайте этот файл

`nano ./crowdsec/profiles.yaml`

теперь поместите в этот файл следующее

```auto
name: captcha_remediation
filters:
- Alert.Remediation == true && Alert.GetScope() == "Ip" && Alert.GetScenario() startsWith "crowdsecurity/http-"
decisions:
- type: captcha
  duration: 4h
on_success: break
---

name: default_ip_remediation
#debug: true
filters:
 - Alert.Remediation == true && Alert.GetScope() == "Ip"
decisions:
 - type: ban
   duration: 4h
# notifications:
# - slack_default # Set the webhook in /etc/crowdsec/notifications/slack.yaml before enabling this.
# - splunk_default # Set the splunk url and token in /etc/crowdsec/notifications/splunk.yaml before enabling this.
# - http_default # Set the required http parameters in /etc/crowdsec/notifications/http.yaml before enabling this.
# - email_default # Set the required email parameters in /etc/crowdsec/notifications/email.yaml before enabling this.
on_success: break

```

#### Теперь пришло время для файла docker-compose

```auto
version: '3'
# https://github.com/crowdsecurity/example-docker-compose/blob/main/docker-compose.yml

services:
  crowdsec:
    image: crowdsecurity/crowdsec:v1.3.4
    restart: always
    ports:
      - 8080:8080
    environment:
      # список приложений, которые мы хотим установить
      #https://hub.crowdsec.net/author/crowdsecurity/collections/nginx
      COLLECTIONS: "crowdsecurity/linux crowdsecurity/nginx-proxy-manager crowdsecurity/base-http-scenarios"
      #COLLECTIONS: "crowdsecurity/cloudflare-bouncer"
      GID: "${GID-1000}"
      TZ: Europe/Moscow
    volumes:
      - ./crowdsec/acquis.yaml:/etc/crowdsec/acquis.yaml
      - ./crowdsec/profiles.yaml:/etc/crowdsec/profiles.yaml
      - /Nginx-Proxy-Manger/data/logs:/var/logs
      - crowdsec-db:/var/lib/crowdsec/data/
      - crowdsec-config:/etc/crowdsec/
    networks:
      crowdsec:
        ipv4_address: 172.23.0.2

  # метабаза, потому что безопасность — это круто, но дашборды — еще круче
  dashboard:
    # мы используем собственный Dockerfile, чтобы в метабазе появлялись предварительно настроенные информационные панели.
    build: ./crowdsec/dashboard
    restart: always
    ports:
      - 3000:3000
    environment:
      MB_DB_FILE: /data/metabase.db
      MGID: "${GID-1000}"
      TZ: Australia/Perth
    depends_on:
      - 'crowdsec'
    volumes:
      - crowdsec-db:/metabase-data/
    networks:
      crowdsec:
        ipv4_address: 172.23.0.3

volumes:
  logs:
  crowdsec-db:
  crowdsec-config:

networks:
  crowdsec:
    ipam:
      driver: default
      config:
        - subnet: 172.23.0.0/24

```

Создайте файл docker для панели мониторинга

`mkdir ./crowdsec/dashboard`  
`nano ./crowdsec/dashboard/Dockerfile`

Вставьте в него следующее

```auto
FROM metabase/metabase
RUN mkdir /data/ && wget https://crowdsec-statics-assets.s3-eu-west-1.amazonaws.com/metabase_sqlite.zip && unzip metabase_sqlite.zip -d /data/

```

Теперь запустите `docker-compose up -d –force-recreate`

Проверьте, что агент правильно понимает журналы, с помощью следующей команды. Убедитесь, что он проанализировал несколько строк.

`docker exec crowdsec cscli metrics`

## Настройка Nginx Proxy Manager bouncer с помощью Crowdsec

Вам нужно будет получить ключ API от вашего локального агента, для этого нужно будет выполнить следующую команду. Убедитесь, что вы поместили этот ключ в безопасное место, потому что нет способа найти ключ после первоначальной генерации.

`docker exec crowdsec cscli bouncers add npm-proxy`

Теперь мы собираемся взять этот ключ и добавить его в docker-compose Nginx proxy manager, изменив следующее в вашем файле docker-compose.

Вам также нужно будет добавить IP-адрес вашего агента crowdsec, это будет [http://dockerhostip:8080/](http://dockerhostip:8080/)

`CROWDSEC_LAPI: "http://crowdsecip:8080/" CROWDSEC_KEY: "yourkeyhere"`

Вам также нужно будет отредактировать следующий файл /Nginx-Proxy-Manger/crowdsec-openresty-bouncer.conf и ввести в него следующее вместе с секретным ключом reCAPTCHA и ключом сайта, который вы можете создать здесь .

```auto
ENABLED=true
API_URL=http://dockerhostip:8080
API_KEY=API-Key-Here
CACHE_EXPIRATION=1
# bounce for all type of remediation that the bouncer can receive from the local API
BOUNCING_ON_TYPE=all
FALLBACK_REMEDIATION=ban
REQUEST_TIMEOUT=3000
UPDATE_FREQUENCY=10
# live or stream
MODE=live
# exclude the bouncing on those location
EXCLUDE_LOCATION=
#those apply for "ban" action
# /!\ REDIRECT_LOCATION and RET_CODE can't be used together. REDIRECT_LOCATION take priority over RET_CODE
BAN_TEMPLATE_PATH=/crowdsec/templates/ban.html
REDIRECT_LOCATION=
RET_CODE=
#those apply for "captcha" action
# ReCaptcha Secret Key
SECRET_KEY= ReCaptchaSecretkeyhere
# Recaptcha Site key
SITE_KEY=RecaptchaSitekeyhere
CAPTCHA_TEMPLATE_PATH=/crowdsec/templates/captcha.html
CAPTCHA_EXPIRATION=3600

```

Теперь запустите `docker-compose up -d –force-recreate`

## Тестирование

Чтобы проверить, что всё было правильно настроено, мы запретим себе делать это, выполнив следующие команды:

`# To ban docker exec crowdsec cscli decisions add --ip 192.168.0.101`

`# To unban docker exec crowdsec cscli decisions add --ip 192.168.0.101`
