LINUX.ORG.RU
решено ФорумAdmin

Секурный доступ к http сервису в внутренней сети

 , , ,


0

1

Имею в своей сети несколько voip устройств, живущих в отдельном vlan к которым хотелось бы организовать удаленный доступ для обслуживающих их инженеров. Сами устройства умеют отдавать свою веб-морду через http. Есть ли какой-то метод отдать инженерам ссылочку вида https://my.ext.ip/deviceXX которая бы попросила логин пароль через basic authentication и в случае успеха человек бы увидел вебморду устройства, находящегося в внутренней сети?

Давать vpn к своей сети решительно не хочу. Лезть в iptables и включать там DNAT на 80 порт девайсов по каждому звонку от телефонистов немного напрягает. Чем такая схема реализуется? Нормальный ли это метод (и возможный ли в принципе)? Задайте направление для гугла пожалуйста.

★★★★

Запроксировать с помощью nginx же, авторизацию тоже можно в нём прикрутить

disarmer ★★★
()
Ответ на: nginx от beastie

Т.е. nginx сам (после правильной настройки конечно) запросит контент с http-сервиса устройства, шифранет его и отдаст в успешно авторизированную сессию пользователя по https? Ход мысли тут правильный?

BOOBLIK ★★★★
() автор топика
Ответ на: комментарий от BOOBLIK

для отдельных девайсов с кривым html может потребоваться замена адреса в url

в nginx-e это было просто

{
  sub_filter_once off;
  sub_filter 'http://external_host_name:not80' 'http://real_internal_host_name';
}
vel ★★★★★
()
Ответ на: комментарий от vel

Сделал подходящий мне конфиг, прислонил к нему аутентификацию и ssl, но есть «но» — если location директива отличается от «/» (например «location /device1»), то она передается далее на проксируемый http-сервис, после чего я закономерно получаю 404. Как бы это обойти?

BOOBLIK ★★★★
() автор топика
Ответ на: комментарий от BOOBLIK

Решилось добавлением закрывающих слешей в конец location директивы.

server {
    listen       443;
    server_name  xxx.xxx.xxx;

    ssl                  on;
    ssl_certificate      /etc/nginx/ssl/ssl_proxy.crt;
    ssl_certificate_key  /etc/nginx/ssl/ssl_proxy.key;

    ssl_session_timeout  5m;

    ssl_protocols  SSLv2 SSLv3 TLSv1;
    ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    ssl_prefer_server_ciphers   on;

    location /dev1/ {
        proxy_pass          http://10.0.100.21:80/;
        proxy_set_header    Host             $host;
        proxy_set_header    X-Real-IP        $remote_addr;
        proxy_set_header    X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_set_header    X-Client-Verify  SUCCESS;
        proxy_set_header    X-Client-DN      $ssl_client_s_dn;
        proxy_set_header    X-SSL-Subject    $ssl_client_s_dn;
        proxy_set_header    X-SSL-Issuer     $ssl_client_i_dn;
        proxy_read_timeout 1800;
        proxy_connect_timeout 1800;

        auth_basic            "Dev1 credentials, please";
        auth_basic_user_file  /etc/nginx/conf.d/dev1.htpasswd;
    }

    location /dev2/ {

    }

    location /devN/ {

    }
}
BOOBLIK ★★★★
() автор топика
Ответ на: комментарий от BOOBLIK

если location директива отличается от «/» (например «location /device1»), то она передается далее на проксируемый http-сервис, после чего я закономерно получаю 404. Как бы это обойти?

Через директиву rewrite в конфиге nginx-а

Или сделать проще: насоздавать поддоменов и каждый из них проксировать на свой девайс. Тогда никаких rewrite-ов не нужно будет.

home_user ★★★
()
Ответ на: комментарий от DALDON

Сертификатов куча нужна, или * сертификат. Или с самоподписными мучаться. :)

Да, есть такой момент... :)

home_user ★★★
()
Ответ на: комментарий от home_user

Сделалось через пересобранный srcrpm c модулем ngx_http_substitutions_filter_module и кучкой subs_filter для фикса на лету отдаваемых в html ссылок. Честно говоря какой-то изврат, но вроде задачу решило :)

BOOBLIK ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.