Сегодня настроим фильтрацию fail2ban для NextCloud на операционной системы Ubuntu/Debian/Linux
Установка Fail2Ban
Для установки в терминале набираем:
sudo apt-get install fail2ban
После установки Fail2Ban имеет рабочий фильтр для ssh.
Настройка фильтра Fail2Ban для NextCloud
Создадим лог-файл для Nextcloud:
sudo touch /var/log/nextcloud.log
sudo -u www-data chown www-data:www-data /var/log/nextcloud.log
Настроим логирование в Nextcloud:
sudo -u www-data php occ log:file --file /var/log/nextcloud.log --rotate-size 20M --enable
sudo -u www-data php occ log:manage --level 2 --timezone Europe/Moscow
Либо правкой конфигурационного файла Nextcloud:
sudo nano /var/www/nextcloud/config/config.php
'logtimezone' => 'Europe/Moscow',
'log_type' => 'file',
'logfile' => '/var/log/nextcloud.log',
'log_rotate_size' => 20971520,
'loglevel' => '2',
Теперь создадим фильтр для Fail2Ban:
sudo nano /etc/fail2ban/filter.d/nextcloud.conf
before = common.conf
_groupsre = (?:(?:,?s*"w+":(?:"+"|w+))*)
failregex = ^{%(_groupsre)s,?s*"remoteAddr":"<HOST>"%(_groupsre)s,?s*"message":"Login failed:
datepattern = ,?s*"time"s*:s*"%%Y-%%m-%%d%%H:%%M:%%S(%%z)?"
Где мы ищем вхождение по фразе «Login failed» и забираем IP адрес «<HOST>»
Подключим фильтр:
sudo nano /etc/fail2ban/jail.local
[nextcloud]
ignoreip = 222.222.222.0/24 192.168.1.0/24
enabled = true
port = http,https
filter = nextcloud
logpath = /var/log/nextcloud.log
findtime = 600
maxretry = 3
bantime = 24h
В секции ignoreip
мы описали наши IP адреса, которые будут игнорироваться Fail2Ban (по сути белый список).
Передергиваем Fail2Ban:
sudo service fail2ban restart
Посмотрим лог Fail2Ban:
tail -11 /var/log/fail2ban.log
2020-06-24 12:26:23,349 fail2ban.jail : INFO Creating new jail 'nextcloud'
2020-06-24 12:26:23,349 fail2ban.jail : INFO Jail 'nextcloud' uses pyinotify {}
2020-06-24 12:26:23,355 fail2ban.jail : INFO Initiated 'pyinotify' backend
2020-06-24 12:26:23,358 fail2ban.datedetector : INFO date pattern `',?\s*"time"\s*:\s*"%Y-%m-%d%H:%M:%S(%z)?"'`: `,?s*"time"s*:s*"Year-Month-Day24hour:Minute:Second(Zone offset)?"`
2020-06-24 12:26:23,358 fail2ban.filter : INFO maxRetry: 3
2020-06-24 12:26:23,358 fail2ban.filter : INFO findtime: 600
2020-06-24 12:26:23,358 fail2ban.actions : INFO banTime: 86400
2020-06-24 12:26:23,358 fail2ban.filter : INFO encoding: UTF-8
2020-06-24 12:26:23,359 fail2ban.filter : INFO Added logfile: '/var/log/nextcloud.log' (pos = 8919, hash = 03a4a57013be97f0bc9f0e00bed2f23034d14779)
2020-06-24 12:26:23,362 fail2ban.jail : INFO Jail 'sshd' started
2020-06-24 12:26:23,363 fail2ban.jail : INFO Jail 'nextcloud' started
Видим, что наш созданный фильтр подцепился, попробуем провести «атаку» с адреса не входящего в ignoreip, параллельно запустим вывод лога Fail2Ban:
sudo tail -f /var/log/fail2ban.log
2020-06-24 12:31:29,737 fail2ban.filter : INFO Found 111.111.111.111 - 2020-06-24 12:31:29
2020-06-24 12:32:15,484 fail2ban.filter : INFO Found 111.111.111.111 - 2020-06-24 12:32:15
2020-06-24 12:32:46,076 fail2ban.filter : INFO Found 111.111.111.111 - 2020-06-24 12:32:46
2020-06-24 12:32:46,136 fail2ban.actions : NOTICE Ban 111.111.111.111
Проверим iptables:
sudo iptables -L
Chain f2b-nextcloud (1 references)
target prot opt source destination
REJECT all -- 111.111.111.111 anywhere reject-with icmp-port-unreachable
RETURN all -- anywhere anywhere
На этом все, всем пока!