Nginx - IP-Adressen blockieren

Nginx: IP-Adressen blockieren

Mit dem nginx_http_access_module Modul kann bestimmten Geräten der Zugang zu einer Website blockiert werden, wie eine Blacklist für IPs. Das funktioniert für das WWW, genauso wie im lokalen Netzwerk zu Hause & Raspberry Pi.

location / {
  deny    192.168.1.1;         # verbietet eine IPv4
  allow   192.168.1.0/24;      # erlaubt ein Subnetz
  allow   2620:100:e000::8001; # erlaubt eine IPv6
  deny    all;                 # verbietet es allen (außer den erlaubten)
}

Das white- und blacklisten kann dabei im http, server, location oder limit_except Kontext erfolgen.

Der erste Eintrag von oben, der einer Bedingung entspricht, wird angewandt. Also sollte als erster Eintrag nicht ‚deny all;‘ stehen 😉

Einrichtung in Nginx

Da es schöner ist, die Blacklist nicht in der nginx.conf zu pflegen, binden wir diese einfach mit include blacklist.conf; ein. Dazu muss die /etc/nginx/nginx.conf bearbeitet werden.

In diesem Beispiel werden die Einstellungen auf den gesamten Webserver angewandt, da wir im http Kontext arbeiten. Sollen nur einzelne Seiten blockiert werden, müsst ihr in den entsprechenden location Kontext.

# nano /etc/nginx/nginx.conf
...
http {
        include blacklist.conf;
        ##
        # Basic Settings
...

Nun kann die blacklist.conf erstellt und konfiguriert werden.

# nano /etc/nginx/blacklist.conf
allow   192.168.0.1/24;      # erlaubt das gesamte (Heim-/) Subnetz
deny    all;                 # verbietet es allen (außer den erlaubten)

Mit dieser Einstellung wird allen der Zugriff verweigert, außer der Rechner mit lokalen Zugriffen im Heimnetz (sprich Clients mit den IP-Adressen 192.168.0.1 bis 192.168.0.254).

Soll nur eine IP ausgesperrt werden, reicht das in die blacklist.conf einzutragen:

deny    192.168.0.78;        # blockiert eine IP, lässt den Rest zu

Damit die Einstellungen wirksam werden, muss nginx neu geladen werden.

/etc/init.d/nginx reload

Weiterführende Links

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert