Mike© : Weiterleitung bei Bots und 404

Moin alle,

mein Error Log ist täglich überflutet mit Einträgen wie diesen:

File does not exist: C:/apache/htdocs/domain/PMA2006
File does not exist: C:/apache/htdocs/domain/mysql
File does not exist: C:/apache/htdocs/domain/admin

Ich möchte diese Penner gerne auf die Seite "Ende des Internets"
weiterleiten, per Header.

Das stellt nun kein Problem dar, aber ich hätte dann dennoch den
404 Eintrag in meiner Log Datei.

Wie kann ich die Weiterleitung erreichen ohne einen Eintrag im Error Log?

Ich benuzte derzeit eine htaccess um auf eigene Fehlerseiten zu verweisen:

verzeichnisspezifisches HTML-Fehlerdokument

ErrorDocument 404 /error404.php

In der Datei error404.php könnte ich, nach Prüfung der Request URI,
auf mein gewünschtes Ziel weiterleiten. Aber das erspart mir nicht den Eintrag im Error Log.

Weiß jemand wo ich da ansetzen muss / kann?

regds
Mike©

--
Freunde kommen und gehen. Feinde sammeln sich an.
  1. Moin!

    Ich möchte diese Penner gerne auf die Seite "Ende des Internets"
    weiterleiten, per Header.

    Das stellt nun kein Problem dar, aber ich hätte dann dennoch den
    404 Eintrag in meiner Log Datei.

    Du kannst niemanden "weiterleiten", wenn derjenige weiterhin den Status 404 erhalten soll. Denn eine Weiterleitung erfordert Status 301, 302 o.ä. - das beißt sich also.

    Mit anderen Worten: Dadurch, dass du den Status 404 änderst auf 30x, erweckst du erst den Anschein, als würden diese falschen URLs existieren.

    Das ist eine GANZ SCHLECHTE IDEE!

    Wie kann ich die Weiterleitung erreichen ohne einen Eintrag im Error Log?

    Jede Serveraktion erzeugt Einträge im Logfile. Wenn du kein Logfile willst, kannst du es abschalten oder nach /dev/null umleiten. Das hat mit einer eventuellen Weiterleitung aber nichts zu tun.

    Es ist außerdem sehr zweifelhaft, ob die Bots der Weiterleitung auf eine komplett andere Domain tatsächlich folgen würden.

    Weiß jemand wo ich da ansetzen muss / kann?

    Lasse von deinem Vorhaben ab. Ja, es gibt Blödmänner und Idioten auf dieser Welt, und natürlich auch im Internet. Aber du bzw. dein Server ist nicht in der Position, denen Manieren beizubringen. Es zu versuchen endet nur in verschwendeter Arbeits- und Lebenszeit, aber nicht in weniger Idioten und Blödmännern.

    - Sven Rautenberg

    --
    "Love your nation - respect the others."
    1. Moin Sven,

      Du kannst niemanden "weiterleiten", wenn derjenige weiterhin den Status 404 erhalten soll. Denn eine Weiterleitung erfordert Status 301, 302 o.ä. - das beißt sich also.

      Er soll keinen 404 erhalten.

      Jede Serveraktion erzeugt Einträge im Logfile. Wenn du kein Logfile willst, kannst du es abschalten oder nach /dev/null umleiten. Das hat mit einer eventuellen Weiterleitung aber nichts zu tun.

      Ich möchte natürlich das Error Log behalten. Es ist nur sehr mühsam
      die u.U. richtigen 404 da raus zu picken.

      Lasse von deinem Vorhaben ab. Ja, es gibt Blödmänner und Idioten auf dieser Welt, und natürlich auch im Internet. Aber du bzw. dein Server ist nicht in der Position, denen Manieren beizubringen. Es zu versuchen endet nur in verschwendeter Arbeits- und Lebenszeit, aber nicht in weniger Idioten und Blödmännern.

      Dieser Ansicht kann ich durchaus folgen.

      Danke Dir Sven

      regds
      Mike©

      --
      Freunde kommen und gehen. Feinde sammeln sich an.
      1. Moin!

        Du kannst niemanden "weiterleiten", wenn derjenige weiterhin den Status 404 erhalten soll. Denn eine Weiterleitung erfordert Status 301, 302 o.ä. - das beißt sich also.

        Er soll keinen 404 erhalten.

        Wie kannst du einen Client, der eine nichtexistierende Datei anfordert, als "Blödmann" erkennen und ihm einen "Nicht-404" schicken, und dem Rest des Internets, insbesondere den Suchmaschinenbots und denjenigen, die aus irgendwelchen Gründen defekten Links folgen, einen wirklichen 404?

        Bedenke: Suchmaschinenbots fragen durchaus mal absichtlich nichtexistierende Ressourcen ab, um zu testen, welche Reaktion der Server zeigt, wenn nichtexistierende Ressourcen abgefragt werden. Denn es gibt tatsächlich Seiten, die auf allen URLs mit Redirects reagieren - und das ist, wie dargelegt, durchaus schlecht.

        Lasse von deinem Vorhaben ab. Ja, es gibt Blödmänner und Idioten auf dieser Welt, und natürlich auch im Internet. Aber du bzw. dein Server ist nicht in der Position, denen Manieren beizubringen. Es zu versuchen endet nur in verschwendeter Arbeits- und Lebenszeit, aber nicht in weniger Idioten und Blödmännern.

        Dieser Ansicht kann ich durchaus folgen.

        Hehe. :)

        - Sven Rautenberg

        --
        "Love your nation - respect the others."
        1. Moin Sven,

          Wie kannst du einen Client, der eine nichtexistierende Datei anfordert, als "Blödmann" erkennen und ihm einen "Nicht-404" schicken, und dem Rest des Internets,

          Nun die "Blödmänner suchen immer nach dem gleichen Muster

          • /admin
          • /phymyadmin

          usw.

          Bedenke: Suchmaschinenbots fragen durchaus mal absichtlich nichtexistierende Ressourcen ab, um zu testen, welche Reaktion der Server zeigt, wenn nichtexistierende Ressourcen abgefragt werden.

          Indeed, das tun sie. Aber sie verwenden dann so etwas
          ./xbaslskdeork.htm :-)

          regds
          Mike©

          --
          Freunde kommen und gehen. Feinde sammeln sich an.
          1. Hallo,

            Nun die "Blödmänner suchen immer nach dem gleichen Muster

            • /admin
            • /phymyadmin

            wenn's immer die gleichen URLs sind, kannst Du die Blödmänner mit

            RewriteMatch permanent ^/(admin|phpmyadmin)$ http://127.0.0.1/

            aus Deinem Protokoll raushalten. Noch besser würde ich es allerdings finden, wenn auch Du sie mit

            RewriteMatch permanent ^/(admin|phpmyadmin)$ http://eigener.server/blockade.cgi

            und blockade.cgi à la

            #!/bin/sh
            echo Content-Type: text/html
            echo

            i=300
            while ((i--))
            do
                sleep 1
                read < /dev/random -n 1 byte
                echo -n $byte
            done

            ein klein wenig beschäftigst …

            Gruß, Hannes

            1. RewriteMatch permanent ^/(admin|phpmyadmin)$ http://eigener.server/blockade.cgi

              Verzeihung, das war die falsche Schraube. So soll's sein:

              RewriteEngine on
              RewriteBase /
              RewriteRule ^/(admin|phpmyadmin)$ blockade.cgi

              Gruß, Hannes.

            2. Moin!

              Nun die "Blödmänner suchen immer nach dem gleichen Muster

              • /admin
              • /phymyadmin

              wenn's immer die gleichen URLs sind, kannst Du die Blödmänner mit

              RewriteMatch permanent ^/(admin|phpmyadmin)$ http://127.0.0.1/

              aus Deinem Protokoll raushalten.

              Au weia, gleich die fette Regex-Engine anwerfen, die bei jedem Request aktiv werden muß, nur um ein paar Blödmänner mit "netteren" Statuscodes zu versorgen?

              Noch besser würde ich es allerdings finden, wenn auch Du sie mit

              RewriteMatch permanent ^/(admin|phpmyadmin)$ http://eigener.server/blockade.cgi

              und blockade.cgi à la

              #!/bin/sh
              echo Content-Type: text/html
              echo

              i=300
              while ((i--))
              do
                  sleep 1
                  read < /dev/random -n 1 byte
                  echo -n $byte
              done

              ein klein wenig beschäftigst …

              Auch die Idee ist nicht ohne Nebenfolgen. Ein Server kann gleichzeitig nur eine begrenzte Zahl von Prozessen benutzen, um Requests von Usern abzuarbeiten. Wenn jetzt eine nennenswerte Zahl von Blödmännern auf den Server geht, und das jeweils 300 Sekunden lang einen ganzen Prozess blockiert, dann braucht es vermutlich nur wenige hundert dieser Requests, um den gesamten Server für sonstige Zugriffe lahmzulegen.

              Auf dem exklusiv gemieteten Server kann man sowas machen, wenn man keine Besucher hat - für shared Hosting verbietet es sich aus nachvollziehbaren Gründen.

              - Sven Rautenberg

              --
              "Love your nation - respect the others."
              1. Hallo,

                RedirectMatch permanent ^/(admin|phpmyadmin)$ http://127.0.0.1/

                Au weia, gleich die fette Regex-Engine anwerfen, die bei jedem Request aktiv werden muß, nur um ein paar Blödmänner mit "netteren" Statuscodes zu versorgen?

                nein, um sie aus dem Fehlerprotokoll rauszuhalten. Von "nett" war nirgends die Rede und es ist auch nicht so, dass die voll "fette Engine" nennenswerte Antwortzeit auftürmt. Zumal angesichts dessen, was sonst gerade mit mod_rewrite angestellt wird, ich die obige Zeile noch sehr zivil finde.

                while ((i--))
                do
                    sleep 1
                    read < /dev/random -n 1 byte
                    echo -n $byte
                done

                Auch die Idee ist nicht ohne Nebenfolgen. Ein Server kann gleichzeitig nur eine begrenzte Zahl von Prozessen benutzen, um Requests von Usern abzuarbeiten.

                Wie schon angedeutet, unterschätzt Du die Leistungsfähigkeit heutiger Server IMHO maßlos.

                vermutlich nur wenige hundert dieser Requests, um den gesamten Server für sonstige Zugriffe lahmzulegen.

                1. Um Hunderte Zugriffe auf eine Teergrube gleichzeitig zu bedienen, braucht man nicht nur auf Serverseite die nötige Hardware.
                2. Wer einen Server lahmlegen will, kann zu leichteren Methoden aus der Fix-und-fertig-Schublade greifen, als sich mit einer HTTP-Teergrube rumzumühen.
                3. Die hier angetroffene Art von Bots sucht offene Hintertüren. Es macht keinen Sinn, bei dieser Suche einen Server mit fünf-, sechshundert gleichzeitigen Zugriffen zu attackieren. Wenn ein Bot in der Teergrube hängt, dann hängt er da und setzt nicht noch weitere Anfragen ab, und falls doch, behaupte ich gemäß 1. einfach mal, dass dann eher der Bot-Rechner zusammenbricht als der Server. Bleibt es bei einem Zugriff pro Bot, müssten innerhalb der Haltezeit schon hunderte andere Bots auftauchen, bevor der Server zusammenbricht, was ich für überaus unwahrscheinlich halte.
                Vielleicht habe ich ein schlechtes Gedächtnis oder bin nur die glückliche Ausnahme, aber ich kann mich nicht entsinnen, dass sich bei mir jemals mehr als einer abmühte.
                4. Die "Nutzung" der Teergrube lässt sich überwachen, sollte es Überhand nehmen, kann man sie immernoch einschränken oder abstellen. Aber gleich ob eines theoretischen Weltuntergangs den Kopf in den Sand stecken finde ich etwas sehr übertrieben.

                Gruß, Hannes

          2. Moin Moin!

            Moin Sven,

            Wie kannst du einen Client, der eine nichtexistierende Datei anfordert, als "Blödmann" erkennen und ihm einen "Nicht-404" schicken, und dem Rest des Internets,

            Nun die "Blödmänner suchen immer nach dem gleichen Muster

            • /admin
            • /phymyadmin

            usw.

            Bau Dir einen Filter für deine Logfiles:

            grep -P -v '\s/(admin|phpmyadmin|whatever)' < error_log > filtered_error_log

            Wenn Du das in ein Shell-Script einpackst und dem Apachen das mit ErrorLog "|/usr/local/bin/deppenfilter" gibst, werden die Deppen gar nicht erst gelogt.

            Alexander

            --
            Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".