Я пытаюсь настроитьfail2banна моем тестовом сервере. Я хочу просто временно заблокировать любые скриптовые боты, которые пытаются исследовать мой сайт. Поэтому все, что имеет cgi-bin
, admin
, setup.php
и так далее. Я ранее просмотрел все, что генерирует ошибки 404 с чем-то вроде grep "HTTP/1.1\" 404" access.log | awk '{print $7 } ' | sort | uniq -c | sort -n
в моем access.log.
Я позаботился о том, чтобы ни один из моих URL-адресов не содержал ни одной из этих частей.
Итак, после установки я создал jail.local
и ничего не делал с jail.conf
. Мой файл выглядит так (я хочу заблокировать IP на 10 минут):
[DEFAULT]
ignoreip = 127.0.0.1
bantime = 600
destemail = myemail
banaction = iptables-multiport
action = %(action_mwl)s
[apache-script-bots]
enabled = true
port = http,https
filter = apache-script-bots
logpath = /var/log/apache2/access.log
maxretry = 1
Я также создал apache-script-bots.conf
папку filter.d
, в которой есть только это:
[Definition]
failregex = (admin|setup.php|main.php|w00tw00t|web-console|.jsp|manager|cgi-bin)
ignoreregex =
При перезапуске fail2ban он показывает мне, что все в порядке. Но когда я пытаюсь проверить, работает ли мой jail, пытаясь запустить его с помощью: mydomain/main.php
я вижу, что я не в jail.
Когда я проверяю статус fail2ban, он говорит мне, что мой джейл работает.
fail2ban-client status
Status
|- Number of jail: 2
`- Jail list: ssh, apache-script-bots
Я предполагаю, что проблема в регулярном выражении, но не могу понять почему.
решение1
Вам нужно указать fail2ban (через регулярное выражение), где в записи журнала он найдет, <HOST>
чтобы затем забанить этот хост. Для обычного журнала доступа это будет в начале строки, так что
<HOST> -.*(w00tw00t|main.php|setup.php)
сработает, но может не дать того, что вам нужно, поскольку будет соответствовать соответствующим триггерам в любом месте записи журнала.
Вы можете попробовать что-то вроде
<HOST> -.*(/w00tw00t|/main.php |setup.php )
что должно привязать некоторые из нитей к более конкретным местам