Photo by Daniel Páscoa
Защита Owncloud

Защита Owncloud с помощью fail2ban

27.01.22
24.08.23

Если вы используете на своем сервере облачное хранилище Owncloud, то разумно будет предпринять все меры защиты информации.

Одним из неплохих методов защиты от брутфорса вашего хранилища является fail2ban.

Установка

 Установка в ОС, основанных на Debian, например, Ubuntu не представляет проблем, fail2ban присутствует в официальных репозиториях:

# apt install fail2ban

 Далее, файл настройки. Лучший подход, который советует официальная документация это создать файл переопределений (/etc/fail2ban/jail.local) скопируйте его из /etc/fail2ban/jail.conf 
По-умолчанию запустится только фильтр SSH. Если у вас доступ по ssh открыт только в локальную сеть, то этот фильтр можно выключить (если нет, не делайте этого!) в файле/etc/fail2ban/jail.local:

[sshd]
#enabled = true
enabled = false

Дальнейшая настройка строится на взаимодействии фильтров и джейлов. Для работы с Owncloud надо создать файл /etc/fail2ban/jail.d/owncloud.conf следующего содержания:

[owncloud]
enabled = true
port = http,https
protocol = tcp
filter = owncloud
maxretry = 3
bantime = 10800
logpath = /путь к файлу/owncloud.log
backend = auto

Тут всё просто, первая строка определяет секцию Owncloud. Вторая включает этот сервис. Третья и четвертая определяют порт и протокол, на которых работает ваш Owncloud. Пятая — определяет фильтр, с которым работает джейл. 
maxretry — количество вхождений (строк в лог-файле с ошибками аутентификации с одним и тем же ip-адресом), bantime — время, в течение которого будет забанен данный ip-адрес в секундах.
Основная строка это logpath Посмотрите, где находится ваш файл owncloud.log (К стати, надо настроить его ротацию с помощью logrotate) и пропишите тут.

Далее нужен файл фильта. Он определяет то, по какому принципу находить ошибочные аутентификации. В официальной документации к Owncloud есть пример этого файла, но на ubuntu-server 20.04 он не работает. Поэтому создайте файл /etc/fail2ban/filter.d/owncloud.conf следующего содержания:

[Definition]
_groupsre = (?:(?:,?\s*"\w+":(?:"[^"]+"|\w+))*)
failregex = ^\{%(_groupsre)s,?\s*"remoteAddr":"<HOST>"%(_groupsre)s,?\s*"message":"Login failed:
            ^\{%(_groupsre)s,?\s*"remoteAddr":"<HOST>"%(_groupsre)s,?\s*"message":"Trusted domain error.
            {.*Login failed: \'.*\' \(Remote IP: \'<HOST>\'\)"}

datepattern = ,?\s*"time"\s*:\s*"%%Y-%%m-%%d[T ]%%H:%%M:%%S(%%z)?"

Основная строка это failregex. Представляющая собой шаблоны поиска «неправильных» аутентификаций. Если вы знакомы с регулярными выражениями на Phyton-е, то вам не составит труда разобраться. Если нет, оставьте все как есть.

Проверить работу фильтра можно с помощью встроенной утилиты:

fail2ban-regex patch_to_owncloud.log /etc/fail2ban/filter.d/owncloud.conf

Далее надо перезапустить fail2ban:

systemctl reload fail2ban.service

Проверить работу можно с помощью встроенной утилиты:

fail2ban-client status owncloud