Ist es möglich, bei der Entwicklung von einem Linux-Computer aus „keinen externen Zugriff“ zu simulieren?


7

Manchmal lade ich eine Anwendung auf einen Server hoch, der keinen externen Internetzugang hat.

Ich möchte dieselbe Umgebung auf meinem Computer erstellen, um einige Funktionen in der Anwendung zu testen und Fehler zu vermeiden (z. B. das Lesen eines RSS von einer externen Quelle).

Ich habe darüber nachgedacht, nur mein Ethernet-Kabel abzuziehen, um es zu simulieren, aber das scheint archaisch und ich weiß nicht, ob ich dabei die gleichen Ausnahmen (insbesondere in Python) auslösen werde, verglichen mit den Einschränkungen auf dem Server.

Wie simuliere ich also "kein externer Zugriff" in meiner Entwicklungsmaschine? Wird das "Deaktivieren" meiner Ethernet-Schnittstelle und das spätere Reaktivieren (mit einem "no hassle" -Befehl) dasselbe Verhalten wie der Server ohne externen Zugriff haben?

Ich benutze Ubuntu 10.04. Vielen Dank!

Antworten:


8

Das Löschen der Standardroute sollte dies tun. Sie können die Routing-Tabelle mit /sbin/routeanzeigen und die Standardeinstellung löschen mit:

sudo /sbin/route del default

Dadurch bleibt Ihr System mit dem lokalen Netz verbunden, aber Sie wissen nicht, wohin Sie Pakete senden sollen, die für darüber hinaus bestimmt sind. Dies simuliert wahrscheinlich die Situation "kein externer Zugriff" sehr genau.

Sie können es zurücksetzen route add(indem Sie sich daran erinnern, was Ihr Gateway sein soll) oder indem Sie einfach das Netzwerk neu starten. Ich habe gerade ein System mit NetworkManager ausprobiert und das Zappen der Standardeinstellung hat einwandfrei funktioniert. Ich konnte es wiederherstellen, indem ich einfach auf das Bedienfeldsymbol klickte und das lokale Netzwerk erneut auswählte. Es ist möglich, dass NM dies bei anderen Ereignissen selbst tut. Achten Sie also darauf.

Ein anderer Ansatz wäre die Verwendung einer iptablesRegel zum Blockieren des ausgehenden Datenverkehrs. Aber ich denke, der Routing-Ansatz ist wahrscheinlich besser.


5

Sie schrieben

Wie simuliere ich also "kein externer Zugriff" in meiner Entwicklungsmaschine?

Wie "deaktiviere" ich meine Ethernet-Schnittstelle und reaktiviere sie später problemlos?

Sind das zwei Fragen oder eine Frage? Ich bin mir nicht sicher, was du damit meinst simulate "no external access". Um die Ethernet-Schnittstelle zu deaktivieren, können Sie dies einfach tun

#ifdown eth0
#ifup eth0

oder was auch immer Ihr Internetgerät ist. Dadurch wird Ihre Ethernet-Schnittstelle heruntergefahren bzw. hochgefahren.


Einfach, sicher, sicher zu arbeiten. Denken Sie daran, dass Sie Ihren DHCP-Client möglicherweise erneut ausführen müssen (für den Desktop kann dies automatisch erfolgen, oder Sie müssen möglicherweise auf das Netzwerkmanager-Applet klicken und "Verbinden" auswählen).
Phunehehe

2

Sie können Ihren Code in einer virtuellen Maschine (Benutzermodus Linux, VServer, OpenVZ, VirtualBox, VMWare, KVM usw.) ausführen, die Sie nur mit einer Nur-Host-Netzwerkschnittstelle bereitstellen (dh kein Routing von der VM zu einer anderen Stelle als der Host-Maschine) ).

Wenn Sie die Anwendung als dedizierter Benutzer ausführen appuser, können Sie den Netzwerkzugriff dieses Benutzers einschränken. Stellen Sie sicher , dass Sie iptables(Ubuntu: iptables Install iptables http://bit.ly/software-small ) und iproute2 ( ipBefehl) (Ubuntu: iproute iproute installieren http://bit.ly/software-small , iproute-doc iproute installieren) haben -doc http://bit.ly/software-small ) installiert. Dann können Sie verwenden iptablesausgehenden Datenverkehr von Prozessen wie Laufen zu markieren appuser, und ip ruleund ip routefür den Benutzer eine alternative Routing - Tabelle einzurichten.

ip rule add fwmark 1 table 1
ip route add 127.0.0.0/0 table 1 dev lo
iptables -t mangle -A OUTPUT -m owner --uid-owner appuser -j MARK --set-mark 1

(Hinweis: ungetestet. Weitere Beispiele zum Verwalten von Linux-IP-Paketen .)


1

Dafür sind Container gedacht ( https://linuxcontainers.org/ ). Sie sind ein bisschen wie Chroot, aber feinkörniger und haben Netzwerkkontrolle und andere Dinge.

Leider habe ich keine Ahnung, wie ich sie verwenden soll. (Meine Ausbildung bestand nur darin, zu wissen, dass sie existieren und ungefähr, was sie tun.)

docker ist eine Anwendung, die Container verwaltet. Sie möchten dies nicht manuell tun.

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.