Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save Secret-Rabbit/600167150661a5c4fa81078622c03005 to your computer and use it in GitHub Desktop.

Select an option

Save Secret-Rabbit/600167150661a5c4fa81078622c03005 to your computer and use it in GitHub Desktop.

Обнаружение подбора паролей посредством Fail2ban для Immich в Docker Compose на OMV

Предостережение!!!

Этот способ не заблокирует доступ к Immich в текущей конфигурации, но позволяет отслеживать попытки подбора паролей. Чтобы блокировка работала так, как ожидается, необходимо настроить передачу заблокированных IP-адресов на обратный прокси и их блокировку непосредственно на нём — например, как описано здесь: Fail2ban Resolve Proxi VPN, либо использовать полученные IP-адреса для других механизмов защиты.

Шаг 1. Редактируем файл Docker Compose

Чтобы получать логи Immich, необходимо модифицировать Docker Compose‑файл, настроив логирование контейнера с использованием встроенного драйвера Docker под названием syslog.

В compose‑файл добавляем:

logging:
 driver: syslog

После этого перезапускаем контейнер: нажимаем “Stop”, затем “Up”.

Шаг 2. Настройка Fail2ban на OMV

Установка Fail2ban (если не установлен)

  1. Переходим в раздел “Система”, затем “Плагины”.
  2. В строке поиска вводим openmediavault-fail2ban.
  3. Выделяем пакет, нажав на него правой кнопкой мыши.
  4. Нажимаем на кнопку “Установить“.
  5. Дождавшись завершения установки, нажимаем “Закрыть”.

Включение Fail2ban (если не включён)

  1. Переходим в “Сервисы” → “Fail2ban” → “Настройки”.
  2. Ставим флаг “Включить”.
  3. Нажимаем “Сохранить”.
  4. Дожидаемся появления окна об отложенном изменении конфигурации и нажимаем в нём на кнопку “Применить”.

Шаг 3. Подключение по SSH и настройка фильтра и jail

  1. Подключаемся к серверу по SSH любым удобным способом.

  2. Создаём фильтр immich.conf в каталоге /etc/fail2ban/filter.d со следующим содержимым:

    [Definition]
    failregex = ^.Failed login attempt for user . from ip address (?:::ffff:)?<HOST>.*$
    ignoreregex =
  3. Создаём jail-файл immich.conf в каталоге /etc/fail2ban/jail.d со следующим содержимым:

    [immich]
    enabled = true
    filter = immich        # название файла фильтра без расширения
    maxretry = 3           # количество неуспешных попыток авторизации
    findtime = 10m         # период анализа логов
    bantime = 1d           # время блокировки
    backend = systemd
    port = 2283            # порт, на котором запущен сервис
    action =               # действие для блокировки/разблокировки

    Примечание: Если название файла с фильтром из предыдущего пункта была изменено, понадобится отредактировать переменную filter, указав название файла без расширения. Название jail-файла можно менять.

  4. Перезапускаем Fail2ban командой systemctl restart fail2ban.

  5. Проверяем статус сервиса командой systemctl status fail2ban. Если видим Active: active (running) — всё работает.

  6. Проверяем список jail’ов, для этого выполняем команду fail2ban-client status, получаем примерно следующее:

    Status
    |- Number of jail:      1    # количество jail`лов
    `- Jail list:   immich       # активные фильры
    

Шаг 4. Тестирование

  1. Заходим на Immich и намеренно вводим неверные учётные данные больше 2-х раз.

  2. Проверяем статус jail, для immich командой fail2ban-client status immich. Если всё работает, увидим примерно следующее (заблокированным будет IP-адрес клиента, ожидаемо что у каждого он будет отличатся):

    Status for the jail: immich
    |- Filter
    |  |- Currently failed: 0
    |  |- Total failed:     3
    |  `- Journal matches:
    `- Actions
       |- Currently banned: 1
       |- Total banned:     1
       `- Banned IP list:   192.168.1.3
    

    3 неуспешных попытки, заблокирован IP-адрес: 192.168.1.3.

    Разблокируем его командой fail2ban-client set immich unbanip <ip-адрес>.

Итог

Было настроено обнаружение IP‑адресов злоумышленников. Блокировка в текущей конфигурации работать не будет, но полученные IP‑адреса можно использовать для блокировки на обратном прокси — например, как описано в Fail2ban Resolve Proxi VPN, либо для других механизмов защиты.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment