Перенаправление на HTTPS

Для того, чтобы веб-интерфейс Termidesk работал по безопасному протоколу HTTPS, используются настройки веб-сервера apache для перенаправления запроса с протокола HTTP на HTTPS. 

Настройки перенаправления задаются в конфигурационном файле /etc/apache2/sites-available/termidesk.conf. После внесения любых изменений в этот файл необходимо перезапустить службу веб-сервера apache:

:~$ sudo systemctl restart apache2
BASH

Перенаправление на HTPS настроено по умолчанию после установки Termidesk. При необходимости использования незащищенного протокола HTTP администратор должен изменить файл /etc/apache2/sites-available/termidesk.conf, раскомментировав настройки VirtualHost и закомментировав настройки HTTPS. 

Пример исходного конфигурационного файла:

#<VirtualHost *:80>
#    ServerName #HOSTNAME#
#    DocumentRoot /opt/termidesk/share/termidesk-vdi/src
#    
#    Alias /media/ /opt/termidesk/share/termidesk-vdi/src/media/
#    Alias /static/ /opt/termidesk/share/termidesk-vdi/src/static/
#    
#    <Directory /opt/termidesk/share/termidesk-vdi/src/static>
#        Order deny,allow
#        Allow from all
#        Require all granted
#    </Directory>
#    
#    <Directory /opt/termidesk/share/termidesk-vdi/src/media>
#        Order deny,allow
#        Allow from all
#        Require all granted
#    </Directory>
#    
#    RewriteEngine on
#    ProxyTimeout 70
#    ProxyPreserveHost On
#    ProxyRequests Off
#    
#    ProxyPassMatch ^/media/ !
#    ProxyPassMatch ^/static/ !
#    
#    ProxyPass /websockify  ws://127.0.0.1:5099/ timeout=10800
#    ProxyPassReverse /websockify ws://127.0.0.1:5099/ timeout=10800    
#
#    ProxyPass / http://127.0.0.1:8000/
#    ProxyPassReverse / http://127.0.0.1:8000/
#    
#    RequestHeader set X-Forwarded-Proto expr=%{REQUEST_SCHEME}
#    
#    ErrorLog ${APACHE_LOG_DIR}/error.log
#    CustomLog ${APACHE_LOG_DIR}/access.log combined
#</VirtualHost>

# Сайт для принудительного перенаправления на протокол HTTPS.
<VirtualHost *:80>
        ServerName #HOSTNAME#
        ProxyPass /websockify  ws://127.0.0.1:5099/ timeout=10800
        ProxyPassReverse /websockify ws://127.0.0.1:5099/ timeout=10800   
		RewriteEngine On
        RewriteCond "%{REQUEST_URI}" !^/websockify.*
        RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=308,L]
        RequestHeader set X-Forwarded-Proto expr=%{REQUEST_SCHEME}
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

<IfModule mod_ssl.c>
<VirtualHost _default_:443>
    ServerName #HOSTNAME#
    DocumentRoot /opt/termidesk/share/termidesk-vdi/src

    Alias /media/ /opt/termidesk/share/termidesk-vdi/src/media/
    Alias /static/ /opt/termidesk/share/termidesk-vdi/src/static/

    <Directory /opt/termidesk/share/termidesk-vdi/src/static>
        Order deny,allow
        Allow from all
        Require all granted
    </Directory>

    <Directory /opt/termidesk/share/termidesk-vdi/src/media>
        Order deny,allow
        Allow from all
        Require all granted
    </Directory>

    RewriteEngine on
    ProxyTimeout 70
    ProxyPreserveHost On
    ProxyRequests Off

    ProxyPassMatch ^/media/ !
    ProxyPassMatch ^/static/ !

    ProxyPass /websockify  ws://127.0.0.1:5099/ timeout=10800
    ProxyPassReverse /websockify ws://127.0.0.1:5099/ timeout=10800    

    ProxyPass / http://127.0.0.1:8000/
    ProxyPassReverse / http://127.0.0.1:8000/

    RequestHeader set X-Forwarded-Proto expr=%{REQUEST_SCHEME}

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    
    SSLEngine on
    SSLCertificateFile      /etc/ssl/certs/ssl-cert-snakeoil.pem
    SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key    
    
    # Для корректной работы Termidesk с MTLS необходимо настроить директивы ниже
    # в соответствии с условиями и требованиями окружения инсталляции
    # SSLCACertificateFile
    # SSLVerifyClient 
    # SSLVerifyDepth
    
    # Проброс параметров клиентского сертификата в Termidesk 
    # через набор собственных заголовков
    RequestHeader set X-TDSK-SSL_CLIENT_FORMAT 'apache'
    RequestHeader set X-TDSK-SSL_CLIENT_S_DN expr=%{SSL_CLIENT_S_DN}
    RequestHeader set X-TDSK-SSL_CLIENT_VALIDITY_START expr=%{SSL_CLIENT_V_START}
    RequestHeader set X-TDSK-SSL_CLIENT_VALIDITY_END expr=%{SSL_CLIENT_V_END}
    RequestHeader set X-TDSK-SSL_CLIENT_VERIFY expr=%{SSL_CLIENT_VERIFY}
    RequestHeader set X-TDSK-SSL_CLIENT_CERT expr=%{SSL_CLIENT_CERT}
</VirtualHost>
</IfModule>
BASH

Пример конфигурационного файла для работы по незащищенному протоколу HTTP:

<VirtualHost *:80>
    ServerName #HOSTNAME#
    DocumentRoot /opt/termidesk/share/termidesk-vdi/src
    
    Alias /media/ /opt/termidesk/share/termidesk-vdi/src/media/
    Alias /static/ /opt/termidesk/share/termidesk-vdi/src/static/
    
    <Directory /opt/termidesk/share/termidesk-vdi/src/static>
        Order deny,allow
        Allow from all
        Require all granted
    </Directory>
    
    <Directory /opt/termidesk/share/termidesk-vdi/src/media>
        Order deny,allow
        Allow from all
        Require all granted
    </Directory>
    
    RewriteEngine on
    ProxyTimeout 70
    ProxyPreserveHost On
    ProxyRequests Off
    
    ProxyPassMatch ^/media/ !
    ProxyPassMatch ^/static/ !
    
    ProxyPass /websockify  ws://127.0.0.1:5099/ timeout=10800
    ProxyPassReverse /websockify ws://127.0.0.1:5099/ timeout=10800    

    ProxyPass / http://127.0.0.1:8000/
    ProxyPassReverse / http://127.0.0.1:8000/
    
    RequestHeader set X-Forwarded-Proto expr=%{REQUEST_SCHEME}
    
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

# Сайт для принудительного перенаправления на протокол HTTPS.
# <VirtualHost *:80>
#        ServerName #HOSTNAME#
#        ProxyPass /websockify  ws://127.0.0.1:5099/ timeout=10800
#        ProxyPassReverse /websockify ws://127.0.0.1:5099/ timeout=10800
#		 RewriteEngine On
#		 RewriteCond "%{REQUEST_URI}" !^/websockify.*
#        RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=308,L] 
#        RequestHeader set X-Forwarded-Proto expr=%{REQUEST_SCHEME}
#    ErrorLog ${APACHE_LOG_DIR}/error.log
#    CustomLog ${APACHE_LOG_DIR}/access.log combined
#</VirtualHost>

# <IfModule mod_ssl.c>
# <VirtualHost _default_:443>
#    ServerName #HOSTNAME#
#    DocumentRoot /opt/termidesk/share/termidesk-vdi/src

#    Alias /media/ /opt/termidesk/share/termidesk-vdi/src/media/
#    Alias /static/ /opt/termidesk/share/termidesk-vdi/src/static/

#    <Directory /opt/termidesk/share/termidesk-vdi/src/static>
#        Order deny,allow
#        Allow from all
#        Require all granted
#    </Directory>

#    <Directory /opt/termidesk/share/termidesk-vdi/src/media>
#        Order deny,allow
#        Allow from all
#        Require all granted
#    </Directory>

#    RewriteEngine on
#    ProxyTimeout 70
#    ProxyPreserveHost On
#    ProxyRequests Off

#    ProxyPassMatch ^/media/ !
#    ProxyPassMatch ^/static/ !

#    ProxyPass /websockify  ws://127.0.0.1:5099/ timeout=10800
#    ProxyPassReverse /websockify ws://127.0.0.1:5099/ timeout=10800    

#    ProxyPass / http://127.0.0.1:8000/
#    ProxyPassReverse / http://127.0.0.1:8000/

#    RequestHeader set X-Forwarded-Proto expr=%{REQUEST_SCHEME}

#    ErrorLog ${APACHE_LOG_DIR}/error.log
 #   CustomLog ${APACHE_LOG_DIR}/access.log combined
    
#    SSLEngine on
#    SSLCertificateFile      /etc/ssl/certs/ssl-cert-snakeoil.pem
#    SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key    
    
    # Для корректной работы Termidesk с MTLS необходимо настроить директивы ниже
    # в соответствии с условиями и требованиями окружения инсталляции
    # SSLCACertificateFile
    # SSLVerifyClient 
    # SSLVerifyDepth
    
    # Проброс параметров клиентского сертификата в Termidesk 
    # через набор собственных заголовков
#    RequestHeader set X-TDSK-SSL_CLIENT_FORMAT 'apache'
#    RequestHeader set X-TDSK-SSL_CLIENT_S_DN expr=%{SSL_CLIENT_S_DN}
#    RequestHeader set X-TDSK-SSL_CLIENT_VALIDITY_START expr=%{SSL_CLIENT_V_START}
#    RequestHeader set X-TDSK-SSL_CLIENT_VALIDITY_END expr=%{SSL_CLIENT_V_END}
#    RequestHeader set X-TDSK-SSL_CLIENT_VERIFY expr=%{SSL_CLIENT_VERIFY}
#   RequestHeader set X-TDSK-SSL_CLIENT_CERT expr=%{SSL_CLIENT_CERT}
# </VirtualHost>
#</IfModule>
BASH