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.





















