Использовать HAProxy для туннелирования SSH через https

У меня есть сервер с веб-сервером Apache на нем и многие веб-сайты, работающие на http (порт 80) и https (порт 443). Я хотел бы использовать прокси-сервер на порту 443 между Apache и пользователем. На этой странице есть учебник о том, как это сделать. Это звучит фантастически в том смысле, что он автоматически определяет, является ли входящее соединение SSH или нет, и если это так, он автоматически перенаправляет его на порт 22.

Я сконфигурировал свой HAProxy в /etc/haproxy/haproxy.cfg как упоминалось в этой ссылке. Ниже приведен мой конфигурационный файл:

 global log /dev/log local0 log /dev/log local1 notice chroot /var/lib/haproxy stats socket /etc/haproxy/admin.sock mode 660 level admin stats timeout 30s user haproxy group haproxy daemon # Default SSL material locations # ca-base /etc/ssl/certs # crt-base /etc/ssl/private ca-base /home/myuser/SSL/ crt-base /home/myuser/SSL/ # Default ciphers to use on SSL-enabled listening sockets. # For more information, see ciphers(1SSL). This list is from: # https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/ ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS ssl-default-bind-options no-sslv3 tune.ssl.default-dh-param 2048 defaults log global mode http option httplog option dontlognull timeout connect 5000 timeout client 50000 timeout server 50000 errorfile 400 /etc/haproxy/errors/400.http errorfile 403 /etc/haproxy/errors/403.http errorfile 408 /etc/haproxy/errors/408.http errorfile 500 /etc/haproxy/errors/500.http errorfile 502 /etc/haproxy/errors/502.http errorfile 503 /etc/haproxy/errors/503.http errorfile 504 /etc/haproxy/errors/504.http backend secure_http reqadd X-Forwarded-Proto:\ https rspadd Strict-Transport-Security:\ max-age=31536000 mode http option httplog option forwardfor server local_http_server 127.0.0.1:80 backend ssh mode tcp option tcplog server ssh 127.0.0.1:22 timeout server 2h frontend ssl bind 0.0.0.0:443 ssl crt /home/myuser/SSL/certs.pem no-sslv3 mode tcp option tcplog tcp-request inspect-delay 5s tcp-request content accept if HTTP acl client_attempts_ssh payload(0,7) -m bin 5353482d322e30 use_backend ssh if !HTTP use_backend ssh if client_attempts_ssh use_backend secure_http if HTTP по global log /dev/log local0 log /dev/log local1 notice chroot /var/lib/haproxy stats socket /etc/haproxy/admin.sock mode 660 level admin stats timeout 30s user haproxy group haproxy daemon # Default SSL material locations # ca-base /etc/ssl/certs # crt-base /etc/ssl/private ca-base /home/myuser/SSL/ crt-base /home/myuser/SSL/ # Default ciphers to use on SSL-enabled listening sockets. # For more information, see ciphers(1SSL). This list is from: # https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/ ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS ssl-default-bind-options no-sslv3 tune.ssl.default-dh-param 2048 defaults log global mode http option httplog option dontlognull timeout connect 5000 timeout client 50000 timeout server 50000 errorfile 400 /etc/haproxy/errors/400.http errorfile 403 /etc/haproxy/errors/403.http errorfile 408 /etc/haproxy/errors/408.http errorfile 500 /etc/haproxy/errors/500.http errorfile 502 /etc/haproxy/errors/502.http errorfile 503 /etc/haproxy/errors/503.http errorfile 504 /etc/haproxy/errors/504.http backend secure_http reqadd X-Forwarded-Proto:\ https rspadd Strict-Transport-Security:\ max-age=31536000 mode http option httplog option forwardfor server local_http_server 127.0.0.1:80 backend ssh mode tcp option tcplog server ssh 127.0.0.1:22 timeout server 2h frontend ssl bind 0.0.0.0:443 ssl crt /home/myuser/SSL/certs.pem no-sslv3 mode tcp option tcplog tcp-request inspect-delay 5s tcp-request content accept if HTTP acl client_attempts_ssh payload(0,7) -m bin 5353482d322e30 use_backend ssh if !HTTP use_backend ssh if client_attempts_ssh use_backend secure_http if HTTP 

Проблема:

Учебник, по-видимому, предполагает, что порт 443 не используется Apache, где HAProxy привязывается к этому порту и получает защищенные соединения от пользователя. Это означает, что я должен изменить многие вещи в моей конфигурации Apache, чтобы все мои веб-сайты на веб-сервере использовали порт 80 вместо 443 и отключили SSL-двигатели на моих виртуальных хостах. Я бы хотел этого избежать!

Итак, есть способ внести минимальные изменения в мою конфигурацию Apache (например, просто измените порт 443 на что-то еще), а затем сделайте HAProxy перенаправлением соединения с Apache, если это не SSH?

Если вам нужна дополнительная информация, пожалуйста, спросите.

Interesting Posts

Создание точечного скрипта

Деление динамического префикса dhcp ipv6

Сделать звуковую карту видимой для нового пользователя

Перезагрузка без отключения?

Что происходит на каждом этапе процесса создания ядра Linux?

рекурсивно удалять все файлы, пустые каталоги и каталоги с файлами из нескольких имен в текущем каталоге, включая текущий каталог

Можно ли определить чувствительные к каталогу псевдонимы в zsh (или любой другой оболочке)?

Как преобразовать беззнаковое десятичное число (менее 1 << 32) в 4 байта (двоичное) в bash?

Назначение переменной из файла, разделенной разделителем

запуск docker всегда терпит неудачу с «нет такого файла или каталога»

Как использовать gsettings для отключения автомонтирования устройства в Ubuntu 16.04?

Длина массива скриптов Bash Shell Off by One

Настройка маршрутизатора для доступа к компьютеру через внешний IP-адрес

Кросс-ассемблер CPU Z80 для стандарта MSX

Как я могу сделать свою тему Zsh («fade») хорошо выглядеть в urxvt?

Linux и Unix - лучшая ОС в мире.