• Как настроить HTTPS прокси сервер на одном IP, что backend сервера видели IP клиента?

    @sevnet Автор вопроса
    Системный аналитик, бизнес-консультант
    Взлетело, и полёт нормальный.
    Ivan Ustûžanin - подсказал ссылки, там почти всё что нужно, но кое-то было не очевидно, сейчас про это напишу.

    В общем вся конструкция строится на технологии Proxy Protocol специально для этого кейса разработанной.

    Для настройки потребуется настроить 3 вещи:
    1. NGINX сервер frontend (первично принимающий весь трафик от роутера, либо напрямую из интернет).
    2. NGINX или Apache (или другие) сервер backend.
    3. ОБЯЗАТЕЛЬНО! Прописать в файле /etc/hosts на backend серверах сопоставление доменов с frontend сервером (именно frontend!). Если при этом требуется, чтобы сервер мог обращаться ещё и сам к себе по некоторому доменному имени (это надо например push-server в Битрикс), то надо прописать любое выдуманное имя хоста в /etc/hostname, и отдельной записью прописать его на локальный IP в /etc/hosts

    1. Конфиг на стороне NGINX Reverse Proxy (он же frontent):
    NGINX должен быть собран с модулями:
    --with-stream_ssl_module
    --with-stream_ssl_preread_module
    --with-stream_realip_module


    user www-data;
    worker_processes auto;
    worker_rlimit_nofile 10240;
    pid /run/nginx.pid;
    include /etc/nginx/modules-enabled/*.conf;
    
    events {
        use epoll;
    	worker_connections 30720;
    	multi_accept on;
    }
    stream {
        proxy_protocol on; #обязательно включаем, без него IP адреса из приходящего SSL трафика не передать дальше
        map $ssl_preread_server_name $name {
            siteone.ru                  so;
            sitetwo.ru            		st;
            sitetree.ru           		str;
        }
    	#bitrix1
        upstream so80 {
                server 192.168.0.100:80;
                }
        upstream so443 {
                server 192.168.0.100:443;
                }
        upstream so8893 {
                server 192.168.0.100:8893;
                }
        upstream so8894 {
                server 192.168.0.100:8894;
                }
    	#bitrix2
        upstream st80 {
                server 192.168.88.114:80;
                }
        upstream st443 {
                server 192.168.88.114:443;
                }
        upstream st8893 {
                server 192.168.88.114:8893;
                }
        upstream st8894 {
                server 192.168.88.114:8894;
                }
    	#web site
        upstream str80 {
                server 192.168.88.102:80;
                }
        upstream str443 {
                server 192.168.88.102:443;
                }
    			
    	#web traffic		
    	server {
                listen 80;
                proxy_pass ${name}80;
              }
        server {
                listen 443;
                proxy_pass ${name}443;
                ssl_preread on;
             }
    		 
    	#push&pull bitrix
        server {
                listen 8893;
                proxy_pass ${name}8893;
               }
        server {
                listen 8894;
                proxy_pass ${name}8894;
                ssl_preread on;
                }
    }


    2. Конфиг на стороне принимающего сервера (backend).
    1. Для каждого слушаемого порта в директиву listen дописываем proxy_protocol, иначе вообще не заработает.
    Должно получиться что-то типо
    server {
        listen 443 default_server ssl proxy_protocol;
        ...
        proxy_set_header X-Real-IP       $proxy_protocol_addr;
        proxy_set_header X-Forwarded-For $proxy_protocol_addr;
        ...
    }

    2. Для отлова IP адреса клиента прописываем в директиве http
    http {
        set_real_ip_from #IP вашего frontend#;
        real_ip_header proxy_protocol;
    }

    3. Сделать записи в/etc/hosts как описано выше.
    Ответ написан
    Комментировать
  • Как подключиться по TCP/IP к базе данных PostgreSQL на удаленном Ubuntu сервере?

    Afranius
    @Afranius
    Из говорящих дольше живут те, что говорят меньше.
    Я так понимаю, на удалённом сервере просто порт не открыт наружу.
    И не надо его открывать, ходи через ssh-туннель.
    А то найдутся злые дяди, напихают тебе дилдо в базу - полную панамку...
    Не хочешь ssh - подними на сервере VPN (pptp/l2tp), расшарь порт и ходи через него.
    Ответ написан
    Комментировать
  • Как расшифровать oid полученные через snmpwalk?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Можно через MIB, можно использовать online-сервисы, например https://oidref.com
    Например
    snmpwalk -v 2c -c public corerouter.my.domain
    ...
    iso.3.6.1.2.1.1.1.0 = STRING: "RouterOS CRS309-1G-8S+"
    iso.3.6.1.2.1.1.2.0 = OID: iso.3.6.1.4.1.14988.1
    ...

    Получим описание интересующего OID'а. Естественно, предварительно надо установить пакет со стандартными MIB'ами, в Ubuntu это snmp-mibs-downloader.
    snmptranslate -mALL -Td iso.3.6.1.2.1.1.1.0
    SNMPv2-MIB::sysDescr.0
    sysDescr OBJECT-TYPE
      -- FROM	SNMPv2-MIB, RFC1213-MIB
      -- TEXTUAL CONVENTION DisplayString
      SYNTAX	OCTET STRING (0..255) 
      DISPLAY-HINT	"255a"
      MAX-ACCESS	read-only
      STATUS	current
      DESCRIPTION	"A textual description of the entity.  This value should
                include the full name and version identification of
                the system's hardware type, software operating-system,
                and networking software."
    ::= { iso(1) org(3) dod(6) internet(1) mgmt(2) mib-2(1) system(1) sysDescr(1) 0 }

    snmptranslate -Td -mAll iso.3.6.1.2.1.1.2.0
    SNMPv2-MIB::sysObjectID.0
    sysObjectID OBJECT-TYPE
      -- FROM	SNMPv2-MIB, RFC1213-MIB
      SYNTAX	OBJECT IDENTIFIER
      MAX-ACCESS	read-only
      STATUS	current
      DESCRIPTION	"The vendor's authoritative identification of the
                network management subsystem contained in the entity.
                This value is allocated within the SMI enterprises
                subtree (1.3.6.1.4.1) and provides an easy and
                unambiguous means for determining `what kind of box' is
                being managed.  For example, if vendor `Flintstones,
                Inc.' was assigned the subtree 1.3.6.1.4.1.424242,
                it could assign the identifier 1.3.6.1.4.1.424242.1.1
                to its `Fred Router'."
    ::= { iso(1) org(3) dod(6) internet(1) mgmt(2) mib-2(1) system(1) sysObjectID(2) 0 }

    Видим, что у микротика есть ещё свой enterprise-блок с кодом 14988, в котором находятся специфичные для него OID'ы. Если скачать MIB для микротика (в папку ~/.snmp/mibs), то в нём увидим строку
    mikrotik OBJECT IDENTIFIER ::= { enterprises 14988 }
    .
    Получим OID'ы микротика
    snmpwalk -v 2c -c public corerouter.my.domain 1.3.6.1.4.1.14988
    ...
    iso.3.6.1.4.1.14988.1.1.3.100.1.2.17 = STRING: "cpu-temperature"
    iso.3.6.1.4.1.14988.1.1.3.100.1.3.17 = INTEGER: 22
    iso.3.6.1.4.1.14988.1.1.3.100.1.4.17 = INTEGER: 1
    ...

    snmptranslate -mAll iso.3.6.1.4.1.14988.1.1.3.100.1.2.17
    MIKROTIK-MIB::mtxrGaugeName.17
    
    snmptranslate -mAll iso.3.6.1.4.1.14988.1.1.3.100.1.3.17
    MIKROTIK-MIB::mtxrGaugeValue.17
    
    snmptranslate -Td -mAll iso.3.6.1.4.1.14988.1.1.3.100.1.4.17
    MIKROTIK-MIB::mtxrGaugeUnit.17
    mtxrGaugeUnit OBJECT-TYPE
      -- FROM	MIKROTIK-MIB
      SYNTAX	INTEGER {celsius(1), rpm(2), dV(3), dA(4), dW(5), status(6)} 
      MAX-ACCESS	read-only
      STATUS	current
      DESCRIPTION	"units"
    ::= { iso(1) org(3) dod(6) internet(1) private(4) enterprises(1) mikrotik(14988) mikrotikExperimentalModule(1) mtXRouterOs(1) mtxrHealth(3) mtxrGaugeTable(100) mtxrGaugeTableEntry(1) mtxrGaugeUnit(4) 17 }

    Видим, что под OID'ом 1.3.6.1.4.1.14988.1.1.3.100.1.3.17 находится температура процессора (mtxrGaugeName = cpu-temperature) в градусах цельсия (mtxrGaugeUnit = 1) и сейчас она равна 22 градусам (mtxrGaugeValue = 22).

    P.S. И да, snmpwalk умеет подключать MIB'ы:
    snmpwalk -v 2c -c public -m MIB:ALL corerouter.my.domain 1.3.6.1.4.1.14988
    ...
    MIKROTIK-MIB::mtxrGaugeName.17 = STRING: cpu-temperature
    MIKROTIK-MIB::mtxrGaugeValue.17 = INTEGER: 23
    MIKROTIK-MIB::mtxrGaugeUnit.17 = INTEGER: celsius(1)
    ...

    или с полными OID'ами:
    snmpwalk -v 2c -c public -m MIB:ALL -O f corerouter.my.domain 1.3.6.1.4.1.14988
    ...
    .iso.org.dod.internet.private.enterprises.mikrotik.mikrotikExperimentalModule.mtXRouterOs.mtxrHealth.mtxrGaugeTable.mtxrGaugeTableEntry.mtxrGaugeName.17 = STRING: cpu-temperature
    .iso.org.dod.internet.private.enterprises.mikrotik.mikrotikExperimentalModule.mtXRouterOs.mtxrHealth.mtxrGaugeTable.mtxrGaugeTableEntry.mtxrGaugeValue.17 = INTEGER: 22
    .iso.org.dod.internet.private.enterprises.mikrotik.mikrotikExperimentalModule.mtXRouterOs.mtxrHealth.mtxrGaugeTable.mtxrGaugeTableEntry.mtxrGaugeUnit.17 = INTEGER: celsius(1)
    ...
    Ответ написан
    2 комментария
  • Возможны ли инклюды в /etc/hosts?

    martin74ua
    @martin74ua Куратор тега Linux
    Linux administrator
    Много лет назад уже изобрели DNS, именно для такой задачи. Кто вам мешает использовать это решение сейчас?
    Ответ написан
    5 комментариев
  • Как правильно привязать два домена к одному ip?

    ky0
    @ky0 Куратор тега Nginx
    Миллиардер, филантроп, патологический лгун
    У вас в каком-то ещё конфиге описаны те же домены.
    Ответ написан
    Комментировать
  • Как написать скрипт на bash для ansible чтоб автоматически разослать публичные ключи на машины?

    ky0
    @ky0
    Миллиардер, филантроп, патологический лгун
    Не вижу тут никакого простора для баша. Копировать файл можно с помощью builtin-модуля copy, вам останется только перечислить хосты в inventory.
    Ответ написан
    2 комментария
  • Можно ли расшифровать текст хэшированный HMAC-SHA256?

    @maksam07
    Нет. (отметь решением)
    Ответ написан
    Комментировать
  • Как проверить, что строка содержит только цифры и символы?

    Geminix
    @Geminix
    Фуллстек nuxt, .net разработчик
    регуляркой
    Ответ написан
    Комментировать
  • Как защитить SPA от парсинга?

    NeiroNx
    @NeiroNx
    Программист
    Никак, все что вы покажете пользователю - будет распарсено(если в этом будет хоть какой то профит), даже если картинкой отдавать.
    Ответ написан
    Комментировать
  • Какую кодировку выбрать для бд чтобы хранить фото?

    @rPman
    бинарные типы данных binary, varbinary или blob потому и бинарные, что к ним не применяются правила символьной трансляции (charset), т.е. к примеру их нельзя сортировать по алфавиту.

    p.s. настоятельно рекомендую трижды подумать, зачем тебе нужно хранить изображения в базе данных, и с высокой вероятностью лучше их хранить в файлах на диске а в базе только имя файла (а можно и имена файлов привести к идентификаторам базы).
    Ответ написан
    Комментировать
  • Почему появляется ошибка при получении SSL-сертификата certbot?

    @Everything_is_bad
    Detail: DNS problem: NXDOMAIN looking up A for oo.dev - check that a DNS record exists for this domain; DNS problem: NXDOMAIN looking up AAAA for oo.dev - check that a DNS record exists for this domain
    А начни с того чтобы прочитать текст ошибки, там тебе явно описали проблему
    Ответ написан
    7 комментариев
  • Есть ли удобная программа для доступа к виртуальным машинам?

    @Drno
    MeshCentral
    ProxMox
    Ответ написан
    Комментировать
  • Как упростить работу на сервере?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Почему неудобно запускать сервисы?
    Почему нельзя смотреть тлоги?

    ELK не сделает тебе логи, если их нельзя смотреть. ELK это стек, который позволяет собрать логи с приложений и смотреть их через удобный веб-интерфейс, с поиском, фильтрацией, визуализацией (там уйма всего, если настроить). Но если у тебя нельзя смотреть логи, то как ты в ELK их отправишь?
    Ответ написан
    Комментировать
  • Почему вентилятор графического процессора 0 RPM?

    borisdenis
    @borisdenis
    Ленив и вреден...
    Скорее всего температура ниже минимума, нужного для запуска охлаждения. Запустите стресс тест для видеокарты и понаблюдайте за температурой и работой вентилятора.
    Ответ написан
    Комментировать
  • Какие технологии использовать для создания веб-сайта на go?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Чаще всего такие задачи реализуются не на Go.
    Ответ написан
    Комментировать
  • PTR запись, как настроить для доменного имени?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Обратиться к провайдеру, который выдал вам IP-адрес, только он может настроить PTR-запись для этого IP.
    Ответ написан
    2 комментария
  • PTR запись, как настроить для доменного имени?

    CityCat4
    @CityCat4 Куратор тега Электронная почта
    //COPY01 EXEC PGM=IEBGENER
    Как это сделать?

    Обратиться к прову, который выдал IP. Он внесет необходимые данные в обратную зону, сами ничего сделать не сможете.
    Ответ написан
    Комментировать
  • Как запустить полноценный эмулятор?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Хоти дальше :) У телефона очень сильные отличия по аппаратной базе от обычного компа.
    Ответ написан
    2 комментария
  • Как запустить полноценный эмулятор?

    ky0
    @ky0
    Миллиардер, филантроп, патологический лгун
    Подключите настоящий телефон через ADB.
    Ответ написан
    Комментировать
  • Как запретить скачивание файл по прямой ссылке?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Папка выше документ рута + readfile() + 2 заголовка. Ну и банальная проверка на роль.
    Ответ написан
    8 комментариев