Was sind ‘User-Agents’?

    User-Agents werden von Webservern verwendet, um Informationen über die Anfrage zu erhalten und die Antwort entsprechend anzupassen. Webbrowser verwenden das HTTP-Protokoll, welches unter anderem im RFC 2616 (Request for Comment) definiert ist, um Webseiten abzurufen. Der RFC beschreibt mitunter einen Header namens “User-Agent”, der den Namen und die Version des Browsers an den Webserver überträgt. Der Header ist optional, aber empfohlen und wird von den meisten Webbrowsern und anderer (Client-)Software verwendet. Er wird bei jedem Seitenabruf übertragen und dient hauptsächlich zur statistischen Erhebung, Fehlersuche und zur Auslieferung von Inhalten, die für spezielle Clientsoftware maßgeschneidert sind.

    Warum ‘User-Agents’ blockiert werden sollte?

    Dafür gibt es verschiedene Gründe:

    • Ein häufiger Grund ist die Abwehr von bösartigen Bots, die versuchen, auf Websites zuzugreifen und sie zu beschädigen oder zu missbrauchen.
    • Ein weiterer Grund, ist die Vermeidung von unerwünschtem Verkehr auf einer Website, wie zum Beispiel automatisierte Zugriffe von Scraping-Tools oder Crawler.
    • Ein anderer Grund könnte sein, dass Funktion oder Inhalt der Website nur für bestimmte Browser oder Geräte optimiert sind und daher der Zugriff von anderen User-Agents beschränkt wird. Ein populäres Beispiel hierfür wäre die APP auf dem Handy, die mit einer API spricht.
    • Oder einfach nur, um die Last auf einem Webserver zu reduzieren.

    ‘User-Agents’ in Nginx blockieren

    Nginx speichert den Inhalt des Header-Felds User-Agents in der Variable $http_user_agent, die teil des ngx_http_core_module ist. Ein Beispiel, wie Sie das map-Modul dazu verwenden können, die Variable abzufragen:

    1. Öffnen Sie die Nginx-Konfigurationsdatei. (in der Regel /etc/nginx/nginx.conf).

    2. Suchen Sie den http-Block und fügen Sie den folgenden Code innerhalb davon ein:

      map $http_user_agent $block_ua {
      default 0;
      ~*(bad_user_agent1|bad_user_agent2) 1;
      }

      Durch den Code wird eine Variable erstellt namens $block_ua, die auf “0” gesetzt wird, es sei denn das der User-Agent entweder “bad_user_agent1” oder “bad_user_agent2” entspricht, dann wird sie “1” gesetzt.

    3. Suchen Sie anschließend den server-Block der Website, die sie für die beiden User-Agents blockieren möchten, und fügen Sie den folgenden Code innerhalb des Blocks ein:

      if ($block_ua) {
      return 403;
      }

      Dieser Code prüft die $block_ua Variable und blockiert die beiden User-Agents mit dem Response-Code403 Forbidden“.

    4. Speichern Sie die Änderungen, Syntax-Prüfung (nginx -t) und neu laden (service nginx reload), bei erfolgreicher Prüfung, um die Änderungen anzuwenden:

      nginx -t && service nginx reload

    Beispiel für eine nginx.conf-Datei:

    http {
        map $http_user_agent $block_ua {
            default 0;
            bad_user_agent1 1;
            bad_user_agent2 1;
        }
        server {
            server_name example.com;
            if ($block_ua) {
                return 403;
            }
            ...
        }
    }

    Das war’s! Ab sofort werden User-Agents, die “bad_user_agent1” oder “bad_user_agent2” entsprechen, von der Website blockiert. Sie können weitere User-Agents der Liste hinzufügen, indem Sie weitere Zeilen hginzufügen.

    Test

    Um zu testen, ob das Blockieren von User-Agents funktioniert, können Sie versuchen, von einem Gerät oder einem Programm aus auf Ihre Website zuzugreifen, dessen User-Agent vorher geblockten haben. Wenn das Blockieren erfolgreich war, sollten die “403 Forbidden”-Fehlermeldung erhalten, wenn Sie versuchen, auf die Website zuzugreifen.

    Sie können, ebenso die Log-Dateien von Nginx überprüfen, um sicherzustellen, dass die Anfragen von geblockten User-Agents tatsächlich abgelehnt werden. Die Log-Dateien von Nginx befinden sich in der Regel unter /var/log/nginx/. Sie können die Dateien mit einem Texteditor oder einem Log-Analysetool öffnen und nach Einträgen suchen, den Response code “403” haben.

    Oder Sie verwenden cURL auf der Kommandozeile, was ich am einfachsten halte. Hier ein Beispiel:

    curl -H "User-Agent: bad_user_agent1" http://www.example.com 

    Dieser Befehl sendet eine Anfrage an Ihre Website mit dem User-Agent “bad_user_agent1”, den wir weiter oben blockiert haben. Wenn das Blockieren erfolgreich war, sollte cURL die “403 Forbidden”-Fehlermeldung zurückgeben.

    Links