Защита WordPress с помощью Fail2Ban в Ubuntu 14.04

Материал из Home wiki
Версия от 22:57, 16 августа 2018; KOleg (обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к навигации Перейти к поиску

WordPress – это надёжная и производительная система управления контентом (CMS) с открытым исходным кодом. Будучи очень распространённой системой, WordPress часто подвергается атакам злоумышленников, агентов, вредоносных сетевых ботов и спамеров. Утилита Fail2ban позволяет предотвратить несанкционированный доступ как к сайту WordPress, так и к серверу в целом. Она отслеживает подозрительные или повторяющиеся неудачные попытки входа и блокирует эти IP-адреса, меняя текущие правила брандмауэра сервера.

Данное руководство поможет защитить WordPress при помощи Fail2ban 0.9.3 и плагина spam log на сервере Ubuntu 14.04.

Требования

Установка WordPress плагина Fail2ban

Откройте панель управления сайтом в браузере:

https://your_server_ip/wp-admin

В левой боковой панели найдите раздел Plugins (или Плагины). Откройте этот раздел, и на экране появится список установленных плагинов.

Выберите опцию Add New, чтобы добавить новые плагины для сайта WordPress. В данном случае нужно найти плагин Fail2ban.

Используйте появившееся поле поиска, чтобы найти нужный плагин. В результате программа вернёт несколько плагинов с похожим названием, среди которых должен быть искомый плагин – WP fail2ban.

Нажмите Install Now, чтобы запустить установку. Во время установки появится две опции: Activate Plugin и Return to Plugin Installer. Выберите Activate Plugin, после чего браузер вернёт список установленных плагинов, в котором появится и WP fail2ban. Чтобы получить более подробную информацию о новом плагине, нажмите View details. Справка также содержит раздел FAQ, что поможет включить некоторые функции (например, блокировку отдельных пользователей, присылающих спам).

Фильтр Fail2ban

Данный плагин содержит фильтр Fail2ban, который нужно установить, чтобы инструмент Fail2ban мог парсить логи авторизации.

Сначала переместите фильтр из каталога плагинов WordPress:

sudo cp /var/www/html/wp-content/plugins/wp-fail2ban/wordpress.conf /etc/fail2ban/filter.d/

Новый фильтр wordpress.conf позволяет настроить Fail2ban для отслеживания определённого лога авторизации. Для этого нужно отредактировать /etc/fail2ban/jail.local. Файлы jail содержат наборы правил и действий, применяемых к IP-адресам, от которых исходят неудачные попытки ввода пароля.

Откройте jail.local в текстовом редакторе:

sudo nano /etc/fail2ban/jail.local

Вставьте следующие строки в конец файла. Они включат плагин, настроят фильтр wordpress.conf, укажут соответствующие логи и разрешат трафик http и https.

[wordpress]
enabled = true
filter = wordpress
logpath = /var/log/auth.log
port = http,https

Сохраните и закройте файл.

Затем нужно перезапустить Fail2ban, чтобы обновить настройки и включить фильтр.

sudo service fail2ban restart

Директива ignoreip

Чтобы случайно не заблокировать себя или других заведомо безопасных пользователей, рекомендуется внести эти внешние IP-адреса в настройки Fail2ban.

Чтобы узнать внешний IP в операционной системе на основе Linux используйте:

curl ipecho.net/plain ; echo

Пользователи других систем должны посетить ссылку, чтобы определить свой внешний IP-адрес.

Примечание: Если к WordPress имеют доступ другие пользователи, узнайте их внешние IP-адреса и добавьте в настройки.

Откройте jail.local:

sudo nano /etc/fail2ban/jail.local

Директива ignoreip содержит список IP-адресов, которые не нужно блокировать в случае неудачной попытки ввода пароля, начиная с локального IP-адреса (localhost). IP-адреса в этом списке отделяются пробелами. Добавьте сюда и другие заведомо безопасные адреса.

Директиву ignoreip нужно поместить в раздел DEFAULT под ранее добавленным блоком кода.

ignoreip = 127.0.0.1/8 your_computer_ip

Сохраните и закройте файл.

Чтобы убедиться, что ваша успешная авторизация не была отмечена фильтром, используйте:

sudo fail2ban-client status wordpress

Вывод будет примерно такой:

Status for the jail: wordpress
|- filter
|  |- File list:    /var/log/auth.log
|  |- Currently failed: 0
|  `- Total failed: 0
`- action
|- Currently banned: 0
|  `- IP list:
`- Total banned: 0

Сведения об удачной авторизации хранятся в файле auth.log; перейдите в конец этого файла (при помощи tail), чтобы найти данные о своей авторизации:

sudo tail /var/log/auth.log

Вывод выглядит примерно так:

Month Day Hour:Minute:Second your_server wordpress(your_server_ip)[PID]: Accepted password for admin from your_computer_ip

Если в логах появится информация о неавторизованных пользователях или неудачной попытке авторизации, новый плагин заблокирует этому IP-адресу доступ к сайту, соответствующим образом изменяя правила брандмауэра.

Ротация логов

Если логи сайта WordPress стали слишком объёмными и содержат слишком много данных о неудачных попытках ввода пароля, можно выполнить ротацию лог-файла. Для этого нужно отредактировать /etc/logrotate.conf:

sudo nano /etc/logrotate.conf

Вставьте в файл следующие строки. этот код устанавливает максимальный объём файла, права на лог и срок действия лога (устанавливается в неделях, в данном случае лог действителен в течение 4 недель).

/var/log/auth.log {
size 30k
create 0600 root root
rotate 4
}

Сохраните файл и закройте его.

Заключение

Теперь WordPress надёжно защищён плагином Fail2ban. При этом инструмент Fail2ban не заблокирует ваш IP или IP заведомо безопасных пользователей. Кроме того, логи не будут перегружаться благодаря заведомо настроенной ротации. Теперь сайт WordPress защищён от несанкционированных попыток входа, спама в комментариях и взлома.