Полный чек‑лист безопасности WordPress: 12 шагов от А до Я
1. Подготовка сервера и базовых настроек
Ни одна защита не будет работать, если сервер уже уязвим. Проверьте версии PHP, MySQL и веб‑сервера, отключите неиспользуемые модули и включите SSL.
1.1. Обновление ядра и пакетов
Регулярно обновляйте системные пакеты. На Ubuntu это делается одной командой:
sudo apt update && sudo apt upgrade -y 1.2. Ограничение доступа к wp‑config.php
Файл wp-config.php содержит ключи доступа к базе. Защитите его через .htaccess:
<Files wp-config.php>
Order allow,deny
Deny from all
</Files> 2. Защита входа в админку
Брутфорс‑атаки – одна из самых распространённых угроз. Примените несколько уровней защиты.
2.1. Смена URL входа
Стандартный /wp-login.php легко находится ботами. Плагин Rank Math не меняет URL, но в сочетании с WPS Hide Login вы получаете скрытый путь.
2.2. Двухфакторная аутентификация (2FA)
Установите Any Two Factor или Google Authenticator. После ввода пароля потребуется одноразовый код.
2.3. Ограничение попыток входа
Плагин Limit Login Attempts Reloaded блокирует IP после 5 неуспешных попыток на 15 минут.
3. Плагины и темы – только проверенные
Каждый активный плагин – потенциальный входной пункт. Выполните чек‑лист перед установкой.
3.1. Проверка репутации
Смотрите количество активных установок, отзывы и дату последнего обновления. Избегайте «нулевых» плагинов.
3.2. Отключение и удаление неиспользуемых
Не оставляйте отключённые плагины – они всё равно находятся в файловой системе и могут быть атакованы.
3.3. Защита от редактирования файлов
Добавьте в wp-config.php строку, запрещающую редактирование тем и плагинов из админки:
define('DISALLOW_FILE_EDIT', true); 3.4. Дочерняя тема вместо правки ядра
Все кастомизации делайте в дочерней теме, чтобы при обновлении оригинала не потерять изменения. Подробный гайд – как создать и настроить дочернюю тему WordPress.
4. Защита .htaccess и файловой структуры
Правильные правила в .htaccess могут остановить большинство атак.
4.1. Запрет доступа к директориям
# Защита wp‑content/uploads от выполнения PHP
<Directory "wp-content/uploads">
php_flag engine off
php_flag engine off
</Directory> 4.2. Защита XML‑RPC
Если вы не используете удалённые публикации, полностью отключите xmlrpc.php:
<Files xmlrpc.php>
Order deny,allow
Deny from all
</Files> 4.3. Ограничение перечисления директорий
Добавьте в конец файла:
Options -Indexes 5. Мониторинг, реагирование и fail2ban
Защита – это процесс, а не разовая настройка. Автоматизируйте обнаружение подозрительной активности.
5.1. Логи доступа и ошибок
Включите подробный лог в Nginx/Apache и отправляйте его в SIEM‑систему или в сервис анализировать поисковые запросы для обнаружения аномалий.
5.2. Интеграция с fail2ban
Создайте jail, который будет блокировать IP после нескольких 404‑ошибок или попыток доступа к wp-login.php:
[wordpress-login]
enabled = true
filter = wordpress-login
logpath = /var/log/apache2/*error.log
maxretry = 5
bantime = 3600 Файл /etc/fail2ban/filter.d/wordpress-login.conf:
[Definition]
failregex = "(GET|POST).*/wp-login.php"
ignoreregex = 5.3. Регулярные сканирования
Запускайте WPScan или Sucuri SiteCheck раз в неделю. Автоматизировать можно через cron:
0 3 * * * /usr/local/bin/wpscan --url https://example.com --api-token YOUR_TOKEN --output /var/log/wpscan.log 6. Финальный чек‑лист: проверяем всё
- Обновлены PHP, MySQL, веб‑сервер.
- SSL‑сертификат установлен и принудительно используется.
- wp-config.php защищён в .htaccess.
- URL входа изменён, включена 2FA.
- Ограничены попытки входа.
- Все плагины и темы проверены, неиспользуемые удалены.
- DISALLOW_FILE_EDIT включён.
- Кастомизации реализованы через дочернюю тему.
- .htaccess содержит правила защиты uploads, xmlrpc и отключения индексации.
- Fail2ban настроен на блокировку brute‑force.
- Регулярные сканирования WPScan/Sucuri.
- Резервные копии хранятся вне веб‑корня и проверяются.
Следуя этому чек‑листу, вы сведёте риск взлома к минимуму и сможете сосредоточиться на развитии проекта, а не на реагировании на инциденты.
❓ Часто задаваемые вопросы
Как быстро отключить редактирование файлов из админки?
Добавьте в wp-config.php строку define(‘DISALLOW_FILE_EDIT’, true); — это полностью запретит открытие редактора тем и плагинов.
Нужен ли отдельный сервер для fail2ban?
Нет, fail2ban устанавливается непосредственно на тот же сервер, где работает WordPress, и работает с логами веб‑сервера.
Можно ли полностью избавиться от xmlrpc.php?
Да, если не используете удалённые публикации, отключите файл через .htaccess или удалите его, но учтите, что некоторые плагины могут его требовать.
Как часто следует обновлять плагины?
Обновляйте плагины сразу после выхода новой версии, особенно если в релизе исправлены уязвимости. Подпишитесь на уведомления в админке.