CrowdSec: защита SSH и nginx от подбора паролей и сканеров

0
13
Обложка статьи: CrowdSec: защита SSH и nginx от подбора паролей и сканеров

CrowdSec читает журналы сервиса, находит подбор паролей и сканирование, а bouncer блокирует такие адреса в firewall. Работает как fail2ban, но обменивается списками плохих адресов с сообществом. Ниже установка на Debian/Ubuntu и проверка.

CrowdSec или fail2ban

fail2ban CrowdSec
Принцип Правила на регулярках, бан после N ошибок Сценарии обнаружения + общий список репутации адресов
Настройка Один файл jail.local Коллекции из хаба, агент и отдельный bouncer
Когда выбрать Один сервер, нужно быстро и просто Несколько серверов, нужны готовые сценарии для nginx и других сервисов

Любой из них не заменяет отключение входа по паролю: hardening Linux.

Шаг 1. Установка агента

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

Скрипт добавляет репозиторий CrowdSec. Прочитайте его перед запуском, как любой скрипт из интернета. При установке агент сам находит SSH и системные журналы и подключает коллекцию crowdsecurity/linux.

Шаг 2. Журналы nginx

sudo cscli collections install crowdsecurity/nginx crowdsecurity/sshd
sudo tee /etc/crowdsec/acquis.d/nginx.yaml >/dev/null <<'EOF'
filenames:
  - /var/log/nginx/access.log
  - /var/log/nginx/error.log
labels:
  type: nginx
EOF
sudo systemctl reload crowdsec

Если каталог acquis.d не существует в вашей версии, добавьте этот блок в /etc/crowdsec/acquis.yaml через разделитель ---.

Шаг 3. Bouncer, который блокирует

Сам агент только обнаруживает. Блокировку делает bouncer:

sudo apt install crowdsec-firewall-bouncer-nftables   # или ...-iptables
sudo systemctl status crowdsec-firewall-bouncer

Если трафик идёт через Traefik, nginx в контейнере или Cloudflare, блокировка в firewall хоста не видит настоящий адрес клиента. Тогда нужен bouncer на уровне прокси. Проверьте, какой адрес пишется в журнал доступа.

Шаг 4. Внесите свои адреса в исключения

Чтобы не заблокировать себя, добавьте свои адреса в whitelist. Создайте /etc/crowdsec/parsers/s02-enrich/mywhitelists.yaml:

name: me/whitelist
description: "Whitelist for admin addresses"
whitelist:
  reason: "admin"
  ip:
    - "203.0.113.10"
  cidr:
    - "10.0.0.0/8"
sudo systemctl reload crowdsec

Как проверить

sudo cscli metrics                 # сколько строк прочитано и разобрано
sudo cscli bouncers list           # bouncer зарегистрирован и недавно отвечал
sudo cscli alerts list             # что обнаружено
sudo cscli decisions list          # какие адреса сейчас заблокированы

Тест без риска: добавьте блокировку тестового адреса и убедитесь, что она появилась в firewall.

sudo cscli decisions add --ip 192.0.2.1 --duration 5m --reason test
sudo nft list ruleset | grep 192.0.2.1
sudo cscli decisions delete --ip 192.0.2.1

Если metrics показывает ноль прочитанных строк, агент не видит журнал: проверьте путь и права на файл. Как читать события в целом: сбор логов. Документация: docs.crowdsec.net.

Оставьте свой ответ