CrowdSec
Система предотвращения атак на сетевые сервисы, подобная fail2ban, но куда более мощная, шустрая (написана на golang), да ещё и с коллективной безопасностью.
Установка
Пока не собрана в Альта, приходится работать с деб-пакетами.
- Скачать пару свежих пакетов под свою архитектуру из соответствующих источников:
- crowdsec — сама система;
- crowdsec-firewall-bouncer — «вышибала» неугодных IP-шников правилами предпочитаемого фаервола.
- Пересобрать их:
- epm repack crowdsec*.deb
- И наконец установить результаты пересборки:
- sudo epmi ./crowdsec*.rpm
- Если порт 8080 занят службой ahttpd, заменить таковой во всех
.yaml-конфигах из /etc/crowdsec/ и его подкаталогов — на 8070, к примеру.
Подключение
- Завести учётную запись на оф.сайте, указав рабочий адрес электропочты.
- Запросить API-авторизацию, добавить свой хост в систему и получить список доступных «защитников»:
cscli capi register cscli machines add <fqdn.host.dom> -a cscli hub update
- В результате чего будут созданы необходимые для запуска службы файлы:
- /etc/crowdsec/online_api_credentials.yaml;
- /etc/crowdsec/local_api_credentials.yaml;
- /var/lib/crowdsec/hub/.index.json.
- Задействовать «вышибалу».
- Создать ключ — к примеру:
cscli bouncers add nftables ... Api key for 'nftables': <цифробуквенный ключ> Please keep this key since you will not be able to retrieve it!
- В /etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml заменить переменные:
${BACKEND}на фамилию вышибалы (здесь — nftables),${API_KEY}на созданный предыдущим шагом ключ.
- Добавить правила фаервола (например — в /etc/nftables/nftables.nft):
table ip crowdsec { set crowdsec-blacklists { type ipv4_addr flags timeout } chain crowdsec-chain { type filter hook input priority filter; policy accept; ip saddr @crowdsec-blacklists drop } } table ip6 crowdsec6 { set crowdsec6-blacklists { type ipv6_addr flags timeout } chain crowdsec6-chain { type filter hook input priority filter; policy accept; ip6 saddr @crowdsec6-blacklists drop } }
- Создать ключ — к примеру:
- Запустить службы:
- systemctl enable --now crowdsec crowdsec-firewall-bouncer nftables
- Промотать приветственную страницу CrowdSec из п.1 до раздела Connect with the Console и исполнить приведённую там команду «зачисления» на свою учётку:
- cscli console enroll <ключ зачисления>
- В дальнейшем ключ будет всегда доступен через пункт меню Getting Started ⇾ Enroll an engine или по кнопке справа от имени входа.
- Обновив страницу, нажать кнопку и подтвердить «зачисление» из почтового сообщения.
Отслеживание угроз
- Проверить/изменить примеры в комплектном /etc/crowdsec/acquis.yaml — это либо лог-файлы защищаемых сервисов, либо системный журнал.
- Если мониторятся только сервисы, пишущие события в журнал, достаточно заменить содержимое этого конфига одним на всех:
source: journalctl journalctl_filter: - "_TRANSPORT=syslog" labels: type: syslog
- При отслеживании через сислог лишь нескольких журналируемых служб, можно поменять общий параметр отбора
_TRANSPORT=syslogна отдельные, к примеру.- "_SYSTEMD_UNIT=sshd.service" - "_SYSTEMD_UNIT=postfix.service" - "_SYSTEMD_UNIT=dovecot.service"
- Если мониторятся только сервисы, пишущие события в журнал, достаточно заменить содержимое этого конфига одним на всех:
- Добавить «защитников» для запущенных служб с удалённым подключением:
- cscli collections install crowdsecurity/sshd crowdsecurity/postfix crowdsecurity/dovecot
- список доступных: cscli collections list -a;
- задействованные: cscli collections list.
- cscli collections install crowdsecurity/sshd crowdsecurity/postfix crowdsecurity/dovecot
- Перечитать настройки:
- systemctl reload crowdsec
- Следить за блокировками в фаерволе:
- nft list ruleset
- ...или самим краудсеком (таблица Local Api Decisions):
- cscli metrics
- (на новом почтовике у меня за одну ночь туда улетело >16 тыс. айпишников)
Что дальше?..
Освоение системы для создания своих «защитников» — к примеру, таковые есть для nginx, но не для его форка angie. И не только.