CrowdSec

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

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

Установка

  1. Поставить фаервол и саму службу:
    apt-get install -y nftables crowdsec
  2. Пока в Альта не собрано данного «вышибалы» неугодных IP-шников правилами предпочитаемого фаервола, придётся отсюда скачать свежий пакет под свою архитектуру и пересобрать его:
    epm repack crowdsec*.deb
  3. А затем установить результат пересборки:
    sudo epmi ./crowdsec*.rpm
  4. Если порт 8080 занят службой ahttpd, заменить таковой во всех конфигах /etc/crowdsec/*.yaml и подкаталогах — на 8070, к примеру.

Подключение

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

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

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

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

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

Отсылки

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