chain doc dot ok back item-arrow angle-left angle-right vk instagram linkedin facebook play-button mail-ic winged-letter nda
Все статьи Бизнес-wiki

Как защитить административную панель Joomla от взлома?

Святослав Волков
Задать вопрос

Административная панель CMS Joomla достаточно слабо защищена от перебора паролей (брутфорса). Существует два пути защиты от данного типа атаки: с помощью установки специализированного компонента jSecure Authentication и вручную.

Рассмотрим эти способы более детально.

Первый метод – с помощью jSecure Authentication

Наши действия:

  1. Скачиваем jSecure Authentication.
  2. Устанавливаем в нашу Joomla.
  3. В настройках компонента выбираем пункт меню Administrator Password Protection.
  4. Вводим имя пользователя и пароль.
  5. Теперь все наши файлы и данные по административному пути /administrator/ защищены дополнительным паролем, о чем собственно сразу сообщит браузер, предлагая ввести данные доступа (мы же находимся в административной панели):
Есть неприятный момент в работе jSecure Authentication (возможно, что в новых версиях его исправили). При установке компонента автоматически включается «Meta Tag Controller», который заменяет все мета-теги Description и Keywords на «custom generator for seo». Нужно не забыть отключить данный пункт, чтобы seo-специалисты спали спокойно по ночам.

Мета-тег контроллер включен - (!) неверное положение при установке по умолчанию:

Выключенное положение мета-тег контроллера:

jSecure Authentication – усиление защиты:

  1. Для того, чтобы вход в административную панель выполнялся по отличному от стандартного пути (site.ru/administrator/ - стандартный путь) – достаточно заполнить пункт «Basic Configuration», указав get-запрос по которому доступ в панель будет разрешен. Например, при «Key» равном dostup – попасть в административную панель можно будет только по url site.ru/administrator/?dostup. Все остальные попытки открыть административную панель будут предотвращены. Пользователь при вводе стандартного (или ошибочного) адреса админки «site.ru/administrator/» будет перенаправлен на главную страницу сайта.
  2. Для большей безопасности можно включить функцию «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 (файл, который содержит логины и пароли пользователей, кому доступ к данной папке будет разрешен).

Файлы которые начинаются с точки, являются системными и обычно FTP-менеджеры скрывают подобные файлы: вы их не видите, но на самом деле они есть. Для того, чтобы увидеть подобные файлы на сервере, необходимо включить специальную настройку просмотра системных файлов.

Например, в 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

Нужно понимать, что в папке, на которую вы хотите поставить пароль, уже может находиться файл .htaccess, содержащий другие правила обработки для сервера Apache. Поэтому необходимо быть предельно внимательным, чтобы не затереть существующие правила. Правила же запрета доступа можно разместить в верхней части файла.

В параметрах запрета необходимо определить лишь одну директиву – путь доступа к файлу .htpasswd. На различных серверах путь может быть разный. Для того, чтобы определить путь к файлу .htpasswd безошибочно, нужно залить в папку (на которую собираемся устанавливать пароль) временный файл с расширением *.php (например: tmpinfo.php), который будет содержать следующий код:

<?php
phpinfo();
?>

Открываем файл в браузере и ищем значение SCRIPT_FILENAME – это полный путь к файлу, который мы запустили:

Таким образом, убрав всё до последнего слеша (удаляем из значения SCRIPT_FILENAME имя нашего файла-скрипта) – мы получим полный путь к файлу .htpasswd. Прописываем необходимые значения в строке «AuthUserFile» в файле .htaccess.

Не забываем удалить временный файл с функцией phpinfo(); т.к. он содержит много технической информации, которая может быть полезна для злоумышленников.

Осталось дело за малым – придумываем логин и пароль, кому будет разрешен доступ к данной папке. Далее идём на сервис 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 { ... }.

Важно понимать, что в конфигурации Nginx может быть несколько веток server { ... }, но только одна из них рабочая. Так как другие часто заканчиваются правилом пере-направления: return 301 https://$host:443$request_uri; - что означает, что все запросы должны обрабатываться только через ветку, слушающую 443 порт. Очевидно, что такая ветка («слушающая» 443 порт) будет только одна.

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 разрешен доступ к папке без пароля, а на всех остальных посетителей сайта распространяется общее правило: необходимо ввести логин/пароль, чтобы получить доступ к папке.

Файлы site_admin и exclude_ips должны быть расположены вне публичной папки сайта, чтобы извне никто не мог просмотреть содержимое и, соответственно, подобрать логин/пароль. Обычно, используется папка выше уровнем, чем папка www.