Существует веб-сайт, к которому я могу получить доступ только с нескольких IP-адресов из белого списка. Давайте назовем это xyz.com. Кроме того, xyz.com разрешает подключения только через https.

У меня также есть сервер Debian 8.10 со статическим IP-адресом, который является одним из включенных в белый список IP-адресов, и для меня настроено DNS-имя. Допустим, это myserver.biz.

Что я хотел бы сделать, так это подключиться к myserver.biz в определенной части (скажем, 12345) и переслать запрос на xyz.com, чтобы он действительно получил этот веб-сайт и не имел проблем с SSL, которые я могу не создавать исключения для.

Моей первой попыткой было использование iptables на моем сервере для прозрачной пересылки всех входящих запросов через порт 12345 на IP-адрес сервера xyz.com на порт 443. То есть:

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

Это почти сработало, но не совсем. Если бы я указал свой браузер на myserver.biz:12345, он бы не работал, потому что xyz.com находится на виртуальном хостинге, и сервер не обработал мой запрос, как если бы я подключался к xyz.com.

Однако если я отредактирую файл hosts на моем компьютере так, чтобы xyz.com разрешил статический IP-адрес моего сервера, а затем указал браузеру xyz.com:12345, это сработало бы . Таким образом, это помогает мне в этом, но работает только в системах, где я могу получить доступ к файлу hosts, и мне нужно, чтобы он работал в системах, где я не могу этого сделать (например, на устройствах iOS).

Итак, в заключение, мне нужно:

  • запросы к myserver.biz:12345 для пересылки на xyz.com:443
  • имя хоста перенаправленного запроса, чтобы указать xyz.com, чтобы он был правильно разрешен сервером xyz'com
  • и исходный IP-адрес перенаправленного запроса будет IP-адрес моего белого списка сервера

Есть ли способ, которым я могу сделать это?

Обновить:

Я работаю над использованием nginx для этого, и хотя мне удалось заставить свой сервер перенаправлять на различные веб-сайты, я не могу заставить его работать с тем, который мне нужен! Это последовательно производит "502: Плохие Ворота". Я не уверен, что происходит не так.

Обновление № 2:

Мне удалось заставить работать nginx . Хитрость заключалась в том, чтобы обновить его до последней стабильной версии и включить proxy_ssl_server_name on; в моем определении сервера. Однако теперь существует проблема, при которой некоторые изображения на xyz.com не загружаются со статусом 403.

Похоже, что 403 из-за того, что сервер пытается предотвратить хотлинкинг. Не уверен, как решить это на данном этапе ...

1 ответ1

3

Мне удалось заставить это работать, используя обратный прокси, в частности, nginx . Проведя некоторые эксперименты, я обнаружил, что мне нужно было настроить его с помощью SSL-сертификата, а затем использовать его функцию proxy_pass для пересылки на мой нужный веб-сайт. Простейшая версия моей конфигурации (за исключением частей SSL) была:

server {
    listen 12345;
    proxy_ssl_server_name on;

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

Я создал самозаверяющий сертификат, используя первую половину этого урока. Необходимо было включить proxy_ssl_server_name on; так как без этого nginx потерпит неудачу с ошибкой 502: Bad Gateway .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .