Я пытаюсь настроить 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 показывает, что все в порядке. Но когда я пытаюсь проверить, работает ли моя тюрьма, пытаясь запустить ее с помощью: mydomain/main.php
Я вижу, что меня не посадили.
Когда я проверяю статус fail2ban, он говорит мне, что мой джейл работает
fail2ban-client status
Status
|- Number of jail: 2
`- Jail list: ssh, apache-script-bots
Я предполагаю, что проблема в регулярном выражении, но не могу понять почему.
Вам нужно указать fail2ban (через регулярное выражение), где в записи журнала он найдет <HOST>
чтобы затем он мог забанить этот хост. Для обычного журнала доступа это будет в начале строки, поэтому
<HOST> -.*(w00tw00t|main.php|setup.php)
будет работать, но может не делать именно то, что вы хотите, так как он будет соответствовать соответствующим триггерам в любом месте записи журнала.
Вы можете попробовать что-то вроде
<HOST> -.*(/w00tw00t|/main.php |setup.php )
который должен привязать некоторые из нитей к более конкретным местам