Bad Bots aussperren mit Nginx
Wenn man seinen Server absichern möchte, will man auch seine Webseiten absichern. Um das umzusetzen, habe ich kurz das Internet bemüht und folgende schlichte Anleitung gefunden.
Folgende Anleitung habe ich gefunden von Sergej Müller. Hier beschreibt er, wie man sogenannte Badbots aussperren kann. Github
Im ersten Schritt wird eine Map Datei angelegt, wo alle Bots definiert werden. Diese kann natürlich jederzeit erweitert werden.
sudo vi /etc/nginx/conf.d/bots.map
map $http_user_agent $is_bot {
default 0;
~Sogou 1;
~Abonti 1;
~Pixray 1;
~Python 1;
~Spinn3r 1;
~libwww-perl 1;
~Wget 1;
~Curl 1;
~Ezooms 1;
~mShots 1;
~SemrushBot 1;
~Exabot 1;
~ZmEu 1;
~iCjobs 1;
~QuerySeekerSpider 1;
~Baiduspider 1;
~AhrefsBot 1;
~CareerBot 1;
~coccoc 1;
~MJ12bot 1;
~SeznamBot 1;
~spbot 1;
~ShowyouBot 1;
~adressendeutschland 1;
~PagesInventory 1;
~aboutWebSearch 1;
~Java 1;
~JCE 1;
~bitlybot 1;
~WeSEE 1;
~updown_tester 1;
~200PleaseBot 1;
~Nutch 1;
~HTTP_Request 1;
~AnyOther 1;
~Crawler 1;
~BLEXBot 1;
~yacybot 1;
~Cliqzbot 1;
}
Anschließend muss Nginx mitgeteilt werden welche Bots ausgeschlossen werden sollen. Das geht so; innerhalb des Serverblocks wird die Dateien, die oben bearbeitet wurde, angegeben:
sudo vi /etc/nginx/nginx.conf
server {
[...]
# load configs
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
include /etc/nginx/conf.d/bots.map;
}
Dann wird die Konfiguration der Webseite angepasst. Dies muss natürlich mit jeder Webseite geschehen die vor Badbots geschützt werden soll.
sudo vi /etc/nginx/sites-available/domain.tld.conf
server {
###
if ( $is_bot ) {
return 444;
}
}
Damit werden alle Badbots lokalisiert und mit dem Error Code 444 versehen und vom Server abgewiesen. Mit Fail2ban können diese dann gänzlich vom Server ausgeschlossen werden.
Dazu wird ein Filter angelegt.
sudo vi /etc/fail2ban/filter.d/nginx-bots.conf
# Fail2Ban configuration file
#
# List of bad requests
#
# Server: Nginx
# Author: Sergej Müller
#
[Definition]
# Option: failregex
# Notes : Detection of 444 requests.
# Values: TEXT
#
failregex = ^<HOST> - .+ 444 0 ".+"$
# Option: ignoreregex
# Notes : Regex to ignore.
# Values: TEXT
#
ignoreregex =
Und ein entsprechendes Jail, damit Fail2ban weiß, wo es nach den Fehler-Codes schauen soll.
sudo vi /etc/fail2ban/jail.local
[nginx-bots]
enabled = true
port = http
filter = nginx-bots
logpath = /var/log/nginx/access.log
maxretry = 0
findtime = 86400
bantime = -1
anschließend alles neu starten
sudo nginx -t && sudo service nginx reload
sudo service fail2ban restart
Alternative
Ich habe eine weitere Möglichkeit entdeckt, wie man einen Bad-Bot Filter einrichten kann. Die Anleitung ist umfassend, aber auf Englisch.
Quelle: github