Заметки сисадмина
Назад

Важные шаги в обеспечении безопасности WordPress блога

Опубликовано: 08.10.2012
Время на чтение: 23 мин
0
424

Итак, у вас уже есть свой блог или вы только начинаете делать первые шаги в изучении админки WordPress. Для того что бы работа с сайтом была удобной и комфортной необходимо должным образом настроить его безопасность от различного рода интернет-вредителей, будь то вирусы, спам, редиректы и прочее. По умолчанию вся защита WordPress сводится к придумыванию сложного пароля к админке, что конечно же хорошо, но далеко не гарантия того, что ваш сайт не взломают и он впоследствии не превратится  в какой-нибудь плацдарм для спамерских рассылок по распространению вирусного ПО. Поэтому что бы избавить себя от головной боли в будущем, следует выполнить несколько несложных шагов по настройке. Предполагается что, стандартные меры по своевременному обновлению движка блога до актуальных версий, всех плагинов и созданию сложного пароля и так выполняются, поэтому данный шаг рассматривать не будем. Перейдем к главному:

1) Поменяем учетную запись администратора (логин).

По умолчанию учетная запись администратора на доступ к админке - admin, что значительно упрощает подбор пароля к сайту. Если хостинг предоставляет доступ к базе данных сайта/блога при помощи phpadmin, то изменить пароль можно при помощи следующей команды:

UPDATE wp_users SET user_login = ‘Ваш новый логин’ WHERE user_login = ‘admin’;

Если нет, то в самой админке, можно создать нового пользователя, переназначить ему все статьи, а старого пользователя admin удалить.

2) Защитим важные директории и файлы блога при помощи .htaccess файлов.

Для начала закроем всем доступ к .htaccess и wp-config.php файлам. Для этого в .htaccess находящийся в корне блога добавим следующий код:

<files .htaccess>
order allow,deny
deny from all
</files>
<FilesMatch ^wp-config.php$>
order allow,deny
deny from all
</FilesMatch>
ServerSignature Off

Иногда можно встретить рекомендации по перемещению файла wp-config.php в директорию отличную от корневой. Предполагается, что движок будет автоматически искать wp-config.php файл в подкаталогах, eсли он не может найти eго в корневом каталоге. Лично у меня данный трюк не сработал. При попытке зайти на сайт, wordpress говорит, что фаил конфигурации не обнаружен и предлагает заново его настроить. Либо данная возможность была устранена в последних версиях движка, либо у меня просто хостинг такой. Как по мне, так рекомендации по защите  wp-config.php при помощи .htaccess вполне достаточно.

ServerSignature Off - данный параметр позволяет скрыть версию Apache и версию операционной системы на которой он установлен.

Защищаемся от спамеров блокируя доступ к файлу комментариев, например к  wp-comments-post.php. Это файл отвечает за приём комментариев на блоге и  обычно к нему напрямую обращаются спам-боты. Суть метода в том, что бы фильтровать пользователей по HTTP referer. Запрещать оставлять комментарии тем кто его не имеет и разрешать тем у кого он есть :) Для этого в корневом .htaccess пропишем следующий код:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} .comment\/reply\/*
RewriteCond %{HTTP_REFERER} !.*yoursite.com.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^$
RewriteRule (.*) ^http://%{REMOTE_ADDR}/$ [R=301,L]
</IfModule>

Где, вместо yoursite.com прописываем свой адрес.

Защитим директории wp-includes и wp-content, для этого в корне создадим еще один .htaccess файл, куда пропишем следующий код:

Order Allow,Deny
Deny from all
<Files ~ ".(css|jpeg|jpg|png|gif|js|swf|)$">
Allow from all
</Files>

Это запретит чтение из каталогов  wp-includes и wp-content любых файлов, кроме, выше перечисленных.

Теперь ограничим доступ к админке блога при помощи все того же .htaccess. Для этого создадим в директории  wp-admin файл .htaccess и добавим в него следующие строки:

AuthUserFile /dev/null
AuthName "Access Control"
AuthType Basic
order deny,allow
deny from all
# home IP
allow from 130.0.0.
# work ip
allow from 130.0.0.5

Директива deny from all - запрещает доступ для всех, allow from - разрешает доступ с определенных ip. В случае, если адрес динамический, то указываем, только ту часть ip-адреса которая не меняется, как правило это два первых октета. Можно, так же дополнительно заблокировать доступ к админке при помощи .htpasswd файла. Для этого существующий код меняем на:

Require valid-user
AuthName "Access Control"
AuthType Basic
order deny,allow
deny from all
# home IP
allow from 130.0.0.
# work ip
allow from 130.0.0.5
Satisfy Any

С генерировать .htpasswd файл можно при помощи Htpasswd generator либо при помощи утилиты htpasswd.exe. Под виндой:

Fhtpasswd.exe -cm c:\.htpasswd admin

где, ключ -сm - указывает на то, что создается новый файл по алгоритму md5, admin - имя пользователя.

Файл .htpasswd желательно размещать выше директории вашего сайта. Если вы не знаете путь от корневого каталога сервера до корневого каталога сайта или не имеете доступ к файловой системе вашего сервера, можно воспользоваться замечательным многофункциональным плагином AskApache Password Protect, который автоматически пропишет нужные опции и поставит пароли на директории которые вы укажете.

Satisfy Any - разрешает доступ в админку без авторизации по логину и паролю с указанных ip-адресов.

3) Запретим индексировать системные директории и файлы при помощи robots.txt.

Файл robots.txt – это текстовый файл, находящийся в корневой директории сайта, в котором записываются специальные инструкции для поисковых роботов. В нашу задачу входит запретить индексировать поисковикам директории /wp-admin, /wp-content и прочее, но разрешить индексировать в этих директориях файлы с расширением *.js, *.css и другие. Мой robots.txt выглядет так.

4) Ограничим доступ к учетной записи администратора.

В этом нам поможет плагин Login Lockdown, который позволяет вручную выставить количество попыток для авторизации в определенный промежуток времени. Данный плагин блокирует IP адреса после 3-5 попыток неправильного входа, что значительно сокращает вероятность подбора пароля.

5) Установим плагин WP Security Scan в настоящий момент Acunetix WP Security

С помощью данного плагина можно  выполнить ряд крайне полезных действий, а именно:

  • Изменить префикс таблиц в базе данных wordpress на более сложный. Например wprtujfDFGWB5456_ :) Что в свою очередь, снизит риск распространенных хакерских атак, рассчитанных на стандартный префикс таблиц.
  • Скрыть версию WordPress
  • Проверить права на файлы и папки
  • Создать резервную копию базы данных.
  • Мониторить обращение к своему сайту в живом режиме при помощи инструмента Live Traffic.

После всех проделанных манипуляций на вкладке WP-info смотрим все ли меры по защите выполнены:

acunetix-wp-security6) Контроль php файлов при помощи плагина Belavir

Этот плагин считает контрольные суммы php-файлов блога и сравнивает их с сохраненными значениями. В случае несовпадения выводит на главной странице в консоле - список измененных файлов. Если вы сами вносили изменения в файлы — тогда просто нажмите кнопку «Сбросить/обновить хэш файлов». Право нажать на эту кнопку имеет только пользователь, у которого есть права на редактирование файлов. Остальные пользователи будут видеть только сообщение о наличии или отсутствии изменений в файлах WordPress.

7) Установим плагин BackWPup для создания резервных копий сайта.

В случае порчи файлов, вирусов, шпионского ПО, может понадобится много времени прежде чем удастся выявить и устранить причину сбоя, что в случае популярного или коммерческого ресурса, может не лучшим образом сказаться на трафике, отпугнуть аудиторию, потенциальных покупателей итд. Для таких ситуаций желательно, всегда иметь под рукой свежую резервную копию сайта, которая в случае сбоя поможет оперативно восстановить ресурс. Для этих целей, идеально подойдет BackWPup -  продвинутый плагин имеющий в своей арсенале кучу настроек, поддерживающий множество различных сервисов, включая популярный Dropbox для автоматической выгрузки бэкапов по расписанию.

Для примера включим и настроем задание, которое будет раз в три дня делать резервную копию всего сайта и выгружать его на Dropbox. Для этого в админке находим значок "BackWup" и выбираем Add New. В разделе Database Jobs оставляем, все по умолчанию. Галочка Use short INSERTs instead of full (with keys) (Использовать короткий 'метод вставки' за место полного (с ключами)) не оказывает сколь заметного воздействия на выходной размер получаемого архива, поэтому ее можно не трогать. Галочка Set Blog Maintenance Mode on Database Operations переключает движок блога в режим обслуживания.

В разделе File Backup отмечаем галочками те директории сайта который хотим включить в архив, внутри каждой из директорий блога отмечаем галочками те подкаталоги, которые хотим исключить.(Exclude).


Include Folders to Backup - Включить дополнительные директории в Backup.

Exclude Files/Folders from Backup - Исключить файлы/Директории из Backup.

Далее идет длинный перечень всевозможных вариантов выгрузки Backup'а. Поддерживается выгрузка в локальную папку (Backup to Folder), на почту (Backup to E-mail), на фтп-сервер (Backup to FTP Server), а так же сервисы Dropbox, SugarSync, Amazon S3, Google Storage, Microsoft Azure (Blob), Rackspace Cloud. Нас интересует Dropbox.

Нажимаем Authenticate, вводим свои учетные данные, указываем папку если требуется.

В разделе Job Type указываем тип задания. Достаточно отметить:  Database Backup, File Backup.

В разделе Job Shedule настраиваем cron на выполнение Backup'ов в нужное нам время.В разделе Backup File указываем префикс и формат архива. В разделе Send Log можно включить режим отправки на E-mail информации о ходе выгрузки. Восстановление Backup'а производится простым Copy\Paste.

Спустя какое-то время я отказался от данного плагина в пользу UpdraftPlus Backup. Причин уже не помню, но UpdraftPlus Backup на данный момент меня полностью устраивает. Настройка так же интуитивно понятная.

На этом пока все, если узнаю, что-нибудь новое и полезное в этом отношении буду добавлять по ходу изучения :)

Поделиться
Похожие записи