Проксировали, проксировали и выпроксировали. SOCKS прокси на CentOS

Служба 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-сервер
Удачного обхода блокировок 😉

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