Моя задача: Хочу чтобы защитой Web—сервиса Apache2 (Auth Basic)
занимался Fail2ban
но правила блокирующие были не с использованием iptables
, а с более привычным в понимании ufw.
Данная заметка важна тем, что я сейчас использую: Ubuntu 14.04.5 Server amd64 + OwnCloud 10
на HP MicroServer Gen8
и прежде чем обновляться или переустанавливать все с нуля, мне нужно быть уверенным во всех действиях, как обезопасить подключение к своему хранилищу.
ekzorchik@srv-bionic:~$ hg clone --insecure https://ekzorchik@172.35.35.8/hg/dproject ekzorchik@srv-bionic:~$ sudo ./dproject/default
После был развернут собственный облачный сервис OwnCloud
на базе Ubuntu 18.04 Server
опираясь на данную заметку: tips_ubuntu_18_04_owncloud_install_new_v1.odt, а нет она оказывается еще не написана. Блин, а скорее всего это и к лучшему, есть над чем поразмышлять и собрать свой стенд.
На заметку: Последующие действия опираются на установленный OwnCloud 10
на Ubuntu 18.04 Server amd64
описанные в опубликованной заметке.
Теперь включаю ufw:
ekzorchik@srv-bionic:~$ sudo apt-get install ufw -y ekzorchik@srv-bionic:~$ sudo ufw enable Command may disrupt existing ssh connections. Proceed with operation (y|n)? y Firewall is active and enabled on system startup ekzorchik@srv-bionic:~$ sudo nano /etc/default/ufw IPV6=no ekzorchik@srv-bionic:~$ sudo ufw default deny incoming ekzorchik@srv-bionic:~$ sudo ufw default allow outgoing ekzorchik@srv-bionic:~$ sudo ufw allow ssh ekzorchik@srv-bionic:~$ sudo ufw app info "Apache Secure" Profile: Apache Secure Title: Web Server (HTTPS) Description: Apache v2 is the next generation of the omnipresent Apache web server. Port: 443/tcp ekzorchik@srv-bionic:~$ sudo ufw allow "Apache Secure" ekzorchik@srv-bionic:~$ sudo ufw status Status: active To Action From -- ------ ---- 22/tcp ALLOW Anywhere Apache Secure ALLOW Anywhere ekzorchik@srv-bionic:~$ sudo nano /var/www/owncloud/config/config.php 'logtimezone' => 'Europe/Moscow', 'loglevel' => '2', 'logfile' => '/var/www/owncloud/data/owncloud.log', 'log_authfaillip' => true, ekzorchik@srv-bionic:~$ sudo systemctl restart apache2 ekzorchik@srv-bionic:~$ sudo apt-get install fail2ban -y
папка action.d — содержит файлы действий
папка filter.d — файлы фильтров
файл fail2ban.conf — основной файл конфигурации
файл jail.conf — файл настройки защиты конкретных сервисов
ekzorchik@srv-bionic:~$ sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local ekzorchik@srv-bionic:~$ sudo nano /etc/fail2ban/action.d/ufw-owncloud.conf [Definition] actionstart = actionstop = actioncheck = actionban = ufw insert 1 deny from <ip> to any actionunban = ufw delete deny from <ip> to any ekzorchik@srv-bionic:~$ sudo nano /etc/fail2ban/filter.d/owncloud.conf [Definition] failregex = {"reqId":".*","level":2,"time":".*","remoteAddr":".*","user":"--","app":"core","method":".*","message":"Login failed: '.*' \(Remote IP: '<HOST>'\)"} ekzorchik@srv-bionic:~$ sudo nano /etc/fail2ban/jail.local [owncloud] enabled = true filter = owncloud action = ufw-owncloud logpath = /var/www/owncloud/data/owncloud.log maxretry = 3 findtime = 5m bantime = 300 ekzorchik@srv-bionic:~$ sudo systemctl restart fail2ban
Проверяю, что регулярное выражение анализа логов owncloud
корректно и ищутся ошибки неавторизованного доступа:
Проверяем работает ли наш фильтр и может ли он найти в логе ownCloud
нужные строки с попытками неудачного входа:
ekzorchik@srv-bionic:~$ sudo fail2ban-regex /var/www/owncloud/data/owncloud.log /etc/fail2ban/filter.d/owncloud.conf
или
sudo fail2ban-regex /var/www/owncloud/data/owncloud.log /etc/fail2ban/filter.d/owncloud.conf --print-all-missed
Если всё верно, то внизу выдачи будет строка вида:
Lines: 21 lines, 0 ignored, 19 matched, 2 missed ekzorchik@srv-bionic:~$ sudo systemctl restart fail2ban
После пробую несколько раз указать неправильную связку Login&Pass
на авторизацию в OwnCloud
и получаю, что доступ с хоста который совершается неудачные попытки входа заблокирован:
ekzorchik@srv-bionic:~$ sudo ufw status Status: active To Action From -- ------ ---- Anywhere DENY 172.33.33.7 22/tcp ALLOW Anywhere Apache Secure ALLOW Anywhere
Чтобы вытащить IP
адрес из блокировки:
ekzorchik@srv-bionic:~$ sudo fail2ban-client set apache-auth unbanip 172.33.33.7
Анализирую почему мой фильтр не отрабатывал попробовал не указывать метод POST:
Было ранее:
#failregex={"reqId":".*","level":2,"time":".*",remoteAddr":".*","user":".*","app":"core","method":"POST","url":"\/index.php\/login?user=*--","message":"Login failed: '.*' (Remote IP: '<HOST>')"
Изменил на:
failregex = {"reqId":".*","level":2,"time":".*","remoteAddr":".*","user":"--","app":"core","method":".*","message":"Login failed: '.*' \(Remote IP: '<HOST>'\)"}
Отлично, правило блокировки присутствует. Из проделанной работы могу сделать вывод, что блокировка с использованием ufw
работает. И заметка выполнена. Если что будет нужно дополнительно я дополню данную заметку. А пока у меня всё, с уважением автор блога Олло Александр aka ekzorchik.