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


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

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

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

Оффлайн Rodman

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

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

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

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

Спасибо

Оффлайн aSmile

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

Оффлайн ALiEN175

  • Старожил
  • *
  • Сообщений: 3866
  • Capture the truth
    • Просмотр профиля
ASUS P5K-C :: Intel Xeon E5450 :: 8 GB RAM :: Nvidia 8500GT :: ZSH
SAMSUNG N150 :: Intel Atom N450 :: 2 GB RAM :: Intel GMA3150 :: ZSH

Оффлайн aSmile

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

Оффлайн Rodman

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

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

Оффлайн ALiEN175

  • Старожил
  • *
  • Сообщений: 3866
  • Capture the truth
    • Просмотр профиля
https тут совершенно не причем
тогда определитесь, поверх чего будет работать ваш ssl/tls. Это протоколы защиты, а не транспорта.
ASUS P5K-C :: Intel Xeon E5450 :: 8 GB RAM :: Nvidia 8500GT :: ZSH
SAMSUNG N150 :: Intel Atom N450 :: 2 GB RAM :: Intel GMA3150 :: ZSH

Оффлайн aSmile

  • Активист
  • *
  • Сообщений: 744
    • Просмотр профиля
тогда определитесь, поверх чего будет работать ваш 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

  • Активист
  • *
  • Сообщений: 744
    • Просмотр профиля
Вот пример нашел, но не могу пока завести... не работает пока
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

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

Оффлайн Rodman

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

Оффлайн aSmile

  • Активист
  • *
  • Сообщений: 744
    • Просмотр профиля
я пример этот видел... очень скользкий момент, ведь в примере сертификаты с расширением 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
  1. global
  2.     log /dev/log    local0
  3.     log /dev/log    local1 notice
  4.     chroot /var/lib/haproxy
  5.     stats socket /run/haproxy/admin.sock mode 660 level admin
  6.     stats timeout 30s
  7.     user haproxy
  8.     group haproxy
  9.     daemon
  10.  
  11.     # Default SSL material locations
  12.     ca-base /etc/letsencrypt/live/my.domain/fullchain.pem
  13.     crt-base /etc/letsencrypt/live/my.domain/privkey.pem
  14.     ssl-default-bind-ciphers kEECDH+aRSA+AES:kRSA+AES:+AES256:RC4-SHA:!kEDH:!LOW:!EXP:!MD5:!aNULL:!eNULL
  15.  
  16. defaults
  17.     log     global
  18.     mode    tcp
  19.     option  tcplog
  20.     option  dontlognull
  21.     timeout connect 5000
  22.     timeout client  50000
  23.     timeout server  50000
  24.     errorfile 400 /etc/haproxy/errors/400.http
  25.     errorfile 403 /etc/haproxy/errors/403.http
  26.     errorfile 408 /etc/haproxy/errors/408.http
  27.     errorfile 500 /etc/haproxy/errors/500.http
  28.     errorfile 502 /etc/haproxy/errors/502.http
  29.     errorfile 503 /etc/haproxy/errors/503.http
  30.     errorfile 504 /etc/haproxy/errors/504.http
  31. frontend ft_myapp
  32.   bind 0.0.0.0:3433 name tcps ssl crt /etc/haproxy/certs/my.domain.pem transparent
  33.   mode tcp
  34.   acl tcps ssl_fc
  35.   default_backend bk_myapp
  36. backend bk_myapp
  37.   mode tcp
  38. source 0.0.0.0 usesrc clientip
  39.   server serv 0.0.0.0:3000 check
  40.  
Вот накрутил такой конфиг

Даже немного завелось... Принимается сокет соединение, проходит верификация 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

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

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

 

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