User Agents mit nginx blockieren

Der Webserver nginx ist unter anderem wegen seinen geringen Ressourcenanforderungen sehr beliebt beim Einsatz auf Einplatinencomputern wie dem Raspberry Pi. Allerdings unterscheiden sich die Konfigurationsmöglichkeiten doch ganz deutlich vom bekannten Apache Webserver. Beim Apache werden viele Einstellungen die den Zugriff betreffen über die „.htaccess“ Datei umgesetzt. So eine Datei sucht man bei nginx vergeblich. Anpassungen werden entweder in der globalen „nginx.conf“ oder direkt in der Virtual Host Sektion durchgeführt. Um nicht alle Zugriffe auf einen Webhost zu erlauben, lassen sich diese anhand des User Agents filtern. Jeder Browser sendet zum Beispiel seine eigene Kennung mit.

Dies gilt auch für Kommandozeilenwerkzeuge wie „wget“ oder „cURL“. Damit eine ordentlich aufgebaute Struktur bestehen bleibt, lassen sich die zu blockenden User Agents in eine eigene Konfigurationsdatei eintragen. Diese wird dann vom Webserver eingelesen und angewendet. Anpassungen müssen dann in Zukunft nur noch in dieser einen Datei durchgeführt werden, ohne jedes Mal die tatsächliche Virtual Host Konfiguration zu bearbeiten.

sudo nano /etc/nginx/useragent.rules

In die Datei werden jetzt die zu blockierenden User Agents eingetragen.

map $http_user_agent $agent2block {
        default         0;
        ~*malicious     1;
        ~*backdoor      1;
        ~*netcrawler    1;
        ~*webbandit     1;
        ~*wget          1;
        ~*libwww-perl   1;
        ~*cURL          1;
        ~*BBBike        1;
        ~*java          1;
        ~*spider        1;
        ~*bot           1;
}

nginx block user agents

Der „default“ Wert bedeutet, dass alle nicht genannten Agents erlaubt sind. Soll ein User Agent „Case sensitive“ abgefragt werden, muss der Stern entfernt werden.

~Wget          1;

Damit die Konfiguration von nginx auch angewendet wird, muss die Date „useragents.rules“ noch in der http Sektion der nginx Grundkonfiguration geladen werden.

sudo nano /etc/nginx/nginx.conf
include /etc/nginx/useragent.rules;

nginx block user agents

Als letzter Schritt muss noch festgelegt werden, was mit den zu blockierenden User Agents geschehen soll. Am meisten Sinn dürfte machen, diese mit einem Status Code „403“ zu blockieren. Dies wird in der Virtual Hosts Config umgesetzt. Diese kann entweder unter „/etc/nginx/sites-available/“ oder unter „/etc/nginx/conf.d/“ liegen.

sudo nano /etc/nginx/conf.d/foo.conf
if ($agent2block = 1) {
        return 403;
}

nginx block user agents

Sind die Konfigurationsarbeiten abgeschlossen, muss nginx die Änderungen neu einlesen.

sudo systemctl reload nginx.service

Ab jetzt wird ein Versuch, eine Ressource mit einem geblockten User Agent zu erreichen, mit einem Status Code 403 quittiert.

wget https:/foo.example.com/mysecret.html

nginx block user agents

Quelle: http://ask.xmodulo.com/block-specific-user-agents-nginx-web-server.html