«Asterisk» и «HAPROXY. Работаем ssl to ssl с генерацией сертификатов отдельно на каждом сервере»: разница между страницами

Материал из support.qbpro.ru
(Различия между страницами)
imported>Vix
 
imported>Vix
(Новая страница: «'''В рамках данного туториала настроим реверс прокси для работы наших сайтов в прозрачно...»)
 
Строка 1: Строка 1:
==[[Офисная АТС на Asterisk малой кровью или бюджетный способ получить мини АТС с функциями серьезной станции.]]==
'''В рамках данного туториала настроим реверс прокси для работы наших сайтов в прозрачном режиме за 10 минут. Поехали.'''
=='''ОСНОВНОЙ ПРИНЦИП РЕШЕНИЯ ПРОБЛЕМ'''==
[[Файл:Asterisk howto.png|1024px]]<br>
=='''ПОЛЕЗНОЕ'''==
* [http://asterisk.ru/knowledgebase База знаний]
* [[Asterisk — полезные фичи]]
* [[Asterisk настройка перехвата звонка]]
<hr>
* [https://serveradmin.ru/nastroyka-servera-telefonii-asterisk-s-nulya/ Asterisk — SIP АТС для офиса, пошаговая инструкция по настройке с нуля]
* [https://zen.yandex.ru/media/id/5d90d329433ecc00b139a5ba/ustanovka-asterisk-16-na-debian-10-pod-kliuch-5da620bbdf944400b19c76ea Установка Asterisk 16 на Debian 10]
* [https://wiki.freepbx.org/display/FOP/Installing+FreePBX+15+on+Debian+9.6 Installing FreePBX 15 on Debian 9.6]
* [https://jakondo.ru/ustanovka-freepbx-14-v-svyazke-s-asterisk-16-na-debian-9-stretch/  Установка FreePBX 15 с Asterisk 16 на Debian 9.6]
* [https://habr.com/ru/post/151011/ Поднимает телефонию с нуля: Asterisk, FreePBX, GSM-шлюз на Huawei E173 в Debian]
* [http://linux.mixed-spb.ru/asterisk/diagnostics.php Диагностика asterisk]
* [https://rl5d.blogspot.com/2012/07/sipp-asterisk.html  LINUX AND HAMRADIO]
* [https://jami.net/thank-you/ SIP Client]
* [https://habr.com/en/company/southbridge/blog/313078/ FreePBX: первые шаги по граблям]
<hr>
* [https://new-tel.net/support/asterisk-ats-instruktsiya-po-nastroyke/ Asterisk АТС, инструкция по настройке]
* [https://asterisk-pbx.ru/wiki/asterisk/dialplan Asterisk Dialplan - extensions.conf]
* [https://voxlink.ru/kb/book/osnovy-dialplana/ Основы диалплана]
* [https://wiki.merionet.ru/ip-telephoniya/30/teoriya-dialplan-v-asterisk/ Теория: Диалплан в Asterisk]
* [http://o5uww2i.obzg6llwn5uxaltsou.cmle.ru/freepbx/freepbx-14-nastrojka-sip-tranka.html Настройка SIP транка]
* [http://belokonevit.blogspot.com/2018/05/freePBXtrunkinboundoutbound.html FreePBX: Настройка Транка, входящих исходящих вызовов. Работа над ошибками. ]
* [http://o5uww2i.obzg6llwn5uxaltsou.cmle.ru/freepbx/freepbx-14-marshrutizacija-vyzovov.html FreePBX 14 - маршрутизация вызовов]
* [https://7392219446306130432_1a3fe57f8fd3ee96e1a8224565f469f4a4d48ada.blogspot.com/2015/05/asterisk-tlssrtp-c.html Asterisk TLS+SRTP c подписанными сертификатами (заметки) ]


=='''СВЕЖЕЕ'''==
 
* [https://serveradmin.ru/ustanovka-asterisk-16-na-debian-10/#_asterisk Установка Asterisk 16 на Debian 10]
Мною была поставлена задача что бы на моем сервере под руководством Proxmox с пулом сайтов работала без проблем прозрачная маршрутизация между посетителем и конечным сайтом. Т.к. в инете полно мануалов по базовой настройке Haproxy я столкнулся с проблемой что 99% этих статей описывают работ прокси сервера в режиме терминации а дальше информация идет по не защищенному варианту (от прокси до конечной ВМ). Меня это не устроило и я начал искать по крупицам информацию в сети. К сожалению в нашем русскоязычном сегменте ее мало (читай нет) пришлось шерстить буржуйский сегмент. Конечный результат предлагаю вашему вниманию, думаю кому ни будь он точно сгодится.
* [https://serveradmin.ru/nastroyka-servera-telefonii-asterisk-s-nulya/ Asterisk — SIP АТС для офиса, пошаговая инструкция по настройке с нуля]
 
* [https://serveradmin.ru/nastroyka-servera-telefonii-asterisk-s-nulya/#Nastrojka_iptables_asterisk_za_NAT_probros_portov Настройка iptables, asterisk за NAT, проброс портов]
<syntaxhighlight lang="shell" line='line'>
* [https://settled70.blogspot.com/2017/05/asterisk.html Asterisk: быстрая настройка для небольшого офиса ]
global
* [http://prog-it.github.io/Asterisk-CDR-Viewer-Mod/ Web-интерфейс для просмотра и прослушивания записей звонков Asterisk]
log /dev/log    local0
* [https://wiki.yola.ru/asterisk/dial_plans Asterisk: Планы набора номеров]
log /dev/log    local1 notice
* [http://wikiadmin.net/Asterisk/ Asterisk(wikiadmin)]
stats socket /haproxy-admin.sock mode 660 level admin
* [https://asterisk-pbx.ru/wiki/asterisk/cf/cdr Asterisk CDR - Статистика звонков]
stats timeout 30s
* [https://habr.com/ru/post/241622/ «Допиливаем» Asterisk CDR Viewer под себя]
daemon
* [https://asterisk-pbx.ru/wiki/asterisk/cf/queues.conf Asterisk настройка очереди - queues.conf]
defaults
* [https://serveradmin.ru/zvonok-v-asterisk-cherez-8-7-ili-7-zamena-7-na-8/ Звонок в Asterisk через 8, +7 или 7, замена +7 на 8]
maxconn 2000
* [https://habr.com/ru/post/139178/ Программная переадресация на другой телефон]
mode http       
* [https://ixnfo.com/pereadresacziya-vyzovov-v-asterisk.html Программная расширенная переадресация на другой телефон]
log global
* [https://habr.com/ru/post/174125/ Asterisk. Передаем номер звонящего при переадресации на мобильный с помощью СМС]
option dontlognull # bind *:443 ssl crt .
* [https://habr.com/ru/post/324580/ Asterisk queues, мелкие хитрости]
option http-server-close
* [https://www.dmosk.ru/miniinstruktions.php?mini=queues-asterisk#agents Настройка очередей звонков в Asterisk]
timeout http-request 10s
* [[Asterisk. Немного хитростей и основных команд собранных в результате работы.]]
timeout connect        5000
* [https://newadmin.ru/commands-asterisk/ Команды Asterisk ]
timeout client          50000
* [http://asterisk.ru/knowledgebase/Asterisk+config+sip.conf Файл конфигурации sip.conf - определяет каналы SIP.]
timeout server        50000
* [https://asterisk-pbx.ru/wiki/asterisk/cf/chan_sip Настройка SIP в Asterisk - sip.conf]
frontend stats
* [https://asterisk-pbx.ru/wiki/asterisk/func/callerid function 'CALLERID']
bind *:5000
* [https://www.voipnotes.ru/blog/change-incomming-callerid-asterisk-freepbx/ Изменение входящего CallerID в Asterisk (FreePBX)]
stats enable
* [https://asterisk-pbx.ru/wiki/asterisk/dialplan Asterisk Dialplan - extensions.conf]
stats uri /stats
* [http://www.sipring.ru/overview/133-sip-channel.html Параметры SIP канала ]
stats refresh 10s
* [https://asterisk-pbx.ru/wiki/asterisk/trustrpid Asterisk SIP trustrpid]
stats auth admin:mysupersecretpassword #поменяйте на свой пароль
* [https://habr.com/ru/sandbox/17082/ Настройка SIP-trunk от Asterisk до VoIP Service Provider «Сибирьтелеком»]
</syntaxhighlight>
* [https://serveradmin.ru/opoveshhenie-o-zanyatosti-vtoroy-linii-v-asterisk/ Оповещение о занятости второй линии]
Блок отвечающий за работу ssl на ssl
* [http://www.zarubochki.ru/node/463 Ryo CDR: еще один asterisk CDR viewer]
<syntaxhighlight lang="shell" line='line'>
* [http://atc-ip.ru/info/87/1.html Web интерфейс прослушивания записей звонков Asterisk]
frontend env_ssl_frontend
* [https://wiki.yola.ru/sox/asterisk SoX: Конвертация файлов для Asterisk]
bind *:443
* [https://www.snussi.ru/asterisk/12.html Музыка во время ожидания]
mode tcp
option tcplog
tcp-request inspect-delay 10s
tcp-request content accept if { req_ssl_hello_type 1 }
use_backend bk_app1 if { req.ssl_sni -m end site1.ru }
use_backend bk_app2 if { req.ssl_sni -m end counter.site1.ru }
use_backend bk_app3 if { req.ssl_sni -m end site2.com } 
use_backend bk_app4 if { req.ssl_sni -m end site3.msk.ru }
use_backend bk_app5 if { req.ssl_sni -m end site4.ru }
use_backend bk_app6 if { req.ssl_sni -m end site5.msk.ru }
 
backend bk_app1
mode tcp
balance leastconn
option tcp-check
server main 192.168.1.26:443 send-proxy check
 
backend bk_app2
mode tcp
balance leastconn
option tcp-check
server main 192.168.1.38:443 send-proxy check
 
backend bk_app3
mode tcp
balance leastconn
option tcp-check
server main 192.168.1.37:443 send-proxy check
 
backend bk_app4
mode tcp
balance leastconn
option tcp-check
server main 192.168.1.100:443 check
 
backend bk_app5
mode tcp
balance leastconn
option tcp-check
server main 192.168.1.31:443 send-proxy check
 
backend bk_app6
balance leastconn
mode tcp
option tcp-check
server main 192.168.1.200:443 check
</syntaxhighlight>
Блок отвечающий за работу сайтов на 80 порту
<syntaxhighlight lang="shell" line='line'>
frontend public
        bind *:80
 
        # бок сайтов
        acl host_subdomain1 hdr(host) -i site1.ru
        acl host_subdomain2 hdr(host) -i counter.site1.ru
        acl host_subdomain3 hdr(host) -i site2.com
        acl host_subdomain4 hdr(host) -i site3.msk.ru
        acl host_subdomain5 hdr(host) -i site4.ru
        acl host_subdomain6 hdr(host) -i site5.msk.ru
        ## блок acl
        use_backend subdomain1 if host_subdomain1
        use_backend subdomain2 if host_subdomain2
        use_backend subdomain3 if host_subdomain3
        use_backend subdomain4 if host_subdomain4
        use_backend subdomain5 if host_subdomain5
        use_backend subdomain6 if host_subdomain6
 
backend subdomain1
        option httpclose
        option forwardfor
        cookie JSESSIONID prefix
        server subdomain-1 192.168.1.26:80 check
 
backend subdomain2
        option httpclose
        option forwardfor
        cookie JSESSIONID prefix
        server subdomain-2 192.168.1.37:80 check
 
backend subdomain3
        option httpclose
        option forwardfor
        cookie JSESSIONID prefix
        server subdomain-3 192.168.1.31:80 check
 
backend subdomain4
        option httpclose
        option forwardfor
        cookie JSESSIONID prefix
        server subdomain-4 192.168.1.100:80 check
 
backend subdomain5
        option httpclose
        option forwardfor
        cookie JSESSIONID prefix
        server subdomain-5 192.168.1.200:80 check
 
backend subdomain6
        option httpclose
        option forwardfor
        cookie JSESSIONID prefix
        server subdomain-6 192.168.1.38:80 check   
</syntaxhighlight>
Что мы получили в итоге:
 
Генерация ssl сертификатов происходит на каждом сайте отдельно. Терминации на прокси сервере нет, идет прозрачное перенаправление на конечную машину которая и отдает посетителю свой ssl сертификат.
Проблем с Яндексом и его роботом дятлом (который мониторит сайт на доступность) не имеем.
Имеем быстрый и корректный отклик конечной машины для посетителей и поисковиков.
В качестве небольшого бонуса, имеем страничку с статистикой работы прокси сервера и сайтов которые он обслуживает. Для этого перейдите на ip (например у меня 192.168.1.150:5000) на котором он работает с портом 5000 и наслаждайтесь. Логин admin а пароль который вы сами установили в верхней секции этого конфига.
 
* Отдельно хочу сделать замечание касаемо этого файла конфигурации Haproxy.
 
Весьма вероятно, что когда вы добавите в свой пул сайтов на PROXMOKS-e еще N кол-во виртуальных машин и вам понадобится получить сертификат с Letsencrypt, у вас может не получится это, тк Haproxy не сможет корректно отработать запрос и от вашей машины и к вашей машине.
В таком случае (под диванного сервера) сделайте выход c роутера (или что там у вас) проброс портов на новую ВМ, хотя бы 80 порт и после получения сертификата верните обратно. По крайней мере я так вышел из этой ситуации. Подробнее о проблеме описано по ссылке
 
 
Как всегда, приветствуются конструктивные предложения и замечания.
 
Всем успехов!
 
 
PS Сам реверс прокси у меня поднят и прекрасно себя чувствует на Ubuntu 18.04 которая идет в шаблонах Proxmox-a. По началу я его запускал в режиме полноценной виртуалки но это решение себя не оправдало тк потребляло изрядную процессорную и прочие ресурсы хост машины. С переводом прокси сервера на LXC контейнер потребление по ресурсам упало почти до пары единиц процентов ресурсов хост машины и можно сказать что ничего не потребляет.
 
* [https://habr.com/ru/post/540212/ взято тут]

Текущая версия от 19:27, 30 ноября 2021

В рамках данного туториала настроим реверс прокси для работы наших сайтов в прозрачном режиме за 10 минут. Поехали.


Мною была поставлена задача что бы на моем сервере под руководством Proxmox с пулом сайтов работала без проблем прозрачная маршрутизация между посетителем и конечным сайтом. Т.к. в инете полно мануалов по базовой настройке Haproxy я столкнулся с проблемой что 99% этих статей описывают работ прокси сервера в режиме терминации а дальше информация идет по не защищенному варианту (от прокси до конечной ВМ). Меня это не устроило и я начал искать по крупицам информацию в сети. К сожалению в нашем русскоязычном сегменте ее мало (читай нет) пришлось шерстить буржуйский сегмент. Конечный результат предлагаю вашему вниманию, думаю кому ни будь он точно сгодится.

global
log /dev/log    local0
log /dev/log    local1 notice
stats socket /haproxy-admin.sock mode 660 level admin
stats timeout 30s
daemon
defaults
maxconn 2000
mode http        
log global
option dontlognull # bind *:443 ssl crt .
option http-server-close
timeout http-request 10s
timeout connect         5000
timeout client          50000
timeout server         50000
frontend stats
bind *:5000
stats enable
stats uri /stats
stats refresh 10s
stats auth admin:mysupersecretpassword #поменяйте на свой пароль

Блок отвечающий за работу ssl на ssl

frontend env_ssl_frontend
bind *:443
mode tcp
option tcplog
tcp-request inspect-delay 10s
tcp-request content accept if { req_ssl_hello_type 1 }
use_backend bk_app1 if { req.ssl_sni -m end site1.ru }
use_backend bk_app2 if { req.ssl_sni -m end counter.site1.ru }
use_backend bk_app3 if { req.ssl_sni -m end site2.com }  
use_backend bk_app4 if { req.ssl_sni -m end site3.msk.ru }
use_backend bk_app5 if { req.ssl_sni -m end site4.ru }
use_backend bk_app6 if { req.ssl_sni -m end site5.msk.ru }

backend bk_app1
mode tcp
balance leastconn
option tcp-check 
server main 192.168.1.26:443 send-proxy check

backend bk_app2
mode tcp
balance leastconn
option tcp-check
server main 192.168.1.38:443 send-proxy check

backend bk_app3
mode tcp
balance leastconn
option tcp-check
server main 192.168.1.37:443 send-proxy check

backend bk_app4
mode tcp
balance leastconn
option tcp-check
server main 192.168.1.100:443 check

backend bk_app5
mode tcp
balance leastconn
option tcp-check
server main 192.168.1.31:443 send-proxy check

backend bk_app6
balance leastconn
mode tcp
option tcp-check
server main 192.168.1.200:443 check

Блок отвечающий за работу сайтов на 80 порту

frontend public
        bind *:80

        # бок сайтов
        acl host_subdomain1 hdr(host) -i site1.ru 
        acl host_subdomain2 hdr(host) -i counter.site1.ru
        acl host_subdomain3 hdr(host) -i site2.com
        acl host_subdomain4 hdr(host) -i site3.msk.ru
        acl host_subdomain5 hdr(host) -i site4.ru
        acl host_subdomain6 hdr(host) -i site5.msk.ru
        ## блок acl 
        use_backend subdomain1 if host_subdomain1
        use_backend subdomain2 if host_subdomain2
        use_backend subdomain3 if host_subdomain3
        use_backend subdomain4 if host_subdomain4
        use_backend subdomain5 if host_subdomain5
        use_backend subdomain6 if host_subdomain6

backend subdomain1
        option httpclose
        option forwardfor
        cookie JSESSIONID prefix
        server subdomain-1 192.168.1.26:80 check

backend subdomain2
        option httpclose
        option forwardfor
        cookie JSESSIONID prefix
        server subdomain-2 192.168.1.37:80 check

backend subdomain3
        option httpclose
        option forwardfor
        cookie JSESSIONID prefix
        server subdomain-3 192.168.1.31:80 check

backend subdomain4
        option httpclose
        option forwardfor
        cookie JSESSIONID prefix
        server subdomain-4 192.168.1.100:80 check

backend subdomain5
        option httpclose
        option forwardfor
        cookie JSESSIONID prefix
        server subdomain-5 192.168.1.200:80 check

backend subdomain6
        option httpclose
        option forwardfor
        cookie JSESSIONID prefix
        server subdomain-6 192.168.1.38:80 check

Что мы получили в итоге:

Генерация ssl сертификатов происходит на каждом сайте отдельно. Терминации на прокси сервере нет, идет прозрачное перенаправление на конечную машину которая и отдает посетителю свой ssl сертификат. Проблем с Яндексом и его роботом дятлом (который мониторит сайт на доступность) не имеем. Имеем быстрый и корректный отклик конечной машины для посетителей и поисковиков. В качестве небольшого бонуса, имеем страничку с статистикой работы прокси сервера и сайтов которые он обслуживает. Для этого перейдите на ip (например у меня 192.168.1.150:5000) на котором он работает с портом 5000 и наслаждайтесь. Логин admin а пароль который вы сами установили в верхней секции этого конфига.

  • Отдельно хочу сделать замечание касаемо этого файла конфигурации Haproxy.

Весьма вероятно, что когда вы добавите в свой пул сайтов на PROXMOKS-e еще N кол-во виртуальных машин и вам понадобится получить сертификат с Letsencrypt, у вас может не получится это, тк Haproxy не сможет корректно отработать запрос и от вашей машины и к вашей машине. В таком случае (под диванного сервера) сделайте выход c роутера (или что там у вас) проброс портов на новую ВМ, хотя бы 80 порт и после получения сертификата верните обратно. По крайней мере я так вышел из этой ситуации. Подробнее о проблеме описано по ссылке


Как всегда, приветствуются конструктивные предложения и замечания.

Всем успехов!


PS Сам реверс прокси у меня поднят и прекрасно себя чувствует на Ubuntu 18.04 которая идет в шаблонах Proxmox-a. По началу я его запускал в режиме полноценной виртуалки но это решение себя не оправдало тк потребляло изрядную процессорную и прочие ресурсы хост машины. С переводом прокси сервера на LXC контейнер потребление по ресурсам упало почти до пары единиц процентов ресурсов хост машины и можно сказать что ничего не потребляет.