Как сделать прокси на виртуальном хостинге


О том, как раздобыть большое количество рабочих прокси я писал в предыдущей статье — в том числе там показано, как собрать список в удобном формате, который можно импортировать в программы, использующие прокси.

Но бывает нужен не список с ненадёжно работающими прокси, а всего лишь нужен один дополнительный IP адрес, всегда стабильно доступный и стабильно работающий.

В этой инструкции я покажу, как создать собственный прокси на самом обычном виртуальном хостинге. По очевидным причинам, такой прокси не подходит для анонимности, но он вполне сможет удовлетворять потребности, например, для обхода блокировок сайтов, либо использоваться в качестве дополнительного IP адреса при доступе к сервису, количество запросов к которому с одного IP ограничено. Специально платить за виртуальный хостинг ради прокси не имеет смысла — тогда уж проще арендовать самый дешёвый VPS (виртуальный частный сервер) и настроить на нём VPN — это будет более стабильное и более безопасное соединение, чем прокси на виртуальном хостинге.

Тем не менее если вы веб-мастер и всё равно каждый месяц платите за хостинг, то, если есть потребность, можно заодно настроить и прокси.

Нам понадобиться доступ в консоль (SSH), который в настоящее время предоставляется на многих современных хостингах — иногда доступ в консоль доступен по умолчанию, иногда предоставляется по запросу. Иногда это полноценный сервер SSH, иногда это эмулятор SSH с веб интерфейсом — нам подойдёт любой вариант, большой разницы это не играет (хотя с полноценным SSH будет более стабильная связь).

Я покажу на примере своего хостера — там доступен эмулятор SSH с веб интерфейсом. В вашем случае интерфейс может быть другим, путь до домашней папки пользователя могут быть другим, но в целом суть процесса везде одинаковая.

Мы рассмотрим следующие вопросы:

  • как проверить наличие необходимой программы и при необходимости её установить
  • как запустить прокси
  • как в Cron добавить задание для проверки работы прокси и в случае «вылета» процесса прокси перезапустить его

1. Проверка и установка ncat

В качестве прокси сервера мы будем использовать программу ncat. Выбор сделан в пользую этой программы по следующим причинам:

  • на многих серверах она доступна по умолчанию
  • в случае отсутствия легко установить (имеются официальные бинарные файлы для популярных дистрибутивов Linux, то есть не нужно компилировать самому)
  • эта программа хорошо мне знакома (кстати, рекомендую соответствующую статью «Как пользоваться netcat (nc), ncat»)

Итак, начнём с проверки, имеется ли на хостинге программа ncat. Для этого откройте консоль и выполните там:

ncat --version

Если будет выведено что-то вроде:

Ncat: Version 6.47 ( http://nmap.org/ncat )

значит программа установлена по умолчанию и можно сразу переходить к следующему пункту.

Если будет сообщение, что программа не найдена, значит нужно начать с установки.

Обратите внимание: для данной инструкции НЕ подходят аналоги вроде netcat и nc.

Если программа отсутствует, то мы сможем её установить даже если у нас нет root прав! Дело в том, что программа является полностью портативной, поэтому достаточно скачать установочный пакет и распаковать его. После этого программу можно запускать обращаясь к файлу по абсолютному пути или поместить его в директорию ~/bin, чтобы запускать по имени файла. Для прослушивания портов начиная с номера 1024 и более высоких, прав суперпользователя также не требуется. То есть для всех операций нам хватит наших обычных ограниченных прав клиента Shared хостинга.

Нам нужно начать с того, чтобы определить, на каком дистрибутиве Linux работает хостинг, чтобы знать, какой пакет использовать.

Если хостинг работает на Red Hat Enterprise Linux (RHEL), Fedora, CentOS, Suse, Mandrake, Yellow Dog и их производных, то будем использовать официальный пакет RPM.

Если хостинг работает на Debian, Ubuntu и их производных то… всё равно будет использовать пакет RPM, так как пакет .deb отсутствует. Но нам нужжно будет сделать дополнительное действие.

Узнать какой используется дистрибутив Linux можно командой:

cat /etc/issue

Пример вывода:

CentOS release 6.5 (Final)
Kernel \r on an \m

Если этот способ не сработал, то другие варианты смотрите в статье «Как узнать, какой дистрибутив и версия Linux запущена?».


Ещё один надёжный вариант — это проверить, какая из программ присутствует в системе: yum или apt. Это можно сделать, например, с помощью команды which:

which yum

Если выведено:

/usr/bin/yum

значит в системе присутствует yum, которая является менеджером пакетов RPM.

А если команда отсутствует как в следующем случае:

which apt

то будет показано примерно следующее:

/usr/bin/which: no apt in (/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/host900000/bin)

Это означает, что apt отсутствует в системе, значит это не Debian или производный дистрибутив.

Создайте папку bin и перейдите в неё:


mkdir bin
cd bin/

Теперь скачиваем установочный пакет Ncat:

wget -O ncat.rpm `curl -s 'https://nmap.org/download.html' | grep -E -o 'https://nmap.org/dist/ncat[0-9.-]+.x86_64.rpm' | head -n 1`

Если у вас Red Hat Enterprise Linux (RHEL), Fedora, CentOS, Suse и их производные, то просто распакуйте скаченный файл:

rpm2cpio ncat.rpm | cpio -idv

Перемещаем исполнимый файл и делаем очистку:

mv usr/bin/ncat ncat
rm -rf ncat.rpm usr/

Если у вас Debian, Ubuntu и их производны, то вам также достаточно распаковать скаченный файл. Проблема в том, что по умолчанию пакет rpm2cpio может быть не установлен и поэтому нужно выбрать другой вариант. Файлы .rpm можно распаковать различными способами, но, скорее всего, вам придётся это сделать на своём домашнем компьютере и выгрузите файл (нужен всего лишь один файл из распакованного пакета: ./usr/bin/ncat) на хостинг. На своём компьютере с Linux (Debian, Ubuntu, Kali Linux, Linux Mint) вы можете сделать распаковку установив пакет rpm2cpio:

sudo apt install rpm2cpio

А затем:

rpm2cpio ncat.rpm | cpio -idv

Также распаковать можно используя архиватор 7z или программу alien.

2. Запуск прокси

Если программа Ncat установлена у вашего хостера и вы пропустили первый этап, то создайте папку bin и перейдите в неё:

mkdir bin
cd bin/

Сделайте тестовый запуск прокси и проверьте его работоспособность:


ncat -l ПОРТ --proxy-type http

В предыдущей команде замените ПОРТ на желаемое значение. Дополнительно используйте следующие опции чтобы посторонние лица не могли воспользоваться вашим прокси:

      --proxy-auth <пользователь>:<пароль>
      --allow                Разрешить подключаться к Ncat только заданному хосту
      --allowfile             Файл со списком хостов, разрешённым для подключения к Ncat
      --deny                 Запретить указанным хостам подключаться к Ncat
      --denyfile              Файл со списком хостов, кому запрещено подключаться к Ncat

Не нужно надеяться, что никто не наткнётся на ваш прокси — обязательно выберите способ закрыть доступ от посторонних. Если у вас постоянный IP или ваш IP всегда в определённом диапазоне, то ограничьте доступ этим диапазоном. Либо установите сложные логин и пароль.

Когда вы составите команду запуска ncat, настроите ограничения от посторонних и всё проверите, то запустите её следующим образом:

nohup ВАША_КОМАНДА &

К примеру, моя команда запуска следующая:

ncat --allow IP -l ПОРТ --proxy-type http

Тогда мне нужно запустить её так:

nohup ncat --allow IP -l ПОРТ --proxy-type http &

Эта конструкция используется для того, чтобы команда не завершала работу даже после закрытия окна консоли.

Если вдруг понадобиться остановить запущенную таким образом команду (а CTRL+c в данном случае не поможет), то это можно сделать узнав её PID, с помощью, например:

ps -A -f

Или так:

test=`ps -A -f`; echo "$test" | grep -E 'ncat'

Когда получите PID данного процесса, то закрыть его можно так:

kill PID

3. Добавление в Cron задания для проверки работы прокси и запуск прокси в случае остановки

В полноценном SSH запущенный показанным способом процесс должно оставаться постоянно работающим. Но, как я уже сказал, у моего хостера в качестве SSH используется какой-то эмулятор SSH с веб интерфейсом, поэтому в моём случае после примерно 20 минут процесс ncat завершает работу.

Эту ситуацию можно исправить добавив в Cron соответствующее задание.

Для этого в текущей папке ~/bin создайте файл checkProxy.sh и скопируйте в него примерно следующее:

#!/bin/bash

test=`ps -A -f`;
if [[ -z "`echo $test | grep -E 'ncat'`" ]]; then
        nohup ncat --allow IP -l PORT  --proxy-type http &
fi

Обратите внимание на часть ncat --allow IP -l PORT --proxy-type http — вам нужно отредактировать её в соответствии с вашей командой запуска прокси.

Данный скрипт проверяет, запущен ли уже процесс ncat, если он не запущен, то делается запуск; если запущен, то ничего не делается.

Добавьте разрешение на выполнение:


chmod +x checkProxy.sh

Теперь нам нужно узнать абсолютный путь до этого файла:

readlink -e checkProxy.sh

Пример вывода:

/home/host000000/bin/checkProxy.sh

Теперь в панели управления хостингом переходим во вкладку Cron и добавляем новую запись:

Запись должна быть следующего вида:

bash /путь/до/файла/checkProxy.sh >/dev/null 2>&1

К примеру в моём случае:

bash /home/host000000/bin/checkProxy.sh >/dev/null 2>&1

Заключение

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

Напомню, что Ncat поддерживает в качестве прокси сервера только HTTP прокси.

Вы можете запускать команду ncat без nohup и & (то есть без отделения её от терминала), но зато с опциями -vvv для увеличения вербальности. Таким образом вы сможете анализировать HTTP запросы. Кстати, для этого ненужен хостинг или сервер — это можно делать и на локальном компьютере, в одной консоли запускаем прокси:

ncat -vvv -l 34567 --proxy-type http

и в другой консоли запрос через этот прокси:

curl -s --proxy localhost:34567 'https://hackware.ru'

Рекомендуется Вам:

3 комментария to Как сделать прокси на виртуальном хостинге

  1. Пишу ./ncat -l 34567 --proxy-type http
    В ответ:
    listen: Operation not permitted

    Зашёл естественно не рутом, а юзером.

    В Убунте не силён, поэтому на этом всё затормозилось.

    • Alexey:

      Приветствую! В ошибке сказано, что не разрешена операция listen, то есть прослушивание порта. Видимо, зависит от настроек хостера и на вашем хостинге это работать не будет.

  2. Точно. На другом хостинге заработал http прокси. Socks5 я так быстро посмотрел мануал, опция есть, но еще не работает. У меня по крайней мере не получилось это сделать.

    Хорошая статья. В рунете не нашёл пока ничего лучше и подробнее. Автору спасибо!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *