Wie steuere ich den Internetzugang für jedes Programm?

59

Ich möchte eine Software verwenden, um zu steuern, welches Programm eine Verbindung zum Internet herstellen darf. Ich weiß, dass dieses Verhalten mit dem Wort "Firewall" zusammenhängt, aber einige Linux-Benutzer sind sehr verärgert, wenn jemand eine Personal Firewall fordert. Ich möchte Sie nicht verärgern, wenn Sie ein solches Programm verlangen.
Ich möchte keine Ports oder andere Dinge "sichern", die eine Personal Firewall unter Windows verspricht. Ich habe nachgesehen, iptablesaber es entspricht nicht meinen Anforderungen.

Ich habe hier eine ausgezeichnete Antwort gesehen ( "Wie blockiere ich den Internetzugang für Weinanwendungen?" ), Aber es ist sehr unkomfortabel, dies einzurichten.

Gibt es eine Software, die nach jedem Programm fragt, ob es auf das Internet zugreifen darf?

Guerda
quelle
auf dem mac gibt es eine software namens little snitch , die das macht. Ich denke, es gibt auch eine Windows-Version ...
Alvar

Antworten:

6

Es ist ein Perl - Skript in dem deutschen Ubuntu - Forum ( Google-übersetzt in englisch ) , die das zu tun scheint. Ich habe es nie ausprobiert und mir das Drehbuch nicht genauer angesehen, aber vielleicht funktioniert es für Sie. Die Beschreibung ist nur in deutscher Sprache, daher benötigen Sie möglicherweise einen Übersetzungsdienst (wie Google Translate; siehe oben).

Florian Diesch
quelle
Ich werde es mir ansehen. Es ist interessant und kann das richtige Werkzeug sein. Leider gibt es keine gui, aber es sollte mich nicht aufhalten :)
guerda
34

Falls Sie noch nach einer solchen Anwendung suchen, entwickle ich gerade genau diese Anwendung: http://douaneapp.com/ https://gitlab.com/douaneapp/Douane

Meine Anwendung blockiert unbekannte Anwendungen (neue Versionen einer autorisierten Anwendung werden blockiert) und fragt Sie, ob Sie den Datenverkehr zulassen oder verweigern möchten.

Schauen Sie sich die Website an ;-)

Bildschirmfoto

ZedTuX
quelle
Cool! Ich habe mir auch ppa angeschaut, aber dort wird trotz Anwendung kein Paket erstellt. Auch ich frage mich, ob es die IP zeigen könnte, die zu einem lesbaren Aufstellungsortnamen aufgelöst wird? Ich folge den Kompilierungsanweisungen, habe dort viele Tipps für Ubuntu Dep-Pakete gesehen und werde checkinstall verwenden, um meine lokale Kopie von .deb-Paketen zu erstellen und Upgrades einfach zu verwalten (entfernen / installieren). Vielleicht könnte checkinstall verwendet werden, um auch Ihre Distributables zu erstellen.
Aquarius Power
Sie können die Feature-Anfrage auf Github ( github.com/Douane/Douane/issues ) öffnen :)
ZedTuX
2
Es scheint genau das zu sein, was ich brauchte !! Aber ich kann kein Paket finden, um es auf Ubuntu zu installieren.
Azerafati
Immer noch kein Paket für Ubuntu?
Anwar
1
Douaneapp.com ist zurück! :)
ZedTuX
26

Ich habe eine bequeme Lösung gefunden, die das Problem löst. Sie erstellen eine Gruppe, die niemals das Internet benutzen darf, und starten das Programm als Mitglied dieser Gruppe.

  1. Erstelle eine Gruppe no-internet. Tritt dieser Gruppe nicht bei

    sudo addgroup no-internet
    
  2. Fügen Sie iptables eine Regel hinzu, die verhindert, dass alle zur Gruppe gehörenden Prozesse no-internetdas Netzwerk verwenden (um ip6tablesauch IPv6-Datenverkehr zu verhindern).

    sudo iptables -A OUTPUT -m owner --gid-owner no-internet -j DROP
    
  3. Ausführen sudo -g no-internet YOURCOMMANDstatt YOURCOMMAND.

Sie können problemlos ein Wrapper-Skript schreiben, das sudo für Sie verwendet. Sie können die Kennworteingabeaufforderung durch Hinzufügen entfernen

%sudo     ALL=(:no-internet)      NOPASSWD: ALL

oder etwas ähnliches mit sudo visudo

Verwenden Sie iptables-saveund, iptables-restoreum die Firewall-Regeln beizubehalten.

Tim
quelle
1
Ich habe Ihren Reiseführer ausprobiert, sudo -g no-internet firefoxverbindet sich schneller als Standard. Es funktioniert nicht
Kenn
1
@kenn Ich kann nur sagen, dass es hier gut funktioniert. Ich würde vermuten, dass Sie beim Erstellen der Regel etwas falsch machen. Die Regel nicht speichern, das Skript nicht ausführbar machen oder ähnliches.
Tim
Ich habe neu gestartet und die obigen Regeln erneut angewendet, ohne Glück
kenn
1
funktionierte perfekt für mich, auch mit Firefox. Dankeschön!
Kostanos
1
Dies scheint auch bei mir unter Ubuntu 19.04 nicht zu funktionieren. Ich musste iptables-persistent installieren, damit die Änderungen zwischen den Neustarts gespeichert werden konnten. (Vielleicht möchten Sie das zur obigen Lösung hinzufügen). Sudo -g no-internet firefox hindert Firefox jedoch nicht daran, auf das Internet zuzugreifen. Konzeptionell scheint diese Lösung zu funktionieren. Gibt es etwas Grundlegendes, das übersehen wird? Müssen wir zum Beispiel BEIDE ipv4 und ipv6 einrichten, damit dies funktioniert?
PJ Singh
5

In Ubuntu gibt es bereits eine Firewall ufw, diese ist jedoch standardmäßig deaktiviert. Sie können es über die Befehlszeile oder das Frontend ( gufw) aktivieren und verwenden , das direkt vom Ubuntu Software Center aus installiert werden kann.

Wenn Sie den Internetzugriff für eine bestimmte Anwendung blockieren müssen, können Sie LeopardFlower ausprobieren. LeopardFlower befindet sich noch in der Beta-Version und ist im Ubuntu Software Center nicht verfügbar:

heiko81
quelle
4

Wenn Sie ein Programm unter einem anderen Benutzer ausführen, werden die Konfigurationsdateien für diesen Benutzer und nicht für Ihren verwendet.

Hier ist eine Lösung, bei der die Firewallregeln nicht sudogeändert werden müssen und die unter demselben Benutzer (über ) in einer geänderten Umgebung ausgeführt wird, in der sich Ihr Benutzer befindet my_userund die App, die Sie ausführen möchten, lautet my_app:

# run app without access to internet
sudo unshare -n sudo -u my_user my_app

Für weitere Details siehe man unshareund diese Antwort .

Linux GUI Firewall

Wenn Sie einen GUI - Firewall suchen Ich habe gute Ergebnisse mit habe OpenSnitch - es in ubuntu repos noch nicht ist , und ich würde es nicht auf Produktionsebene nennen, aber im Anschluss an die Build - Schritten von der Github Seite für mich gearbeitet.

ccpizza
quelle
3

@psusi: Ich wünschte wirklich, die Leute würden keine schlechten und nicht nützlichen Informationen verkaufen. IPTables erlaubt es einem, dies zu tun, daher würde ich es kaum als "tollkühn" bezeichnen. Nur "NEIN" zu sagen, ohne einen Anwendungsfall zu verstehen, ist etwas engstirnig. http://www.debian-administration.org/article/120/Application_level_firewalling

BEARBEITEN Sie bodhi.zazen

HINWEIS - DIESE OPTION WURDE 2005, 8 JAHRE VOR DIESER ANTWORT, VON IPTABLES ENTFERNT

SIEHE - http://www.spinics.net/lists/netfilter/msg49716.html

Festschreiben 34b4a4a624bafe089107966a6c56d2a1aca026d4 Autor: Christoph Hellwig Datum: So Aug 14 17:33:59 2005 -0700

[NETFILTER]: Missbrauch von tasklist_lock in ipt {, 6} -Eigentümer entfernen

Rip out cmd / sid / pid Matching, da es unfixable broken ist und Änderungen an tasklist_lock blockiert .

Signed-off-by: Christoph Hellwig <hch@xxxxxx>
Signed-off-by: Patrick McHardy <kaber@xxxxxxxxx>
Signed-off-by: David S. Miller <davem@xxxxxxxxxxxxx>
user141987
quelle
2
An alle, die dies melden möchten: Dies sollte kein Kommentar sein, sondern die gestellte Frage beantworten . @ user141987 Ich empfehle jedoch, diese Option zu erweitern, um weitere Informationen zum Einrichten iptablesder Implementierung von Einschränkungen für einzelne Anwendungen zu erhalten. Ich empfehle, die wichtigen Informationen in Ihre Antwort aufzunehmen (und dennoch den Link als Referenz bereitzustellen).
Eliah Kagan
2
iptables filtert NICHT nach Anwendung.
Panther
Dieser Artikel scheint eine Fehlinformation zu sein, da es keine solche Option gibt. Der Grund, warum Anträge auf Schaffung einer solchen Option in der Vergangenheit abgelehnt wurden, liegt darin, dass dies von Natur aus unzuverlässig wäre. Eine Anwendung kann einfach ihren Namen ändern.
Psusi
3
@psusi Wollen Sie damit sagen, dass "Wenn Ihr Kernel mit CONFIG_IP_NF_MATCH_OWNER kompiliert wurde, können Sie Ihre iptables-Firewall so konfigurieren, dass Pakete auf Befehlsbasis zugelassen oder abgelehnt werden" ist falsch? Oder einfach, dass die meisten Kernel diese Option nicht enthalten? Wenn dies falsch ist, gibt es Informationsquellen, die es entlarven? (Beachten Sie auch, dass der Hauptzweck von Firewall-Beschränkungen für einzelne Anwendungen nicht darin besteht, die Sicherheit von nicht vertrauenswürdigen Anwendungen zu erhöhen. Der Hauptzweck besteht darin, dem Benutzer über die in Anwendungen integrierten Konfigurationsoptionen hinaus ein gewisses Maß an Kontrolle zu geben. )
Eliah Kagan
Diese Option wurde 2005, 8 Jahre vor dieser Antwort, aus dem Kernel entfernt - spinics.net/lists/netfilter/msg49716.html. Trotz gegenteiliger Behauptungen können Sie mit iptables KEINE Anwendungsfilter verwenden.
Panther
3

Eine andere Option ist das Feuergefängnis . Es führt die Anwendung in der Sandbox aus, in der Sie steuern, ob die Anwendung das Netzwerk sehen kann:

firejail --net=none firefox

Dieser Befehl startet den Firefox-Browser ohne Internetzugang. Beachten Sie, dass die FireJail-Distribution im Ubuntu-Repo veraltet ist - laden Sie besser die neueste LTS-Version von der FireJail-Homepage herunter.

Dimitar II
quelle
2

Ich habe die Lösung gepostet gefunden hier ein guter zu sein. Dazu müssen Sie eine Benutzergruppe erstellen, für die der Internetzugriff zulässig ist , und Firewall-Regeln einrichten, um den Zugriff nur für diese Gruppe zuzulassen. Die einzige Möglichkeit für eine Anwendung, auf das Internet zuzugreifen, besteht darin, dass sie von einem Mitglied dieser Gruppe ausgeführt wird. Sie können Programme unter dieser Gruppe ausführen, indem Sie eine Shell mit öffnen sudo -g internet -s.

Um noch einmal zusammenzufassen, was in dem Beitrag steht, den ich oben verlinkt habe:

  1. Erstellen Sie die Gruppe "Internet", indem Sie Folgendes in eine Shell eingeben: sudo groupadd internet

  2. Stellen Sie sicher, dass der Benutzer, der das folgende Skript ausführt, der sudoGruppe in hinzugefügt wird /etc/group. Wenn Sie diese Datei ändern, müssen Sie sich abmelden und wieder anmelden, bevor das folgende Skript ausgeführt werden kann.

  3. Erstellen Sie ein Skript, das Folgendes enthält, und führen Sie es aus:

    #!/bin/sh
    # Firewall apps - only allow apps run from "internet" group to run
    
    # clear previous rules
    sudo iptables -F
    
    # accept packets for internet group
    sudo iptables -A OUTPUT -p tcp -m owner --gid-owner internet -j ACCEPT
    
    # also allow local connections
    sudo iptables -A OUTPUT -p tcp -d 127.0.0.1 -j ACCEPT
    sudo iptables -A OUTPUT -p tcp -d 192.168.0.1/24 -j ACCEPT
    
    # reject packets for other users
    sudo iptables -A OUTPUT -p tcp -j REJECT
    
    # open a shell with internet access
    sudo -g internet -s
    
  4. Durch Ausführen des obigen Skripts erhalten Sie eine Shell, in der Sie Anwendungen mit Internetzugang ausführen können.

Beachten Sie, dass dieses Skript nichts unternimmt, um Ihre Firewall-Regeln zu speichern und wiederherzustellen. Vielleicht möchten Sie das Skript ändern , um die zu verwenden iptables-saveund iptables-restoreBefehle Shell.

Kennzeichen
quelle
1

Zum Guten oder Schlechten verwendet Linux einen anderen Ansatz. Es gibt keine einfache grafische Oberfläche, die diese Funktionalität bietet. Es gibt viele Diskussionen zu diesem Thema im Internet und Sie können interessante Diskussionen finden, wenn Sie Google Search verwenden. Obwohl die Debatte interessant ist, gab es bisher keine engagierte Gruppe von Programmierern, die diese Funktionalität schreiben und beibehalten wollten.

Die Tools, die diese Funktionalität in Linux bieten, sind Apparmor, Selinux und Tomoyo.

Keines dieser Tools ist zu einfach zu erlernen und hat Vor- und Nachteile. Persönlich bevorzuge ich SELinux, obwohl SELinux eine steilere Lernkurve aufweist.

Sehen:

http://www.linuxbsdos.com/2011/12/06/3-application-level-firewalls-for-linux-distributions/

Es gab (gibt) eine Anwendung, auf die bereits verwiesen wurde: Leopardenblume. Ich bin mir nicht sicher über den Status / die Wartung.

Panther
quelle
1

Probieren Sie Leopard Flower . Es gibt Einschränkungen für die Benutzeroberfläche und die einzelnen Anwendungen.

Marke
quelle
0

Nein, das ist nicht möglich. Es ist auch nicht Teil der traditionellen Definition einer Firewall. Es ist etwas, das Microsoft vor einiger Zeit einfiel, um die grundlegend kaputten Sicherheitsprobleme des Betriebssystems zu beheben. In der Linux-Community wird dies als tollkühn und nicht praktikabel angesehen, da ein Programm, das nicht zulässig ist, einfach ein anderes Programm ausführen kann und auf diese Weise Zugriff erhält.

Wenn Sie nicht mögen, was ein Programm im Netzwerk tut, wenn Sie es ausführen, führen Sie dieses Programm nicht aus.

Psusi
quelle
7
Die Firewall von Microsoft war nicht die erste große Firewall, die diese Funktionalität bot. Es war nicht einmal die erste Windows- Firewall, die das anbot. BlackIce Defender, ZoneAlarm und eine Vielzahl anderer Software-Firewalls für Windows waren Jahre älter als die Einführung der Windows-Internetverbindungsfirewall. Darüber hinaus gibt es in der Linux-Community keinen solchen Konsens. Wir verwenden häufig AppArmor (oder SELinux), um das Verhalten von Anwendungen einzuschränken (und ich frage mich, ob AppArmor an diesen Zweck angepasst werden kann ...). Es ist nicht "falsch" zu kontrollieren, welche Apps auf das Internet zugreifen können.
Eliah Kagan
Wie mehrere andere Antworten belegen, sind Firewall-Einschränkungen pro Anwendung durchaus möglich . Diese Funktionalität ist in iptables / netfilter integriert!
Eliah Kagan
Nein, weder netfilter noch iptables können pro Anwendung filtern. Sie können nach Benutzer und Port filtern, jedoch nicht pro Anwendung.
Panther
"Kann einfach einen anderen ausführen" ???? Dann ist der Ersteller eines solchen Programms, das die untergeordneten Prozesse des Zielprogramms nicht blockiert, offensichtlich äußerst fehlerhaft.
Trusktr