Ist es möglich, dass mein Server Anforderungen auf einem bestimmten Port transparent an eine Website weiterleitet?

0

Es gibt eine Website, auf die ich nur über einige IP-Adressen zugreifen kann, die auf der Whitelist stehen. Nennen wir es xyz.com. Außerdem lässt xyz.com nur Verbindungen über https zu.

Ich habe auch einen Debian 8.10-Server mit einer statischen IP-Adresse, die eine der IPs auf der Whitelist ist, und ich habe einen DNS-Namen dafür eingerichtet. Sagen wir, es ist myserver.biz.

Was ich tun möchte, ist eine Verbindung zu myserver.biz auf einem bestimmten Teil (sagen wir 12345) herzustellen und die Anfrage an xyz.com weiterzuleiten, sodass diese Website tatsächlich abgerufen wird und keine SSL-Probleme auftreten, die ich kann keine Ausnahmen für.

Mein erster Versuch bestand darin, iptablesauf meinem Server alle eingehenden Anforderungen auf Port 12345 transparent an die IP-Adresse des Servers von xyz.com auf Port 443 weiterzuleiten.

iptables -t nat -A PREROUTING -p tcp --dport 12345 -j DNAT --to <xyz.com's server IP>:443
iptables -t nat -a POSTROUTING -d <xyz.com's server IP> -j MASQUERADE

Das hat fast geklappt, aber nicht ganz. Wenn ich meinen Browser auf myserver.biz:12345 verweise, funktioniert dies nicht, da xyz.com auf Shared Hosting eingestellt ist und der Server meine Anfrage nicht so verarbeitet, als würde ich eine Verbindung zu xyz.com herstellen.

Allerdings, wenn ich meinen Computer hosts bearbeitet solche Datei xyz.com , dass auf meinen Server statische IP - Adresse aufgelöst, und dann deutete meinem Browser xyz.com:12345, es würde funktionieren. Das bringt mich ein Stück dahin, aber es funktioniert nur auf Systemen, auf denen ich auf die Hosts-Datei zugreifen kann, und ich brauche es, um auf Systemen zu arbeiten, auf denen ich das nicht kann (z. B. iOS-Geräte).

Zusammenfassend benötige ich also:

  • Anfragen an myserver.biz:12345 werden an xyz.com:443 weitergeleitet
  • Der Hostname der weitergeleiteten Anfrage, um xyz.com anzugeben, damit diese vom Server von xyz'com korrekt aufgelöst wird
  • und die Quell-IP-Adresse der weitergeleiteten Anfrage ist die IP-Adresse meines Whitelist-Servers

Gibt es eine Möglichkeit, dies zu erreichen?

Aktualisieren:

Ich habe daran gearbeitet, dies nginxzu tun, und obwohl ich es geschafft habe, meinen Server dazu zu bringen, auf eine Vielzahl verschiedener Websites weiterzuleiten, kann ich nicht dafür sorgen, dass er mit der von mir benötigten funktioniert! Es wird durchweg ein "502: Bad Gateway" erzeugt. Ich bin mir nicht sicher, was los ist.

Update Nr. 2:

Ich habe es geschafft, nginxgrößtenteils zu arbeiten. Der Trick bestand darin, es auf die neueste stabile Version zu aktualisieren und proxy_ssl_server_name on;in meine Serverdefinition aufzunehmen. Es gibt jedoch ein Problem, bei dem einige Bilder auf xyz.com nicht mit dem Status 403 geladen werden.

Es scheint, dass der 403 darauf zurückzuführen ist, dass der Server versucht, Hotlinking zu verhindern. Ich bin mir nicht sicher, wie ich das zu diesem Zeitpunkt beheben soll ...

GuyGizmo
quelle
1
Es klingt, als würden Sie einen Reverse-Proxy-Server beschreiben . Ein solches Beispiel ist Nginx.
Octopus
Ich habe in der letzten Stunde versucht, Nginx einzurichten und konnte es nicht wie in meiner Frage beschrieben zum Laufen bringen. Wenn Sie anbieten und beraten oder helfen können, würde ich es auf jeden Fall schätzen.
GuyGizmo
1
@ Tim_Stewart Keine Sorge, das ist mir bewusst. Ich habe vor, den Zugriff auf ngnix über die IP-Adresse einzuschränken oder ein sicheres Kennwort auf ein Minimum zu beschränken. Leider kann ich hierfür kein VPN verwenden, da einige der Geräte, über die ich eine Verbindung herstelle, bereits ein VPN verwenden und die IP-Adresse des VPN von der Site, zu der ich eine Verbindung herstellen möchte, nicht speziell in der Whitelist aufgeführt wird.
GuyGizmo
@Tim_Stewart Ich kontrolliere das VPN nicht, da es ein VPN-Dienst zur Anonymisierung des Webverkehrs ist. Aber ja, die Idee ist, dass die Systeme, die dieses VPN verwenden, eine Verbindung zu meinem Server herstellen können, wodurch der Datenverkehr auf die Zielwebsite umgeleitet wird, sodass er von einer IP-Adresse auf der Whitelist stammt.
GuyGizmo
@Tim_Stewart Einige der Geräte, die mein VPN verwenden und eine Verbindung zu dieser Site herstellen müssen, sind iOS-Geräte. Wissen Sie, ob dies unter iOS möglich ist?
GuyGizmo

Antworten:

3

Ich habe es geschafft, dies mit einem Reverse-Proxy zum Laufen zu bringen nginx. Nachdem ich einige Experimente durchgeführt hatte, stellte ich fest, dass ich es mit einem SSL-Zertifikat einrichten und dann mit seiner proxy_passFunktion auf meine gewünschte Website weiterleiten musste. Die einfachste Version meiner Konfiguration (mit Ausnahme der SSL-Teile) war:

server {
    listen 12345;
    proxy_ssl_server_name on;

    location /some_path/ {
        proxy_pass https://example.com/;
        proxy_set_header Referer "https://example.com";
    }
}

Ich habe in der ersten Hälfte dieses Tutorials ein selbstsigniertes Zertifikat erstellt . Es musste aufgenommen werden, proxy_ssl_server_name on;da dies ohne Fehler nginxfehlschlagen würde 502: Bad Gateway.

GuyGizmo
quelle
Cool, jetzt wäre ein guter Zeitpunkt, um es zu sichern!
Tim_Stewart
@Tim_Stewart Ich überlege, welchen Sicherheitsmechanismus ich verwenden soll. Ich könnte die Basisauthentifizierung verwenden, aber das hat den Nachteil, dass ich bei jeder Verwendung des Proxys den Benutzernamen und das Kennwort eingeben muss. (iOS hat keine Möglichkeit, sich diese Passwörter zu merken!) Da für die Website, die ich verwende, bereits ein Login und ein Passwort erforderlich sind, ist es Ihrer Meinung nach ausreichend, die locationKonfiguration des Nginx-Servers auf einen langen Zufallsstring zu setzen Figuren?
GuyGizmo
Ich würde Grundlegende Auth oder IP-Bereich denken. Ich weiß, dass der User / Pass nervt, aber leider schreckt selbst das nicht immer vor Versuchen ab. Die meisten VPN-Dienste haben Sie von anderen VPN-Client-Konten isoliert. Ich würde es mit IP versuchen und die Protokolle im Auge behalten.
Tim_Stewart