Реализация перенаправления веб-трафика мобильного устройства с помощью программы SSH Tunnel
Автор: Бушев Юрий Владимирович
Рубрика: 1. Информатика и кибернетика
Опубликовано в
VI международная научная конференция «Современные тенденции технических наук» (Казань, май 2018)
Дата публикации: 13.03.2018
Статья просмотрена: 217 раз
Библиографическое описание:
Бушев, Ю. В. Реализация перенаправления веб-трафика мобильного устройства с помощью программы SSH Tunnel / Ю. В. Бушев. — Текст : непосредственный // Современные тенденции технических наук : материалы VI Междунар. науч. конф. (г. Казань, май 2018 г.). — Казань : Молодой ученый, 2018. — С. 1-4. — URL: https://moluch.ru/conf/tech/archive/300/13973/ (дата обращения: 16.11.2024).
SSH туннель — это виртуальный канал для передачи данных, базирующийся на зашифрованном SSH (Secure Shell) соединении. Он используется для организации VPN (Virtual Private Networks), а также для доступа к внутренним узлам сетевой инфраструктуры.
В статье мы рассмотрим, как при помощи программы SSH Tunnel можно настроить перенаправление Интернет трафика мобильного устройства, используя SSH сервер (1). Также, приведем примеры PAC-файлов для автоконфигурации прокси-подключения. Они определяют так называемый метод доступа: то, какой прокси-сервер должен использовать веб-браузер и другие интернет-приложения для доступа к конкретному URL-адресу.
Будем считать, что мы установили и настроили SSH сервер на операционной системе Linux (2), доступный по адресу: server9850.cloudapp.net.
Рис. 1. Экран настройки подключения
На Рис. 1 показан процесс создания и настройки нового SSH туннеля. При этом мы будем использовать метод аутентификации с закрытым ключом, так как это наиболее безопасный способ проверки пользователя на сегодняшний день.
Нам будет интересен динамический тип перенаправления портов, так как заранее мы не знаем какой ресурс понадобится пользователю. Для просмотра Интернет страниц будем использовать встроенный браузер Safari, предварительно указав локальный адрес до PAC файла в настройках Wi-Fi соединения iOS.
PAC-файл по умолчанию показана на Рис. 2. Он составлен таким образом, что абсолютно весь трафик устройства будет перенаправляться через SSH-туннель автоматически.
Рис. 2. Экран настройки PAC-файла
Основной смысл использования такого подхода заключается в том, что браузер (или операционная система) читает специальный файл, написанный на языке JavaScript, в котором определена всего одна функция:
function FindProxyForURL(url, host) {
// ...
}
где:
– url – полный URL запрашиваемого документа;
– host – имя хоста, извлекаемое из URL.
Функция возвращает строку, содержащую один или несколько способов доступа к запрашиваемому ресурсу. Формат строки может быть следующим:
– null – если строка null, то использовать прокси сервер не нужно;
– DIRECT – прямое соединение без использования прокси;
– PROXY host:port – определяет какой прокси сервер необходимо использовать;
– SOCKS host:port – определяет SOCKS сервер который необходимо использовать.
Теперь, предположим, что мы не хотим использовать перенаправление трафика для некоторых адресов, например, для yandex.ru. Для этого в начало функции FindProxyForURL добавим следующий код:
if (shExpMatch(url, "https://yandex.ru/*")) {
return "DIRECT";
}
Также, чтобы не использовать перенаправление для всех FTP серверов, добавим следующее:
if (url.substring(0, 4) === "ftp:") {
return "DIRECT";
}
Принимая во внимание тот факт, что локальные сервера (те, что входят в состав Wi-Fi сети к которой подключен девайс) недоступны через SSH сервер, необходимо создать для них специальное правило и добавить в функцию FindProxyForURL:
if (isInNet(myIpAddress(), "192.168.0.1", "255.255.255.0")) {
return "DIRECT";
}
Мы можем не только запрещать проксирование трафика, но и наоборот, задавать специальные правила для его перенаправления на другой прокси-сервер, например:
if (shExpMatch(url, "*hotmail.com*")) {
return "PROXY 127.0.0.1:8080; PROXY 127.0.0.1:9090";
}
В примере выше мы указали два прокси-сервера, в случае если первый не будет отвечать на запросы, будет использоваться второй.
Для работы с IP-адресами и получения текущей конфигурации сети в рамках PAC-файла нам доступны следующие функции (3):
– isPlainHostName(host) - возвращает true, если строка host не содержит точек (".");
– dnsDomainIs(host, domain) вернет true, если domain принадлежит host;
– localHostOrDomainIs(host, hostDomain) возвращает true, если строка host (имя хоста или домена) содержится в строке hostDomain;
– isResolvable(host) возвращает true, если возможно определить IP адрес для заданной строки host;
– isInNet(host, pattern, mask) возвращает true, если IP адрес или имя хоста в строке host соответствует шаблону pattern и маске mask;
– dnsResolve(host) возвращает IP адрес для заданного host;
– myIpAddress() возвращает IP адрес устройства;
– dnsDomainLevels(host) возвращает количество точек в строке host. Другими словами, уровень домена;
– shExpMatch(str, shellExp) вернет true, если строка str соответствует регулярному выражению в строке shellExp;
– weekdayRange(wd1 [, wd2 ][, "GMT"]) вернет true, если текущая дата или дата заданная в параметре GTM, соответствует заданному дню недели или диапазону дней. Дни недели записываются в закавыченной строке из следующих вариантов (SUN|MON|TUE|WED|THU|FRI|SAT);
– dateRange([day1] [,month1] [,year1] [,day2] [,month2] [,year2] [,"GMT"]) вернет true если текущая дата или дата заданная в параметре GTM попадает в указанный диапазон. Название месяца задается закавыченной строкой из следующих вариантов (JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC);
– timeRange(hour1, minute1, second1, hour2, minute2, second2 [, "GMT"]) Позволяет правилам основываться на времени; использовать прокси-сервер в определенные часы.
Таким образом, возможность полностью задать контент PAC-файла в приложении SSH Tunnel позволяет максимально гибко и точно настроить правила для перенаправления трафика и контролировать использование прокси-серверов в зависимости от сети устройства, запрашиваемого адреса и даже времени, в которое происходит запрос.
Литература:
- SSH Tunnel // Tunneling & Port Forwarding. URL: https://itunes.apple.com/us/app/ssh-tunnel/id1260223542 (дата обращения: 26.02.2018).
- OpenSSH // OpenSSH — Wikipedia. URL: https://en.wikipedia.org/wiki/OpenSSH (дата обращения: 03.03.2018)
- PAC Functions // FindProxyForURL. URL: https://findproxyforurl.com (дата обращения: 10.03.2018).