Установка Fail2Ban:
sudo zypper in fail2ban
Создадим лог-файл для Nextcloud и назначим права, где wwwrun — пользователь от которого работает WEB — сервер:
sudo touch /var/log/nextcloud/nextcloud.log sudo -u wwwrun chown wwwrun:www /var/log/nextcloud/nextcloud.log
Настроим ведение лога в Nextcloud:
через консоль:
sudo -u wwwrun php occ log:file --file /var/log/nextcloud/nextcloud.log --rotate-size 20M --enable sudo -u wwwrun php occ log:manage --level 2 --timezone Europe/Moscow
либо правкой конфиг файла:
sudo vi /srv/www/nextcloud/config/config.php 'logtimezone' => 'Europe/Moscow', 'log_type' => 'file', 'logfile' => '/var/log/nextcloud/nextcloud.log', 'log_rotate_size' => 20971520, 'loglevel' => '2',
Создадим фильтр для Fail2Ban:
sudo vi /etc/fail2ban/filter.d/nextcloud.conf [INCLUDES] before = common.conf [Definition] _groupsre = (?:(?:,?\s*"\w+":(?:"[^"]+"|\w+))*) failregex = ^\{%(_groupsre)s,?\s*"remoteAddr":"<HOST>"%(_groupsre)s,?\s*"message":"Login failed: datepattern = ,?\s*"time"\s*:\s*"%%Y-%%m-%%d[T ]%%H:%%M:%%S(%%z)?"
Где мы ищем вхождение по фразе «Login failed» и забираем IP адрес «<HOST>»
Подключим фильтр:
sudo vi /etc/fail2ban/jail.local [DEFAULT] ignoreip = enabled = true port = http,https filter = nextcloud logpath = /var/log/nextcloud/nextcloud.log findtime = 600 maxretry = 3 bantime = 24h
В секции DEFAULT мы описали наши IP адреса, которые будут игнорироваться Fail2Ban (по сути белый список).
В секции nextcloud мы указали:
- enabled = true #фильтр включен
- port = http,https #Порты блокировки
- filter = nextcloud #Название фильтра (filter.d/nextcloud.conf)
- logpath = /var/log/nextcloud.log #Анализируемый лог
- findtime = 600 #В секундах — время поиска повторяющихся событий
- maxretry = 3 #Количество повторов (после третьей попытки неудачной авторизации, IP атакующего попадает в Бан)
- bantime = 24h # Сколько держать нарушителя в бане, можно в минутах -m, в часах -h, либо в секундах — без префикса
Перезапуск Fail2Ban:
sudo service fail2ban restart