Pull to refresh

Защищаем Joomla от брутфорса при помощи bruteblock'a

Привет хабраюзер, хочу поделится опытом настройки bruteblock'a для защиты CMS Joomla 2.5 от брутфорс атак, началось все с того как я заметил на сервере в логах Jooml'ы неудачные попытки авторизации в файле error.php, Joomla сама рапортует о неудачных попытках в этот файл, в моем случае конфигурация сервера FreeBSD 10 + Nginx+PHP-FPM+MySQL+chroot. Файл error.php лежал по пути /usr/local/www/example.org/log/error.php. На сервере так же установлен bruteblock который служил стражем против брутфорса sshd демона о его настройке говорить я не буду, статей на просторах интернета предостаточно, предположим что у Вас он установлен и настроен…

Bruteblock работает с syslog'ом и берет все неудачные попытки авторизации из него же, встал вопрос о перенаправлении вывода из файла error.php в syslog и попалась мне утилитка входящая в состав UNIX систем под названием logger с ее помощью мы и перенаправим файл error.php в syslog, для этого добавим строчку в cron:
* * * * * /usr/bin/logger -f /usr/local/www/example.org/log/error.php -t joomla -p auth.info && /bin/cat /dev/null > /usr/local/www/example.org/log/error.php

после этого наш файл error.php будет каждую минуту скидываться в syslog с тегом joomla приоритетом auth.info и обнулятся что бы в следующий раз не импортировать уже существующие записи, теперь в логе /var/log/auth.log должны появляться записи:
Feb 16 18:12:42 example joomla: 2014-02-16 14:11:44 INFO 1.2.3.4 Joomla FAILURE: Username and password do not match or you do not have an account yet. ("admin")
Feb 16 18:12:42 example joomla: 2014-02-16 14:12:26 INFO 1.2.3.4 Joomla FAILURE: Username and password do not match or you do not have an account yet. ("aaaa")
Feb 16 18:12:42 example joomla: 2014-02-16 14:12:29 INFO 1.2.3.4 Joomla FAILURE: Username and password do not match or you do not have an account yet. ("aaaa")
Feb 16 18:12:42 example joomla: 2014-02-16 14:12:32 INFO 1.2.3.4 Joomla FAILURE: Username and password do not match or you do not have an account yet. ("aaaa")
Feb 16 18:12:42 example joomla: 2014-02-16 14:12:34 INFO 1.2.3.4 Joomla FAILURE: Empty password not allowed ("aaaaa")
Feb 16 18:12:42 example joomla: 2014-02-16 14:12:37 INFO 1.2.3.4 Joomla FAILURE: Username and password do not match or you do not have an account yet. ("aaaaaa")
Feb 16 18:12:42 example joomla: 2014-02-16 14:12:40 INFO 1.2.3.4 Joomla FAILURE: Username and password do not match or you do not have an account yet. ("aaaa")

Хорошо, идем дальше, теперь создаем конфиг для bruteblock'а /usr/local/etc/bruteblock/joomla.conf с содержимым:
regexp = joomla.*INFO.(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}).Joomla FAILURE.*
max_count = 4
within_time = 600
reset_ip = 3600
ipfw2_table_no = 1

и добавим в файл /etc/syslog.conf обработчик
auth.info;authpriv.info | exec /usr/local/sbin/bruteblock -f /usr/local/etc/bruteblock/joomla.conf

перезапускаем syslog
# /etc/rc.d/syslogd restart
Stopping syslogd.
Waiting for PIDS: 3855.
Starting syslogd.

Теперь если кто-то попытается ввести неверный логин и пароль 4 раза в течение 10 минут, то он будет заблокирован на один час, посмотреть заблокированные IP адреса можно командой:
# ipfw table 1 list
1.2.3.4/32 1392563442
4.3.2.1/32 1392563562
1.2.4.3/32 1392564766

очистить список заблокированных IP адресов:
# ipfw table 1 flush

По аналогии можно реализовать и на других CMS системах.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.