Цель которую я преследую, это будет сервис который смотрит в интернет и он защищен работая через https (самоподписанный сертификат) + Basic Auth, но дабы некто не перебирал пароли следует защитить от множественных попыток подобрать пароль к закрытой части настройкой сервиса Fail2ban который на основании часто повторяющихся ошибок в логах будет блокировать нарушителя.
ekzorchik@srv-bionic:~$ hg clone ssh://IP&DNS://home/ekzorchik/dproject
ekzorchik@srv-bionic:~$ sudo ./dproject/default
ekzorchik@srv-bionic:~$ sudo apt-get install apache2 apache2-utils -y
ekzorchik@srv-bionic:~$ echo "ServerName localhost" | sudo tee -a /etc/apache2/apache2.conf
ServerName localhost
ekzorchik@srv-bionic:~$ sudo apt-get install fail2ban -y
Для email–поддержки, устанавливаем Sendmail:
ekzorchik@srv-bionic:~$ sudo apt-get install sendmail-bin sendmail -y
ekzorchik@srv-bionic:~$ sudo htpasswd -c /var/www/html/.htpasswd ekzorchik
New password:
712mbddr@Re-type new password:
712mbddr@
Adding password for user ekzorchik
ekzorchik@srv-bionic:~$ sudo nano /etc/apache2/sites-available/000-default.conf
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /var/www/html>
AuthType Basic
AuthName "Private zone Project"
AuthUserFile /var/www/html/.htpasswd
Require valid-user
</Directory>
</VirtualHost>
ekzorchik@srv-bionic:~$ sudo a2ensite 000-default.conf
Site 000-default already enabled
ekzorchik@srv-bionic:~$ sudo apache2ctl configtest
ekzorchik@srv-bionic:~$ sudo systemctl restart apache2
Fail2ban служба хранит свои файлы конфигурации в директории /etc/fail2ban
. В ней существует файл со значениями по умолчанию под названием jail.conf.
Так как этот файл может быть изменен с помощью обновлений пакетов, его редактирование не рекомендуется. Вносить изменения нужно в файле jail.local
, который переопределяет все параметры по умолчанию из файла jail.conf
и имеет высший приоритет в исполнении.
ekzorchik@srv-bionic:~$ sudo cp /etc/fail2ban/fail2ban.conf /etc/fail2ban/fail2ban.local
ekzorchik@srv-bionic:~$ sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
ekzorchik@srv-bionic:~$ sudo nano /etc/fail2ban/jail.local
внутри присутствуют секции (дефолтные) по работе с журналами Web-сервиса Apache2: – это [apache-auth],[apache-badbots],[apache-noscript],[apache-overflows],[apache-nohome],[apache-fakegooglebot],[apache-modsecurity],[apache-shellshock]
, но они не активированы, чтобы это дело поправить нужно в каждую секцию добавить параметр enabled = true
. Ладно — это все по дефолту, а мне в первую очередь нужно только нужное:
[apache]
enabled = true
port = http,https
filter = apache-auth
logpath = /var/log/apache2/error.log
maxretry = 3
bantime = 600
[apache-multiport]
enabled = true
port = http,https
filter = apache-auth
logpath = /var/log/apache2/error.log
maxretry = 3
ekzorchik@srv-bionic:~$ sudo systemctl restart fail2ban
После проверяю, что сервис запустился
ekzorchik@srv-bionic:~$ sudo systemctl status fail2ban
если есть ошибки то смотрим логи:
ekzorchik@srv-bionic:~$ sudo tail -f /var/log/syslog
это может быть задвоенная секция или еще что.
ekzorchik@srv-bionic:~$ sudo fail2ban-client status
Status
|- Number of jail: 3
`- Jail list: apache, apache-multiport, sshd
ekzorchik@srv-bionic:~$ sudo fail2ban-client status apache
Status for the jail: apache
|- Filter
| |- Currently failed: 0
| |- Total failed: 0
| `- File list: /var/log/apache2/error.log
`- Actions
|- Currently banned: 0
|- Total banned: 0
`- Banned IP list:
если кто-то обращается к странице http://IP&DNS
и там стоит страница запрашивающая ввод логина и пароля, а он не знает его и начинает перебирать
[Sun Oct 07 11:23:57.849029 2018] [auth_basic:error] [pid 8015:tid 140267432691456] [client 172.33.33.7:48048] AH01618: user fjslfjsl not found: /
, то срабатывает Fail2ban и он оказывается заблокированным на срок указанный в секции под которую попадает, в моем случае — это
maxretry = 3
bantime = 600
т. е. На 600 секунд.
ekzorchik@srv-bionic:~$ sudo fail2ban-client status apache
Status for the jail: apache
|- Filter
| |- Currently failed: 0
| |- Total failed: 3
| `- File list: /var/log/apache2/error.log
`- Actions
|- Currently banned: 1
|- Total banned: 1
`- Banned IP list: 172.33.33.7
Проверяю правила iptables:
ekzorchik@srv-bionic:~$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
f2b-apache-multiport tcp -- anywhere anywhere multiport dports http,https
f2b-apache tcp -- anywhere anywhere multiport dports http,https
Чтобы разблокировать указанный IP:
ekzorchik@srv-bionic:~$ sudo fail2ban-client set apache unbanip 172.33.33.7
172.33.33.7
Чтобы заблокировать указанный IP указав вручную:
ekzorchik@srv-bionic:~$ sudo fail2ban-client set apache banip 172.33.33.7
172.33.33.7
Вот я наглядно и увидел как случилось попадание в block, а как поведет себя отработка если страница имеет URL доступа вида не http, а https.
ekzorchik@srv-bionic:~$ sudo nano /etc/apache2/sites-available/default-ssl.conf
ekzorchik@srv-bionic:~$ sudo a2ensite default-ssl.conf
ekzorchik@srv-bionic:~$ sudo systemctl reload apache2
Первое, что встречает посетивший страницу с URL адресом и настроенным самоподписанным сертификатом это уведомление от своего браузера (к примеру я провожу написание этой заметки используя Mozilla Firefox), что «Ваше соединение не защищено. Владелец 172.33.33.25 неправильно настроил свой веб-сайт. Чтобы защитить вашу информацию от кражи, Firefox не соединился с этим веб-сайтом.», далее он нажимаем «Дополнительно», снова уведомление от браузера 172.33.33.25 использует недействительный сертификат безопасности. К сертификату нет доверия, так как он является самоподписанным. Код ошибки: MOZILLA_PKIX_ERROR_SELF_SIGNED_CERT
он нажимаем «Добавить исключении»… – «Подтвердить исключение безопасности» и только после этого ему разрешается доступ к сайту, но там Auth Basic связка на доступ, он пробует указывать различные логин и пароль и получает в конечном итоге — Fail2ban его заблокировал, а на URL адресе красуется сообщение от браузера вида:
Попытка соединения не удалась
При соединении с 172.33.33.25 произошла ошибка.
Возможно, сайт временно недоступен или перегружен запросами. Подождите некоторое время и попробуйте снова.
Если вы не можете загрузить ни одну страницу – проверьте настройки соединения с Интернетом.
Если ваш компьютер или сеть защищены межсетевым экраном или прокси-сервером – убедитесь, что Firefox разрешён выход в Интернет.
ekzorchik@srv-bionic:~$ sudo fail2ban-client status apache
Status for the jail: apache
|- Filter
| |- Currently failed: 0
| |- Total failed: 7
| `- File list: /var/log/apache2/error.log
`- Actions
|- Currently banned: 1
|- Total banned: 3
`- Banned IP list: 172.33.33.7
Логи Web–сервиса Apache2 показывают, то некто пытался авторизоваться:
[Sun Oct 07 11:30:58.444925 2018] [auth_basic:error] [pid 8327:tid 140267281622784] [client 172.33.33.7:53516] AH01618: user fdsdf not found: /
[Sun Oct 07 11:31:01.744511 2018] [auth_basic:error] [pid 8327:tid 140267273230080] [client 172.33.33.7:53516] AH01618: user admin not found: /
обработав эти логи и задействовав регулярные выражения обработки fail2ban заблокировал нарушителя. Работает.
Итого, даже страницу с самоподписанным сертификатом и настроенной базовой аутентификацией можно настроить дополнительную защиту от попыток подобрать пароль. Исходя из этого данную заметку я могу смело включить в еще один шаг по защите своей базы знаний DokuWiki: tips_ubuntu_18_04_dokuwiki_security_v1.odt
На этом я прощаюсь, с уважением автор блога Олло Александр aka ekzorchik.