Захист WordPress від брутфорс атаки [11 способів]
Що таке брутфорс-атака? Це спроба отримання несанкціонованого доступу до сайту або сервера методом перебору всіляких комбінацій логіну і пароля. Брутфорс в дослівному перекладі означає “груба сила”.
Можливо, ви вважаєте, що брутфорс атаки вас не стосуються, тому що ваш невеликий і не дуже популярний сайт не представляє інтересу для хакерів. Змушені вам повідомити, що це давно вже не так. Будь-який ресурс у мережі є об’єктом постійних і численних атак. Метою таких атак є не сам сайт, а ресурси сервера, на яких він розташований: зламаний сайт перетворюється на майданчик для хостингу вірусів, розсилки спаму, фішингу, майнінгу криптовалют і т.д. Тому захищати адмін-панель будь-якого сайту – це необхідність. В іншому випадку рано чи пізно доступ буде зламаний.
Цього разу розповідаємо, як захистити адмін-панель 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 – дуже рекомендуємо її змінити. Зробити це дуже просто в адмін-панелі. Потрібно натиснути Користувачі – Додати нового. Не забудьте дати новому користувачеві права адміністратора.
Після цього потрібно авторизуватися з новим логіном і видалити користувача з логіном 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, ru_RU.po
Після цього адреса адмін панелі буде розташовуватися за вашим новим посиланням 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
|
Наш телеграм
з важливими анонсами, розіграшами й мемами
Приєднатися