Если вы используете на своем сервере облачное хранилище 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