Synology Reverse Proxy Antibot

Viele meiner Dienste kommen direkt von Synology und laufen auf einer DS218+. Einige Dienste habe ich in einer VM ausgelagert und nutze den Reverse Proxy in der DS218+. Dazu zählt auch dieser Blog. Bei der Auswertung meiner Logfiles fand ich nun zahlreiche ungebetene Gäste, Bots. Früher als alles noch unter Linux lief, hatte ich eine einfache Lösung für Nginx: Antibot von Sergej Müller - Github.

Wie nun den Antibot bei dem Reverse Proxy von Synology realisieren?

Zum Glück verwendet Synology standardmäßig Nginx. Zunächst fällt jedoch auf, dass das DSM von Synology bei jedem Neustart seine Konfigurationsdateien neu generiert. Änderung an den Konfigurationen müssen also in den Vorlagen vorgenommen werden.

Ich übernehme keine Gewähr bei Änderung am DSM!

Zunächst über die Weboberfläche den Zugriff per SSH erlauben und sich anschließend als Admin verbinden. Weitere Erklärungen erspare ich mir und verweise auf Antibot von Sergej Müller - Github.

Der Antibot gilt in der folgenden Beschreibung nur für den Reverse Proxy nicht z.B. für die Web Station!

Da fail2ban im DSM fehlt, habe ich diesen Teil zunächst weg gelassen. Sollte es durch aggressive Bots zu problemen kommen und der DDoS-Schutz nicht wie erwartet funktionieren, werde ich mich dann darum bemühen.

Definition der Bots als bots.map

sudo su
vi /usr/syno/share/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;
    ~Mail.RU_Bot 1;
    ~python-requests 1;
    ~MJ12bot 1;
}

Einbinden der Definition

vi /usr/syno/share/nginx/nginx.mustache

    ...

    include conf.d/http.*.conf;
    include app.d/server.*.conf;
    include sites-enabled/*;
    include /usr/syno/share/nginx/conf.d/bots.map;
}

Abfrage der Definition

vi /usr/syno/share/nginx/Portal.mustache

    ...

    {{> /usr/syno/share/nginx/error_page}}

    if ( $is_bot ) {
        return 444;
    }
}
{{/ReverseProxy}}

Testen der Änderungen

Die Änderungen sollte vor einem Neustart des Systems oder nginx getestet werden:

nginx -t

Ist alles in Ordner reicht ein Neustart des Webservers aus:

restart nginx

Testen der Maßnahme

In die bots.map einen bekannten und vorhanden User Agent, z.B. Firefox, eintragen und darüber eine Verbindung probieren. Es sollte dann keine Verbindung möglich sein.

Quellen

Github - Sergej Müller