Bloquear bots con IIS 7.5 y 8.0

11

Me gustaría bloquear un bot con IIS. Con Apache puede agregar un comando a su archivo .htaccess, como se describe aquí . ¿Cómo lograría esto con IIS 7.5?

Actualizar

Además de responder a continuación, descubrí un total de enfoques desde que publiqué esta pregunta:

  1. Opción de análisis de URL que figura en la respuesta aceptada.
  2. Definir una regla de filtrado de solicitudes (ejemplo a continuación)
  3. Definir una regla de reescritura de URL (ejemplo a continuación)

Regla de filtro de solicitud

 <system.webServer>
    <security>
      <requestFiltering>
        <filteringRules>
          <filteringRule name="BlockSearchEngines" scanUrl="false" scanQueryString="false">
            <scanHeaders>
              <clear />
              <add requestHeader="User-Agent" />
            </scanHeaders>
            <appliesTo>
              <clear />
            </appliesTo>
            <denyStrings>
              <clear />
              <add string="YandexBot" />
            </denyStrings>
          </filteringRule>
        </filteringRules>
      </requestFiltering>
    </security>
    [...]
 </system.webServer>

Regla de reescritura de URL

<rule name="RequestBlockingRule1" patternSyntax="Wildcard" stopProcessing="true">
                    <match url="*" />
                    <conditions>
                        <add input="{HTTP_USER_AGENT}" pattern="YandexBot" />
                    </conditions>
                    <action type="CustomResponse" statusCode="403" statusReason="Forbidden: Access is denied." statusDescription="Get Lost." />
                </rule>

Para mi último proyecto, terminé con la opción 2, ya que se centra en la seguridad y se basa en la exploración de URL integrada integrada en IIS 7.

Josh
fuente

Respuestas:

4

Normalmente usas robots.txt. Funcionará en todos los bots con buen comportamiento.

Para los robots que no se comportan bien, a menudo hay poco que puedas hacer. Puede limitar los recuentos de conexiones o el ancho de banda en su firewall o servidor web, pero los bots principales generalmente usan múltiples direcciones IP. Limitar en función de las cadenas de agente de usuario generalmente no es una buena idea, ya que estos son triviales para que el bot falsifique, y los bot que no se preocupan por robots.txt también tienden a falsificar cadenas de agente de uso. Funciona en el caso específico cuando el bot envía un agente de usuario correcto, pero no obedece el archivo robots.txt.

Editar: si realmente desea bloquear en base a useragent en lugar de devolverlo a su firewall o similar, creo que la forma más fácil es usar URLScan. Escribes una regla que se parece a esto:

[Options]
 RuleList=DenyYandex

[DenyYandex]
 DenyDataSection=Agents
 ScanHeaders=User-Agent

[Agents]
 Yandex
pehrs
fuente
2
Estoy tratando de bloquear Yandex, que ignora el archivo robots.txt, pero constantemente tiene Yandex en el agente de usuario.
Josh
11

Sé que esta es una pregunta antigua, pero en IIS 7.5 puede negarla el agente de usuario si usa el filtro de solicitud.

En IIS, vaya al sitio web donde desea aplicar el filtro y luego, en el panel derecho, haga clic en el icono Solicitar filtrado . (es posible que deba habilitar esta función a través del administrador del servidor).

Haga clic en la pestaña Reglas y luego, en la lista de la extrema derecha, seleccione "Agregar regla de filtrado"

Déle un nombre y luego, en la sección Escanear encabezados , escriba "User-Agent".

Puede agregar cualquier tipo de archivo específico para bloquear en Se aplica a , o puede dejarlo en blanco para que se aplique a todos los tipos de archivo.

En Denegar cadenas , ingrese todas las cadenas de agente de usuario que desea bloquear. En el caso de esta pregunta, pondrías "Yandex" aquí.

Confirmé estos cambios en Chrome usando la extensión User Agent Switcher .

Josh
fuente
6

Para rastreadores que no respetan Robots.txt, puede usar URL Rewrite en el servidor para bloquear en función de su Agente de usuario, consulte: http://chrisfulstow.com/using-the-iis-7url-rewrite-module-to- rastreadores de bloques /

Aquí hay una manera fácil de bloquear a los principales rastreadores web (Google Bing y Yahoo) para que no indexen ningún sitio en un servidor completo. Esto es realmente útil si empuja todas sus compilaciones beta a un servidor público, pero aún no quiere que los motores de búsqueda las indexen.

  1. Instale el módulo de reescritura de URL de IIS.

  2. En el nivel del servidor, agregue una regla de bloqueo de solicitud. Bloquee los encabezados de agente de usuario que coincidan con la expresión regular: googlebot | msnbot | slurp.

O simplemente pegue esta regla en "C: \ Windows \ System32 \ inetsrv \ config \ applicationHost.config"

<system.webServer>
   <rewrite>
      <globalRules>
         <rule name="RequestBlockingRule1" stopProcessing="true">
            <match url=".*" />
            <conditions>
               <add input="{HTTP_USER_AGENT}" pattern="googlebot|msnbot|slurp" />
            </conditions>
            <action type="CustomResponse" statusCode="403"
               statusReason="Forbidden: Access is denied."
               statusDescription="You do not have permission to view this page." />
         </rule>
      </globalRules>
   </rewrite>
</system.webServer>

Esto impedirá que Google, Bing y Yahoo indexen cualquier sitio publicado en el servidor. Para probarlo, prueba el conmutador de agente de usuario de Firefox .

Para más información: http://www.iis.net/download/URLRewrite

Carlos Aguilar Mares
fuente
No estoy seguro de recomendar la actualización de la aplicación Host.config para agregar reglas de reescritura es una buena idea, ¿no deberían ir simplemente en web.config?
Blakomen
A partir de 2016, también hay esto: saotn.org/hackrepair-bad-bots-htaccess-web-config-iis
Dawesi