Введение
Немного расскажу своими словами о том, как работает модуль ngx_http_proxy_module. Именно он реализует весь функционал, о котором пойдет речь. Допустим, у вас в локальной или виртуальной сети есть какие-то сервисы, не имеющие прямого доступа из интернета. А вы хотите таковой иметь. Можно пробрасывать нужные порты на шлюзе, можно что-то еще придумывать. А можно сделать проще всего — настроить единую точку входа на все свои сервисы в виде nginx сервера и с него проксировать различные запросы к нужным серверам.
Расскажу на конкретных примерах, где я это использую. Для наглядности и простоты буду прям по порядку перечислять эти варианты:
- Ранее я рассказывал о настройке чат серверов — matrix и mattermost. В этих статьях я как раз рассказывал о том, как проксировать запросы в чат с помощью nginx. Прошелся по теме вскользь, не останавливаясь подробно. Суть в том, что вы настраиваете на любом виртуальном сервере эти чаты, помещаете их в закрытые периметры сети без лишних доступов и просто проксируете запросы на эти сервера. Они идут через nginx, который у вас смотрит во внешний интернет и принимает все входящие соединения.
- Допустим, у вас есть большой сервер с множеством контейнеров, например докера. На нем работает множество различных сервисов. Вы устанавливаете еще один контейнер с чистым nginx, на нем настраиваете проксирование запросов на эти контейнеры. Сами контейнеры мапите только к локальному интерфейсу сервера. Таким образом, они будут полностью закрыты извне, и при этом вы можете гибко управлять доступом.
- Еще один популярный пример. Допустим, у вас есть сервер с гипервизором proxmox или любым другим. Вы настраиваете на одной из виртуальных машин шлюз, создаете локальную сеть только из виртуальных машин без доступа в нее извне. Делаете в этой локальной сети для всех виртуальных машин шлюз по-умолчанию в виде вашей виртуальной машины со шлюзом. На виртуальных серверах в локальной сети размещаете различные сервисы и не заморачиваетесь с настройками фаервола на них. Вся их сеть все равно не доступна из интернета. А доступ к сервисам проксируете с помощью nginx, установленным на шлюз или на отдельной виртуальной машине с проброшенными на нее портами.
- Мой личный пример. У меня дома есть сервер synology. Я хочу организовать к нему простой доступ по https из браузера по доменному имени. Нет ничего проще. Настраиваю на сервере nginx получение бесплатного сертификата , настраиваю проксирование запросов на мой домашний ip, там на шлюзе делаю проброс внутрь локалки на synology сервер. При этом я могу фаерволом ограничить доступ к серверу только одним ip, на котором работает nginx. В итоге на самом synology вообще ничего не надо делать. Он и знать не знает, что к нему заходят по https, по стандартному порту 443.
- Допустим, у вас большой проект, разбитый на составные части, которые живут на разных серверах. К примеру, на отдельном сервере живет форум, по пути /forum от основного домена. Вы просто берете и настраиваете проксирование всех запросов по адресу /forum на отдельный сервер. Точно так же можно без проблем все картинки перенести на другой сервер и проксировать к ним запросы. То есть вы можете создать любой location и переадресовывать запросы к нему на другие сервера.
Надеюсь в общем и целом понятно, о чем идет речь. Вариантов использования много. Я привел самые распространенные, которые пришли в голову и которые использую сам. Из плюсов, которые считаю наиболее полезными именно из своих кейсов, отмечу 2:
- Без проблем можете настроить https доступ к сервисам, при этом совершенно не трогая эти сервисы. Вы получаете и используете сертификаты на nginx сервере, используете https соединение с ним, а сам nginx уже передает информацию на сервера со службами, которые могут работать по обычному http и знать не знают о https.
- Вы очень легко можете менять адреса, куда проксируете запросы. Допустим у вас есть сайт, его запросы проксируются на отдельный сервер. Вы подготовили обновление или переезд сайта. Отладили все на новом сервере. Теперь вам достаточно на сервере nginx изменить адрес старого сервера на новый, куда будут перенаправляться запросы. И все. Если что-то пойдет не так, можете оперативно вернуть все обратно.
С теорией закончил. Перейдем теперь к примерам настройки. В своих примерах я буду использовать следующие обозначения:
blog.zeroxzed.ru | доменное имя тестового сайта |
nginx_srv | имя внешнего сервера с установленным nginx |
blog_srv | локальный сервер с сайтом, куда проксируем соединения |
94.142.141.246 | внешний ip nginx_srv |
192.168.13.31 | ip адрес blog_srv |
77.37.224.139 | ip адрес клиента, с которого я буду заходить на сайт |
Linux Proxy client. Proxy
KnProxy
KnProxy — это небольшой веб-прокси, написанный на PHP и использующий встроенный в PHP модуль cURL. Требует минимум серверных ресурсов, но обеспечивает несмотря на это достаточную производительность.
- оценка: 0
- подробнее »
mindwebfilter
Mindwebfilter (MinD, что рекурсивно расшифровывается как MinD is not Dansguardian) — мультиплатформенное (Linux, Windows) решение для эффективной фильтрации веб-контента.
- оценка: 0
- подробнее »
Polipo
Polipo — кэширующий веб-прокси (веб-кэш), созданный для использования одним человеком или небольшой группой. По духу он схож с WWWOFFLE, но по реализации ближе к Squid.
- оценка: 0
- подробнее »
Privoxy
Privoxy — это свободный веб-прокси с расширенными возможностями фильтрования интернет-контента для защиты конфиденциальности (приватности) пользователей сети Интернет, изменения содержания веб-страниц, управления cookies, ограничения доступа к некоторым сайтам и удаления рекламы, баннеров, всплывающих окон, а также любого другого нежелательного контента («интернет-мусора»).
- оценка: 0
- подробнее »
SafeSquid
SafeSquid — фильтрующий прокси, который позволяет ограничивать доступ в интернет пользователям или группам по определенным критериям, уметь блокировать нежелательное содержимое сайтов по ключевым словам, URL-адресу, DNS-имени, MIME и изображениям.
- оценка: 0
- подробнее »
Scache
Scache предназначен быть общим и разделяемым хранилищем данных текущей сессии веб-приложения. Scache может быть установлен локально на одном компьютере с веб-сервером.
- оценка: 0
- подробнее »
Tinyproxy
Tinyproxy — это анонимный прокси-сервер, экономно использующий системные ресурсы, идеально подходит для маленьких сетей, а также в случаях, когда возможности других прокси-серверов (таких как Squid
- оценка: 0
- подробнее »
Linux Proxy Server. How to Install & Configure Squid Linux Proxy Server
Linux proxy server or proxy server generally is a server that saves the visited web pages for later requests, so if you try to visit the same web page or anyone else, you’ll get the page from the proxy server.
This is very useful, it makes web surfing much faster and reduces traffic, which means less cost. Caching servers can decrease external traffic to 45%.
Another main advantage for proxy servers, you can configure the proxy with some settings for access control. For example, you can restrict access to specific websites.
If you surf the web before from an anonymous proxy, this is a proxy server. You can choose any of the available Linux proxy servers out there like Squid, Varnish, Polipo, TinyProxy, and more. In this post, we will discuss the most common Linux proxy server, which is Squid.
Install Squid
Installing squid proxy server is very simple. For Red Hat based distro, you can install it like this:
$ dnf -y install squid
Or if you are using Debian based distro, you can install it like this:
$ apt-get -y install squid
Now you can start squid service and enable it at startup:
$ systemctl start squid
$ systemctl enable squid
To squid proxy server, you can check the configuration file in
/etc/squid/squid.conf
Before we dig into the configuration, let’s see the proxy server in action.
Just change the proxy setting on your browser to the IP address of the proxy and the port 3128 since this is the squid default port. You can change the default port by changing the http_port option in the configuration file.
As shown in the image, I’ve pointed my browser to my Linux proxy server, and I can browse the web without any problems.
If you are using the iptables firewall , don’t forget to open the squid server port.
Allow IP address range
If you open the configuration file /etc/squid/squid.conf , you will see the rules that allow IP addresses to connect to the proxy server like this:
acl localnet src 192.168.0.0/16
However, you can add a new ACL entry to allow a range of IP addresses to connect to your proxy server:
acl localnet src 212.80.113.0/16
Then save the file and restart squid service:
$ systemctl restart squid
Very easy, right?
Also, if you remove any ACL from the file, all IP addresses from that range will not be able to connect to the proxy server.
Компиляция
cd ~/3proxy-0.8.10
sudo make -f Makefile.Linux
Копируем получившийся бинарный файл:
sudo mkdir /etc/3proxy cd ~/3proxy-0.8.10/src sudo cp 3proxy /usr/bin/
Создадим отдельного системного пользователя proxy3 от имени которого и будет работать сервер:
sudo adduser --system --no-create-home --disabled-login --group proxy3
Узнаём UID и GID пользователя командой:
id proxy3
В ответ, например, получим:
uid=109(proxy3) gid=115(proxy3) groups=115(proxy3)
Создаём файл настроек:
sudo nano /etc/3proxy/3proxy.cfg
Вставляем в него следующий код:
# Запускаем сервер от пользователя proxy3 # (возможно в вашей ОС uid и gid пользователя proxy3 # будут другими. Для их определения воспользуйтесь командой id proxy3) setgid 115 setuid 109 # # Пропишите правильные серверы имен посмотрев их # на своем сервере в /etc/resolv.conf nserver 8.8.8.8 nserver 77.88.8.8 # # Оставьте размер кэша для запросов DNS по умолчанию nscache 65536 # # Равно как и таймауты timeouts 1 5 30 60 180 1800 15 60 # # Если несколько IP на одном сервере, указываем тот, # через который ходить во внешний мир. # Иначе эту строку игнорируем # external <YOURSERVERIP> # Тоже самое, только указываем IP, который надо слушать # Если проигнорировать, то прокси слушает все адреса на сервере # internal <YOURSERVERIP> # # Указываем на расположение файла с пользователями и паролями users $/etc/3proxy/.proxyauth # # укажите режим запуска как deamon daemon # # путь к логам и формат лога, к имени лога будет добавляться дата создания log /var/log/3proxy/3proxy.log D logformat "- +_L%t.%. %N.%p %E %U %C:%c %R:%r %O %I %h %T" # # Включаем авторизацию по логинам и паролям auth cache strong # # Конфигурация http(s) proxy # Запускаем анонимный (-a) HTTP-proxy на порту (-p) 3128 и # c отключенной NTLM-авторизацией (-n) proxy -n -p3128 -a
(Для сохранения и закрытия нажмите CTRL+X затем Y)
Комментарии начинаются со знака # и допустимы только с начала строки.
Рекомендуется вообще удалить комментарии для более стабильной работы 3proxy.
Рекомендуется также использовать другой порт вместо стандартного 3128 для прокси серверов, лучше всего из диапазона 49152—65535.
Ниже пример конфигурации без ведения логов:
setgid 115 setuid 109 nserver 8.8.8.8 nserver 77.88.8.8 nscache 65536 timeouts 1 5 30 60 180 1800 15 60 users $/etc/3proxy/.proxyauth daemon auth cache strong proxy -n -p3128 -a
Создаём файл с пользователями и паролями:
sudo nano /etc/3proxy/.proxyauth
Вставляем в него следующий код:
## addusers in this format: #user:CL:password ##see for documentation: username:CL:strongpassword
Где логин: username и пароль: strongpassword следует изменить на свои.
Каждый новый пользователь указывается с новой строки.
Выставляем права доступа к файлам прокси-сервера:
sudo chown proxy3:proxy3 -R /etc/3proxy sudo chown proxy3:proxy3 /usr/bin/3proxy sudo chmod 444 /etc/3proxy/3proxy.cfg sudo chmod 400 /etc/3proxy/.proxyauth
Создаём папку для ведения логов и назначаем права на неё:
sudo mkdir /var/log/3proxy sudo chown proxy3:proxy3 /var/log/3proxy
Создаём файл-инициализации:
sudo nano /etc/init.d/3proxyinit
Вставляем в него следующий код:
#!/bin/sh # ### BEGIN INIT INFO # Provides: 3Proxy # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Initialize 3proxy server # Description: starts 3proxy ### END INIT INFO case "$1" in start) echo Starting 3Proxy /usr/bin/3proxy /etc/3proxy/3proxy.cfg ;; stop) echo Stopping 3Proxy /usr/bin/killall 3proxy ;; restart|reload) echo Reloading 3Proxy /usr/bin/killall -s USR1 3proxy ;; *) echo Usage: \$0 "{start|stop|restart}" exit 1 esac exit 0
Ещё один вариант скрипта инициализации:
nano ~/3proxy-0.8.10/scripts/rc.d/proxy.sh
Делаем файл исполняемым:
sudo chmod +x /etc/init.d/3proxyinit
Добавляем в автозагрузку:
sudo update-rc.d 3proxyinit defaults
Запускаем прокси-сервер:
sudo /etc/init.d/3proxyinit start
В консоли мы увидим сообщение:
Starting 3Proxy
Проблемы с запуском чаще всего связаны с файлом /etc/3proxy/3proxy.cfg
в т.ч. к последней строке файла. При возникновении ошибки обычно указан порядковый номер проблемной строки.
Также мы увидим его в списке запущенных процессов в ответе на команду:
ps -ela | grep "3proxy"
Iptables
In some systems all incoming connections disabled by default
For allow it type next command
You need change port 3128 to yours if you are using not default settings
Combinations of settings for acl
You can combine different settings for each block in configuration file.
For example it possible to set few authentification settings for each proxy type, limit speed, disable ports, etc.
For this you need to use ‘flush’ command, which used to finish with existing ACL and to start new one. It’s required to have different ACLs for different services.
Additional parameters for configuration file
3proxy have a lot of flexible settings which could help you with more elastic configuration, controlling users and use access control to web resources. Let`s look to few of them
sets maximum number of simulationeous connections to each services started after this command. Default is 100.
Execute progname if external name can’t be resolved. Hint: if you use nscache, dialer may not work, because names will be resolved through cache. In this case you can use something like http://dial.right.now/ from browser to set up connection.
execute system command
calls setuid(uid), uid must be numeric. Unix only. Warning: under someLinuxkernels setuid() works onle for current thread. It makes it impossible to suid for all threads.
calls setgid(gid), gid must be numeric. Unix only.
records for name resolution (nscache for IPv4, nscache6 for IPv6). Cachesize usually should be large enougth (for example 65536).
Plugins
Plugins give additional power to 3proxy
Loads specified library and calls given export function with given arguments
-
3proxy transparent plugin (Linux)This plugin can be used to implement 3proxy transparently for client for any TCP-based protocols.
-
3proxy SSL pluginThis plugin can be used to decrypt and manupulate SSL/TLS traffic
-
3proxy Perl Compatible Regular Expressions (PCRE) pluginThis filtering plugin can be used to create matching and replace rules with regular expressions for client’s request, client and servers header and client and server data.
-
Traffic correction plugin(Windows only) Attempts to correct 3proxy traffic to count network/link level headers to conform provider’s billing system.
-
Strings substitution pluginAllows to change replies of HTTP proxy server
Check out ourfull range of Residential Proxies
Как настроить прокси в браузере
Прокси в Google Chrome
Google Chrome – прежде того, как поставить прокси и работать в Google Chrome, для начала нужно очистить историю и удалить все куки. Это необходимо для безопасности использования удаленного доступа.
- Очистив историю, сделайте следующее:
- Справа вверху откройте вкладку дополнительных настроек.
- Далее выберите пункт Система найдите раздел Дополнительные.
- В открывшейся вкладке кликните по пункту Настройка прокси-сервера, далее Подключения Настройка сети Дополнительно.
- Разрешаете использовать proxy и вводите адрес и номер порта готово, вы подключены к прокси.
Прокси в Opera
- Настройка прокси-сервера в браузере Opera начинается с захода в Меню, кнопка которого располагается в верхнем левом углу окна.
- Зайдя в Меню, вам необходимо найти раздел Настройки который расположился почти в самом низу перечня.
- Далее, непосредственно в настройках нужно пройти следующий путь: Браузер > Сеть > Изменить настройки прокси-сервера.
- Следующим этапом будет изменение подключения и разрешение использовать proxy для соединения с Сетью. Сделав это, просто укажите нужный IP адрес и порт подключения.
Присмотревшись, вы заметите, что путь настройки прокси фактически идентичен во всех браузерах. Это список может дополнить Internet Explorer и Yandex.Browser, но сам путь подключения proxy-сервера останется неизменным – главное помнить, что нужно изменить параметры подключения к Сети, а дальше двигаетесь интуитивно, благо разработчики постарались максимально упростить эту задачу.
Настройка прокси в расширении FoxyProxy (Mozilla Firefox)
Mozilla Firefox – браузер на движке Gecko, который разрабатывается и поддерживается Mozilla Corporation.
Скачать и попробовать данный браузер можно на его официальном сайте – mozilla.org
А мы сегодня разберем настройку прокси в Mozilla Firefox через расширение FoxyProxy и в целом разберем как пользоваться данным расширением для настройки прокси, так как настройка стандартными средствами браузера не лучший вариант для настройки прокси с авторизацией по логину и паролю, да и в целом по ряду причин (отсутсвие тонкой настройки исключений, отсутствие профилей и т.д.)
Установка расширения FoxyProxy
Для установки расширения можно либо в магазине расширений Mozilla Firefox (addons.mozilla.org) вбить “FoxyProxy”, либо установить расширение по прямой ссылке https://addons.mozilla.org/ru/firefox/addon/foxyproxy-standard/ по кнопке “Добавить в FireFox»
По необходимости нужно будет разрешить нужные права нажав на кнопку “Добавить»
После установки расширения у вас появится его значок (перечеркнутая лиса) на панели расширений наверху справа
Настройка прокси в FoxyProxy
Для настройки прокси в данном расширении нужно перейти в настройки расширения – нажать на значок расширения и выбрать “Options»
Затем в настройках уже можно работать с профилями прокси, что мы и сделаем – создадим новый профиль с прокси нажав на кнопку “Add»
После можно перейти к заполнению настроек прокси данными нашего IP-адреса, где Title of Description – название профиля для удобства работы с ними, в нашем случае – “My first proxy». Приобрести анонимный IP-адрес можно тут.
В поля справа вписываем уже данные от нашего прокси, где по очереди “Proxy IP address or DNS name”, “Port”, “Username” и “Password” означают адрес прокси, порт прокси, логин и пароль от прокси
В примере выше у нас адрес прокси – 185.120.77.15, порт от прокси – 7984, логин от прокси – login и пароль от прокси – password После заполнения настроек нужно сохранить ваш созданный профиль нажав на кнопку “Save” (точно также сохраняются и изменения в профиле)
После этого можно активировать созданный профиль опять же нажав на значок расширения на панели расширений и выбрав в списке нужный профиль (в нашем случае “My first proxy”) и как мы видим – настройки применились (может понадобиться перезагрузка браузера) и наш прокси настроен, а также готов к работе и обеспечению вашей анонимности
Таким образом можно работать с несколькими профилями одновременно и настраивать исключения на определенные сайты, более подробно → https://help.getfoxyproxy.org/index.php/knowledge-base/url-patterns/
Возможные проблемы
Если вы ранее настраивали прокси в Mozilla Firefox стандартными средствами браузера, то будет конфликт и эту настройку нужно будет отключить перейдя в настройки, вбив в поиске “Прокси” и перейдя к параметрам сети перевести переключатель с “Ручная настройка прокси” на “Без прокси»
Видео по настройке FoxyProxy
Видеоинструкция по настройке прокси в FoxyProxy, в которой показаны все те же шаги, но наглядно и в формате видео, приятного просмотра!
Прокси-сервер для Windows
Пожалуй, это самая востребованная категория решений, поскольку поднять proxy-сервер для Windows способен любой рядовой пользователь. Зачем это может понадобиться? Вариантов применения множество, от создания собственного защищенного канала до обхода региональных ограничений на использование иностранных сервисов. Рассмотрим пару простых примеров, которые наглядно демонстрируют, как proxy-сервер для Windows помогает решить некоторые проблемы, если его правильно настроить.
Второй очевидный способ использования — подключение к собственному каналу удаленно с любого устройства. К примеру, на работе у вас могут заблокировать соцсети или развлекательные ресурсы. Не беда, если корпоративная сеть построена на базе Виндовс — заходите на свой домашний прокси-сервер и пользуйтесь его возможностями без ограничений. Сейчас мы подробно расскажем, как настроить соединение.
Как установить репозиторий EPEL
Проверить подключен ли в вашей системе репозиторий EPEL можно следующим образом:
# yum repolist
И если в выдаче присутствуют строки epel Extra Packages for Enterprise Linux , то репозиторий EPEL установлен в системе:
# rpm -Uvh http://mirror.yandex.ru/epel/6/i386/epel-release-6-8.noarch.rpm
либо с официального сайта:
# rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
в зависимости от разрядности вашей операционной системы можно поменять в адресе i386 на x86_64. Но этого делать совсем не обязательно, команда должна работать при любой разрядности.
Чтобы убедиться в результате еще раз выполним:
# yum repolist
После чего можно приступать непосредственно к установке анонимного прокси сервера 3proxy:
# yum install 3proxy
Настройка 3proxy на CentOS
Перед первым запуском необходимо внести коррективы в файл конфигурации /etc/3proxy.cfg установив значения для своего сервера:
————-3proxy.cfg————-
# ВНИМАНИЕ !! не должны быть пробелов
# перед любыми опциями конфигурации !!
# ip адрес DNS сервера провайдера или локального
# я использую DNS от Google
nserver 8.8.8.8
timeouts 1 5 30 60 180 1800 15 60
# создаем пользователя vasyaproxy
# и назначаем пароль 12345
# естественно нужно использовать сложный пароль
users vasyaproxy:CL:12345
# лог файл со списком запросов пользователей
# будет создаваться каждый день новый
log /usr/local/3proxy/logs/3proxy.log D
logformat «%d-%m-%Y %H:%M:%S %U %C:%c %R:%r %O %I %T»
# внешний интерфейс
# (через который будут уходить запросы от сервера)
# я использую ip адрес моего сервера
external 0.0.0.0
# ip адрес интерфейса на котором будут приниматься
# запросы от клиентов
# я использую ip адрес моего сервера
internal 0.0.0.0
# устанавливаем тип авторизации по имени и паролю
auth strong
# разрешаем доступ к портам 80,8080-8088
allow * * * 80,8080-8088
# запускаем службу HTTP proxy на порту (3128 и
# -n c отключенной NTLM авторизацией)
# -a запускаем как анонимный сервер
proxy -p3128 -n -а
————————————
Ваш реальный конфиг будет отличаться, я указал лишь минимальные настройки для запуска анонимного прокси сервера. Все остальные параметры можно оставить в значениях по-умолчанию.
Если все верно, то запускаем 3proxy:
# service 3proxy start
И посещаем проверялки на анонимность:
Настройка Squid
Сервис squid можно настроить, отредактировав файл . Файл конфигурации содержит комментарии, описывающие, что делает каждый параметр конфигурации. Вы также можете поместить свои параметры конфигурации в отдельные файлы, которые можно включить в основной файл конфигурации с помощью директивы «include».
Перед внесением любых изменений рекомендуется создать резервную копию исходного файла конфигурации:
Чтобы начать настройку вашего экземпляра squid, откройте файл в текстовом редакторе :
По умолчанию squid настроен на прослушивание порта на всех сетевых интерфейсах сервера.
Если вы хотите изменить порт и установить интерфейс прослушивания, найдите строку, начинающуюся с и укажите IP-адрес интерфейса и новый порт. Если интерфейс не указан, Squid будет прослушивать все интерфейсы.
/etc/squid/squid.conf
Запуск Squid на всех интерфейсах и на порту по умолчанию должен подойти большинству пользователей.
Squid позволяет вам контролировать, как клиенты могут получать доступ к веб-ресурсам, используя списки контроля доступа (ACL). По умолчанию доступ разрешен только с локального хоста.
Если все клиенты, использующие прокси-сервер, имеют статический IP-адрес, простейшим вариантом ограничения доступа к прокси-серверу является создание ACL, который будет включать разрешенные IP-адреса. В противном случае вы можете настроить squid на использование аутентификации.
Вместо добавления IP-адресов в основной файл конфигурации создайте новый выделенный файл, который будет содержать разрешенные IP-адреса:
/etc/squid/allowed_ips.txt
После этого откройте основной файл конфигурации и создайте новый ACL с именем (первая выделенная строка) и разрешите доступ к этому ACL с помощью директивы (вторая выделенная строка):
/etc/squid/squid.conf
Порядок правил важен. Убедитесь, что вы добавили строку перед .
Директива работает аналогично правилам межсетевого экрана. Squid читает правила сверху вниз, и когда правило совпадает, правила ниже не обрабатываются.
Каждый раз, когда вы вносите изменения в файл конфигурации, вам необходимо перезапустить службу Squid, чтобы изменения вступили в силу:
Пару моментов перед тем как начать
- Я выбрал Digital Ocean (DO) как хостинг провайдера для VDS прокси-сервера, в основном, потому что у них замечательная техническая поддержка, API, крутой продукт, и огромное количество полезных и нужных дроплетов полезных сервисов, которые разворачиваются в один клик;
- В частности вот список того, что DO прекрасно делает за вас:
- Присвоить ssh ключ новому дроплету;
- Создать снэпшот (бекап);
- Создать дроплет в один клик;
- Профит;
- Я следовал туториалам, которые нашел в интернете. Благодарности тем ребятам, что их написали:
- https://www.tazdij.com/post/setup-dante-1.4.1-sockd-dante-server-on-ubuntu-16.04 ;
- https://krasovsky.me/it/2017/07/socks5-dante/ ;
- https://la2ha.ru/dev-seo-diy/unix/socks5-proxy-server-ubuntu ;
- https://krasovsky.me/it/2017/07/socks5-dante/ ;
- На самом деле, этот гайд является компоновкой этих плюс то, как сгенерировать ssh ключи и создать дроплеты в DO;
- Я выбрал только открытый софт и предполагаю, что вы будете использовать Ubuntu 16;
- Я буду рассказывать больше для Windows пользователей, обычно блоги представленные выше рассказывают для Linux или Mac пользователей;
- Если вы используете эту реферальную ссылку, вы получите 10$ на аккаунт Digital Ocean, этого вам хватит на 2 месяца использования, как раз чтобы понять, нужно ли оно вам или нет;
Итак, начнем.
Шаг 6 — Установка и настройка Nginx
На этом шаге мы выполним установку Nginx и настроим домены и как виртуальные хосты Nginx. Полное руководство по настройке виртуальных хостов в Nginx можно найти в документе .
Установите Nginx с помощью диспетчера пакетов:
Затем удалите соединение symlink по умолчанию виртуального хоста, поскольку мы больше не будем его использовать:
Позднее мы создадим собственный сайт по умолчанию ().
Теперь мы создадим виртуальные хосты для Nginx, используя ту же процедуру, что использовалась для Apache. Вначале необходимо создать корневые каталоги документов для обоих сайтов:
Мы будем хранить сайты Nginx в каталоге , где Nginx требуется хранить их по умолчанию. Вы можете поместить их в каталог с сайтами Apache, но разделение поможет привязать сайты к Nginx.
Как и в случае с виртуальными хостами Apache, после завершения настройки следует создать файлы и для тестирования:
Теперь создайте файл виртуального хоста для домена :
Nginx вызывает области серверных блоков файла конфигурации Создайте серверный блок для главного виртуального хоста, . Директива делает его виртуальным хостом по умолчанию для обработки запросов HTTP, не соответствующих никакому другому виртуальному хосту.
/etc/nginx/sites-available/example.com
Сохраните и закройте файл. Создайте файл виртуального хоста для второго домена Nginx, :
Добавьте в файл следующее:
/etc/nginx/sites-available/sample.org
Сохраните и закройте файл.
Затем активируйте оба сайта, создав символические ссылки на каталог :
Протестируйте конфигурацию Nginx и убедитесь в отсутствии проблем с конфигурацией:
При обнаружении ошибок перезагрузите Nginx:
Получите доступ к файлу виртуальных хостов Nginx через браузер по адресам http://example.com/info.php и http://sample.org/info.php. Снова изучите разделы PHP Variables.
должен иметь значение , указывая, что файлы обслуживались Nginx напрямую. должен указывать на каталог, ранее созданный на этом шаге для каждого из сайтов Nginx.
К настоящему моменту мы установили Nginx и создали два виртуальных хоста. Далее мы настроим Nginx на запросы прокси-сервера, предназначенные для доменов Apache.
Свой ананонимный прокси сервер на Linux
В сети полно полностью ананонимных прокси серверов. Но, во-первых, насколько им можно доверять? А во-вторых, если вы им пользуетесь время от времени, то гораздо проще завести свой ананонимный прокси сервер.
Установка Proxy server 3proxy
Для CentOS ничего придумывать не надо. Все уже давно написано. Для анонимного путешествия в сети удобно использовать маленький бесплатный proxy server 3proxy. Опять же приятно, что он является результатом труда отечественных программистов.
Сервер 3proxy присутствует в репозитории EPEL для CentOS, а это сертефицированный стандартный репозиторий для этой операционной системы. Поэтому его установка сводится к одной команде:
# yum install 3proxy
Настройка proxy_pass в nginx
Рассмотрим самый простой пример. Буду использовать свой технический домен zeroxzed.ru в этом и последующих примерах. Допустим, у нас есть сайт blog.zeroxzed.ru. В DNS создана A запись, указывающая на ip адрес сервера, где установлен nginx — nginx_srv. Мы будем проксировать все запросы с этого сервера на другой сервер в локальной сети blog_srv, где реально размещается сайт. Рисуем конфиг для секции server.
Заходим по адресу http://blog.zeroxzed.ru. Мы должны попасть на blog_srv, где тоже должен работать какой-то веб сервер. В моем случае это будет тоже nginx. У вас должно открыться содержимое, аналогичное тому, что вы увидите, набрав http://192.168.13.31 в локальной сети. Если что-то не работает, то проверьте сначала, что по адресу директивы proxy_pass у вас все корректно работает.
Посмотрим логи на обоих сервера. На nginx_srv вижу свой запрос:
Проверяем blog_srv:
Как мы видим, запрос сначала пришел на nginx_srv, был переправлен на blog_srv, куда он пришел уже с адресом отправителя 94.142.141.246. Это адрес nginx_srv. Реальный же ip адрес клиента мы видим только в самом конце лога. Это неудобно, так как директива php REMOTE_ADDR не будет возвращать настоящий ip адрес клиента. А он очень часто бывает нужен. Мы это дальше исправим, а пока создадим в корне сайта на chat_srv тестовую страничку для проверки ip адреса клиента следующего содержания:
Назовем ее myip.php. Перейдем по адресу http://blog.zeroxzed.ru/myip.php и проверим, как сервер определит наш адрес. Никак не определит Он покажет адрес nginx_srv. Исправляем это и учим nginx передавать реальный ip адрес клиента на сервер.
Установка и настройка Squid
Устанавливаем squid следующей командой:
sudo apt-get install squid -y
Во-первых, для удобства мы сделаем резервную копию файла просто переименовав его в . А во-вторых, создадим файл конфигурации, убрав все комментарии и пустые строки. Для удобства все наши дальнейшие действия будем выполнять с правами root.
sudo -i mv /etc/squid/squid.conf /etc/squid/squid.conf.dist cat /etc/squid/squid.conf.dist | grep -v ^$ | grep -v ^# > /etc/squid/squid.conf
После установки наш прокси-сервер принимает входящие соединения с любых адресов на порту 3128 без какой-либо аутентификации и авторизации.
Наша задача настроить сервер таким образом, чтобы им могли пользоваться только те, кому мы дадим к нему доступ. Для этого в начало файла вставьте следующие строки:
auth_param digest program /usr/lib/squid/digest_file_auth -c /etc/squid/users auth_param digest children 5 startup=1 idle=1 auth_param digest realm myproxy acl auth_users proxy_auth REQUIRED
В этот же файл добавьте правило доступа:
http_access allow auth_users
сразу выше строки .
В конечном итоге у вас должно получиться примерно следующее содержимое :
auth_param digest program /usr/lib/squid/digest_file_auth -c /etc/squid/users auth_param digest children 5 startup=1 idle=1 auth_param digest realm proxy acl auth_users proxy_auth REQUIRED acl SSL_ports port 443 acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 # https acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025-65535 # unregistered ports acl Safe_ports port 280 # http-mgmt acl Safe_ports port 488 # gss-http acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling http acl CONNECT method CONNECT http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow localhost manager http_access deny manager http_access allow localhost http_access allow auth_users http_access deny all http_port 3128 coredump_dir /var/spool/squid refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 refresh_pattern (Release|Packages(.gz)*)$ 0 20% 2880 refresh_pattern . 0 20% 4320