Home » Linux » Защита админки wordpress с помощью fail2ban

Защита админки wordpress с помощью fail2ban

Для организации простенькой защиты от ботов, которые постоянно проверяют на прочность вашу wordpress админку, быстрее всего настроить fail2ban. Это многофункциональное и эффективное средство для защиты сервисов от постороннего доступа. Рассмотрим его применительно к wordpress.

Если у вас есть желание научиться администрировать системы на базе Linux, рекомендую познакомиться с онлайн-курсом «Linux для начинающих» в OTUS. Курс для новичков, для тех, кто с Linux не знаком. Подробная информация.

Введение

В интернете постоянно пасутся стада ботов, проверяющие доступ к тем или иным сервисам. Чаще всего это боты очень простые, они просто подбирают по словарю доступ к ресурсам. Иногда они используют известные уязвимости. Так как wordpress самый популярный движок для сайта, пробовать его на прочность будут регулярно. Если у вас постоянно обновляется версия и уникальный пароль, которого нет в словарях, то вам скорее всего беспокоиться не о чем. Fail2ban какой-то уникальной защиты не предоставляет.

Лично я предпочитаю обезопасить себя на всякий случай и закрыть доступ к админке wordpress от слишком назойливых глаз. Будем анализировать лог web сервера и банить всех тех, кто более 3-х раз ввел неверный пароль на доступ к внутренностям сайта.

Я буду показывать настройку fail2ban на примере CentOS 7, но версия ОС тут не имеет принципиального значения. Все настройки самого сервиса подойдут и для других систем.

Установка fail2ban в CentOS 7

Первым делом установим fail2ban в систему с помощью yum. Тут ничего сложного, все как обычно.

# yum install fail2ban

Если у вас Debian/Ubuntu, воспользуйтесь командой apt-get install fail2ban.

Настройка fail2ban

Теперь необходимо отредактировать файл настроек, добавив туда информацию о нашем сайте wordpress. Открываем  /etc/fail2ban/jail.conf и добавляем в самый конец:

# mcedit /etc/fail2ban/jail.conf

[wp-login]
enabled = true
port = http,https
action = iptables-multiport[name=WP, port="http,https", protocol=tcp]
# включаем отправку оповещения на почту, если вам это необходимо
         sendmail[name=wp-login, dest=zeroxzed@gmail.com, sender=fail2ban@serveradmin.ru]
filter = wp-login
logpath = /web/sites/serveradmin.ru/log/access.log
maxretry = 3
enabled включаем секцию
port порты, которые будут забанены
action действие, которое будет выполняться, в данном случае включается блокировка iptables и отправляется оповещение, но может быть указано что-то одно
filter название фильтра, по которому будет проходить проверка
logpath путь до лог файла, которые будет анализироваться
maxretry количество срабатываний фильтра, после которого хост будет забанен

Дальше нужно создать фильтр, который мы указали ранее. Создаем новый фильтр:

# mcedit /etc/fail2ban/filter.d/wp-login.conf

[Definition]
failregex = ^<HOST> .* "POST /wp-login.php

Сохраняем его и проверяем работу фильтра:

# fail2ban-regex /web/sites/serveradmin.ru/log/access.log /etc/fail2ban/filter.d/wp-login.conf

защита wordpress с помощью fail2ban

У меня получилось 240 срабатываний фильтра на этом лог файле. Если вы хотите увидеть строки, которые пометил фильтр, то можете запустить эту же команду с ключом:

--print-all-matched

Запускаем сервис и добавляем в автозагрузку:

# systemctl start fail2ban
# systemctl enable fail2ban

На этом все, защита админки wordpress с помощью fail2ban настроена.

Проверка работы

На всякий случай проверьте в /etc/fail2ban/fail2ban.conf куда будут складываться логи сервиса. За них отвечает параметр:

logtarget = /var/log/fail2ban.log

Убедитесь, что у вас настроена ротация этого файла. В CentOS 7 для этого нужно проверить, что в папке /etc/logrotate.d есть файл fail2ban примерно следующего содержания:

/var/log/fail2ban.log {
 rotate 7
 missingok
 compress
 postrotate
 /usr/bin/fail2ban-client flushlogs 1>/dev/null || true
 endscript
}

Во время работы автобана в лог файле будут появляться примерно такие строки:

2015-12-15 16:57:27,878 fail2ban.filter [12814]: INFO [wp-login] Found 188.138.220.43
2015-12-15 17:00:29,738 fail2ban.filter [12814]: INFO [wp-login] Found 188.138.220.43
2015-12-15 17:03:03,292 fail2ban.filter [12814]: INFO [wp-login] Found 185.93.187.31
2015-12-15 17:03:29,419 fail2ban.filter [12814]: INFO [wp-login] Found 188.138.220.43
2015-12-15 17:03:30,184 fail2ban.actions [12814]: NOTICE [wp-login] Ban 188.138.220.43
2015-12-15 17:13:31,082 fail2ban.actions [12814]: NOTICE [wp-login] Unban 188.138.220.43

Проверить, забанены ли реально эти адреса можно посмотрев текущие правила iptables:

# iptables -L -v -n

настройка fail2ban

Либо можно проверить статус командой:

# fail2ban-client status wp-login

fail2ban-client status

Если вам нужно будет вручную кого-нибудь забанить, то можно воспользоваться командой:

# fail2ban-client set [name-of-jail] banip [ip-address]

Это в общем случае, в нашем случае команда будет выглядеть вот так:

# fail2ban-client set wp-login banip 188.138.220.43

Чтобы разбанить какой-нибудь адрес, поступаем следующим образом:

# fail2ban-client set wp-login unbanip 188.138.220.43

Заключение

Такая нехитрая и эффективная в некоторых случаях защита у нас получилась. Я в течении дня собираю около тысячи попыток залогиниться через wp-admin. Не все боты долбятся 3 раза подряд и попадают в бан. Я бы даже сказал, большая часть этого не делает. Но они и не представляют опасности. Подобная этой настройка защитит в первую очередь от массового нашествия, которое способно серьезно замедлить работу сайта и хостинга в целом. Закрытие доступа на уровне iptables очень эффективный способ сохранить ресурсы сервера.

Помогла статья? Подписывайся на telegram канал автора

Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.

Рекомендую полезные материалы по схожей тематике:

Если у вас есть желание научиться администрировать системы на базе Linux, но вы с ними никогда не работали и не знакомы, то рекомендую начать с онлайн-курса «Linux для начинающих» в OTUS. Курс для новичков, для тех, кто с Linux не знаком. Цена за курс минимальная (символическая). Информация о курсе и цене.

Автор Zerox

Владимир, системный администратор, автор сайта. Люблю настраивать сервера, изучать что-то новое, делиться знаниями, писать интересные и полезные статьи. Открыт к диалогу и сотрудничеству. Если вам интересно узнать обо мне побольше, то можете послушать интервью. Запись на моем канале - https://t.me/srv_admin/425 или на сайте в контактах.

6 комментариев

  1. Помогите поправить регексп для лога в формате vhost_combined. Т.е. там строка лога начинается не с адреса клиента, а с имени вхоста.

  2. Неоднократно убеждаюсь что инструкции данные с этого сайта очень пригодные, полезные и рабочие если кому то нужна частная помощь помогу настроить iptables в связке fail2ban если кому надо -бесплатно- но не быстро по наличию свободного времени posohovdenis-net@yandex.ru

  3. Написано грамотно и обстоятельно. Спасибо!

    Еще найти такого же качества статью о fail2ban про защиту о ботов, которые ломятся к nginx и mysqladmin

  4. Поделитесь опытом, кто как настраивает fail2ban на log который пишет другой сервер. Например, есть шлюз centos 7 на нем крутиться fail2ban, а за шлюзом есть mail server. Вот хочу натравить fail2ban на лог exim'a

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.
Используешь Telegram? Подпишись на канал автора →
This is default text for notification bar