Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: [PHP 7] Создание демона для слушания заданого порта и с поддержкой SSL/TLS  (Прочитано 2126 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Rodman

  • Автор темы
  • Новичок
  • *
  • Сообщений: 9
    • Просмотр профиля
Всем добрый день

У меня есть уже демон, который слушает порт и перехватывает, все попытки на сокет соединение и дальше в этом сокете происходит подключение по SMPP (порт 1000).
Но есть необходимость чтобы клиент подключался, но сокет соединение было с поддержкой SSL/TLS.

Я думаю, над:
1. написанием кода, который будет поднимать демона (на порту 1443) с поддержкой SSL/TLS (но пока с этим большие проблемы)
2. или может есть какой то механизм (аля nginx) который можно будет посадить на порт 1443, который будет принимать запросы на создание сокет соединение, валидировать SSL/TLS и дальше уже дешифрованный трафик переотправлять на порт 1000, и ответы через себя шифровать и отправлять обратно (т.е. служить таким прокси)

Подскажите плиз, какую технологию можно использовать для подобного проксирования трафика?

Спасибо

Оффлайн aSmile

  • Активист
  • *
  • Сообщений: 752
    • Просмотр профиля
Я бы пошел по второму пути. В nginx это только в платной версии, насколько я понял. Можно использовать haproxy, вроде бы он это умеет.

Оффлайн ALiEN175

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 5066
  • The truth is out there
    • Просмотр профиля
ASUS P5K-C :: Intel Xeon E5450 :: 8 GB RAM :: Radeon R7 260X :: XFCE
SAMSUNG N150 :: Intel Atom N450 :: 2 GB RAM :: Intel GMA3150 :: XFCE

Оффлайн aSmile

  • Активист
  • *
  • Сообщений: 752
    • Просмотр профиля
nginx https
Так ведь тут tcp, а не http, если я правильно понял ТС

Оффлайн Rodman

  • Автор темы
  • Новичок
  • *
  • Сообщений: 9
    • Просмотр профиля
да, правильно... https тут совершенно не причем...

haproxy - посмотрю, спасибо

Оффлайн ALiEN175

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 5066
  • The truth is out there
    • Просмотр профиля
https тут совершенно не причем
тогда определитесь, поверх чего будет работать ваш ssl/tls. Это протоколы защиты, а не транспорта.
ASUS P5K-C :: Intel Xeon E5450 :: 8 GB RAM :: Radeon R7 260X :: XFCE
SAMSUNG N150 :: Intel Atom N450 :: 2 GB RAM :: Intel GMA3150 :: XFCE

Оффлайн aSmile

  • Активист
  • *
  • Сообщений: 752
    • Просмотр профиля
тогда определитесь, поверх чего будет работать ваш ssl/tls. Это протоколы защиты, а не транспорта.
Извиняюсь за занудство, но tls - это transport layer secyrity, работает обычно поверх tcp
(Нажмите, чтобы показать/скрыть)

А вот https - это цитирую
Цитировать
Simply use HTTP over TLS precisely as you would use HTTP over TCP.

Оффлайн Rodman

  • Автор темы
  • Новичок
  • *
  • Сообщений: 9
    • Просмотр профиля
Вот пример нашел, но не могу пока завести... не работает пока
https://www.haproxy.com/documentation/haproxy/deployment-guides/tls-infrastructure/#ssl-tls-offloading

Оффлайн aSmile

  • Активист
  • *
  • Сообщений: 752
    • Просмотр профиля
Вот пример нашел, но не могу пока завести... не работает пока
https://www.haproxy.com/documentation/haproxy/deployment-guides/tls-infrastructure/#ssl-tls-offloading
Это про https. Я же скидывал пример с tcp (сам не тестировал).

Цитировать
frontend foofront
    bind x.x.x.x:1443 ssl crt /path/to/cert/for/myexample.com
    mode tcp
    default_backend foo

backend foo
    mode tcp
    balance leastconn
    server foo 127.0.0.1:1000 check

Оффлайн Rodman

  • Автор темы
  • Новичок
  • *
  • Сообщений: 9
    • Просмотр профиля
Я просто не могу пока понять, этот блок настроек в главном конфиге указать или в дополнительном - а главный пусть дефолтный и остается?

И как он работает только с одним сертификатом - там же обычно два указывается?!
 # Default SSL material locations
        ca-base /etc/letsencrypt/live/sempico.solutions/fullchain.pem
        crt-base /etc/letsencrypt/live/sempico.solutions/privkey.pem

не так ли должно быть?

Оффлайн aSmile

  • Активист
  • *
  • Сообщений: 752
    • Просмотр профиля
Во всех инструкциях пишут, что просто в один сливаешь
cat example.com.crt example.com.key > example.com.pem

Оффлайн Rodman

  • Автор темы
  • Новичок
  • *
  • Сообщений: 9
    • Просмотр профиля
я пример этот видел... очень скользкий момент, ведь в примере сертификаты с расширением crt и key, а у меня pem

Оффлайн aSmile

  • Активист
  • *
  • Сообщений: 752
    • Просмотр профиля
я пример этот видел... очень скользкий момент, ведь в примере сертификаты с расширением crt и key, а у меня pem
На сколько я понял, это одно и то же
https://serverfault.com/a/9717

Цитировать
key - This is a PEM formatted file containing just the private-key ...

.cert .cer .crt - A .pem (or rarely .der) formatted file with a different extension, one that is recognized by Windows Explorer as a certificate, which .pem is not.

PEM - Governed by RFCs, its used preferentially by open-source software. It can have a variety of extensions (.pem, .key, .cer, .cert, more)
« Последнее редактирование: 14 Марта 2019, 14:20:00 от aSmile »

Оффлайн Rodman

  • Автор темы
  • Новичок
  • *
  • Сообщений: 9
    • Просмотр профиля
Код: (html5) [Выделить]
global
    log /dev/log    local0
    log /dev/log    local1 notice
    chroot /var/lib/haproxy
    stats socket /run/haproxy/admin.sock mode 660 level admin
    stats timeout 30s
    user haproxy
    group haproxy
    daemon

    # Default SSL material locations
    ca-base /etc/letsencrypt/live/my.domain/fullchain.pem
    crt-base /etc/letsencrypt/live/my.domain/privkey.pem
    ssl-default-bind-ciphers kEECDH+aRSA+AES:kRSA+AES:+AES256:RC4-SHA:!kEDH:!LOW:!EXP:!MD5:!aNULL:!eNULL

defaults
    log     global
    mode    tcp
    option  tcplog
    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
frontend ft_myapp
  bind 0.0.0.0:3433 name tcps ssl crt /etc/haproxy/certs/my.domain.pem transparent
  mode tcp
  acl tcps ssl_fc
  default_backend bk_myapp
backend bk_myapp
  mode tcp
source 0.0.0.0 usesrc clientip
  server serv 0.0.0.0:3000 check
Вот накрутил такой конфиг

Даже немного завелось... Принимается сокет соединение, проходит верификация SSL/TLS, происходит дешифрация данных и передается на порт 3000
Но проблема в том, что не ретранлируется IP клиента на порт 3000
там IP 127.0.0.1

Как передать с порта 3443 на порт 3000 внешний IP клиента, который инициирует коннект?

source 0.0.0.0 usesrc clientip - должно передавать внедний IP, но этого не происходит
« Последнее редактирование: 14 Марта 2019, 16:32:13 от Rodman »

Оффлайн aSmile

  • Активист
  • *
  • Сообщений: 752
    • Просмотр профиля
По этой статье настраивал?
https://www.haproxy.com/blog/howto-transparent-proxying-and-binding-with-haproxy-and-aloha-load-balancer/

Кстати, не надо ли тему в сети переносить?

 

Страница сгенерирована за 0.032 секунд. Запросов: 25.