Skip to main content

Установка и настройка CrowdSec на Ubuntu: защищаем SSH правильно

image.png


Пошаговое руководство по развертыванию CrowdSec на Ubuntu для защиты SSH-сервера от брутфорс-атак без избыточного блокирования.

Зачем нужен CrowdSec?

CrowdSec — современная система обнаружения вторжений, которая анализирует логи в реальном времени и автоматически блокирует подозрительную активность. В отличие от fail2ban, работает через центральную базу угроз и предоставляет более гибкие возможности настройки.

Преимущества для Ubuntu-сервера:

  • Автоматическая защита SSH от брутфорса
  • Интеграция с системными логами через journald
  • Минимальное влияние на производительность
  • Возможность участия в community-блоклистах

Быстрая установка

Установка Security Engine

#Linux
#Скачивание repository

curl -s https://install.crowdsec.net | sudo sh

#CrowdSec установка

apt install crowdsec

# Проверяем установку
sudo systemctl status crowdsec --no-pager
sudo cscli -h

Подключение правил для SSH

# Проверяем доступные коллекции
sudo cscli collections list -a | grep -E 'crowdsecurity/sshd'

# Вы можете посмотреть вообще все правила, crowdsec красиво отображает всё что установлено 
sudo cscli collections list -a

# Если по какой-то причине при авто-установке они не установились - устанавливаем правила для SSH
sudo cscli collections install crowdsecurity/sshd
sudo systemctl reload crowdsec

Установка Firewall Bouncer

Определяем тип брандмауэра

# Проверяем, что используется
sudo iptables -V
# Если видим 'nf_tables' — используется nftables

Установка соответствующего пакета

# Для nftables (Ubuntu 22.04+)
sudo apt install crowdsec-firewall-bouncer-nftables

# Для классического iptables
# sudo apt install crowdsec-firewall-bouncer-iptables

Настройка фильтрации

Чтобы bouncer блокировал только локальные угрозы SSH (не community-блоклисты):

sudo tee /etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml.local >/dev/null <<'YAML'
# Применяем только локальные решения
origins:
  - crowdsec
  - cscli
# Только сценарии SSH
scenarios_containing:
  - ssh
YAML

sudo systemctl restart crowdsec-firewall-bouncer

Создание белого списка

Обязательно добавьте свои IP-адреса в белый список:

# Создаем список доверенных адресов
sudo cscli allowlists create admin_ips

# Добавляем свои IP (замените на реальные!)
sudo cscli allowlists add admin_ips 203.0.113.10 198.51.100.0/24 -d "office network"

# Проверяем
sudo cscli allowlists list

Проверка работоспособности

1. Статус LAPI

sudo cscli lapi status
# Должно показать: "You can successfully interact with Local API (LAPI)"

2. Метрики системы

sudo cscli metrics show acquisition parsers scenarios
sudo cscli metrics show bouncers

3. Список bouncer'ов

sudo cscli bouncers list
sudo systemctl status crowdsec-firewall-bouncer --no-pager

4. Тестирование защиты

Сгенерируйте несколько неудачных попыток входа по SSH с другого адреса:

# После неудачных попыток проверьте алерты
sudo cscli alerts list --since 1h

# Проверьте решения о блокировке
sudo cscli decisions list --origin crowdsec

5. Проверка правил брандмауэра

Для nftables:

sudo nft list ruleset | sed -n '/table inet crowdsec/,/}/p'

Для iptables:

sudo iptables -S | grep -i crowdsec
sudo ipset list crowdsec-blacklists

Управление решениями

# Просмотр активных блокировок
sudo cscli decisions list

# Удаление конкретной блокировки
sudo cscli decisions delete --ip 192.168.1.100

# Удаление всех решений от определенного источника
sudo cscli decisions delete --origin crowdsec

# Добавление ручной блокировки
sudo cscli decisions add --ip 192.168.1.200 --duration 1h --reason "manual block"

Решение типичных проблем

Ошибка "address already in use" на порту 8080

Это нормально — systemd уже запустил службу. Проверьте статус:

sudo systemctl status crowdsec

Bouncer показывает "Inactive" в Console

Если cscli metrics show bouncers показывает активность — защита работает. "Inactive" в UI часто означает отсутствие недавнего трафика.

Проблемы с Docker

Если используете Docker с публичными портами, добавьте в конфиг bouncer'а:

iptables_chains:
  - DOCKER-USER

Минимальная конфигурация для продакшена

Базовая защита SSH включает:

  1. ✅ Установка Security Engine и Firewall Bouncer
  2. ✅ Настройка journald-источника для SSH
  3. ✅ Установка коллекции crowdsecurity/sshd
  4. ✅ Фильтрация bouncer'а (только SSH, только локальные решения)
  5. ✅ Создание allowlist для админских IP
  6. ✅ Проверка через cscli lapi status и метрики

Дополнительные возможности

Подключение к Community API (опционально)

# Проверка связи с центральным API
sudo cscli capi status

# Регистрация в Console (получите ключ на app.crowdsec.net)
sudo cscli console enroll <YOUR_ENROLL_KEY>
sudo cscli console status

Полезные алиасы

Добавьте в ~/.bashrc:

alias csc-alerts='sudo cscli alerts list --since 24h'
alias csc-decisions='sudo cscli decisions list'
alias csc-metrics='sudo cscli metrics'
alias csc-status='sudo cscli lapi status && sudo systemctl status crowdsec-firewall-bouncer'

Рекомендации по безопасности

  • Регулярно обновляйте правила: sudo cscli hub update && sudo cscli hub upgrade
  • Мониторьте метрики для выявления аномалий
  • Настройте логирование bouncer'а для аудита блокировок
  • Тестируйте восстановление после блокировки собственного IP

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