Как настроить свой собственный прокси сервер

Используем 3proxy на CentOS7, т.к. 3proxy позволяет держать одновременно HTTP и SOCKS5 proxy, что важно для работы некоторых мессенджеров.

Данная статья не предоставляет информации как обойти заблокированные по решению суда в РФ ресурсы, например тот же slack.com и прочее что хостится у Amazon — по поводу этих тысяч сайтов судебного решения не было.
Как воспользоваться данным инструментом — личное дело каждого.
От себя добавлю — не нарушайте законы.

1. В первую очередь нужно определиться, что для работы недоступных ресурсов нам нужен сервер не тут. Целесообразно купить себе VPS:

VPS (англ. Virtual Private Server) или VDS (англ. Virtual Dedicated Server) — услуга, в рамках которой пользователю предоставляется так называемый Виртуальный выделенный сервер. В плане управления операционной системой по большей части она соответствует физическому выделенному серверу. Википедия.

Выбирайте VPS на своё усмотрение.
Могу порекомендовать https://www.vpscheap.net/, сервер с 30Gb HDD и 768 RAM на данный момент обойдётся в 20$ в ГОД.

2. Как только VPS куплен и операционная система развёрнута можно приступать к настройке.
Устанавливаем 3proxy. Так же сразу поставим nano,mc,tcpdump — эти утилиты пригодятся и вероятно из коробки их нет:

yum install 3proxy nano mc tcpdump -y

3. Настраиваем 3proxy. Ниже приведен довольно базовый конфиг, подробнее о 3proxy и его настройках можно прочесть на https://3proxy.ru

nano /etc/3proxy.cfg
#Указываем куда писать лог, формат лога, архивирование и ротацию
log /var/log/3proxy/3proxy.log D
archiver gz /usr/bin/gzip %F
rotate 30
logformat "%d-%m-%Y %H:%M:%S %U %C:%c %R:%r %O %I %T"


# Запускаем как службу, чтобы работал в фоне
daemon

# Разрешаем все порты всем
allow * * * *

# Если нужно, настраиваем авторизацию и заводим пользователей. Меняем username, password на свои.
auth strong
users username:CL:password

# DNS
nserver 8.8.8.8

# DNS cache
nscache 65536

# Включаем HTTP прокси и указываем порт на котором она будет работать
proxy -p3128 -n

# Включаем SOCKS прокси и указываем порт.
socks -p8080

4. Необходимо настроить фаервол, вероятно у вас на машине он включен и работает. Обычно, на CentOs7 установлен firewalld, но пользоваться им не удобно. Отключим его и поставим iptables. Так же упомяну что иногда на VPS всё это уже сделано за вас =)

systemctl stop firewalld
systemctl disable firewalld
yum install iptables -y

Так же, имеет смысл отключить SELinux, в дефолтной конфигурации он может вызывать жжение в пятой точке:

nano /etc/sysconfig/selinux

Находим директиву SELINUX=enforce и меняем её на SELINUX=disabled
Для применения изменений нужно выполнить перезагрузку.

Теперь можно настроить iptables. Разрешаем подключаться к серверу по тем портам прокси, что указали в конфиге:

iptables -I INPUT 1 -p tcp --dport 3128 -j ACCEPT
iptables -I INPUT 1 -p tcp --dport 8080 -j ACCEPT
iptables-save

5. Всё готово для запуска прокси. Запускаем, и добавляем в автозагрузку:

service 3proxy start
systemctl enable 3proxy

И пробуем подключится к своему прокси серверу. Всё должно работать, но если нет используйте tcpdump чтобы посмотреть приходят ли запросы на ваш порт прокси, к которому подключаетесь.

tcpdump port 3128

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

По желанию можно на этом же сервере создать сценарий автоматического использования прокси.
Скрипт представляет из себя JavaScript. Подробнее можно прочитать ТУТ

6. Чтобы скрипт был доступен из интернета понадобится Web-сервер, установим httpd:

yum install httpd -y

И запустим его и добавим в автозагрузку, нам будет достаточно его дефолтной конфигурации

service httpd start
systemctl enable httpd

Так же, не забываем открыть порт 80 в iptables:

iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT
iptables-save

После этого по ссылке http://адрес_вашего_прокси должна открываться заглушка Apache

7. Создадим сам файл скрипта в дефолтной папке Apache.
В скрипте мы указываем, что если http запрос совпадает с одной из масок из списка, то используем прокси сервер, а если нет — работаем без прокси. Поправьте в конфиге адрес и порт прокси на свой.
У меня в список добавлен slack со всеми его поддоменами, 2ip.ru и ip.ru для проверки работы прокси.
По аналогии можете добавить любой адрес.

nano /var/www/html/proxy.list
function FindProxyForURL(url, host)
{
if (shExpMatch (url, "*slack*") ||
	shExpMatch (url, "*ip.ru*") || 
	shExpMatch (url, "*2ip.ru*")) {return "PROXY адрес_вашего_прокси:3128";}
else {return "DIRECT";}
}

8. Теперь в браузере можно указать ссылку на автоматический сценарий прокси вида http://ваш_адрес/proxy.list
В каждом браузере это выглядит по своему, но называется примерно одинаково. После этого при доступе на указанные в скрипте ресурсы будет отрабатывать прокси сервер.

1+

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

Ваш e-mail не будет опубликован.