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:
Öffnen Sie die Nginx-Konfigurationsdatei. (in der Regel /etc/nginx/nginx.conf).
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.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-Code „403 Forbidden„.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
- https://de.wikipedia.org/wiki/User_Agent, bietet eine allgemeine Definition und Erklärung dessen, was ein User-Agent ist und wie er verwendet wird.
- https://nginx.org/en/docs/http/ngx_http_map_module.html beschreibt die Verwendung des Nginx-Moduls „map“ für die Verarbeitung und Steuerung von Anfragen basierend auf dem User-Agent.
- https://developers.whatismybrowser.com/useragents/explore/ ist eine Seite, die es Entwicklern ermöglicht, verschiedene User-Agent-Strings zu nachzuschlagen.
- https://deviceatlas.com/blog/list-of-user-agent-strings enthält eine umfangreiche Liste von User-Agent-Strings, die von verschiedenen Geräten und Browsern verwendet werden.
- https://gist.github.com/pzb/b4b6f57144aea7827ae4 eine Liste von User-Agent-Strings, die von bösartigen Bots verwendet werden.
- https://www.linuxshelltips.com/nginx-block-user-agents/ und https://www.tecmint.com/nginx-web-server-security-hardening-and-performance-tips/ enthalten Anweisungen und Beispiele dafür, wie man bestimmte User-Agents mithilfe von Nginx blockiert.
- https://www.cyberciti.biz/faq/unix-linux-appleosx-bsd-nginx-block-user-agent/ und https://blog.doenselmann.com/user-agents-mit-nginx-blockieren/ enthalten ebenfalls Anweisungen und Beispiele für die Blockierung von bestimmten User-Agents mithilfe von Nginx auf unterschiedlichen Betriebssystemen.