У меня есть единственный хост Vmware ESXi в частной сети, управление которым я предоставил общедоступному Интернету через конфигурацию обратного прокси-сервера Apache. Чтобы случайным людям было труднее обнаружить службу, работающую в домене, я применил базовую аутентификацию, которая работает, но мне пришлось отключить ее для некоторых сайтов, чтобы все функции консоли управления работали.
Вот моя конфигурация:
<IfModule mod_ssl.c>
SSLStaplingCache shmcb:/tmp/stapling_cache(128000)
<VirtualHost *:443>
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
Header always set X-Frame-Options SAMEORIGIN
Header always set X-Content-Type-Options nosniff
Header always set X-Xss-Protection "1; mode=block"
ServerAdmin webmaster@example.org
ServerName server.example.org
ServerAlias vmware.example.org
DocumentRoot /var/www
Include /etc/apache2/conf-available/example.org-ssl-wildcard.conf
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
ErrorLog ${APACHE_LOG_DIR}/vmware_error.log
# Possible values include: debug, info, notice, warn, error, crit, alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/vmware_access.log combined
#Modules needed: proxy, proxy_http, proxy_wstunnel
SSLProxyEngine On
ProxyRequests On
ProxyVia On
ProxyPreserveHost Off
#Self signed Cert
SSLProxyCheckPeerCN Off
SSLProxyCheckPeerName Off
ProxyPass /ticket/ wss://192.168.2.50/ticket/ retry=1 acquire=3000 timeout=600 Keepalive=On
ProxyPassReverse /ticket/ wss://192.168.2.50/ticket/
ProxyPass / https://192.168.2.50/ keepalive=On flushpackets=On
ProxyPassReverse / https://192.168.2.50/
<Location /ui>
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
Options -Indexes
Options FollowSymLinks
ProxyPass https://192.168.2.50/ui keepalive=On flushpackets=On
ProxyPassReverse https://192.168.2.50/ui
</Location>
</VirtualHost>
</IfModule>
Как видите, мне пришлось открыть веб-корневой каталог /, чтобы он был доступен без пароля, чтобы он работал. В противном случае я попал в цикл перенаправления. Также порт веб-сокета должен был быть открыт без аутентификации. И что еще хуже: ESXi, похоже, также использует базовую аутентификацию, поэтому, когда я пытаюсь открыть веб-консоль, а пользователь на базе Apache не соответствует пользователю ESXi, мне нужно повторно пройти аутентификацию, используя имя пользователя и пароль ESXi, чтобы продолжить ! (Этого не происходит, когда я настраиваю пользователя Apache с тем же паролем, что и на стороне ESXi)
Любые идеи о том, как защитить весь сайт с помощью базовой аутентификации, не нарушая аутентификацию ESXi и, что более важно, веб-сокет