Захист WordPress від брутфорс атаки [11 способів]

post thumbnail

Що таке брутфорс-атака? Це спроба отримання несанкціонованого доступу до сайту або сервера методом перебору всіляких комбінацій логіну і пароля. Брутфорс в дослівному перекладі означає «груба сила».

Можливо, ви вважаєте, що брутфорс атаки вас не стосуються, тому що ваш сайт невеличкий і нецікавий хакерам. Змушені вам повідомити, що це давно вже не так. Будь-який ресурс у мережі є об’єктом постійних і численних атак. Їхньою метою є не сам сайт, а ресурси сервера, на якому він розташований: зламаний сайт перетворюється на майданчик для хостингу вірусів, розсилки спаму, фішингу, майнінгу криптовалют і т.д. Тому захищати адмінпанель будь-якого сайту – це необхідність. Інакше рано чи пізно доступ буде зламаний.

Цього разу розповідаємо, як захистити адмінпанель WordPress від злому через брутфорс – способів дуже багато, кожен знайде для себе найбільш простий і зручний, але при цьому ефективний.

1. Складні паролі

Так-так, все так просто. Перший і головний спосіб захисту – використання надійних паролів і їх регулярна заміна. Ви повинні завжди, ЗАВЖДИ використовувати тільки складні парольні комбінації. Це стосується всіх користувачів адмінпанелі сайту, а не тільки головного облікового запису адміністратора. Також не забувайте використовувати складні паролі до панелі управління хостингом, FTP, бази даних і будь-яких інших облікових записів, які мають стосунок до ваших сайтів.

Наразі надійним можна вважати пароль довжиною від 13 символів, який містить букви, цифри і спеціальні символи. Інший варіант, якщо хочете зручний до запам’ятовування пароль, це використовувати три або більше слова, які не взаємопов’язані за змістом, між якими будуть будь-які спецсимволи як роздільники. І третій варіант – використовуйте пароль, який складається зі зрозумілих, легко запам’ятовуваних слів українською мовою, що вводяться на англійській розкладці клавіатури.

Приклади надійних паролів по кожному з описаних способів їх створення:

(?CeRo*S9&rWT^J=zPu_
Superterrestrial_nation-basket
Cfvsq-Kexibq-Cfqn_567

2. Зміна логіна адміністратора

Для нових встановлень WordPress рекомендуємо одразу вказувати неочевидний логін. Тобто не використовуйте ім’я користувача admin, administrator, webmaster, superadmin, test, testadmin та інші. Якщо у вас вже є запис із логіном admin – дуже рекомендуємо його змінити. Зробити це дуже просто в адмінпанелі. Потрібно натиснути «Користувачі» – «Додати нового». Не забудьте дати новому користувачеві права адміністратора.

Як захистити сайт від брутфорс-атаки | Wiki HostPro

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

Як захистити WordPress-сайт від брутфорс-атаки | Wiki HostPro

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 потрібно натиснути в панелі «Файли» – «Конфіденційність каталогу».

Захист файлів і директорій паролем в cPanel | Wiki HostPro

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

Захист файлів і директорій паролем в cPanel | Wiki HostPro

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

Захист файлів і директорій паролем в cPanel | Wiki HostPro

У результаті цих дій у папці 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 за допомогою плагінів | Wiki HostPro

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

Заборона доступу до 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. Після встановлення й активації в налаштуваннях можна встановити ліміт спроб входу і час блокування, а також додати деякі адреси або діапазони адрес у білий або чорний список на постійній основі.

Обмеження кількості спроб входу в адмін-панель WordPress | Wiki HostPro

7. Використання двофакторної аутентифікації

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

Використання двофакторної аутентифікації для захисту WordPress-сайту | Wiki HostPro

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

Використання двофакторної аутентифікації для захисту WordPress-сайту | Wiki HostPro

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.

У налаштуваннях ви можете вибрати форми, на які буде встановлена капча, а також способи перевірки, набори «задачок», які будуть показуватися. Можна вибрати як звичайний варіант з введенням символів із малюнку, так і більш складні – виконати арифметичні дії.

Додавання капчі на форму авторизації в адмін-панель для захисту сайту від брутфорс атак | Wiki HostPro

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

Додавання капчі на форму авторизації в адмін-панель для захисту сайту від брутфорс атак | Wiki HostPro

10. Зміна адреси адмінпанелі

Можливо, це не найбільш простий і зручний спосіб захисту, але точно один з максимально ефективних. Змінити адресу (URL) для входу в адмінпанель можна вручну, якщо ви досвідчений адміністратор, або ж за допомогою спеціальних плагінів.

Вручну процес складається з декількох етапів:

  1. Перейменуйте файл wp-login.php. Використовуйте випадкову послідовність рядкових латинських букв, цифри і тире. Наприклад: some-new-page456.php
  2. В отриманому файлі знайдіть всі згадки wp-login.php і замініть їх на нову назву.
  3. Для коректної роботи сайту заміну необхідно виконати також в файлах: 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.

Зміна URL адмін-панелі для захисту сайта на WordPress від брутфорс атаки | Wiki HostPro

11. Відключення виведення помилок авторизації

Під час брут-форс атаки хакеру буде корисно бачити інформацію про те, що введені дані є неправильними. Повідомлення про це відображаються кожен раз при невдалій спробі входу, причому також повідомляється, що саме – логін або пароль – неправильне. Тому можливо трохи ускладнити життя хакерам: прибрати ці повідомлення.

Для цього достатньо додати в functions.php теми вашого сайту лише один рядок:

add_filter('login_errors',create_function('$a', "return null;"));

Редагувати файл можна будь-яким зручним вам способом, як з адмінпанелі, так і по FTP або через файловий менеджер. Рядок потрібно додати на початку файлу після відкриваючого тега (<?php ).

Це були, на наш погляд, найбільш дієві методи захисту сайтів на WordPress від зломів методом брут-форс атаки. Ви можете вибирати будь-який один або скомбінувати декілька. А наступного разу ми познайомимо вас з одним плагіном, який об’єднує в собі майже всі описані тут методики захисту сайту.

Щодня сайти та плагіни на тарифах WordPress хостингу від HostPro перевіряються на наявність вразливостей. Щоночі ми робимо резервні копії вашого сайту та зберігаємо їх протягом місяця. Якщо ваш сайт буде зламано, ми відновимо його роботу безкоштовно. Перенести свій сайт на HostPro безпечно, швидко і абсолютно безкоштовно. Лише заповніть заявку на нашому сайті.

Telegram Hostpro

Наш телеграм

з важливими анонсами, розіграшами й мемами

Приєднатися

Можливо, вас зацікавить

Плагін AllinOneSEOPack Частина 2. Продуктивність та налаштування модулів

Плагін AllinOneSEOPack Частина 2. Продуктивність та налаштування модулів

Нагадаємо, що ми розбираємо налаштування плагіну «All in One SEO», який стане для вас...

Ruslan Holovatiuk | Оновлено: 22.07.2024

Плагін AllinOneSEOPack Частина 1. Основні налаштування

Плагін AllinOneSEOPack Частина 1. Основні налаштування

Якщо ви створюєте свій сайт не тільки для «краси» і розумієте, що органічний трафік...

Diana Honcharenko | Оновлено: 04.07.2024

Огляд преміумтеми Divi

Огляд преміумтеми Divi

"Divi від Elegant Themes – один з кращих преміумшаблонів WordPress", – у такій думці...

Diana Honcharenko | Оновлено: 11.06.2024

Як виправити код мови в URL з uk на ua у WPML? 

Як виправити код мови в URL з uk на ua у WPML? 

Загальноприйнято, що для URL української версії сайту використовується код “ua”. Однак у налаштуваннях WPML...

Diana Honcharenko | Оновлено: 05.05.2023