metalnikovg.ru
MetalnikovG.ru

Настройка Crowdsec для защиты SSH

Banner.png
Опубликовано
//
3 мин. чтения

CrowdSec является отличной современной альтернативой Fail2Ban для защиты SSH и других сервисов. Он сочетает в себе простоту использования Fail2Ban с дополнительными преимуществами, такими как совместный механизм обнаружения угроз, автоматизация и расширенные возможности анализа угроз.

Если вы уже используете Crowdsec для защиты Traefik и Docker контейнеров, то нужно немного изменить файл docker-compose. А именно пробросить порт API 8080 из контейнера на localhost и примонтировать директорию /var/log с вашего хоста в директорию /var/logs/ внутри контейнера, для того что бы crowdsec мог считывать логи SSH. Дополнительных коллекций добавлять не требуется, так как у нас уже имеется crowdsecurity/linux а в нее уже включена коллекция sshd.

Настройка Crowdsec

docker-compose.yml
---
services:
  crowdsec:
    image: crowdsecurity/crowdsec:latest
    container_name: crowdsec
    ports:
      - "127.0.0.1:8080:8080"
    environment:
      GID: "${GID-1000}"
      UID: "${UID-1000}"
      COLLECTIONS: "crowdsecurity/linux crowdsecurity/traefik crowdsecurity/appsec-virtual-patching crowdsecurity/appsec-generic-rules"
      TZ: Europe/Moscow
    volumes:
      - ./acquis.yaml:/etc/crowdsec/acquis.yaml
      - ./db:/var/lib/crowdsec/data/
      - ./config:/etc/crowdsec/
      - /home/crox/docker/traefik/logs:/var/log/traefik/:ro
      - /var/log:/var/logs/:ro
    networks:
      - proxy
    security_opt:
      - no-new-privileges:true
    restart: unless-stopped
networks:
  proxy:
    external: true

Проверяем что порт отвечает:

curl -vv http://localhost:8080

Добавляем путь к файлу логов внутри контейнера в acquis.yaml:

acquis.yaml
---
filenames:
  - /var/logs/auth.log
labels:
  type: syslog

---

Подключение баунсера

Копируем ссылку на последнюю версию Фаерволл Баунсера со страницы релизов официального репозитория Github, распаковываем и запускаем скрипт установки:

wget https://github.com/crowdsecurity/cs-firewall-bouncer/releases/download/v0.0.31/crowdsec-firewall-bouncer.tgz
tar xvzf crowdsec-firewall-bouncer.tgz
cd crowdsec-firewall-bouncer-v0.0.31
sudo ./install.sh

В процессе установки баунсера вам предложат выбрать nftables или iptables если установлены оба инструмента.

Found nftables (default) and iptables, which firewall do you want to use (nftables/iptables) ?

Создаем LAPI-key для подключения баунсера и копируем его:

docker exec crowdsec cscli bouncers add crowdsec-firewall-bouncer

Открываем файл конфигурации баунсера:

sudo nano /etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml

Указываем наш api_url, api-key, отключаем IPv6.

NOTE

Если вы предпочли использовать iptables раскомментируйте строку - DOCKER-USER

crowdsec-firewall-bouncer.yaml
mode: nftables
update_frequency: 10s
log_mode: file
log_dir: /var/log/
log_level: info
log_compression: true
log_max_size: 100
log_max_backups: 3
log_max_age: 30
api_url: http://localhost:8080/
api_key: <API_KEY>
## TLS Authentication
# cert_path: /etc/crowdsec/tls/cert.pem
# key_path: /etc/crowdsec/tls/key.pem
# ca_cert_path: /etc/crowdsec/tls/ca.crt
insecure_skip_verify: false
disable_ipv6: true
deny_action: DROP
deny_log: false
supported_decisions_types:
  - ban
#to change log prefix
#deny_log_prefix: "crowdsec: "
#to change the blacklists name
blacklists_ipv4: crowdsec-blacklists
blacklists_ipv6: crowdsec6-blacklists
#type of ipset to use
ipset_type: nethash
#if present, insert rule in those chains
iptables_chains:
  - INPUT
#  - FORWARD
#  - DOCKER-USER

## nftables
nftables:
  ipv4:
    enabled: true
    set-only: false
    table: crowdsec
    chain: crowdsec-chain
    priority: -10
  ipv6:
    enabled: false
    set-only: false
    table: crowdsec6
    chain: crowdsec6-chain
    priority: -10

nftables_hooks:
  - input
  - forward

# packet filter
pf:
  # an empty string disables the anchor
  anchor_name: ""

prometheus:
  enabled: false
  listen_addr: 127.0.0.1
  listen_port: 60601

Сохраняем конфигурацию и перезапускаем Firewall Bouncer с помощью следующей команды:

sudo systemctl restart crowdsec-firewall-bouncer.service

Проверяем, подключен ли Firewall Bouncer к CrowdSec API. Это можно сделать двумя способами. Во-первых, просмотрев логи firewall bouncer:

sudo cat /var/log/crowdsec-firewall-bouncer.log

Во-вторых, вы можете проверить список вышибал, подключенных к API CrowdSec, с помощью CLI:

docker exec crowdsec cscli bouncers list

Заключение

Мы настроили Crowdsec и подключили Firewall Bouncer для защиты SSH.