Служба proxy — это сетевой сервис позволяющий перенаправлять запросы к другим сетевым службам
Использоваться может для обхода блокировок, анонимизации, сокрытия айпи и тому подобное.
В качестве инструмента я использую хорошо проверенный, легковесный и стабильный прокси сервер 3proxy.
Принцип работы довольно прост — служба принимает на себя любой запрос и маскирует его, будто этот запрос был послан с самого сервера. При получении ответа соответственно отдаёт его клиенту.
Самые распространённые технологии это HTML-proxy и SOCKS-proxy.
SOCKS более безопасен и при передаче пакета не изменяет его, в отличие от HTML.
То есть с точки зрения конечного сервера данные, полученные от socks-прокси сервера идентичны тем, которые клиент отправил бы напрямую без проксирования.
Итак, имеется сервер с несколькими IP-адресами на которых мы хотим реализовать проксирование
# cat /etc/redhat-release CentOS release 6.7 (Final) # uname -s -m -r -o Linux 2.6.32-042stab111.11 x86_64 GNU/Linux
Установка 3proxy очень проста. В базовых репозиториях пакет отсутствует, но он есть в EPEL
# yum -y install epel-release # yum -y install 3proxy
Далее скопируем оригинальный конфигурационный файл «на память» а текущий полностью очистим
# cp /etc/3proxy.cfg /etc/3proxy.cfg.orig # cp /dev/null /etc/3proxy.cfg
Немного лирики
В конфигурационном файле нужно описывать каждый IP-адрес, на котором будет работать служба и строка выглядит следующим образом
socks -i89.*.*.70 -e89.*.*.70 -p8876 -a
-i — на каком айпи будеп «принимать» запросы
-e — с какого айпи будем «выпускать» запросы
-p — меняем порт по умолчанию
-a — скрываем информацию о клиенте
В моём случае на сервере было 40 адресов и описывать их вручную не было никакого желания.
Айпишки списком добавил в файл list по одному в строке и с его помощью сгенерировал основную часть конфига следующим образом
# for ip in `cat list`; do echo "socks -i$ip -e$ip -p8876 -a" >> list.conf; done # cp list.conf /etc/3proxy.cfg
После этого открываем конфиг /etc/3proxy.cfg и добавляем первую часть
Выглядеть должен примерно так
# cat /etc/3proxy.cfg daemon # запускаем в режиме демона log /var/log/3proxy/3proxy.log D # настраиваем логирование auth strong # авторизация о паролю users us3rrr:CL:p@ssw0rd # данные для авторизации allow us3rrr # указываем пользователей, которым разрешаем авторизацию #socks configuration (строки ниже мы сгенерирывали предыдущими командами) socks -i89.*.*.70 -e89.*.*.70 -p8876 -a socks -i89.*.*.71 -e89.*.*.71 -p8876 -a socks -i89.*.*.78 -e89.*.*.78 -p8876 -a socks -i89.*.*.91 -e89.*.*.91 -p8876 -a ............
Добавляем сервис в автозагрузку и запускаем его
# chkconfig 3proxy on # service 3proxy restart
Вроде как всё, осталось только проверить
Можно открыть настройки браузера, ввести данные прокси сервера, включая логин и пароль, зайти на наш любимый 2ip.ru и проверить какой отобразится IP-адрес
А что если у нас 40 айпишек а мы ну ооочень ленивые?
Правильно, заставить компьютер проверить это самостоятельно!
Для этого я подключился к другому серверу(теоретически можно было и на этом же попробовать), создал точно такой же файл list с IP-адресами и смастерил следующую конструкцию:
# for ip in `cat list`; do curl -s --socks5 $ip:8876 -U us3rrr:p@ssw0rd https://2ip.ru | grep $ip | grep 2ip | awk -F+ '{print $1}'; done 'IP адрес: 89.*.*.70' 'IP адрес: 89.*.*.71' 'IP адрес: 89.*.*.78' 'IP адрес: 89.*.*.91' 'IP адрес: 89.*.*.97' 'IP адрес: 89.*.*.122' 'IP адрес: 89.*.*.123' 'IP адрес: 89.*.*.124' 'IP адрес: 89.*.*.125' 'IP адрес: 89.*.*.126' 'IP адрес: 89.*.*.128' 'IP адрес: 89.*.*.134' 'IP адрес: 89.*.*.141' 'IP адрес: 89.*.*.148' 'IP адрес: 89.*.*.162' 'IP адрес: 89.*.*.167' 'IP адрес: 89.*.*.170' 'IP адрес: 89.*.*.172' 'IP адрес: 89.*.*.197' 'IP адрес: 89.*.*.205' 'IP адрес: 89.*.*.211' 'IP адрес: 89.*.*.213' 'IP адрес: 89.*.*.216' 'IP адрес: 89.*.*.222' 'IP адрес: 89.*.*.230' 'IP адрес: 89.*.*.231' 'IP адрес: 89.*.*.252' 'IP адрес: 89.*.*.4' 'IP адрес: 89.*.*.5' 'IP адрес: 89.*.*.6' 'IP адрес: 89.*.*.7' 'IP адрес: 89.*.*.12' 'IP адрес: 89.*.*.13' 'IP адрес: 89.*.*.14' 'IP адрес: 89.*.*.16' 'IP адрес: 89.*.*.17' 'IP адрес: 89.*.*.20' 'IP адрес: 89.*.*.21' 'IP адрес: 89.*.*.24' 'IP адрес: 89.*.*.27'
Тут мы запросили гравную страницу 2ip.ru с поиском своего айпишника используя утилиту curl и дополнительно попросили её делать это через наши прокси
man curl говорит нам следующее:
--socks5 Use the specified SOCKS5 proxy - but resolve the host name locally. If the port number is not specified, it is assumed at port 1080. This option overrides any previous use of -x/- -proxy, as they are mutually exclusive. If this option is used several times, the last one will be used. (This option was previously wrongly documented and used as --socks without the number appended.) This option (as well as --socks4) does not work with IPV6, FTPS or LDAP. -U/--proxy-user Specify the user name and password to use for proxy authentication. If you use an SSPI-enabled curl binary and do NTLM authentication, you can force curl to pick up the user name and password from your environment by simply specifying a single colon with this option: "-U :". If this option is used several times, the last one will be used.
Как видим все айпи отработали.
Единственное что можно добавить, так это то, что в случае необходимости html-proxy в конфигурации можно заменить socks на proxy
а ещё лучше просто добавить эти же адреса с другим протоколом и обязательно сменить порт
То есть если у нас есть строка
socks -i89.*.*.71 -e89.*.*.71 -p8876 -a
то можно добавить что то вроде (порт по вкусу 🙂 )
proxy -i89.*.*.71 -e89.*.*.71 -p9987 -a
и перезапустить службу
В такомслучае у вас будет одновременно и html и socks proxy-сервер
Удачного обхода блокировок 😉