Блокировка доступа Apache через строку агента пользователя

8

У меня есть сценарий, который использует прокси для атаки на сайт, который я обслуживаю.

Я заметил, что они, как правило, получают доступ к сайту через программное обеспечение с определенной строкой пользовательского агента (например, http://www.itsecteam.com/en/projects/project1_page2.htm "Havij advanced sql инъекционное программное обеспечение" со строкой user_agent из Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727) Havij). Я знаю, что любое программное обеспечение для взлома, достойное его соли, вероятно, сможет изменить его строку пользовательского агента, но я в порядке с сценарием, который должен иметь дело с этой функцией в какой-то момент.

Итак, существует ли какое-либо программное обеспечение для автоматической блокировки доступа и постоянного внесения в черный список путем сопоставления строк пользовательского агента?

Kzqai
источник

Ответы:

18

вы можете запретить доступ через BrowserMatch и Deny из SetEnvIf. Пример:

SetEnvIfNoCase User-Agent "^Wget" bad_bot
SetEnvIfNoCase User-Agent "^EmailSiphon" bad_bot
SetEnvIfNoCase User-Agent "^EmailWolf" bad_bot
<Directory "/var/www">
        Order Allow,Deny
        Allow from all
        Deny from env=bad_bot
</Directory>

Чтобы навсегда заблокировать их, вы должны написать собственный файл журнала и использовать fail2ban, например, чтобы запретить их с помощью iptables

Например создать LogFormat

LogFormat "%a %{User-agent}i" ipagent

Добавьте запись в ваш vhost / server-wide

CustomLog /var/log/apache2/useragent.log ipagent

/etc/fail2ban/filter.d/baduseragent.conf

[Definition]
failregex = ^<HOST> Mozilla/4\.0 \(compatible; MSIE 7\.0; Windows NT 5\.1; SV1; \.NET CLR 2\.0\.50727\) Havij$

/etc/fail2ban/jail.conf

[apache-bad-user-agent]

enabled  = true
port     = 80,443
protocol = tcp
filter   = baduseragent
maxretry = 1
bantime  = 86400
logpath  = /var/log/apache2/useragent.log
Дмитрий Леоненко
источник
Да, это заблокировало бы плохие строки пользовательского агента, но я хочу сделать еще один шаг и автоматически запретить ips, связанные с плохими строками пользовательского агента, так что использование строки пользовательского агента блокирует вас с этого момента на этом ip. Я бы использовал fail2ban, но я не нашел способа применить это к http-запросам на данный момент.
Kzqai
Попробуйте мое предложение в отредактированном посте
Дмитрий Леоненко
6

Я думаю, что понимаю ваш вопрос. Я предоставлю более подробное объяснение, если это то, что вы ищете. (это будет работать как ловушка для других вещей)

  • Включить движок mod_rewrite в apache2
  • Создайте trap.php, посетитель может делать все что угодно. Например, я сделал так, чтобы все посетители ip были добавлены в черный список, который запрещает доступ к моей сети.
  • Создайте файл ненужных вам пользовательских агентов, по одному в каждой строке, как этот
    bas_useragent [tab] black
    useragent_bad [tab} black
  • Теперь добавьте ваш mod_rewrite, который соответствует карте из-за плохих пользовательских утилит, а затем переквалифицируйте в вашу ловушку, если карта есть. Правило может выглядеть так:

    RewriteMap badlist txt:~/bad_useragent_list
    RewriteCond %{HTTP_USER_AGENT} .* [NC]
    RewriteCond ${badlist:%1|white} ^black$ [NC]
    RewriteRule (.*) "/trap.php" [L]

  • Это в основном сопоставляет идентификатор пользователя ключам в вашем файле, если он не найден, предполагается, что он «белый» и запрос не изменен. Если он найден и соответствующее значение «черный», запрос переписывается, чтобы перейти в ваш файл trap.php, который делает все, что вам нравится.
  • Некоторые возможные идеи. Попросите другой скрипт, просматривающий общий файл, в который trap.php записывает IP-адрес. Если этот общий файл изменяется, этот наблюдатель считывает новую информацию, анализирует IP-адреса и добавляет правило в IP-таблицы, которое блокирует весь трафик с этого адреса. Надеюсь, это поможет! Опять же, если вы хотите более подробно, просто ответьте здесь.
blerbl
источник
почти забыл, вы можете прочитать о mod_rewrite здесь: httpd.apache.org/docs/current/mod/mod_rewrite.html
blerbl