pfSense и SSLH - прикидывемся ветошью и не отсвечиваем



  • Завернуть openvpn туннель в TLS, притворяясь, что просто лезешь на какой-то там сайт, не проблема. Но, как говорят, великий китайский firewall сначала сам лезет на этот сайт и, если сайта по факту нету, то и тебя не пускает. В общем, в преддверии темных веков приснилось сегодня такое:

    sslh.png

    много думал, кое что в sslh не устраивает, умеет кто-нибудь делать из plain C пакеты FreeBSD?

    https://github.com/yrutschle/sslh/blob/master/README.md



  • Как я понял SSLH - это эээ мультиплексор. И вы хотите его подправить?

    Зы. Если НЕ пф, то github.com/StreisandEffect/streisand
    Сайт (для отвлечения) будет выглядеть как http://streisandeffect-demo.s3-website.us-east-2.amazonaws.com/
    (ес-но, писать на нем, что это впн-сервис не надо :) )

    Зы2. https://habr.com/ru/post/412779/



  • @werter Спасибо! Не знал, занес в закладки. Но здесь мы все же о pfSense и как-то не хотелось бы терять его возможности)



  • Развернуть сам sslh прямо на пф возможно (wiki.deimos.fr/SSLH_:_Multiplexer_les_connections_SSL_et_SSH_sur_le_même_port#pfSense), а вот опакетить его - эт вам к спецам.



  • @werter said in pfSense и SSLH - прикидывемся ветошью и не отсвечиваем:

    Как я понял SSLH - это эээ мультиплексор. И вы хотите его подправить?

    Да, он ориентируется на маску протокола, а мне хотелось бы, чтобы он в зависимости от IP клиента туда или сюда перенапрвлял. Чтобы левые, обернувшись в TLS не пробовали подключиться к OpenVPN. Там так-то кода 3 страницы. С я хорошо понимаю, но все эти make - темный лес для меня. Программировал только в институте более 20 лет назад)



  • А если на гитхабе разрабу написать?
    Или форвардить ПЕРЕД sslh? Типа ip такой-то - отдаем на sslh, нет - форвардим на HTTPS. Для этого хватит одного открытого порта 443\TCP на WAN.

    Зы. Что касается Телеги, то неплохо описано тут telegra.ph/shadowsocks-over-cloudflare-05-17 и medium.com/@f.gzhechko/установка-ss-сервера-в-standalone-режиме-и-кастомизация-обфускаторов-1d173b3d5513



  • @werter said in pfSense и SSLH - прикидывемся ветошью и не отсвечиваем:

    Развернуть сам sslh прямо на пф возможно

    Да я уж развернул, оно все работает на стенде

    А если на гитхабе разрабу написать

    не будет делать 100% - слишком частный случай, немногим надо

    Или форвардить ПЕРЕД sslh? Типа ip такой-то - отдаем на sslh, нет - форвардим на HTTPS
    Кхм, но тогда и sslh получается не нужен )

    потеряем обертку TLS, а голый OpenVPN DPI легко зарубит



  • @rubic
    А если форвардить в зависимости от IP с установленным SSLH? Он же на Localhost живет?

    allow-ip-addr ->WAN addr -> форвард на localhost sslh
    other-ip-addr -> WAN addr -> прямой форвард на адрес ВЕБ-сервера

    Вроде обертывание в TLS для разрешенного ip должно должно сработать. Первым же правило в Port forward будет для разрешенного.



  • @werter said in pfSense и SSLH - прикидывемся ветошью и не отсвечиваем:

    @rubic
    А если форвардить в зависимости от IP с установленным SSLH? Он же на Localhost живет?

    Форвардить c localhost (stunnel) на localhost (sslh) pfSense не дает. Мне все же хотелось бы по минимуму лезть в стандартный функционал. Проще было бы форкнуть sslh и чуть подправить



  • @werter Впрочем, подумаю, прекращайте править посты ;) не понятно на что отвечаю



  • Судя по wiki.deimos.fr/SSLH_:_Multiplexer_les_connections_SSL_et_SSH_sur_le_même_port#pfSense там даже форвардить для sslh не надо. Достаточно повесить sslh на WAN и разрешить в fw этот порт на WAN (TCP\443)
    И далее, по схеме ,что описал выше. Если разрешенный ip - уходит на sslh, к-ый висит на WAN, если нет - на веб сервер. Тем более, что правила port forward (для левых ip в данном случае) работают ранее правил на интерфейсах. Т.е. порядок меняется на обратный - сперва жОсткий форвардинг для левых ip (! ip alias для правильных) на ВЕБ-сервер, потом - sslh для чОтких (ip alias для правильных).



  • Конечно, не поможет от ДПИ, но как #because_i_can www.vpntutorials.com/tutorials/openvpn-sharing-a-port-with-a-webserver-on-port-80-443/

    --port-share host port
    When run in TCP server mode, share the OpenVPN port with another application, such as an HTTPS server. If OpenVPN senses a connection to its port which is using a non-OpenVPN protocol, it will proxy the connection to the server at host:port. Currently only designed to work with HTTP/HTTPS, though it would be theoretically possible to extend to other protocols such as ssh.



  • @rubic
    Здр
    Пока вдумываюсь в написанное , хотел уточнить
    будет работать такая идея ?
    есть список разрешенных ip
    пришел пакет с разрешенного ip ( например , на порт 443)
    меняем порт 443 (на 444 , к примеру , пересчитываем контрольную сумму tcp пакета ) и отправляем его дальше в файрвол , а на порту 444 работает наша прога
    обратно меняем так же с 444 на 443 и в путь
    Если ip неразрешенный , то порт остается 443, и пакет форвардится на липовый web сервер
    Работать все будет на уровне ядра и до того момента пока пакет "сырой" и не попал в стек ( обратно уже после стека соответственно )



  • @Konstanti
    Заранее извиняюсь, что вмешиваюсь

    есть список разрешенных ip
    пришел пакет с НЕразрешенного ip ( например , на порт 443) -->

    --> пакет форвардится на веб-сервер ЗА пф
    пришел пакет с разрешенного ip - пакет уходит на sslh, к-ый УЖЕ висит на ВАН. Делается простым разрешающим правилом Fw на WAN.

    Как-то так. Зачем еще какой-то доп софт городить?



  • @werter
    Согласен , что-то я об этом не подумал
    Это лежит на поверхности (а слона-то я и не заметил )



  • @rubic
    Надо бы попробовать? )



  • @Konstanti werter подал захватывающую идею, буду ее думать, поэтому не отвечу по существу. Что если:

    1. завести 2 stunnel сервера: localhost:2345 и localhost:6789
    2. правилами Port Forward направлять четкие IP с 443 порта WAN на первый, а левые - на второй
    3. в настройках stunnel серверов в redirect указать localhost:1194 для первого, а localhost:80 - для второго
      PROFIT?


  • @rubic Не совсем понял сакрального смысла во втором сервере
    Все левые ip проще силами PF сразу отправлять на нужный нам web сервер на порту 443 .

    Насколько я вижу в исходниках , эта прога ничего не шифрует и не расшифровывает , а просто анализирует сигнатуры пакетов ( данные) и по этим сигнатурам определяет дальнейший порт назначения



  • @Konstanti said in pfSense и SSLH - прикидывемся ветошью и не отсвечиваем:

    @rubic Не совсем понял сакрального смысла во втором сервере
    Все левые ip проще силами PF сразу отправлять на нужный нам web сервер на порту 443 .

    пфф... ну да, я просто еще в своей парадигме - завел ведь уже у себя второй инстанс nginx без шифрования, поэтому и stunnel тут для TLS offloading, это да, поправимо

    Насколько я вижу в исходниках , эта прога ничего не шифрует и не расшифровывает , а просто анализирует сигнатуры пакетов ( данные) и по этим сигнатурам определяет дальнейший порт назначения

    именно!



  • @rubic Ну , да
    тут два пути вижу
    1 это использовать внешнюю обертку
    2 имплементровать библиотеку OPenSSl в этот проект
    Особых сложностей тут не вижу, опыт есть
    Но надо с кодом разбираться )



  • @Konstanti Эмм... это вы куда-то глубоко копнули, я не понял. Пока вижу более простые способы - либо second nginx на https перевести, либо таки второй сервер stunnel.
    В любом случае, @werter, @Konstanti, вам спасибо! Приеду из отпуска через неделю, запилю что-то по новым вводным и выложу)
    Для всех, кто не следил, задача подключаться с нужных IP к OpenVPN на HTTPS порт сервера, а ненужным отдавать фэйковый сайт


Log in to reply