Правило mod_security 960015 продолжает ловить Google и других хороших ботов. У меня в vhost есть следующее, чтобы не ловить хороших ботов:
SecRule REQUEST_HEADERS:User-Agent "Mail.ru" log,allow
SecRule HTTP_USER_AGENT "Mail.RU_Bot" log,allow
То же самое для Google и Яндекс.
Он работает в 99% случаев, но иногда не работает по какой-то действительно странной причине, вот пример логов для бота Mail.ru:
Успешно:
217.69.134.79 - - [07/Mar/2014:10:17:13 +0400] "GET / HTTP/1.1" 200 189934 "-"
"Mozilla/5.0 (compatible; Linux x86_64; Mail.RU_Bot/Fast/2.0;
+http://go.mail.ru/help/robots)"
[Fri Mar 07 10:17:13 2014] [error] [client 217.69.134.79] ModSecurity: Access
allowed (phase 2). Pattern match "Mail" at REQUEST_HEADERS:User-Agent.
[file "/etc/apache2/sites-enabled/xxx"] [line "28"] [hostname "xxx"]
[uri "/"] [unique_id "UxlkaQp-d4EAABU9BSIAAAAV"]
И в следующую минуту это не удается:
217.69.134.79 - - [08/Mar/2014:02:14:19 +0400] "GET / HTTP/1.1" 403 389 "-" "
Mozilla/5.0 (compatible; Linux x86_64; Mail.RU_Bot/2.0; +http://go.mail.ru/
help/robots)"
[Sat Mar 08 02:14:19 2014] [error] [client 217.69.134.79] ModSecurity: Access
denied with code 403 (phase 2). Operator EQ matched 0 at REQUEST_HEADERS.
[file "/usr/share/modsecurity-crs/activated_rules/
modsecurity_crs_21_protocol_anomalies.conf"] [line "47"] [id "960015"]
[rev "2.2.5"] [msg "Request Missing an Accept Header"] [severity "CRITICAL"]
[tag "PROTOCOL_VIOLATION/MISSING_HEADER_ACCEPT"] [tag "WASCTC/WASC-21"]
[tag "OWASP_TOP_10/A7"] [tag "PCI/6.5.10"] [hostname "xxx"] [uri "/"]
[unique_id "UxpEuwp-d4EAAEMnBFQAAAAE"]
Я знаю, что правильный способ - выполнять обратный поиск, однако они замедляют работу веб-сайта, и я хочу иметь хоть какую-то безопасность, но на данный момент я не могу использовать 960015, потому что он блокирует Google и другие. В то же время это очень полезное правило, которое ловит сотни плохих ботов.
Если кто-то знает, как настроить обратный поиск, который действительно будет работать и позволит Google и другим хорошим ботам индексировать, вы можете разместить здесь сообщение. Однако я также ищу быстрое и грязное решение, чтобы заставить его работать прямо сейчас, поскольку некоторая безопасность лучше, чем никакая.
Сначала отказ от ответственности: я являюсь автором Плохое поведение, аналогичный продукт, и некоторые основные правила ModSecurity были получены из Bad Behavior.
RFC 2616 утверждает, что заголовок Accept ДОЛЖЕН присутствовать во всех запросах. Обратите внимание, что это не абсолютное требование, поэтому пользовательский агент по-прежнему условно соответствует требованиям (как определено в RFC), если он не отправляет этот заголовок.
Причина отказа в запросах без заголовка Accept заключается в том, что все обычные веб-браузеры отправляют заголовок, а многие боты - нет. На практике, однако, после просмотра миллионов запросов некоторые «хорошие» боты также не отправляют заголовок Accept. Так что это правило несовершенно и порождает ложные срабатывания.
Bad Behavior не блокирует их, если запрос не является запросом POST. Это сокращает количество спама и снижает количество ложных срабатываний примерно до нуля, но все равно пропускает других ботов. По моему опыту, многие из них все равно попадают в ловушку по другим правилам.
В вашей ситуации я бы просто отключил это правило. Это не так много, как вы думаете. Если хотите, можете изменить его так, чтобы он применялся только к запросам POST.
Вот модифицированное правило, которое подходит для этой цели, действует уже 48 часов, Google и другие работают нормально, в то время как злодеи все еще ловятся, ох!
Добавьте это к рассматриваемому vhost:
SecRule REQUEST_HEADERS:User-Agent "Google|Mail|Yandex" "phase:1,t:none,pass,nolog,ctl:ruleRemoveById=960015"
Обновление 2015 г. с более свежей ситуацией - мошенники поумнели и теперь в основном рассылают фальшивые заголовки, выдавая себя за Google, требуются различные стратегии безопасности.