Edda im Homeoffice (verzweifelt): nginx IP Sperre für Adressbereiche

Hallo,

ich habe mir gerade die Trafficstatistik angeschaut. Aufgefallen ist mir hier das extrem viel Traffic von Amazon AWS gezogen wird.

Der IP Bereich ist extrem umfangreich von 18.128.0.0 - 18.255.255.255

Bisher habe ich IP's immer einzeln per deny 192.168.1.2; über die von mir erreichbare Config von Plesk eingestellt.

Nur wie kann ich eine Range sperren? Gefunden habe ich deny 18.128/255;

Zu funktionieren scheint es laut Logdatein nicht, ich habe weiter Zugriffe. Hat hier jemand Ideen?

  1. Hallo Edda,

    ich bin an der Ecke nicht ganz firm, aber wenn, dann sollte es 18.128.0.0/9 sein. Eine CIDR-Maske benötigt eine vollständig angegebene Basis-IP.

    Aber - wow - das halbe Class-A Netz 18 (wenn's denn Class A noch gäbe). Das sind eine Menge IP, die Amazon sich da genehmigt. Sicher, es ist nicht so frech wie früher, wo das MIT sich die komplette 18 reserviert hatte, aber 8 Mio Adressen sind in der Zeit von NAT und Hostname-Routing schon eine Menge Zeug.

    Wie kommt man auf das /9 Suffix?

    18.128.0.0       ist 00010010.10000000.00000000.00000000  
    18.255.255.255   ist 00010010.11111111.11111111.11111111
    Gleichbleibend       xxxxxxxx.x                              9 Bits 
    
    Entsprechende Maske: 11111111 10000000 00000000 00000000
                            255      128        0        0
    

    Die Langschreibweise der Maske wäre 18.128.0.0/255.128.0.0. Aber da sowas lästig ist, und die Maske ohnehin von links mit 1-Bits gefüllt ist, kürzt man das zu /9 ab.

    Rolf

    --
    sumpsi - posui - obstruxi
    1. Hi,

      wäre es da nicht effektiver, wirkliche Störer gleich längerfristig für den gesamten Host auszuklammern, und nicht nur für den Webserver?

      Ich musste neulich die gesamten Microsoft-Azure-Bereiche aussperren (Hunderttausende von IPs), nachdem die scheinbar alle mit Botware befallen waren und Microsoft nur geantwortet hat, dass sie sich für Handlungen ihrer Kunden nicht verantwortlich fühlen würden. Die Bots haben jedenfalls die gesamten Ranges IP für IP hochgeklappert und komplexe Scans gefahren. Da konnte man life zusehen und Wetten abschließen, wie lange der Host dem widersteht. Möglich wurde das aber vermutlich nur durch eine Macke in den M$-Produkten, die meines Wissens nach noch nicht behoben ist.

      LG
      localhorst

    2. Erstmal meine volle Zustimmung.

      Aber - wow - das halbe Class-A Netz 18 (wenn's denn Class A noch gäbe). Das sind eine Menge IP, die Amazon sich da genehmigt.

      Amazon AWS hat sogar noch mehr IP-Adressbereich:

      https://ip-ranges.amazonaws.com/ip-ranges.json

    3. Hallo Rolf,

      leider auch nicht... Schade, jemand anders noch eine Idee?

      1. Hi,

        mit DENY sähe das so aus

        Deny from 18.128.0.0/255.128.0.0

        Siehe Beschreibung z.B im Apache-Manual unter Allow Für NGINX müsstest Du das mal selber raussuchen.

        Besser wäre es aber, gleich iptables oder nftables zu benutzen. Musst Du vielleicht noch installieren.

        iptables -A INPUT -s 18.128.0.0/9 -j DROP

        und nicht vergessen, die aktuellen Rules auch persistent zu speichern, damit sie beim Neustart wieder geladen werden können.

        Und es bewährt sich, eine Dokudatei zusätzlich anzulegen, in der man sich die Sperren mit Range-Owner, Sperrzeitpunkt und Sperrgrund nochmal im Klartext merkt.

        Viel Erfolg
        localhorst

      2. Anleitung:

        https://www.initpals.com/nginx/how-to-block-requests-from-specific-ip-address-in-nginx/

        Hinweis:

        Das verhindert nicht, dass der Request stattfindet. Aber der Aufrufer bekommt eine Fehlerseite (403 Forbidden). Ebenso sollte sich dieser Status in den Logfiles wiederfinden.

        Wenn Dir das nicht gefällt: Nimm den Tipp vom Horst und blockiere mit iptables.

  2. Hallo,

    wenn bei mir ein Programm länger als 3 sec Durchlauf hat, sendet es mir eine Mail mit den Details.

    Heute um 04:02 13 Aufrufe von IP 42.xxx.10.70, 71, 72, 83, 82, ...

    Ich speichere die IP / Uhrzeit und erst nach 3 sec wird diese IP wieder bedient, ansonsten header("HTTP/1.0 429 Too Many Requests");

    Allerdings sieht es so aus: Während ich die IP in der Datenbank noch speichere, kommt schon der nächste „Schuß“ (mit anderen Parametern) von dieser IP und wird bearbeitet.

    Wie könnte ich das verhindern?

    Das volle Problem sehe ich nicht, denn die „Schüsse“, die weniger als 3 sec brauchen, poppen nicht auf.

    Bei dem heutigen Beispiel haben alle HTTP_USER_AGENT = Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.4.2661.102 Safari/537.36; 360Spider

    Macht es Sinn, diesen Wert zum Blockieren zu verwenden?

    Wieso eigentlich stimmen sich mehrere Systeme ab, zur selben Zeit denselben Server mit Anfragen zu bombardieren?

    Linuchs

    1. Hallo Linuchs,

      Wieso eigentlich stimmen sich mehrere Systeme ab, zur selben Zeit denselben Server mit Anfragen zu bombardieren?

      weil es nicht mehrere Systeme sind?

      Bis demnächst
      Matthias

      --
      Du kannst das Projekt SELFHTML unterstützen,
      indem du bei Amazon-Einkäufen Amazon smile (Was ist das?) nutzt.