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