Kann ich einen Benutzer (und seine Apps) auf eine Netzwerkschnittstelle beschränken?

15

Ich habe tatsächlich zwei Szenarien, um dies anzuwenden:

  1. Multiseat Desktop: Zwei Netzwerkverbindungen mit Internet-Gateways und zwei Konten, die jeweils bandbreitenintensive Aufgaben ausführen. Ich möchte sie so aufteilen, dass ein Konto nur eth0 und das zweite Konto nur eth1 verwendet.

  2. Server: Ich habe zwei IPs auf einem Server und möchte sicherstellen, dass der E-Mail-Benutzer nur E-Mails von der zweiten IP sendet (Alias ​​eth0: 1).

Die zweite kann wahrscheinlich IPTabled sein (ich weiß nur nicht, wie), um E-Mail-Verkehr über diese Schnittstelle zu leiten, aber die erste befasst sich mit allen Arten von Verkehr, muss also benutzerbasiert sein. Wenn es eine benutzerbasierte Lösung gibt, könnte ich diese an beiden Stellen anwenden.

Oli
quelle

Antworten:

6

Sie wollen die iptables verwenden , Eigentümer - Modul und vielleicht einige clevere Mangling.

owner Dieses Modul versucht, verschiedene Eigenschaften des Paketerstellers für lokal generierte Pakete abzugleichen. Es ist nur in der OUTPUT-Kette gültig, und selbst dann haben einige Pakete (wie ICMP-Ping-Antworten) möglicherweise keinen Eigentümer und stimmen daher nie überein.

--uid-owner userid Entspricht, ob das Paket von einem Prozess mit der angegebenen effektiven (numerischen) Benutzer-ID erstellt wurde.

--gid-owner groupid Entspricht, ob das Paket von einem Prozess mit der angegebenen effektiven (numerischen) Gruppen-ID erstellt wurde.

--pid-owner processid Entspricht, ob das Paket von einem Prozess mit der angegebenen Prozess-ID erstellt wurde.

--sid-owner sessionid Entspricht, ob das Paket von einem Prozess in der angegebenen Sitzungsgruppe erstellt wurde.

Li Lo
quelle
Mit iptables können Sie die Marke setzen, die Sie dann in der Routing-Tabelle verwenden können. Siehe die Ziele MARK und CONNMARK. In iproute wäre es nicht verwunderlich, wenn iproute2 dies alleine könnte ...
derobert
3
Als jemand, der umfangreiche Arbeit mit dem Eigentümerabgleich geleistet hat, kann ich sagen, dass dies nicht immer das gewünschte Ergebnis liefert. Dh nicht alle Pakete haben einen Eigentümer, wie Sie es erwarten. ICMP und ESP sind Typen, die unabhängig von der ursprünglichen Anwendung dem Kernel (oder Root) gehören und von diesem nicht abgeglichen werden -m owner. Es ist ziemlich zuverlässig mit TCP und UDP, aber andere Typen sind nicht so zuverlässig. Der einzig zuverlässige Weg, dies zu 100% zu erreichen, ist mit VMs oder Containern.
Bahamat
1

Ich bin mir nicht sicher, ob das für den ersten Punkt möglich ist. Sie möchten einige Routing-Manipulationen basierend auf der Benutzer-ID des Benutzers durchführen. Als ich das letzte Mal nachgesehen habe, habe ich diese Möglichkeit nicht gesehen.

Für den zweiten Punkt ist dies nicht iptables, die Sie verwenden möchten, sondern iproute2 (http://lartc.org/howto/ und http://www.policyrouting.org/iproute2.doc.html für das vollständige Dokument). Dies ist der Ersatz für die ifconfig / route-Befehle, da diese als veraltet gelten. Mit iproute2 können Sie Pakete entsprechend ihrer Quelle weiterleiten. Das ist, was du willst

Luc Stepniewski
quelle