Security Blog
Security Blog
Posted By Gregory

Как защитить WordPress с помощью Fail2Ban


English version: How to protect WordPress with Fail2Ban


Вместе WP Cerber и Fail2Ban могут остановить атаки методом перебора паролей еще до того, как они достигнут вашего WordPress. WP Cerber обнаруживает неудачные попытки входа в систему на уровне приложения; Fail2Ban реагирует на них на уровне операционной системы, блокируя нарушителей с помощью iptables . Эта комбинация останавливает атаки методом перебора паролей и DoS-атаки с минимальными затратами ресурсов.

Что такое Fail2Ban?

Fail2Ban — это сервис мониторинга логов, работающий на вашем сервере. Он отслеживает файлы логов на предмет закономерностей, указывающих на атаку, таких как повторяющиеся неудачные попытки аутентификации с одного и того же адреса, и как только хост превышает установленный вами порог, он блокирует этот адрес в системном брандмауэре на выбранный период. Сам по себе он ничего не знает о WordPress; он действует исключительно на основе информации, найденной в логах. Вот тут-то и вступает в дело WP Cerber: он отслеживает и записывает неудачные попытки входа в систему в формате, который может анализировать Fail2Ban, предоставляя сервису необходимые события для принятия мер.

Подробнее об атаках: атаки методом перебора паролей, DoS-атаки и DDoS-атаки — в чем разница?

Примечание: для настройки Fail2Ban вам потребуется root-доступ к вашему серверу Linux.

При использовании WP Cerber у вас есть три варианта применения Fail2Ban.

  1. Используйте заголовки ответа HTTP 403, если хотите отслеживать журналы доступа Apache.
  2. Использование файлов syslog для мониторинга неудачных попыток входа в систему.
  3. Использование пользовательского файла журнала для мониторинга неудачных попыток входа в систему.

Отслеживайте журналы доступа Apache на предмет HTTP-ответов 403.

При неудачной попытке входа в систему WP Cerber возвращает статус 403 в заголовке HTTP. Apache записывает этот ответ в свой журнал доступа, где его может прочитать Fail2Ban. Это поведение включено по умолчанию. Компромисс заключается в том, что Fail2Ban приходится анализировать весь файл access.log, чтобы найти эти попытки, что неэффективно на загруженном сайте.

Использование syslog для мониторинга неудачных попыток входа в систему.

По умолчанию WP Cerber записывает неудачные попытки входа в syslog в рамках механизма LOG_AUTH . Чтобы использовать собственный механизм, определите константу CERBER_LOG_FACILITY с целочисленным значением. В любом случае, запись в syslog или в пользовательский файл (см. ниже) будет происходить только после включения параметра «Записывать неудачные попытки входа в систему в файл журнала» в основных настройках плагина.

 define('CERBER_LOG_FACILITY', LOG_AUTHPRIV);

Использование пользовательского файла для отслеживания неудачных попыток входа в систему.

Чтобы отправлять все неудачные попытки в выбранный вами файл журнала, укажите его абсолютный путь с помощью константы CERBER_FAIL_LOG . Не забудьте предоставить вашему веб-серверу права на запись в папку или файл и включить параметр «Записывать неудачные попытки входа в систему в файл журнала ». WP Cerber создаст файл журнала, если он не существует. После определения CERBER_FAIL_LOG WP Cerber прекратит запись в стандартный syslog. Стоит отметить, что пользовательский файл CERBER_FAIL_LOG позволяет вам контролировать данные, в отличие от syslog, где хранение данных подчиняется политикам сервера или среды хостинга.

 define('CERBER_FAIL_LOG','/var/log/wp-cerber-auth.log');

Убедитесь, что PHP-процесс вашего веб-сервера имеет права на запись в указанный файл.

Согласование временных меток с серверными часами.

Обычно причиной, по которой Fail2Ban регистрирует попытки входа, но никогда никого не блокирует, является несоответствие часовых поясов, поэтому стоит разобраться в этом, даже если все остальные настройки верны.

Fail2Ban реагирует только на события, попадающие в его временной интервал findtime , и определяет это, сравнивая метку времени каждой строки лога с локальным временем вашего сервера. WordPress использует собственные часы в формате UTC, независимо от часового пояса, установленного на сайте. Поэтому на сервере, работающем, скажем, в Europe/Madrid, каждая строка, которую записывает WordPress, выглядит устаревшей на час или два. Fail2Ban отбрасывает эти события как устаревшие и никогда не блокирует аккаунт, даже если попытки блокировки зафиксированы в логе.

WP Cerber обходит эту проблему, записывая метки времени в системный часовой пояс вашего сервера, а не в часы WordPress, поэтому они соответствуют тому, что ожидает Fail2Ban по умолчанию. На большинстве серверов это происходит автоматически и ничего от вас не требует.

Если WP Cerber не может самостоятельно определить системный часовой пояс, установите его самостоятельно с помощью константы CERBER_LOG_TIMEZONE , используя любой допустимый идентификатор часового пояса:

 define('CERBER_LOG_TIMEZONE', 'Europe/Madrid');

Это значение отменяет автоматическое определение, поэтому это надежный способ определить часовой пояс, если вы когда-либо заметите расхождение во временных метках. Подойдет любой идентификатор из стандартной базы данных часовых поясов, например, 'America/New_York' или 'Asia/Tokyo'. Эта константа доступна начиная с версии WP Cerber 9.7.4 .

Что регистрируется

В этом журнале записываются персональные данные, поэтому, если ваш сайт подпадает под действие таких законов о защите персональных данных, как GDPR, это напрямую касается вас. Вот что в него входит.

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

Два из этих полей являются персональными данными в соответствии с GDPR: IP-адрес (решение Брейера установило, что IP-адрес учитывается) и имя пользователя. Поскольку WordPress позволяет входить в систему по электронной почте, именем пользователя может быть также адрес электронной почты пользователя . Это относится даже к неудачным попыткам, которые все равно фиксируют, что целью атаки был конкретный человек.

Это делает вас контроллером этих данных, что влечет за собой ряд практических последствий. Включите эти журналы в свою политику хранения и регулярно обновляйте или удаляйте их, вместо того чтобы позволять им расти без ограничений. Отслеживайте, где хранятся и пересылаются записи: пользовательский файл CERBER_FAIL_LOG позволяет вам контролировать данные, в то время как syslog может отправлять записи на централизованные или внешние серверы, где хранение и обработка осуществляются в соответствии с общесистемными политиками, которые вы не можете устанавливать. Запросы субъектов данных на доступ или удаление также распространяются на эти журналы.

WP Cerber намеренно не поддерживает самостоятельную очистку этих логов, поскольку не может контролировать, что syslog делает с записями или как операционная система сервера обрабатывает файлы логов. Функция очистки, встроенная в WP Cerber, охватывала бы лишь часть картины и могла бы ошибочно указывать на удаление данных, хотя это не так.

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


I'm a team lead in Cerber Tech. I'm a software & database architect, WordPress - PHP - SQL - JavaScript developer. I started coding in 1993 on IBM System/370 (yeah, that was amazing days) and today software engineering at Cerber Tech is how I make my living. I've taught to have high standards for myself as well as using them in developing software solutions.

View Comments
There are currently no comments.