00m.Ru
16Фев/140

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

Заметил на сервере в логах 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 запускаем "crontab -e" и прописываем:

* * * * * /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")

OK, идем дальше

теперь создаем конфиг для 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

очистить список заблокированных:

# ipfw table 1 flush

По аналогии можно реализовать и на других CMS системах