Ich habe ein Programm, das ich im Offline-Modus testen möchte, ohne mein aktuelles Netzwerk herunterzufahren. Dieses Programm muss weiterhin eine Verbindung zu lokalen Sockets herstellen, einschließlich Unix-Domain-Sockets und Loopback. Es muss auch Loopback abhören und für andere Apps sichtbar sein.
Versuche, eine Verbindung zu einem Remote-Computer herzustellen, sollten jedoch fehlschlagen.
Ich möchte ein Programm haben , das funktioniert wie strace
/ unshare
/ sudo
und läuft einfach einen Befehl mit dem Internet (und LAN) verborgen und alles andere noch arbeiten:
$ offline my-program-to-test
Diese Frage hat Hinweise auf die Antwort: Netzwerkzugriff eines Prozesses blockieren?
Es gibt dort ein paar Vorschläge, wie Sie ausführen, während ein anderer Benutzer iptables manipuliert, oder unshare -n
. In beiden Fällen kenne ich die Beschwörung nicht, Unix-Domain-Sockets und Loopback für das Hauptsystem freizugeben . Die Antworten auf diese Frage geben nur Aufschluss darüber, wie ich die Freigabe des gesamten Netzwerks aufheben kann.
Das Programm, das ich teste, muss immer noch eine Verbindung zu meinem X-Server und zu meinem D-Bus herstellen und sogar in der Lage sein, im Loopback auf Verbindungen von anderen Apps auf dem System zu warten.
Idealerweise möchte ich das Erstellen von Chroots oder Benutzern oder VMs oder Ähnlichem vermeiden, da dies genauso ärgerlich ist wie das Herausziehen des Netzwerkkabels. dh der Punkt der Frage ist, wie ich das so einfach wie möglich machen kann sudo
.
Ich würde es begrüßen, wenn der Prozess zu 100% normal ausgeführt würde, mit der Ausnahme, dass Netzwerkaufrufe, die eine nicht lokale Adresse angeben, fehlschlagen würden. Im Idealfall sollte dieselbe UID, dasselbe Homedir, dasselbe PWD und dasselbe alles außer ... offline beibehalten werden.
Ich verwende Fedora 18, daher sind nicht portierbare Linux-Antworten in Ordnung (auch erwartet).
Ich bin sogar froh, dies durch das Schreiben eines C-Programms zu lösen, wenn es darum geht, also sind Antworten, die das Schreiben von C beinhalten, in Ordnung. Ich weiß nur nicht, welche Systemaufrufe das C-Programm ausführen müsste, um den externen Netzwerkzugriff zu widerrufen, während das lokale Netzwerk erhalten bleibt.
Jeder Entwickler, der versucht, den "Offline-Modus" zu unterstützen, würde dieses Dienstprogramm wahrscheinlich begrüßen!
quelle
Dies kann auch mit iptables-Regel-Matching-Gruppen erreicht werden. Ich habe ein Tool geschrieben, um die Schritte zu abstrahieren. Es erfordert zwar Root-Berechtigungen für die Ersteinrichtung und ist ansonsten eine Setuid-Binärdatei, bietet aber meiner Meinung nach eine recht einfache Möglichkeit, das Problem in der Frage zu lösen. Es ist eine iptables-Version erforderlich, die aktuell genug ist und über die die richtigen Netfilter-Module verfügt.
https://github.com/quitesimpleorg/qsni
quelle
Ich habe es nicht verwendet, aber ich denke, Sie könnten möglicherweise Comcast verwenden:
https://github.com/tylertreat/Comcast
auf 100% Paketverlust eingestellt
Auch hier habe ich das nicht getestet, aber theoretisch geändert von der Readme-Datei können Sie Folgendes tun:
Linux
Unter Linux können Sie
iptables
ein- und ausgehende Pakete löschen.Alternativ können Sie verwenden
tc
, die einige zusätzliche Optionen unterstützt.Zurücksetzen:
quelle