12.05.2017

Для it-шников, которые не любят магию

Как сделать из сервиса http, который висит на непонятно каком порту внутри сети, сервис с https на 443 порту, когда под рукой есть Ubuntu и Apache.



Имеем:
- сервер Windows (или нет, не важно) в DMZ с условным адресом 10.10.10.10, на котором крутится сервис http (потому что https не придумали) на условном порту 1234 (потому что порт 80 занят).

Задача:
- организовать доступ из сети интернет на этот сервис по условному адресу: https://my.service.ru

Под рукой:
- сервер в сети интернет c условным адресом 8.8.8.8 под управлением Ubuntu, на котором установлен Apache.

Понеслась:

0. На целевом сервере

0.1.

В брандмауэре сервера открываем входящий трафик на 10.10.10.10 порт 1234.
Не обязательно для всего интернета, можно для 8.8.8.8.

0.2.

Открываем на фаерволе сети входящий трафик на сервер 10.10.10.10 порт 1234, чтобы из сети интернет до него можно было добраться (соответсвенно, серверу нужно дать внешний IP, например 9.9.9.9).
Проверяем:
telnet 9.9.9.9 1234

1. Прописываем DNS

my.service.ru 9.9.9.9

2. Делаем прокси

2.1. Пишем конфигурацию сервера

Правим файл:
sudo nano /etc/apache2/sites-available/my.service.ru.conf
И пишем в него:

<VirtualHost *:80>
        ServerName my.service.ru
  <Proxy *>
    Order deny,allow
    Allow from all
  </Proxy>

  ProxyPass / http://9.9.9.9:1234
  ErrorLog /var/log/apache2/ts_error_log
  CustomLog /var/log/apache2/ts_log common
RewriteEngine on
RewriteCond %{SERVER_NAME} = my.service.ru
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]
</VirtualHost> 
Все было ради этого

2.2. Добавляем сайт и перезапускаем сервер

sudo a2ensite my.service.ru

service apache2 reload 

2.3. Добавляем доступ по https


sudo letsencrypt --apache -d my.service.ru

Все!