Gibt es eine interaktive Firewall für ausgehenden Datenverkehr auf Ubuntu?


4

Ich möchte verhindern, dass einige Programme "nach Hause telefonieren" und andere Programme nur auf bestimmte Webserver zugreifen können.

Gibt es eine Möglichkeit, ausgehende Kommunikation von einzelnen Programmen auf Ubuntu interaktiv zuzulassen oder abzulehnen?

Antworten:



1

Du könntest es mit Anoubis versuchen. Es sind Installationsanweisungen und Pakete für Karmic Koala verfügbar (ich bin neu im Superuser, daher müssen Sie diese selbst finden>: - S Hinweis: Scrollen Sie auf der Download-Seite nach unten zu "Distributions".)


1

Nun, nicht gerade interaktiv, aber ich kenne 3 Möglichkeiten, den Netzwerkzugriff auf Programme einzuschränken.

  1. Standardmäßig weist Linux Benutzern Berechtigungen zu, und jedes von ihnen ausgeführte Programm verfügt über dieselben Berechtigungen. Führen Sie das nicht vertrauenswürdige Programm als separaten Benutzer aus. Das ist ziemlich einfach, wenn du es schaffst. (Manchmal kann es Ihnen nicht gefallen, wenn ein Programm Root-Rechte benötigt.) Fügen Sie die folgende Firewall-Regel hinzu:

    iptables -A OUTPUT -m owner --uid-owner ${untrusted_uid} -j DROP
    
  2. Wenn Sie keine Angst haben, den Kernel zu patchen, versuchen Sie grsecurity . Es ermöglicht unterschiedliche Berechtigungen für unterschiedliche ausführbare Dateien für denselben Benutzer. Dies ist wahrscheinlich der beste Weg, da Sie ihn in iptables-Regeln integrieren und detaillierte Einschränkungen festlegen können. Die Regeln sollten ungefähr so ​​aussehen:

    ...
    role your_regular_user u
        ...
        subject /path/to/untrusted/program
            connect disabled
        ...
    ...
    
  3. Deaktivieren Sie die Funktion connect () mit LD_PRELOAD. Dies ist die hässlichste Methode, die Sie nur verwenden können, wenn Sie keine andere Option haben. Sie benötigen eine Bibliothek wie diese:

    #include <errno.h>
    #include <stdio.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    
    int connect(int sockfd, struct sockaddr const* addr, socklen_t addrlen) {
        errno = ECONNREFUSED;
        printf("connection refused\n");
        return -1;
    }
    

    Kompilieren Sie dies mit

    gcc -fPIC -shared -Wl,-soname,fake_connect fake_connect.c -o libfake_connect.so
    

    Starten Sie das Programm mit

    LD_PRELOAD="./libfake_connect.so" ./untrusted_program
    

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.