Est-il possible que mon serveur transfère des demandes de manière transparente vers un site Web sur un port spécifique?

0

Il existe un site Web auquel je ne peux accéder qu'à partir de quelques adresses IP figurant sur la liste blanche. Appelons cela xyz.com. De plus, xyz.com autorise uniquement les connexions via https.

J'ai également un serveur Debian 8.10 avec une adresse IP statique qui est l'une des adresses blanches, et j'ai un nom DNS configuré pour cela. Disons que c'est myserver.biz.

Ce que je voudrais faire est de me connecter à myserver.biz sur un élément particulier (par exemple, 12345) et de le transmettre à la demande à xyz.com, de sorte qu'il obtiendra effectivement ce site Web et ne posera aucun problème SSL. ne créez pas d'exceptions pour.

Ma première tentative a été d'utiliser iptablessur mon serveur pour transférer de manière transparente toutes les demandes entrantes sur le port 12345 à l'adresse IP du serveur de xyz.com sur le port 443. Par exemple:

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

Cela a presque fonctionné, mais pas tout à fait. Si je pointais mon navigateur sur myserver.biz:12345, cela ne fonctionnerait pas car xyz.com est hébergé sur un hébergement partagé et le serveur ne traiterait pas ma demande comme si je me connectais à xyz.com.

Cependant, si j'édité mon hosts de l' ordinateur fichier de telle sorte que xyz.com résolu à l' adresse IP statique de mon serveur, puis a mon navigateur pour xyz.com:12345, il serait travailler. Cela me permet de faire une partie du chemin, mais cela ne fonctionne que sur les systèmes où je peux accéder au fichier hosts, et je dois le faire sur des systèmes où je ne peux pas le faire (par exemple, les appareils iOS).

Donc en résumé, j'ai besoin de:

  • demandes à myserver.biz:12345 à transmettre à xyz.com:443
  • le nom d'hôte de la demande transmise pour spécifier xyz.com afin qu'il soit résolu correctement par le serveur de xyz'com
  • et l'adresse IP source de la demande transmise est l'adresse IP de mon serveur figurant sur la liste blanche

Y at-il un moyen que je peux accomplir cela?

Mise à jour:

Je me suis employé nginxà le faire, et bien que j'ai réussi à faire transférer mon serveur vers différents sites Web, je ne parviens pas à le faire fonctionner avec celui dont j'ai besoin! Il produit systématiquement un "502: Bad Gateway". Je ne suis pas sûr de ce qui ne va pas.

Mise à jour # 2:

J'ai réussi à nginxtravailler surtout. L'astuce consistait à le mettre à jour vers la dernière version stable et à l'inclure proxy_ssl_server_name on;dans la définition de mon serveur. Cependant, il y a maintenant un problème où certaines images sur xyz.com ne sont pas chargées avec le statut 403.

Il semble que la 403 soit due au serveur qui tente d’empêcher la création de liens hypertextes. Vous ne savez pas comment résoudre ce problème à ce stade ...

GuyGizmo
la source
1
On dirait que vous décrivez un serveur proxy inverse . Un tel exemple est nginx.
Poulpe
J'essaie de configurer nginx depuis une heure et je n'ai pas réussi à le faire fonctionner comme décrit dans ma question. Si vous pouviez offrir des conseils ou de l'aide, je l'apprécierais certainement.
GuyGizmo
1
@ Tim_Stewart Ne vous inquiétez pas, je suis au courant. Je prévois de faire quelque chose comme de restreindre l'accès à ngnix par adresse IP ou de demander un mot de passe sécurisé au minimum. Malheureusement, je ne peux pas utiliser de réseau VPN à cet effet, car certains des périphériques à partir desquels je me connecte utilisent déjà un réseau VPN, et l'adresse IP du réseau VPN n'est spécifiquement pas inscrite sur la liste blanche du site auquel je tente de me connecter.
GuyGizmo
@ Tim_Stewart Je ne contrôle pas le VPN, car il s'agit d'un service VPN permettant d'anonymiser le trafic Web. Mais oui, l’idée est que les systèmes utilisant ce VPN pourraient se connecter à mon serveur, ce qui redirigerait le trafic vers le site Web cible de sorte qu’il provienne d’une adresse IP figurant sur la liste blanche.
GuyGizmo
@ Tim_Stewart Plusieurs appareils utilisant mon VPN et devant se connecter à ce site sont des appareils iOS. Savez-vous s'il est possible de configurer cela sur iOS?
GuyGizmo

Réponses:

3

J'ai réussi à faire fonctionner cela en utilisant un proxy inverse, en particulier nginx. Après quelques expériences, j'ai découvert que ce que je devais faire était de le configurer avec un certificat SSL, puis d'utiliser sa proxy_passfonctionnalité pour le transférer sur le site Web de mon choix. La version la plus simple de ma configuration (avec les composants SSL exclus) était:

server {
    listen 12345;
    proxy_ssl_server_name on;

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

J'ai mis en place un certificat auto-signé en utilisant la première moitié de ce tutoriel . Il était nécessaire d'inclure proxy_ssl_server_name on;car sans cela cela nginxéchouerait avec une 502: Bad Gatewayerreur.

GuyGizmo
la source
Cool, ce serait le bon moment pour le sécuriser!
Tim_Stewart
@ Tim_Stewart Je me demande quel mécanisme de sécurité je devrais utiliser. Je pourrais utiliser une authentification de base, mais cela présente l'inconvénient de devoir entrer le nom d'utilisateur et le mot de passe chaque fois que j'utilise le proxy. (iOS n'a pas l'option de mémoriser ces mots de passe!) Étant donné que le site Web que je mandate requiert déjà un identifiant et un mot de passe, pensez-vous qu'il serait suffisant de définir la locationconfiguration du serveur nginx sur une longue chaîne de caractères aléatoires? personnages?
GuyGizmo
Je pense que l'authentification de base ou la plage IP. Je sais que l'utilisateur / passe est nul, mais malheureusement, cela ne dissuade pas toujours les tentatives. La plupart des services VPN vous ont isolé des autres comptes clients VPN, je l’essayerais avec IP, et garderais un œil sur les journaux.
Tim_Stewart