Bad Bots aussperren mit Nginx

badbot Jan. 23, 2020

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.

sergejmueller/sergejmueller.github.io
Contribute to sergejmueller/sergejmueller.github.io development by creating an account on 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

Quelle: github

Tags

Kaffeespende

Comments powered by Talkyard.

--}}
Großartig! Das Abonnement wurde erfolgreich abgeschlossen.
Großartig! Schließen Sie als Nächstes die Kaufabwicklung ab, um vollen Zugriff zu erhalten.
Willkommen zurück! Sie haben sich erfolgreich angemeldet.
Erfolg! Ihr Konto ist vollständig aktiviert, Sie haben jetzt Zugang zu allen Inhalten.
Mastodon