Я хотел бы иметь внешний интерфейс с HAProxy на порту 443. Этот интерфейс работает следующим образом:
Он расшифровывает содержимое соединения и проверяет:
1- Если зашифрованное содержимое соединения - ssh, то есть если первые слова пакетов SSH-2.0
, затем он пересылает расшифрованные пакеты на порт 22. Я предполагаю, что такая внутренняя часть выглядит так:
backend ssh
mode tcp
option tcplog
server ssh 127.0.0.1:22
timeout server 2h
2- Если зашифрованное содержимое является чем-то еще, перенаправьте зашифрованное содержимое на порт 8443, который содержит сервер Apache с правильными ключами SNI. Если необходимо включить все правильные ключи SNI для каждого веб-адреса (чтобы не выглядеть атакой типа "человек посередине", не могли бы вы рассказать мне, как это сделать, на примере? У меня нет проблем с добавлением все ключи к HAProxy.
Зачем? Потому что у меня уже есть apache, работающий с портом 443. Я хотел бы переместить его на какой-то другой порт, не переписывая всю свою конфигурацию. Поэтому я хотел бы переместить его, например, на порт 8443, а затем сообщить HAProxy, что если соединение не SSH, просто перенаправьте все, что вы получаете, на порт 443.
Как написать такую переднюю часть + бэкэнды? Пожалуйста помогите.
В качестве отправной точки я использую следующий интерфейс:
frontend ssl
bind 0.0.0.0:443 ssl crt /home/myuser/SSL/certs.pem no-sslv3 #decrypts the connection with the keys certs.pem
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 #if the decrypted information starts with SSH-2.0
use_backend ssh if client_attempts_ssh #forward to SSH if condition client_attempts_ssh is satisfied.
use_backend forwardToApache if !client_attempts_ssh
Пожалуйста, спросите, требуются ли вам дополнительные сведения.
Спасибо.
Вы можете сначала использовать SNI, выбрав
site1.domain.com,
site2.domain.com,
или
ssh.domain.com
и только если выбран ssh.domain.com, вы расшифровываете, выполняете магию ssh и отправляете его на локальный веб-сервер в незашифрованном виде, предполагая, что он должен выглядеть как обычный трафик https, но не содержит конфиденциальной информации внутри содержимого https, потому что этим занимаются site1 и site2.