Ich hatte noch einenFrageauf der askUbuntu-Site und migrierte diese Version von einem ServerfehlerFrage, da ich glaube, dass Super User der beste Ort ist, um diese Frage zu stellen.
Hintergrund:
Ich habe eine lokale (Drupal-)Entwicklungsumgebung, die aus einem LAMP-Server besteht, der auf einem virtualisierten Xubuntu 12.04-Betriebssystem mit einem Host-Betriebssystem von Ubuntu 12.04 läuft. Bridged Networking ist nicht aktiviert.
Ich würde gerne mit den Web 2.0-Integrationsaspekten von Drupal experimentieren (z. B. YouTube- und Facebook-Integration), aber diese Websites werden alle durch ein massives Filtersystem blockiert, das zumindest IP-Blockierung, DNS-Filterung, URL-Filterung und Paketfilterung umfasst – und Verbindungsrücksetzpakete verwendet, um diese Regeln durchzusetzen. Es scheint, dass einige ISPs auch Deep Packet Filtering verwenden, um SSH-Tunnel zu entdecken, deren Bandbreite dann begrenzt ist – zum Glück scheint mein ISP in meiner Wohnung dies derzeit nicht zu tun. Ausländern ist die Verwendung von Proxys/VPNs/usw. nicht verboten, solange sie diese nicht verwenden, um gegen das Gesetz zu verstoßen (z. B. um eingeschränktes Material mit chinesischen Staatsangehörigen zu teilen).
Für normales Surfen im Internet und andere Aufgaben, die den Zugriff auf blockierte Inhalte erfordern, verwende ich einen SSH-Tunnel zu einem Server (Ubuntu Server 10.04, mit nur aktiviertem SSH und OpenVPN) in einem anderen Land als Socks5-Proxy. Chromium und Firefox können beide nativ DNS-Anfragen über den Socks5-Proxy senden (ersteres standardmäßig und letzteres durch Ändern einer Konfigurationseinstellung). Diese Lösung funktioniert perfekt für alle browserseitigen Verbindungen zu eingeschränkten Websites.
Viele der Drupal-Module zur Web 2.0-Integration erfordern jedoch auch, dass der Server selbst die eingeschränkten externen Sites anfordert.
Meine Frage ist:
Was wäre der beste Weg, um durch meinen SSH-Tunnel und um das Filterregime herum zu routen:
- Alle externen Anfragen und DNS-Lookups von meinem Apache2-Server,
oder
- Nur die Anfragen (und DNS-Lookups) von meinem Apache2-Server an angegebene Hosts?
Überlegte/versuchte Lösungen
- Die einfachste Lösung wäre, einen LAMP-Server auf dem Rechner außerhalb des Filterregimes zu verwenden (also auf dem Rechner, mit dem ich per SSH verbunden bin). Ich würde das jedoch aus mehreren Gründen lieber nicht tun (kein physischer Zugriff auf diesen Rechner, falls etwas schiefgeht, ältere Hardware, wenn ich die Verbindung zu diesem Server verliere, kann ich nicht mit der Entwicklung fortfahren usw.).
Globale Proxy-Einstellungen verwenden – Xubuntu bietet meiner Recherche nach keine Möglichkeit für globale Socks5-Einstellungen. Außerdem weiß ich nicht, ob dies meine DNS-Lookups erfassen würde.
Verwendung
tsocks
: Dies scheint der beste Kandidat zu sein, aber ich habe zwei Probleme/Fragen:Wo ist das Skript, das Apache2 startet/neu startet, damit ich diesen Befehlen einleiten kann
tsocks
?Wie kann ich die DNS-Lookups über den Socks5-Proxy abfangen und umleiten?
Das Bearbeiten der
/etc/hosts/
Datei bietet eine begrenzte Problemumgehung, aber Websites wie youtube.com laden Medien und andere Inhalte von so vielen externen Websites (und damit URLs), dass es fast unmöglich ist, den Überblick über all diese (potenziell die Verbindung zurücksetzenden) URLs von Drittanbietern zu behalten. Verwenden Siesocat
zum Erfassen, Konvertieren und Senden von UDP-Verkehr über den Socks5-Proxy (wie beschriebenHier) scheint eine gute Lösung zu sein, aber ich konnte sie nicht wie im verlinkten Tutorial beschrieben implementieren. (Wennsocat
sich bestätigt, dass dies der richtige Weg zur Lösung meines Problems ist, kann ich die von mir verwendeten Befehle zur Überprüfung posten.)
Antwort1
Apache stellt die ausgehenden Verbindungen nicht wirklich her; das tut PHP. Daher ist es PHP, das mit dem SOCKS-Proxy kommunizieren muss.
Relevant:https://stackoverflow.com/questions/10490962/aufbau-einer-socket-verbindung-in-php-mit-socks-proxy
Einfacher wäre es, wenn Sie einen HTTP-Proxy hätten, und am einfachsten wäre es mit einem VPN. Vielleicht sollten Sie es noch einmal mit der Einrichtung von OpenVPN versuchen?
Alternativ können Sie Privoxy auf Ihrem Server so einrichten, dass es mit Ihrem SOCKS-Proxy kommuniziert, und dann PHP so konfigurieren, dass Privoxy als HTTP-Proxy verwendet wird.