CrowdSec

Материал из ALT Linux Wiki

Система предотвращения атак на сетевые сервисы, подобная fail2ban, но куда более мощная, шустрая (написана на golang), да ещё и с коллективной безопасностью.

Установка

Пока не собрана в Альта, приходится работать с деб-пакетами.

  1. Скачать пару свежих пакетов под свою архитектуру из соответствующих источников:
    • crowdsec — сама система;
    • crowdsec-firewall-bouncer — «вышибала» неугодных IP-шников правилами предпочитаемого фаервола.
  2. Пересобрать их:
    epm repack crowdsec*.deb
  3. И наконец установить результаты пересборки:
    sudo epmi ./crowdsec*.rpm
  4. Если порт 8080 занят службой ahttpd, заменить таковой во всех .yaml-конфигах из /etc/crowdsec/ и его подкаталогов — на 8070, к примеру.

Подключение

  1. Завести учётную запись на оф.сайте, указав рабочий адрес электропочты.
  2. Запросить 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.
  3. Задействовать «вышибалу».
    • Создать ключ — к примеру:
      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
          }
      }
      
  4. Запустить службы:
    systemctl enable --now crowdsec crowdsec-firewall-bouncer nftables
  5. Промотать приветственную страницу CrowdSec из п.1 до раздела Connect with the Console и исполнить приведённую там команду «зачисления» на свою учётку:
    cscli console enroll <ключ зачисления>
    В дальнейшем ключ будет всегда доступен через пункт меню Getting Started ⇾ Enroll an engine или по кнопке Enroll command справа от имени входа.
  6. Обновив страницу, нажать кнопку Accept enroll и подтвердить «зачисление» из почтового сообщения.

Отслеживание угроз

  1. Проверить/изменить примеры в комплектном /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"
      
  2. Добавить «защитников» для запущенных служб с удалённым подключением:
    cscli collections install crowdsecurity/sshd crowdsecurity/postfix crowdsecurity/dovecot
    • список доступных: cscli collections list -a;
    • задействованные: cscli collections list.
  3. Перечитать настройки:
    systemctl reload crowdsec
  4. Следить за блокировками в фаерволе:
    nft list ruleset
    ...или самим краудсеком (таблица Local Api Decisions):
    cscli metrics
    (на новом почтовике у меня за одну ночь туда улетело >16 тыс. айпишников)

Что дальше?..

Освоение системы для создания своих «защитников» — к примеру, таковые есть для nginx, но не для его форка angie. И не только.

Отсылки

Обратная связь