В своем стремлении блокировать чрезмерные неудачные phpMyAdmin
попытки входа в систему fail2ban
я создал скрипт, который регистрирует неудачные попытки входа в файл:/var/log/phpmyadmin_auth.log
Пользовательский журнал
Формат /var/log/phpmyadmin_auth.log
файла:
phpMyadmin login failed with username: root; ip: 192.168.1.50; url: http://somedomain.com/phpmyadmin/index.php
phpMyadmin login failed with username: ; ip: 192.168.1.50; url: http://192.168.1.48/phpmyadmin/index.php
Пользовательский фильтр
[Definition]
# Count all bans in the logfile
failregex = phpMyadmin login failed with username: .*; ip: <HOST>;
phpMyAdmin jail
[phpmyadmin]
enabled = true
port = http,https
filter = phpmyadmin
action = sendmail-whois[name=HTTP]
logpath = /var/log/phpmyadmin_auth.log
maxretry = 6
Журнал fail2ban
содержит:
2012-10-04 10:52:22,756 fail2ban.server : INFO Stopping all jails
2012-10-04 10:52:23,091 fail2ban.jail : INFO Jail 'ssh-iptables' stopped
2012-10-04 10:52:23,866 fail2ban.jail : INFO Jail 'fail2ban' stopped
2012-10-04 10:52:23,994 fail2ban.jail : INFO Jail 'ssh' stopped
2012-10-04 10:52:23,994 fail2ban.server : INFO Exiting Fail2ban
2012-10-04 10:52:24,253 fail2ban.server : INFO Changed logging target to /var/log/fail2ban.log for Fail2ban v0.8.6
2012-10-04 10:52:24,253 fail2ban.jail : INFO Creating new jail 'ssh'
2012-10-04 10:52:24,253 fail2ban.jail : INFO Jail 'ssh' uses poller
2012-10-04 10:52:24,260 fail2ban.filter : INFO Added logfile = /var/log/auth.log
2012-10-04 10:52:24,260 fail2ban.filter : INFO Set maxRetry = 6
2012-10-04 10:52:24,261 fail2ban.filter : INFO Set findtime = 600
2012-10-04 10:52:24,261 fail2ban.actions: INFO Set banTime = 600
2012-10-04 10:52:24,279 fail2ban.jail : INFO Creating new jail 'ssh-iptables'
2012-10-04 10:52:24,279 fail2ban.jail : INFO Jail 'ssh-iptables' uses poller
2012-10-04 10:52:24,279 fail2ban.filter : INFO Added logfile = /var/log/auth.log
2012-10-04 10:52:24,280 fail2ban.filter : INFO Set maxRetry = 5
2012-10-04 10:52:24,280 fail2ban.filter : INFO Set findtime = 600
2012-10-04 10:52:24,280 fail2ban.actions: INFO Set banTime = 600
2012-10-04 10:52:24,287 fail2ban.jail : INFO Creating new jail 'fail2ban'
2012-10-04 10:52:24,287 fail2ban.jail : INFO Jail 'fail2ban' uses poller
2012-10-04 10:52:24,287 fail2ban.filter : INFO Added logfile = /var/log/fail2ban.log
2012-10-04 10:52:24,287 fail2ban.filter : INFO Set maxRetry = 3
2012-10-04 10:52:24,288 fail2ban.filter : INFO Set findtime = 604800
2012-10-04 10:52:24,288 fail2ban.actions: INFO Set banTime = 604800
2012-10-04 10:52:24,292 fail2ban.jail : INFO Jail 'ssh' started
2012-10-04 10:52:24,293 fail2ban.jail : INFO Jail 'ssh-iptables' started
2012-10-04 10:52:24,297 fail2ban.jail : INFO Jail 'fail2ban' started
Когда я выпускаю:
sudo service fail2ban restart
fail2ban
письма, которые я должен сказать ssh
, перезапустились, но я не получаю такого письма о своей phpmyadmin
тюрьме. Повторные неудачные входы в систему phpMyAdmin
не приводят к отправке электронной почты.
Я пропустил некоторые критические настройки? Правильное ли выражение моего фильтра неверно?
Обновление: добавлены изменения из установки по умолчанию
Начиная с чистой fail2ban
установки:
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Измените адрес электронной почты на свой, действие на:
action = %(action_mwl)s
Добавить следующее к jail.local
[phpmyadmin]
enabled = true
port = http,https
filter = phpmyadmin
action = sendmail-whois[name=HTTP]
logpath = /var/log/phpmyadmin_auth.log
maxretry = 4
Добавьте следующее к /etc/fail2ban/filter.d/phpmyadmin.conf
# phpmyadmin configuration file
#
# Author: Michael Robinson
#
[Definition]
# Option: failregex
# Notes.: regex to match the password failures messages in the logfile. The
# host must be matched by a group named "host". The tag "<HOST>" can
# be used for standard IP/hostname matching and is only an alias for
# (?:::f{4,6}:)?(?P<host>\S+)
# Values: TEXT
#
# Count all bans in the logfile
failregex = phpMyadmin login failed with username: .*; ip: <HOST>;
# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
# Ignore our own bans, to keep our counts exact.
# In your config, name your jail 'fail2ban', or change this line!
ignoreregex =
Запустить снова fail2ban
sudo service fail2ban restart
PS: я люблю яйца
источник
Ответы:
Это хорошо, но почему бы не использовать функциональность apache для регистрации неудачных входов в систему?
Добавьте эти строки в ваш Apache Config (то есть: /etc/apache2/conf.d/phpmyadmin.conf) в соответствующем разделе VirtualHost:
Затем создайте фильтр fail2ban:
/etc/fail2ban/filter.d/phpmyadmin.conf
Теперь добавьте джейл в /etc/fail2ban/jail.local
Перезапустите apache и fail2ban:
и все готово, не нужно PHP-скриптов и так далее ..
источник
jail.conf
, создайте вместо этого копиюjail.local
Вы должны изменить свой скрипт, чтобы включить метку времени в файлы журнала. Без этого fail2ban не будет работать
fail2ban-regex /var/log/phpmyadmin_auth.log /etc/fail2ban/filter.d/phpmyadmin.conf
сначала используйте для подтверждения вашего регулярного выражения.Я мог бы успешно запустить fail2ban, используя вашу исходную конфигурацию (до jail.local)
Как только введено правильное регулярное выражение, вы можете использовать аудит, чтобы определить, доступен ли ваш файл с помощью fail2ban.
я использовал
auditctl -w /var/log/phpmyadmin_auth.log -p warx -k phpmyadmin_fail2ban
источник