Захист WordPress від брутфорс атаки [11 способів]
Що таке брутфорс-атака? Це спроба отримання несанкціонованого доступу до сайту або сервера методом перебору всіляких комбінацій логіну і пароля. Брутфорс в дослівному перекладі означає «груба сила».
Можливо, ви вважаєте, що брутфорс атаки вас не стосуються, тому що ваш сайт невеличкий і нецікавий хакерам. Змушені вам повідомити, що це давно вже не так. Будь-який ресурс у мережі є об’єктом постійних і численних атак. Їхньою метою є не сам сайт, а ресурси сервера, на якому він розташований: зламаний сайт перетворюється на майданчик для хостингу вірусів, розсилки спаму, фішингу, майнінгу криптовалют і т.д. Тому захищати адмінпанель будь-якого сайту – це необхідність. Інакше рано чи пізно доступ буде зламаний.
Цього разу розповідаємо, як захистити адмінпанель WordPress від злому через брутфорс – способів дуже багато, кожен знайде для себе найбільш простий і зручний, але при цьому ефективний.
1. Складні паролі
Так-так, все так просто. Перший і головний спосіб захисту – використання надійних паролів і їх регулярна заміна. Ви повинні завжди, ЗАВЖДИ використовувати тільки складні парольні комбінації. Це стосується всіх користувачів адмінпанелі сайту, а не тільки головного облікового запису адміністратора. Також не забувайте використовувати складні паролі до панелі управління хостингом, FTP, бази даних і будь-яких інших облікових записів, які мають стосунок до ваших сайтів.
Наразі надійним можна вважати пароль довжиною від 13 символів, який містить букви, цифри і спеціальні символи. Інший варіант, якщо хочете зручний до запам’ятовування пароль, це використовувати три або більше слова, які не взаємопов’язані за змістом, між якими будуть будь-які спецсимволи як роздільники. І третій варіант – використовуйте пароль, який складається зі зрозумілих, легко запам’ятовуваних слів українською мовою, що вводяться на англійській розкладці клавіатури.
Приклади надійних паролів по кожному з описаних способів їх створення:
(?CeRo*S9&rWT^J=zPu_
Superterrestrial_nation-basket
Cfvsq-Kexibq-Cfqn_5672. Зміна логіна адміністратора
Для нових встановлень WordPress рекомендуємо одразу вказувати неочевидний логін. Тобто не використовуйте ім’я користувача admin, administrator, webmaster, superadmin, test, testadmin та інші. Якщо у вас вже є запис із логіном admin – дуже рекомендуємо його змінити. Зробити це дуже просто в адмінпанелі. Потрібно натиснути «Користувачі» – «Додати нового». Не забудьте дати новому користувачеві права адміністратора.

Після цього потрібно авторизуватися з новим логіном і видалити користувача з логіном admin.

3. Обмеження доступу по IP-адресам
Якщо ваш інтернет-провайдер надає статичну IP-адресу або вона рідко змінюється, або ж існує обмежений список адрес, з яких може відбувається доступ в адмінпанель WordPress, то рекомендується обмежити доступ цим самим списком адрес. Якщо керуванням займається кілька людей і адреси часто змінюються, то цей спосіб захисту не буде зручним.
Налаштування обмеження доступу по IP-адресам для Apache
Налаштувати обмеження за IP-адресою можна за допомогою файлу .htaccess, який потрібно помістити в папку wp-admin/:
<IfModule mod_authz_core.c>
<RequireAny>
Require all denied #дозволити всім
Require ip 127.0.0.1 #дозволити локальне підключення
Require ip 23.45.67.89 #одна адреса
Require ip 10.20.30.40 #ще одна адреса
Require ip 123.123.123.0/24 #блокування адрес
</RequireAny>
</IfModule>Зазначене налаштування актуальне для вебсервера Apache 2.4+.
Налаштування обмеження доступу по IP-адресам для Nginx
Якщо на вашому сервері використовується Nginx + php-fpm, то додавати обмеження потрібно в файл конфігурації Nginx для відповідного сайту (в блоці server):
location ~* ^/(wp-admin|wp-login.php)
{
allow 23.45.67.89; #одна адреса
allow 123.123.123.0/24; #блокування адрес
deny all; #заборона усім іншим
}Зверніть увагу на обов’язкові крапки з комою в кінці кожного рядка і на те, що всі дозволи (allow) повинні бути вище заборон (deny).
4. Двоетапна авторизація
Захист файлів і директорій паролем в cPanel
Можна встановити захист паролем на будь-яку директорію на сервері засобами вбудованого модуля вебсервера. Для хостингу на базі панелі cPanel потрібно натиснути в панелі «Файли» – «Конфіденційність каталогу».

На наступному екрані виберіть папку, яку ви хочете захистити (/home/username/public_html/wp-admin). При натисканні на іконку зліва відбувається відкриття каталогу, при натискання на назву каталогу – вибір.

Далі вкажіть логін і пароль і включіть захист. Ви ж пам’ятаєте, що паролі повинні відповідати критеріям із пункту 1? Ну і, звичайно, не встановлюйте однакові паролі на різні форми.

У результаті цих дій у папці wp-admin буде створений файл .htaccess з такими налаштуваннями:
AuthType Basic
AuthName "Autorize"
AuthUserFile "/home/username/.htpasswds/domain.com/passwd"
require valid-userНа жаль, інтерфейс панелі управління не передбачає захист файлу wp-login.php. Тому потрібно скопіювати фрагмент вище і вставити його в основний файл .htaccess в папці вашого сайту (зазвичай це /home/username/public_html) таким чином:
<FilesMatch "wp-login.php">
AuthType Basic
AuthName "Autorize"
AuthUserFile "/home/username/.htpasswds/domain.com/passwd"
require valid-user
</FilesMatch>Захист файлів і директорій паролем в Apache
Якщо у вас панель керування не cPanel, або взагалі немає панелі керування на сервері, то можна просто додати такі рядки, як зазначено вище. Після чого потрібно згенерувати сам файл доступу (прописаний в рядку AuthUserFile). Паролі в цей файл записуюється в зашифрованому вигляді. Для шифрування пароля можна використовувати цей сервіс (тип кодування необхідно вказувати MD5). Отримані рядки потрібно вписати в файл паролів, який в прикладі записаний як /home/username/.htpasswds/domain.com/passwd
Вміст файлу passwd повинен мати приблизно такий вигляд:
admin:$apr1$jO5DLVTA$/KiKawt4F52ZNnTISPC1y/
editor:$apr1$BsN/.Ddj$zSgP0RrJpvgazIS4D23Ce/Захист файлів і директорій паролем в Nginx
У разі використання тільки вебсервера Nginx – додайте такі рядки в файл конфігурації для сайту (в блоці server):
location ~* ^/(wp-admin|wp-login.php)
{
auth_basic "Unauthorized";
auth_basic_user_file "/home/username/.htpasswds/domain.com/passwd";
}Якщо хочете комбінувати це налаштування з обмеженням доступу з пункту 3 цієї статті, то достатньо додати тільки два рядки, що описують авторизацію всередині блоку, обмеженого фігурними дужками. Якщо ви продублюєете блок location нижче, то в результаті буде отримана помилка під час перезапуску вебсервера Nginx.
Для перевірки правильності конфігураційного файлу Nginx і перезавантаження вебсервера в командному рядку потрібно виконати:
~# nginx -t
~# systemctl restart nginxШлях до файлу, який вище вказаний як “/home/username/.htpasswds/domain.com/passwd”, може бути будь-яким. Головне, щоб користувач, від імені якого працює Nginx, мав право на його читання. Вміст цього файлу формується так само, як і при налаштуванні для вебсервера Apache.
5. Відключення xmlrpc.php
Атаки з виконанням запитів до файлу xmlrpc.php дуже популярні, оскільки таким чином за один запит можливо перебрати десятки тисяч комбінацій різних логінів і паролів. Тому дуже важлива частина захисту адмінпанелі – це відключення або обмеження доступу до цього файлу. У WordPress протокол XML-RPC використовується для взаємодії движку з різними зовнішніми застосунками, наприклад, Jetpack. Як показує практика, в 99% сайтів файл xmlrpc.php не використовується взагалі. Якщо ви сумніваєтеся, використовується він у вас чи ні, то створіть резервну копію файлів, які ви будете змінювати перед виконанням подальших інструкцій.
Відключення xmlrpc.php за допомогою плагінів
Для відключення xmlrpc.php можна використовувати різні плагіни, яких наразі дуже багато. Просто напишіть в пошуку в маркетплейсі плагінів “xmlrpc”:

Після встановлення не забудьте активувати плагін і включити захист у налаштуваннях обраного плагіну.
Заборона доступу до xmlrpc.php за допомогою .htaccess
Перший варіант:
<IfModule mod_alias.c>
RedirectMatch 403 (?i)/xmlrpc.php
</IfModule>Цей спосіб буде корисний, якщо у вас в одній директорії кілька встановлень WordPress в різних підпапках. Досить розмістити код в головному .htaccess-файлі, який розташовується рівнем вище папок з WordPress, і всі сайти будуть захищені. Також захист регістронезалежний, тобто буде працювати в разі атаки запитами з великими літерами.
Другий варіант:
<Files xmlrpc.php>
Require all denied
Require ip 127.0.0.1 #дозволити локальні підключення
Require ip 23.45.67.89 #одна адреса
Require ip 10.20.30.40 #ще одна адреса
</Files>Цей спосіб зручний тим, що можна закрити доступ для всіх або залишити доступ з деяких довірених адрес, якщо потрібно.
Заборона доступу до xmlrpc.php за допомогою Nginx
Якщо на вашому сервері не використовується Apache, то заборона доступу через Nginx буде виглядати так:
location /xmlrpc.php
{
allow 23.45.67.89; #одна адреса
allow 123.123.123.0/24; #блок адрес
deny all; #заборона для усіх інших
}
Відключення xmlrpc.php за допомогою користувальницької функції
Ще один варіант захисту пов’язаний із доданням користувальницької функції в файл вашої теми сайту. В кінці functions.php вашої теми додайте код:
function shapeSpace_disable_xmlrpc_multicall($methods) {
unset($methods['system.multicall']);
return $methods;
}
add_filter('xmlrpc_methods', 'shapeSpace_disable_xmlrpc_multicall');Цей метод дозволяє не зачіпати налаштування Apache або Nginx і буде корисний, якщо у вас обмежений доступ до сервера, на якому розташований сайт. Але недолік в тому, що захист прив’язаний до конкретної теми і при її зміні або оновленні налаштування потрібно додавати повторно.
6. Обмеження кількості спроб входу в адмінпанель
Для автоматичного блокування зловмисників можна використовувати плагін, який обмежує число невдалих спроб входу в адмінпанель WordPress. Наприклад, можна використовувати Limit Login Attempts Reloaded. Після встановлення й активації в налаштуваннях можна встановити ліміт спроб входу і час блокування, а також додати деякі адреси або діапазони адрес у білий або чорний список на постійній основі.

7. Використання двофакторної аутентифікації
При підключенні двофакторної авторизації для входу в адмінпанель необхідно надати два типи даних – звичайний пароль і деякий одноразовий пароль, що генерується вашим смартфоном в застосунку Google Authenticator (Android | iOS). Підключення проводиться за допомогою плагіна, який також дозволяє використовувати застосунки Authy Authenticator і LastPass Authenticator, крім Google Authenticator. Для початку налаштування потрібно буде зареєструватись на сайті розробника плагіна (можна зробити прямо в адмінпанелі) і далі вибрати застосунок для двофакторної аутентифікації.

Після підключення програми не забудьте активувати захист сторінки авторизації.

8. Зміна секретних ключів для кукі
Ці ключі розташовуються у файлі конфігурації wp-config.php і мають такий вигляд:
define('AUTH_KEY', 's0lj0b~7iR`EyyI36;A(1e,#yc|i(>YB8TER:<yBLoxx;w)KF@T{t2Gx%D++X7lj');
define('SECURE_AUTH_KEY', 'HtOFJu-|I7|&fz]8 b-)T0cT+DEmFP<yKpE0+F4]Rp>(9!F6ChL+)&k1G(Ch>L8`');
define('LOGGED_IN_KEY', '<.4=H2dN8+9pif2Zd*4N}Gra{+y TsxopbEf+&GoJ u7`:Cs]A}&L #dB&[b3k|0');
define('NONCE_KEY', 'PlRd6E.s`f&X)K%;-#`~Xni`0?(=nQl_Wl# ?AT+v,8k.1PrukCm?ax]55Q+&SH!');
define('AUTH_SALT', '0F24#]RP2h>!StYxA}Hvc[uJkqO]g`7xfLA&p{ F$7|bUfB{B<Hx 69y>zQ9gA|F');
define('SECURE_AUTH_SALT', 'S~IKi]Ok1=;EP8}u[B#s&BfGE]i*Z^JHXqc6&gJ1DJ3$W0Rs-o)@Mo|Iu:.?7A`/');
define('LOGGED_IN_SALT', '1;D~W]s&_7[XVJ]vx>HA|u=.JvcEHHTf),UZ$lN| kxIT-zdAkOi0kcq+IT]&E`!');
define('NONCE_SALT', '3vIG<DWecj+KXbA9zN8DSZsVt}CJn]|7Ol;zBFxepClZ*Y8QZ`oGtW/.?6 z=B5G');
При встановлення WordPress використовується деякий набір ключів за замовчуванням, який буде однаковим для всіх. Тому, якщо зловмисник зможе отримати хеш пароля адміністратора, то він зможе і розшифрувати його з цими стандартними ключами. Згенерувати унікальні ключі можна на спеціальній сторінці.
Кожен раз під час переходу або оновленні сторінки ключі будуть змінюватися.
9. Додавання капчі на форму авторизації в адмін-панель
Ще один метод захисту від ботів – це включення капчі на сторінці авторизації (а також реєстрації і коментарів). Як варіант, можна використовувати плагін Captcha by BestWebSoft.
У налаштуваннях ви можете вибрати форми, на які буде встановлена капча, а також способи перевірки, набори «задачок», які будуть показуватися. Можна вибрати як звичайний варіант з введенням символів із малюнку, так і більш складні – виконати арифметичні дії.

У результаті сторінка авторизації буде такою:

10. Зміна адреси адмінпанелі
Можливо, це не найбільш простий і зручний спосіб захисту, але точно один з максимально ефективних. Змінити адресу (URL) для входу в адмінпанель можна вручну, якщо ви досвідчений адміністратор, або ж за допомогою спеціальних плагінів.
Вручну процес складається з декількох етапів:
- Перейменуйте файл wp-login.php. Використовуйте випадкову послідовність рядкових латинських букв, цифри і тире. Наприклад: some-new-page456.php
- В отриманому файлі знайдіть всі згадки wp-login.php і замініть їх на нову назву.
- Для коректної роботи сайту заміну необхідно виконати також в файлах: wp-activate.php, general-template.php, post-template.php, functions.php, class-wp-customize-manager.php, general-template.php , link-template.php, admin-bar.php, post.php, pluggable.php, ms-functions.php, canonical.php, functions.wp-scripts.php, wp-signup.php, my-sites.php , schema.php.
Після цього адреса адмінпанелі буде розташовуватися за вашим новим посиланням https://site.com/some-new-page456.php. Доступ до нового файлу було б корисно теж обмежити і захистити паролем так, як зазначено вище.
Простіше це можна зробити з використанням плагіна, наприклад, WPS Hide Login. Після встановлення плагіна в меню «Налаштування» з’явиться новий пункт WPS Hide Login.

11. Відключення виведення помилок авторизації
Під час брут-форс атаки хакеру буде корисно бачити інформацію про те, що введені дані є неправильними. Повідомлення про це відображаються кожен раз при невдалій спробі входу, причому також повідомляється, що саме – логін або пароль – неправильне. Тому можливо трохи ускладнити життя хакерам: прибрати ці повідомлення.
Для цього достатньо додати в functions.php теми вашого сайту лише один рядок:
add_filter('login_errors',create_function('$a', "return null;"));Редагувати файл можна будь-яким зручним вам способом, як з адмінпанелі, так і по FTP або через файловий менеджер. Рядок потрібно додати на початку файлу після відкриваючого тега (<?php ).
Це були, на наш погляд, найбільш дієві методи захисту сайтів на WordPress від зломів методом брут-форс атаки. Ви можете вибирати будь-який один або скомбінувати декілька. А наступного разу ми познайомимо вас з одним плагіном, який об’єднує в собі майже всі описані тут методики захисту сайту.
Щодня сайти та плагіни на тарифах WordPress хостингу від HostPro перевіряються на наявність вразливостей. Щоночі ми робимо резервні копії вашого сайту та зберігаємо їх протягом місяця. Якщо ваш сайт буде зламано, ми відновимо його роботу безкоштовно. Перенести свій сайт на HostPro безпечно, швидко і абсолютно безкоштовно. Лише заповніть заявку на нашому сайті.
Можливо, вас зацікавить
Плагін AllinOneSEOPack Частина 2. Продуктивність та налаштування модулів
Нагадаємо, що ми розбираємо налаштування плагіну «All in One SEO», який стане для вас...
| Оновлено: 22.07.2024
Плагін AllinOneSEOPack Частина 1. Основні налаштування
Якщо ви створюєте свій сайт не тільки для «краси» і розумієте, що органічний трафік...
| Оновлено: 04.07.2024
Огляд преміумтеми Divi
"Divi від Elegant Themes – один з кращих преміумшаблонів WordPress", – у такій думці...
| Оновлено: 11.06.2024
Наш телеграм
з важливими анонсами, розіграшами й мемами
Приєднатися