Black Friday! Даруємо до 3 місяців вашого тарифу VPS!

Детальніше

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

post thumbnail

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

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

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

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

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

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

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

(?CeRo*S9&rWT^J=zPu_
Superterrestrial_nationalism-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, ru_RU.po

Після цього адреса адмін панелі буде розташовуватися за вашим новим посиланням 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