Ghostboard pixel

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

Subscribe to Dasnetzundich.de

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
jamie@example.com
Subscribe