По статистике, около 19% от общего количества всех сайтов Интернета, работают на WordPress — это почти каждый пятый сайт. Успех платформы вполне логичен и закономерен, не зря еще 5 лет назад я сделал ставку именно на нее. Но сегодня речь пойдет не о преимуществах WordPress, а о его безопасности. Высокая популярность платформы активизировала злые силы, и вот уже на протяжении нескольких месяцев в Рунете идут массовые атаки на сайты, работающие на WordPress. Атаки настолько серьезные и настолько массовые, что не выдерживают даже самые мощные серверы. Хостинг-провайдеры, конечно, принимают меры, порой даже самые радикальные, вплоть до полной блокировки администраторских консолей WordPress. Поэтому, если вас еще не заблокировали, лучше самостоятельно провести ряд несложный действий по укреплению обороны вашего WordPress.
В этой статье я расскажу о самых эффективных способах защиты вашего сайта именно от брутфорса (brute force) — метода подбора и взлома пароля путем перебора всех теоретически возможных вариантов. Так как все последние массовые атаки работают по этому методу.
1. Первое с чего нужно начать — это избавиться от пользователя admin. Если у вас нет пользователя admin, можете сразу переходить к пункту 2. В WordPress начиная с 3 версии это делается очень просто. Достаточно создать нового пользователя, наделить его администраторскими правами, а старого пользователя «admin» — удалить. При его удалении, WordPress предложит вам выбрать нового пользователя, который станет автором публикаций старого администратора.
В старых версиях WordPress эта процедура проделывается с помощью пары SQL-запросов:
1 2 |
UPDATE wp_users SET user_login = 'Ваш новый логин' WHERE user_login = 'Admin'; UPDATE wp_posts SET post_author = 'Ваш новый логин' WHERE post_author = 'admin'; |
2. Очень важно обратить внимание на пароль администратора. Лучше если это будет хаотичная комбинация заглавных и строчных букв, знаков и цифр не менее чем из 10-12 символов.
3. При бутфорсе WordPress, производится огромное количество запросов к файлу авторизации «wp-login.php», и будет правильно обеспечить ему двойную защиту.
Если вы работаете с сайтом один, и ваш интернет-провайдер предоставляет вам статичный IP-адрес, вы можете разрешить доступ к директории «wp-admin» только с вашего IP-адреса, заблокировав тем самым для всех остальных даже возможность авторизации. Делается это следующим образом. В директории «wp-admin» создаем файл «.htaccess» следующего содержания:
1 2 3 |
order deny,allow deny from all allow from IP |
Где IP — это ваш IP-адрес. Узнать его вы можете, например, здесь.
Если же, кроме вас с сайтом работают еще люди со статическими IP-адресами, вы можете просто добавить их в список ниже. Например, так:
1 2 3 4 5 |
order deny,allow deny from all allow from IP1 allow from IP2 allow from IP3 |
Где, IP1, IP2, IP3 — разрешенные IP-адреса.
Благодаря этому, все пользователи (боты) с IP-адресами, не указанными в списке разрешенных, просто не получат доступа к директории «wp-admin» и, соответственно, не смогут брутфорсить файл «wp-login.php». Всем им будет возвращаться ошибка 403.
Если провайдер вам выдает динамический IP-адрес, меняющийся с каждым новым подключением к Интернету, тогда этот способ не пройдет, т.к «.htaccess» придется редактировать при каждом вашем подключении к Сети. С помощью все того же «.htaccess» мы можем установить дополнительную серверную HTTP-авторизацию. Делается это следующим образом.
Все в той же директории «wp-admin» создаются два файла: «.htaccess» и «.htpasswd». В первом будут храниться инструкции, во втором разрешенные данные для доступа к директории.
В «.htaccess» пишем следующее:
1 2 3 4 5 |
AuthType basic AuthName 'Access Denied' AuthUserFile '/fullpath/.htpasswd' Require valid-user DirectoryIndex index.php |
Где fullpath — полный путь к файлу «.htpasswd». Обратите на это должное внимание, т.к это самая частая ошибка. Полный путь вы можете узнать у своего хостинг-провайдера или с помощью небольшого php-скрипта:
1 2 |
$dir = dirname(__FILE__); echo '<p>Полный путь: ' . $dir . '/</p>'; |
Или другим способом:
1 |
echo '<p>Полный путь: ' . $_SERVER['DOCUMENT_ROOT'] . '/</p>'; |
Если вы по каким-то причинам не хотите паролить всю директорию «wp-admin», вы можете запаролить непосредственно файл «wp-login.php». Делается это аналогично, но в «.htaccess» нужно написать следующее:
1 2 3 4 5 6 |
<filesmatch "wp-login.php"=""> AuthName 'Access Denied' AuthType Basic AuthUserFile '/fullpath/.htpasswd' require valid-user </filesmatch> |
Файл «.htpasswd» в обоих случаях должен выглядеть следующим образом:
1 |
username:password |
Где username — это имя разрешенного пользователя, а password — это пароль. Обратите внимание, что пароль хранится в зашифрованном виде. Поэтому, предварительно ваш пароль нужно зашифровать. Сделать это можно, например, с помощью этого сервиса. На пароль действуют те же правила, что указаны в пункте 2 данной публикации.
Для использования нескольких пользователей с паролями, вы можете просто перечислить их по-порядку. Например, вот так:
1 2 3 |
username1:password1 username2:password2 username3:password3 |
Если вы сделаете все правильно, перед авторизацией в WordPress вам будет предложено ввести логин и пароль доступа к директории (файлу). И только после успешного входа вы сможете авторизоваться и войти в администраторскую консоль.
В Safari 6.0.5 на Mac OS это выглядит примерно так:
В других браузерах возможно немного иначе.
Выполнив хотя бы эти 3 пункта, вы в разы снизите вероятность взлома вашего WordPress.
Дополнительные меры по защите WordPress
Дополнительно вы можете защитить таким же образом файл настроек WordPress «wp-config.php». Я бы рекомендовал его защитить, потому что в нем содержатся данные для подключения к БД MySQL. Делается это аналогично:
1 2 3 4 |
<files wp-config.php=""> order allow,deny deny from all </files> |
Также, я бы рекомендовал вам проверить директории вашего сайта. Дело в том, что очень многие хостеры и безалаберные сисадмины не закрывают по-дефолту просмотр директорий сайтов своих клиентов. Если, к примеру, ввести в адресную строку браузера: http://вашсайт/wp-includes/ и вы увидете содержимое этой директории — нужно бить тревогу и срочно закрывать просмотр. Для этого можно создать в директориях, которые вы хотите закрыть от просмотра, пустые файлы «index.html» или дописать в ваш «.htaccess» всего одну строку:
1 |
Options All -Indexes |
Которая запретит серверу показывать содержимое директорий.
Кроме всего прочего, вы можете самостоятельно установить плагины безопасности WordPress, рекомендованные разработчиками платформы.
- BruteProtect
- Limit Login Attempts
- Lockdown WP Admin
- WP Fail2Ban
- Admin Renamed Extended
- Enforce Strong Password
- Wordfence Security
- 3WP Activity Monitor
- All in one WP Security
Их обзор в рамках данной публикации я проводить не буду.
Если в процессе настройки защиты WordPress от брутфорса у вас возникнут сложности — вы всегда можете обратиться ко мне за помощью. Контакты здесь.
Leave a Reply