Как защитить административную панель Joomla от взлома?
Административная панель CMS Joomla достаточно слабо защищена от перебора паролей (брутфорса). Существует два пути защиты от данного типа атаки: с помощью установки специализированного компонента jSecure Authentication и вручную.
Рассмотрим эти способы более детально.
Первый метод – с помощью jSecure Authentication
Наши действия:
- Скачиваем jSecure Authentication.
- Устанавливаем в нашу Joomla.
- В настройках компонента выбираем пункт меню Administrator Password Protection.
- Вводим имя пользователя и пароль.
- Теперь все наши файлы и данные по административному пути /administrator/ защищены дополнительным паролем, о чем собственно сразу сообщит браузер, предлагая ввести данные доступа (мы же находимся в административной панели):
Мета-тег контроллер включен - (!) неверное положение при установке по умолчанию:
Выключенное положение мета-тег контроллера:
jSecure Authentication – усиление защиты:
- Для того, чтобы вход в административную панель выполнялся по отличному от стандартного пути (site.ru/administrator/ - стандартный путь) – достаточно заполнить пункт «Basic Configuration», указав get-запрос по которому доступ в панель будет разрешен. Например, при «Key» равном dostup – попасть в административную панель можно будет только по url site.ru/administrator/?dostup. Все остальные попытки открыть административную панель будут предотвращены. Пользователь при вводе стандартного (или ошибочного) адреса админки «site.ru/administrator/» будет перенаправлен на главную страницу сайта.
- Для большей безопасности можно включить функцию «Auto Ban IP», которая будет блокировать все IP-адреса, с которых поступило 5 и более некорректных обращений к административной панели, (значение ошибочных обращений можно изменить в настройках jSecure). Такой пользователь будет заблокирован на 20 минут. Даже в случае правильно введённого адреса административной панели на 6, 7, 8 и т.д. раз – будет все равно отправлен на главную страницу сайта.
Установка нестандартного пути входа в административную панель:
Включение функции «Auto Ban IP»:
Устанавливаем пароль на папку «administrator» вручную (сайт работает на Apache).
Инструкция подходит только при работе сайта на Apache, инструкция для Nginx дана ниже.
Подобный метод подойдет, если установить jSecure Authentication нет возможности. Также данный метод можно использовать если Вы хотите поставить дополнительный пароль на любую другую папку или используете любую другую CMS (в том числе, если Ваш сайт не использует CMS, но поставить пароль на папку нужно).
Для ручного метода установки пароля на папку необходимо иметь доступы к данной папке, например, по FTP.
Далее Вам потребуется два файла:
- .htaccess (файл, содержащий инструкции защиты текущей папки по паролю - (!) важно: файл .htaccess должен находится в той папке, где планируется поставить защиту)
- .htpasswd (файл, который содержит логины и пароли пользователей, кому доступ к данной папке будет разрешен).
Например, в Total Commander она выглядит так:
Итак, файл .htaccess – это свод правил для сервера Apache. Таким образом, в данном файле мы можем прописать процедуру, которая будет запрещать доступ к текущей папке, кроме пользователей с определенными логинами и паролями. Запрещающая запись в файле .htaccess будет выглядеть подобным образом:
<Files ~ "^\.(htaccess|htpasswd)$"> deny from all </Files> Options -Indexes AuthUserFile /var/www/username/data/www/user/site.ru/.htpasswd AuthGroupFile /dev/null AuthName "Please enter your ID and password" AuthType Basic require valid-user order deny,allow
В параметрах запрета необходимо определить лишь одну директиву – путь доступа к файлу .htpasswd. На различных серверах путь может быть разный. Для того, чтобы определить путь к файлу .htpasswd безошибочно, нужно залить в папку (на которую собираемся устанавливать пароль) временный файл с расширением *.php (например: tmpinfo.php), который будет содержать следующий код:
<?php phpinfo(); ?>
Открываем файл в браузере и ищем значение SCRIPT_FILENAME – это полный путь к файлу, который мы запустили:
Таким образом, убрав всё до последнего слеша (удаляем из значения SCRIPT_FILENAME имя нашего файла-скрипта) – мы получим полный путь к файлу .htpasswd. Прописываем необходимые значения в строке «AuthUserFile» в файле .htaccess.
Осталось дело за малым – придумываем логин и пароль, кому будет разрешен доступ к данной папке. Далее идём на сервис htaccesstools.com/htpasswd-generator/, вставляем необходимые логин/пароль в требуемые поля, получаем хешированную строку, которую переносим в файл .htpasswd.
Содержимое файла .htpasswd для пользователя user с паролем user будет выглядеть следующим образом:
user:$apr1$EIkwSzFr$n8wSsWXiqA.zaC8ne0ujw/
Заливаем файлы:
- .htaccess
- .htpasswd
в необходимую папку и при следующем обращении к папке получим примерно следующее сообщение:
Папка защищена базовой авторизацией по логину и паролю.
Устанавливаем пароль на папку «administrator» вручную - инструкция для Nginx
В случае, когда на сервере PHP работает в режиме «Nginx + PHP-Fpm» или в любом другом случае, когда Apache не используется при отдаче контента сайта, предложенная выше инструкция через файлы .htaccess | .htpasswd не будет работать. Так как нет обработчика, который бы смог обрабатывать правила предложенные в файле .htaccess (ведь именно Apache является обработчиком данных файлов).
Для того, чтобы установить пароль на необходимую папку при работе сайта на Nginx необходимо:
1. Иметь доступ к конфигурационным файлам Nginx Вашего домена. При использовании панели ISP Manager конфигурационные данные домена меняются в разделе «Домены» -> «WWW-Домены» -> «Название домена» -> кнопка «Конфиг».
2. В конфигурации домена находим ветку, которая отвечает за обработку обращений к корню сайта. Обычно это location / { ... }, расположенный в главной ветке server { ... }.
3. Далее вставляем внутрь location / { ... } главной ветки server { ... } правило:
location /administrator/ { # Base auth auth_basic "Restricted Zone"; auth_basic_user_file /var/www/site.ru/data/nginx_passwords/site_admin; }
- Строка location /administrator/ - означает, что правило работает только для папки «administrator».
- Строка Base auth - комментарий.
- auth_basic "Restricted Zone"; - говорит о том, что для текущей ветки (мы помним, что установленная нами ветка работает только для папки «administrator») доступ ко всем папкам закрыт по логину и паролю.
- А в файле, который расположен здесь auth_basic_user_file /var/www/site.ru/data/nginx_passwords/site_admin; прописан логин и пароль, по которому разрешены доступы к папке.
4. Стоит отметить, что содержание файла «site_admin» определяется такими же правилами, как и содержание файла .htpasswd. Т.е. для создания логина/пароля также можно использовать сервис htaccesstools.com/htpasswd-generator/.
Дополнение к правилам Nginx
Возможно определенным IP адресам выделить доступ к папке без запроса пароля. Для этого в конфигурационный файл Nginx необходимо добавить:
include /var/www/site.ru/data/nginx_passwords/exclude_ips;
В данном файле exclude_ips (расположенном по адресу «/var/www/site.ru/data/nginx_passwords/») описаны IP адреса, которым разрешен доступ к папке без паролей. Содержание файла exclude_ips будет примерно следующим:
satisfy any; allow 193.238.1.1; allow 195.46.1.2; deny all;
Где IP-адресам 193.238.1.1 и 193.238.1.2 разрешен доступ к папке без пароля, а на всех остальных посетителей сайта распространяется общее правило: необходимо ввести логин/пароль, чтобы получить доступ к папке.