ursus contionabundo: Apache, mod_evasive, iptables: Helfer-Skripte zum (zeitweisen) Blockieren von IP-Adressen :: Brauche zweite Meinung

Also: Diese Skripte sollen mod_evasive dabei helfen, IP-Adressen von (potentiellen) Angreifern zu blockieren. Das tun sie auch …

Problem: Diese vier Skripte müssen mit Root-Rechten laufen, werden aber vom Webserver mit Argumenten gestartet, die an Programme übergeben werden. Was immer heikel ist. Deshalb brauche ich eine zweite Meinung.

Das geschieht durch einen Eintrag in /etc/sudoers:

www-data  ALL=NOPASSWD: /usr/sbin/fwblock4time

fwblock4time nutzt fwblock und fwunblock (welche fwlist benutzen) und wird, wie schon gesagt, von mod_evasive gerufen:

## Example for file: /etc/apache2/mods-available/evasive.conf
<IfModule mod_evasive20.c>
    #…
    DOSSystemCommand    "sudo /usr/sbin/fwblock4time %s 10"
    DOSLogDir           "/tmp"
    DOSWhitelist        127.0.0.* 192.168.0.*
</IfModule>

Auch beim gelegtlichen manuellen Aufruf wird mit sudo hantiert. Also sollten die Dinger schon sicher sein.

  1. Hallo ursus contionabundo,

    Deshalb brauche ich eine zweite Meinung.

    Arzt: „Sie sind zu dick.“
    Patient: „Da hätte ich aber gern eine zweite Meinung.“
    Arzt: „Und hässlich sind Sie auch noch.“

    Bis demnächst
    Matthias

    --
    Pantoffeltierchen haben keine Hobbys.
    ¯\_(ツ)_/¯
    1. @@Matthias Apsel

      Arzt: „Und hässlich sind Sie auch noch.“

      Partner 1: „Du bis’ ja total hässlich!“
      Partner 2: „Du bist ja total betrunken!“
      Partner 1: „Aber ich bin morgen früh wieder nüchtern; dann bis’ du immer noch hässlich!“

      LLAP 🖖

      --
      „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
    2. Hi,

      Arzt: „Sie sind zu dick.“
      Patient: „Da hätte ich aber gern eine zweite Meinung.“
      Arzt: „Und hässlich sind Sie auch noch.“

      Arzt: Sie haben Übergewicht!
      Patient: Nein, ich habe Untergröße. Und damit ich noch wachse, werde ich zukünftig mehr essen.

      cu,
      Andreas a/k/a MudGuard

  2. Tach!

    Problem: Diese vier Skripte müssen mit Root-Rechten laufen, werden aber vom Webserver mit Argumenten gestartet, die an Programme übergeben werden. Was immer heikel ist. Deshalb brauche ich eine zweite Meinung.

    Es fehlt, wobei genau du Bedenken hast. Und was konkret an Parametern an diese Scripte geschickt wird. Sind es lediglich IP-Adressen, die sich aus dem TCP/IP-Traffic ergeben? Dann wird es wohl weder bei IPv4 noch bei IPv6 möglich sein, dass man da Schadcode hinbekommt, nachdem man die Bytes in die (Hex)-Zahlen-Darstellung konvertiert hat. Es gibt da ja auch keinen Interpretationsspielraum dass bestimmte Werte anders interpretiert werden könnten, jedenfalls nicht, solange kein Reverse-DNS stattfindet.

    dedlfix.

    1. Es geht vor allem um genau das von Dir so schön behandelte Problem: Den Kontextwechsel. Die IPs werden mehrfach als Argumente zu Programmen durchgereicht. Also darum, ob

      ip=$(echo -n "${1}" | tr -cd '0123456789./');
      bt=$(echo -n "${2}" | tr -cd '0123456789';
      

      reicht. $ip soll danach IPs mit Netzwerkmasken enthalten dürfen, $bt Integers.

      Und ob ich was vergessen habe...

      1. Tach!

        Es geht vor allem um genau das von Dir so schön behandelte Problem: Den Kontextwechsel. Die IPs werden mehrfach als Argumente zu Programmen durchgereicht. Also darum, ob

        ip=$(echo -n "${1}" | tr -cd '0123456789./');
        bt=$(echo -n "${2}" | tr -cd '0123456789';
        

        reicht. $ip soll danach IPs mit Netzwerkmasken enthalten dürfen, $bt Integers.

        Wenn man mit viel Skepsis an die Sache rangeht, wird man das wohl so machen wollen. Die Frage wäre aber, kann es überhaupt sein, dass anstelle der IP-Adresse etwas anderes als eine IP-Adresse kommt? Ziehst du dir die aus einem String mit weiteren Daten drin, oder bekommst du sie explizit durchgereicht und es ist unwahrscheinlich, dass da anderer Text geliefert wird? Kommt die Adresse aus dem TCP/IP-Paket und muss korrekt sein, damit das Paket überhaupt verarbeitet und bis zu dir kommt? Kommt die Angabe aus einer Konfigurationsdatei und man benötigt Adminrechte, sie zu manipulieren? Ist dein Script besser geschützt als die Konfigurationsdatei, oder ist es eh zu spät, wenn jemand Unbefugtes mit Adminrechten daherkommt?

        Und ob ich was vergessen habe...

        IPv6

        dedlfix.

        1. ist es unwahrscheinlich, dass da anderer Text geliefert wird?

          Also im Hinblick auf die primäre Verwendung kommen die IPs erst mal von mod_evasive. Problematisch ist schon, dass ich dazu dem Webserver (www-data, kein suexec - was da passiert muss ich mangels Dokumentation noch testen ) das Recht geben muss, die Skripte als root auszuführen.

          siehe/etc/sudoers:

          www-data  ALL=NOPASSWD: /usr/sbin/fwblock4time
          

          Ansonsten ist die manuelle Verwendung durch den root selbst oder durch mich selbst (sudo mit Passwort) geplant.

          Hinsichtlich des Blockierens bin ich da relativ schmerzfrei (Ups- Da fällt mir auf: x.x.x.x/0 könnte man blockieren) aber ich will natürlich nicht, dass

          1. beliebig auf dem System rumgeschrieben wird.
          2. nicht vorhergesehene Programmaufrufe geschehen.
          1. [Ich selbst:] Hinsichtlich des Blockierens bin ich da relativ schmerzfrei (Ups- Da fällt mir auf: x.x.x.x/0 könnte man blockieren)

            [x] gefixt

            [dedlfix:] IPv6

            kommt später. Erst mal IP(v4) abhandeln und dann Testumgebung für IPv6 bauen. Ich kann das Skript nicht völlig planfrei für IPv6 schreiben.