Как поднять прокси сервер на ubuntu
Перейти к содержимому

Как поднять прокси сервер на ubuntu

  • автор:

Setting up Proxy in Ubuntu

This post is for complete newbies to Ubuntu Linux. It explains how to setup proxy.

Proxy in Network Settings

Most people know about this, but for the sake of completeness,

  1. Open System Settings in Ubuntu.
  2. Under Hardware, click on Network
  3. On the left hand side plane, click on Network Proxy
  4. In the Method drop down list, choose Manual
  5. Fill up the http and https proxy. No need to set ftp and socks proxy.
  6. Click on Apply system wide.

Proxy in /etc/apt/apt.conf

Just like you have a Google Play Store for downloading Android apps, you have an apt-get package manager for installing applications in Ubuntu.

If you have used Chrome or Firefox, you must have noticed that they interactively ask for proxy username and password. Unlike them, apt-get does not. Instead, it fails, saying “407 Proxy Authentication Required”

Fortunately, apt-get uses proxy that you store in a file “/etc/apt/apt.conf”

Lets open this file and have a look. Open a terminal, and type

We see that gedit(a text editor) opens the file, and it has the following contents.

Now, we modify the file as follows,

Replace <user>,<pass>,<proxy> and <port> by your actual details. Save and close the text file. If you get any GTK-Warning on your terminal, ignore it.

Now, to check if apt-get is working, type “sudo apt-get update” in the terminal and press enter.

If you have done everything correctly, you shouldn’t get the “407 Proxy Authentication Required” error anymore.

Proxy in

Setting Proxy in bashrc itself would just take a minute . You would just have to follow some instructions and everything would work.
But we are not going to do that. Instead, we are going to understand what we are doing and why we are doing it. Because that’s the Linux way.

Environment Variables

Before explaining about .bashrc file, I need to explain what environment variables are.

In Linux, an environment variable is a system variable. Its just like a variable that you know from any other programming language — It has a name and a value. But instead of being part of a program, its part of your terminal.

So, why do we need environment variables?
Broadly, environment variables provide information to the various processes running on your system.

The Proxy Environment Variables

One such example is the proxy environment variables.
To view the proxy environment variables, open a terminal and type,

The proxy environment variables are used by various processes to connect to the internet. One such example is the wget.
Try doing,

It will say something like,

Proxy tunneling failed: Proxy Authentication Required

As you might have guessed, wget is also like apt-get, in the sense that it doesn’t ask you for proxy username and password. Instead, it fails with a 407.

Remember 407. If you ever see it, you know that its a proxy issue.

Thus, we have to modify the proxy environment variables to include username and password.
Try doing,

Again, replace <user>, <pass>, <proxy> and <port> with your own details. Example below.

Note : export is a Linux command used to set and modify environment variables.

Then, try the wget again. This time, it will work.
The screenshot is given for your reference.

All seems good. Close the terminal.

But wait, its not so simple.

Open another terminal and type,

You will see that the proxy environment variables have been reset.

Environment variables belong to a shell. Changes made to the environment of one shell does is not reflected in another shell.

Thus, we have to type the export command every time we open a terminal . How tedious.

Here comes our lord and saviour — bashrc.

The bashrc file is a file that is executed when you open a terminal. Thus, you can put code into it, and it will be executed, as if you wrote that code after you opened the terminal.

So, we can put the export commands inside the bashrc file, and finally setup the proxy.

Open a terminal, and type,

And add the following lines at the top,

Of course, replace the details with your own.

Save and close the file.

Like I said earlier, bashrc runs every time you open a new shell. So close the terminal and open it again. Alternatively, you can run source to execute the bashrc file.

Now, lets try this once again.

Done. But is it?

If you reached here, then I have to say, you have successfully setup proxy in Linux.

But, the more you learn, the more there is to learn.

For example, bashrc method only works for a particular user. So if you run a command using sudo, it does not work.

To make it work, you have to use the -E option of sudo. Check out the man page of sudo to learn more about the -E option.

Also, what is the difference between shell and terminal? Are they the same?

HackWare.ru

Этичный хакинг и тестирование на проникновение, информационная безопасность

Как создать и настроить прокси-сервер Squid

Оглавление

Прокси-сервер Squid

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

Прокси-сервер — это компьютер, который используется в качестве посредника между клиентом и другими серверами, с которого клиент может запрашивать ресурсы. Простой пример этого:

  • когда клиент делает онлайн-запросы (например, хочет открыть веб-страницу), он сначала подключается к прокси-серверу;
  • затем прокси-сервер проверяет свой локальный дисковый кеш, и, если данные могут быть найдены там, он вернёт данные клиенту
  • а если они ещё не кэшированы, он сделает запрос от имени клиента, используя IP-адрес прокси (отличный от клиентского), а затем вернёт данные клиенту;
  • прокси-сервер попытается кэшировать новые данные и будет использовать их для будущих запросов к тому же серверу.

Веб-прокси существуют уже довольно давно и используются миллионами людей по всему миру. У них широкий спектр целей, наиболее популярной из которых является онлайн-анонимность, но есть и другие способы использования веб-прокси. Вот несколько идей:

  • Анонимность в сети
  • Повышение онлайн-безопасности
  • Уменьшить время загрузки
  • Блокировать вредоносный трафик
  • Вести учёт своей онлайн-активности
  • Чтобы обойти региональные ограничения
  • В некоторых случаях может снизить использование полосы пропускания (нагрузку на сеть)
  • Ограничение доступа к определённым ресурсам с гибкой возможностью настройки: введение ограничений только для определённых пользователей, по расписанию, с требованием аутентификации и так далее

Squid — это самый популярный веб (HTTP) прокси-сервер с кэшированием и перенаправлением (форвардинг), его главное применение это сокрытие IP адреса пользователей, а также кэширования веб-страниц с веб-сервера, чтобы повысить скорость веб-сервера, уменьшить время отклика и уменьшить использование полосы пропускания сети.

Команды установки Squid различаются на разных Linux, но последующая настройка одинакова во всех дистрибутивах. В этой статье мы будем использовать Squid в качестве HTTP/HTTPS прокси-сервера без кэширования.

В этой статье мы объясним, как установить прокси-сервер squid в дистрибутивах Linux и в Windows и использовать его в качестве HTTP/HTTPS прокси-сервера.

Выбрать Squid или 3proxy?

Если для вас не важна такая функциональность как кэширование, а важно в первую очередь скрывать IP адрес или делать запросы с множества IP адресов, то функциональность Squid и 3proxy схожа в этом плане. Прокси-сервер 3proxy и создавался как замена Squid. На самом деле изначально эта инструкция задумывалась про 3proxy, но я не сумел запустить его: потратив несколько бесплодных часов я сдался и прекратил попытки запустить службу, которая просто завершает свою работу не выводя никаких сообщений ни в stderr, ни в системный журнал, ни в какой-либо файл. Да, я читал мануалы, читал официальную документацию на сайте, даже гуглил инструкции — не заработало…

С Squid всё получилось довольно быстро, поэтому сейчас вы читаете про прокси-сервер Squid.

Но 3proxy это тоже популярный прокси-сервер и я обязательно доразберусь с ним и ему будет посвящена отдельная статья. Что-то мне подсказывает, что не смотря на обилие документации на официальном сайте, не мне одному нужна рабочая и понятная инструкция по работе с 3proxy и его настройке ))

Как установить Squid в Linux

Как установить Squid на Debian, Linux Mint, Ubuntu, Kali Linux

Пакет Squid доступен для установки из базового репозитория этих дистрибутивов, но перед этим обязательно обновите кэш пакетов, запустив:

После обновления информации о пакетах, вы можете продолжить установку squid:

Установка Squid в Arch Linux, Manjaro и их производные

Выполните обновление кэша информации об установочных пакетах и саму установку следующей командой:

Установка Squid в CentOS

Обновляем информацию о пакетах:

Запуск и добавление Squid в автозагрузку

Следующие команды одинаковы во всех дистрибутивах Linux для запуска Squid.

Чтобы запустить прокси-сервер выполните:

На этом этапе ваш веб-прокси Squid уже должен быть запущен, и вы можете проверить статус службы с помощью:

Для добавления службы Squid в автозагрузку выполните команду:

Далее мы будем вносить изменения в конфигурационный файл прокси-сервера, чтобы они вступили в силу выполните:

Для остановки и удаления службы прокси-сервера из автозагрузки используйте команды:

Установка Squid в Windows

Squid может компилироваться и запускаться в Windows как системная служба с использованием среды эмуляции Cygwin или может быть скомпилирован в собственном режиме Windows с использованием среды разработки MinGW + MSYS. Поддерживаются Windows NT 4 SP4 и более поздние версии.

  • Функции Squid, которые не работают в Windows:
  • DISKD: ещё нужно портировать
  • Прозрачный прокси: отсутствует некоммерческий драйвер перехвата для Windows
  • WCCP: эти функции не были перенесены. Без поддержки прозрачного прокси в этом нет необходимости.
  • Поддержка SMP: Windows-эквивалент сокетов UDS не реализован
  • Некоторые разделы кода могут совершать блокирующие вызовы.
  • Некоторые внешние помощники могут не работать.
  • Количество файловых дескрипторов жёстко ограничено до 2048 при сборке с помощью MinGW.
  • Squid-3.x всех официальных выпусков имеет серьёзные проблемы со сборкой.

Предварительно созданные двоичные пакеты Squid для Windows

Это самый простой способ получить Squid в Windows — проект с открытым исходным кодом https://github.com/diladele/squid-windows предоставляет файлы установщика MSI Windows для Squid Proxy Server. Он делает возможным установку Squid буквально в несколько кликов. Текущая сборка основана на последней сборки Squid 4.14 для Cygwin под Windows 64 bit.

Для скачивания установщика перейдите на сайт: https://squid.diladele.com/ и нажмите ссылку «MSI installer for SQUID FOR WINDOWS».

Запустите скаченный файл двойным кликом и следуйте подсказкам установщика.

Сразу после завершения работы установщика, рядом с часами появится иконка для управления службой Squid:

При клике на неё будут доступны следующие опции:

  • Open Squid Configuration – Открыть файл настроек
  • Open Squid Folder – Открыть папку программы
  • Start Squid Service – Запустить службу Squid (неактивна, если служба уже запущена)
  • Stop Squid Service – Остановить службу Squid
  • About – О
  • Exit – Выйти

Путь до конфигурационного файла в Windows: C:\Squid\etc\squid\squid.conf. Имейте это ввиду, так как во всех последующих разделах настройка будет показана на примере Linux.

Чтобы сделанные в конфигурационном файле изменения вступили в силу, нужно перезапустить службу Squid, для этого остановите и запустите её снова.

Служба Squid будет автоматически запускаться при включении компьютера, а чтобы появилась иконка в трее для управления Squid нужно запустить файл C:\Squid\bin\Diladele.Squid.Tray.exe.

В конфигурационном файле вы можете увидеть пути вроде такого: «/cygdrive/d/squid/cache». Чтобы их понимать, посмотрите «Как получить доступ к дискам в Cygwin». В данном случае /cygdrive/d/squid/cache это D:\squid\cache.

Также там будут пути вроде такого: /var/cache/squid — это всё директории внутри папки C:\Squid. То есть, например, /var/cache/squid — это на самом деле C:\Squid\var\cache\squid\.

Чтобы проверить, действительно ли служба Squid прослушивает порт для подключения, вы можете выполнить следующее:

1. Нажмите Win+x и в открывшемся меню выберите «Windows PowerShell (администратор)».

2. Последовательно выполните команды:

Вы убедитесь, что Squid действительно прослушивает порт 3128.

Помните, что если вы используете файервол, то вам нужно открыть порт, который прослушивает служба прокси-сервера, если вы его не меняли, то по умолчанию это 3128.

Далее выполнение всех действий показано на примере Linux, поскольку Squid намного сильнее распространён именно на Linux, а не на Windows. Тем не менее, вы, пользователи Windows, можете использовать последующую информацию для настройки Squid на Windows. Но вам нужно иметь ввиду следующие нюансы:

1. Когда приводится команда на открытие файла, вы должны открывать свой конфигурационный файл, путь до которого дан чуть выше.

2. Когда говориться, что нужно перезапустить службу и даётся для этого команда, вам нужно открыть помощник в трее и остановить, а потом запустить службу там.

Если вы продвинутый пользователь, то можете управлять службой в командной строке (открытой с правами администратора):

3. Скорее всего (я не проверял) вы не сможете настроить авторизацию по логину и паролю на прокси-сервере, так как многие (или все) помощники не работают в Windows.

4. В конфигурационном файле пути до файлов в Linux и Windows могут совпадать, так как Cygwin эмулирует рабочее окружение Linux, но перепроверяйте.

Конфигурационный файл Squid

Ниже приведены некоторые важные местоположения файлов Squid, о которых вам следует знать:

  • Файл конфигурации Squid: /etc/squid/squid.conf
  • Журнал доступа к Squid: /var/log/squid/access.log
  • Журнал кэша Squid: /var/log/squid/cache.log

По умолчанию конфигурационный файл Squid не пустой — его содержимое различается в зависимости от дистрибутива Linux и в любом случае в нём довольно много директив с настройками. Не спешите их удалять — прокси-сервер Squid устроен так, что если подключение не разрешено явно в его настройках, то он отклоняет все подключения.

В дистрибутивах на основе Debian (Kali Linux, Linux Mint, Ubuntu) в файле /etc/squid/squid.conf содержится полная документация (8500 строк) среди которой есть вкрапления настроек — незакомментированные строки начинаются после 1200+ строки). В дистрибутивах на основе Arch Linux в файле /etc/squid/squid.conf содержится только рекомендуемая минимальная конфигурация, которая приведена ниже.

С помощью следующей команды вы можете посмотреть, какие директивы по умолчанию включены в Debian:

Кратко ознакомимся с содержимым конфигурационного файла по его комментариях.

ИМХО, удобнее делать настройку с нуля, особенно если у вас в этом файле целиком помещена документация. Поэтому сделаем резервную копию конфигурационного файла:

А в дальнейшем будем записывать конфигурационные директивы в новый пустой файл.

Настройка Squid в качестве HTTP-прокси в Linux. Как разрешить подключаться к прокси только определённым IP

Рассмотрим как настроить squid в качестве прокси-сервера HTTP, используя только IP-адрес клиента для аутентификации. То есть мы пока не будем устанавливать логин и пароль для доступа к прокси-серверу, но мы запретим к нему доступ всем, кроме указанного IP адреса.

Добавление ACL Squid

Если вы хотите разрешить доступ в Интернет только одному IP-адресу через ваш новый прокси-сервер, вам нужно будет установить новый acl (access control list, то есть список контроля доступа) в файле конфигурации. Более подробно об ACL будет далее.

Вам следует добавить следующее правило acl:

  • XX.XX.XX.XX — IP-адрес клиентской машины для которой разрешено подключение. Этот ACL следует добавить в начало раздела ACL, как показано на следующем снимке экрана
  • ПОРТ — порт, к которому будет подключаться клиентская машина
  • имя «localnet» используется только потому, что в конфигурации по умолчанию уже есть данный список и для него уже установлено правило «разрешить». На самом деле, можно выбрать любое другое имя, которое будет отражать содержимое списка, например «allowed_hosts»

Вы могли видеть примеры правил acl выше.

Всегда рекомендуется оставлять комментарий рядом с ACL, который будет описывать, например, кто использует этот IP-адрес.

Пример минимальной конфигурации, когда к прокси-серверу разрешено подключение только с IP адреса 185.117.153.79, в качестве порта прокси-сервера используется 4080:

Вам нужно будет перезапустить сервис Squid, чтобы новые изменения вступили в силу.

С помощью веб-браузера проверим подключение к прокси-серверу.

В первую попытку сделано подключение НЕ с 185.117.153.79 (единственный разрешённый IP адрес):

Мы получили ожидаемую ошибку:

После того, как я поменял свой IP адрес на 185.117.153.79 (единственный разрешённый IP адрес), подключение прошло нормально.

Посмотрим на журнал подключений прокси-сервера:

Как вы можете увидеть, все запросы с IP адреса 84.53.229.35 имеют статус «TCP_DENIED/403», то есть отклонены. А запросы с разрешённого IP адреса 185.117.153.79 имеют статус «TCP_TUNNEL/200» и «TCP_MISS/200».

Показан IPv6 адрес моего прокси-сервера.

Как скрыть, что используется прокси-сервер Squid

И прокси-сервер успешно обнаружен, меня выдал HTTP заголовок:

RFC2616 требует, чтобы прокси-сервера добавляли этот заголовок в запрос и ответ. Прокси-сервер Squid может быть скомпилирован с поддержкой нарушения HTTP стандартов. Ранее для этого требовалось при компиляции указать опцию —enable-http-violations, а теперь поддержка нарушения стандартов включена по умолчанию (для её отключения нужно скомпилировать с опцией —disable-http-violations). Вы можете добавить в файл настроек следующую директиву, в результате чего HTTP заголовок Via не будет добавляться:

Заголовок X-Forwarded-For не требуется стандартами и по умолчанию отключён, тем не менее, для большей уверенности вы можете отключить его явно:

Тег forwarded_for может иметь одно из следующих значений:

  • on
  • off
  • transparent
  • truncate
  • delete

Если установлено значение «on», Squid будет добавлять IP-адрес вашего клиента в HTTP-запросы, которые он пересылает. По умолчанию это выглядит так:

Если установлено значение «off», Он будет отображаться как

Если установлено значение «transparent», Squid никоим образом не изменит заголовок X-Forwarded-For.

Если установлено значение «delete», Squid удалит весь заголовок X-Forwarded-For.

Если установлено значение «truncate», Squid удалит все существующие записи X-Forwarded-For и поместит IP-адрес клиента в качестве единственной записи.

После добавления «via off» и перезапуска прокси-сервера, этот HTTP заголовок исчез.

Но не удалось перехитрить сервисы, по поиску утечек:

  • https://2ip.ru/privacy/
  • https://whatleaks.com/

Они смогли определить, что используется прокси по следующим признакам:

  • Открытые порты web proxy
  • Разница во временных зонах (браузера и IP)
  • Принадлежность IP хостинг провайдеру
  • Определение туннеля (двусторонний пинг)

Но настоящий IP пользователя за прокси они узнать не смогли.

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

Настройка подключения к прокси-серверу Squid по логину и паролю

Как настроить HTTP Basic аутентификацию в Squid

Чтобы разрешить пользователям аутентифицироваться перед использованием прокси, вам необходимо включить базовую HTTP-аутентификацию в файле конфигурации, но перед этим вам необходимо установить пакет, содержащий утилиту htpasswd.

В Debian и производных это пакет apache2-utils, для его установки используйте следующую команду.

В Arch Linux и производных данная утилита содержится в пакете apache:

В CentOS нужный пакет называется httpd-tools, установите его:

Теперь мы создадим запись для пользователя с именем «mial» и установим его пароль.

Опция -c в предыдущей команде нужна для создания нового файла (или перезаписи существующего), если вы хотите модифицировать файл (изменить пароль для одного из пользователей или создать новую запись для другого пользователя), запускайте команду без этой опции:

Теперь, чтобы включить базовую HTTP-аутентификацию, откройте файл конфигурации.

Можно сочетать аутентификацию по IP адресу и по паролю, либо можно настроить аутентификацию по паролю разрешив доступ с любого IP, я выбираю второй вариант, то есть кто угодно, зная пароль, может использовать прокси-сервер. Поэтому я удаляю из конфигурационного файла строки:

После списков ACL (если они есть) добавьте следующие строки:

Несколько пояснений по данным директивам:

  • Нам нужно указать Squid, какую вспомогательную программу аутентификации использовать с директивой auth_param, указав имя программы (скорее всего, /usr/lib/squid/ncsa_auth или /usr/lib64/squid/basic_nsca_auth), а также, если необходимо, любые параметры командной строки (в данном случае /etc/squid/passwd).
  • Файл /etc/squid/passwd создаётся с помощью htpasswd, инструмента для управления базовой аутентификацией через файлы. Это позволит нам добавить список имён пользователей (и соответствующих им паролей), которым будет разрешено использовать Squid.
  • credentialsttl 2 hours означает, что пользователю нужно будет вводить пароль каждые два часа (вы также можете указать этот временной интервал с минутами, используя слово «minutes»).
  • casesensitive on указывает, что имена пользователей и пароли чувствительны к регистру.
  • realm представляет собой текст диалога аутентификации, который будет показан пользователю в окне аутентификации в squid.
  • children 5 определяет максимальное количество запускаемых процессов аутентификатора. Если вы запустите их слишком мало Squid, другим пользователям придётся ждать, пока до них дойдёт очередь и они смогут выполнить аутентификацию, что замедлит процесс. Когда проверка пароля выполняется через (медленную) сеть, вам, вероятно, понадобится много процессов аутентификации. С другой стороны — ограничение количества одновременных проверок логина и пароля позволит сильно замедлить брут-форс (подбор пароля) для вашего прокси-сервера
  • Наконец, доступ к прокси предоставляется только при успешной аутентификации (proxy_auth REQUIRED).

Обратите внимание, что в различных дистрибутивах Linux путь до файла basic_ncsa_auth может чуть различаться:

  • /usr/lib64/squid/basic_ncsa_auth (Arch Linux, CentOS)
  • /usr/lib/squid/basic_ncsa_auth (Debian, Linux Mint, Ubuntu, Kali Linux)

В некоторых системах файл расположен в обоих директориях (Arch Linux).

Вы можете проверить, где именно в вашей системе расположен файл:

На сервере, который я настраиваю путь до файла /usr/lib/squid/basic_ncsa_auth и прокси сервер использует порт 4080, тогда конфигурация следующая:

Сохраните файл и перезапустите squid, чтобы новые изменения вступили в силу:

Попробуем открыть веб-сайт в веб-браузере, использующем наш прокси:

После ввода имени пользователя и пароля мы можем просматривать сайты через прокси.

Посмотрим журнал /var/log/squid/access.log:

Можно увидеть, что вначале статус TCP_DENIED, то есть запрос отклонён, но после ввода логина и пароля прокси стал принимать запросы. Также обратите внимание, что теперь запросы принимаются независимо от IP адреса пользователя.

Как настроить HTTP Digest аутентификацию в Squid

Basic аутентификация плоха тем, что пароль передаётся фактически в виде простого текста (кодирован в Base64). Подробности смотрите в статье «Атаки на HTTP Basic и Digest аутентификацию».

Поэтому предпочтительнее использовать Digest аутентификацию на проксе сервере Squid.

Начнём с создания файла с хешем пароля, это делается командой вида:

REALM — это область применения. В качестве REALM может быть любая строка, но помните, что эта же самая строка впоследствии будет показана в форме ввода имени пользователя и пароля.

Пример команды создающей файл с хешем пароля для пользователя mial:

Пример конфигурационного файла для HTTP Digest аутентификация в Squid:

Обратите внимание на строку «auth_param digest realm Squid proxy for HackWare.ru», в ней вместо «Squid proxy for HackWare.ru» впишите ту же строку, которую вы указали при использовании команды htdigest.

Обратите внимание, что не только изменена вспомогательная программа (digest_file_auth), но и после неё используется опция -c, за которой следует путь до файла с хешем пароля пользователя. Все остальные директивы схожи с HTTP Basic аутентификацией, за тем исключением, что слово «basic» в них заменено на слово «digest».

Как отключить кэширование в Squid

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

Если вы хотите отключить кэширование в Squid, то добавьте следующую директиву:

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

Чтобы заблокировать доступ к нежелательным веб-сайтам, сначала создайте файл с именем «blacklisted_sites.acl», в котором будут храниться сайты из черного списка.

Теперь добавьте веб-сайты, доступ к которым вы хотите заблокировать, например:

Начальная точка сообщает squid о необходимости заблокировать все адреса этих сайтов, включая субдомены www.badsite1, subsite.badsite1.com и так далее.

Теперь откройте файл конфигурации Squid.

И добавьте в него следующие строки:

Очень важен порядок http_access — если в вашем конфигурационном файле есть описанная выше директива для включения аутентификации на прокси-сервере по паролю («http_access allow auth_users»), то блокировка доменов должна идти перед ней, иначе не будет работать:

Теперь сохраните файл и перезапустите squid:

Эта блокировка работает для сайтов использующих протокол HTTP, а также для сайтов использующих протокол HTTPS. Но в зависимости от используемого протокола сообщение ошибки будет разным. Для сайтов на HTTP будет чёткое сообщение:

Также для сайтов на HTTP можно настроить свои собственные сообщения об ошибках, в том числе для каждого сайта в отдельности.

Для сайтов на HTTPS будет ошибка «Прокси-сервер отказывается принимать соединения». Различие из-за того, что протокол HTTP позволяет вмешиваться в передаваемый трафик и полностью менять страницу сайта, в данном случае показывая ошибку. Что касается HTTPS, то прокси-сервер не может как-либо модифицировать передаваемые данные, но всё ещё может заблокировать запрос от пользователя на этапе разрешения имён (DNS запрос) или на этапе SSL/TLS-рукопожатия, когда запрашиваемый домен передаётся в открытом виде. Поэтому других мер, кроме как прервать подключение, у прокси нет.

Кроме dstdomain, также имеются такие типы ACL как dstdom_regex (домены по регулярным выражениям), url_regex (поиск совпадение по регулярном выражениям в полном URL), urlpath_regex (поиск совпадение по регулярном выражениям в пути URL) и некоторые другие. Подробнее они рассмотрены в карточке программы:

ССЫЛКА — ещё не готово

Как работает ACL в Squid

Основы ACL в Squid

Остановимся теперь на том, как именно работают ACL.

Схема управления доступом веб-прокси-сервера Squid состоит из двух разных компонентов:

  • Элементы ACL — это строки директив, которые начинаются со слова «acl» и представляют типы тестов, которые выполняются для любой транзакции запроса.
  • Правила списка доступа состоят из действия allow (разрешения) или deny (запрета), за которым следует ряд элементов ACL, они используются для указания того, какое действие или ограничение необходимо применить для данного запроса. Они проверяются по порядку, и поиск по списку прекращается, как только одно из правил совпадает. Если правило имеет несколько элементов ACL, оно реализуется как логическая операция И (все элементы ACL правила должны выполняться, чтобы правило считалось совпавшим).

Вы также можете использовать списки определений, которые хранятся в файлах на вашем жёстком диске. Предположим, у вас есть список URL-адресов поисковых систем, которые вы хотите разрешить:

Тогда ACL для этого файла будет выглядеть так:

Кавычки здесь необходимы чтобы сообщить Squid, что ему нужно искать определения в этом файле.

Кроме уже упомянутых типов src, port, dstdomain, proxy_auth имеется десятки других типов, например:

  • localip
  • localport
  • proto
  • method
  • url_regex
  • arp
  • browser
  • http_status
  • req_header
  • rep_mime_type
  • time
  • referer_regex

Полный список вы найдёте в документации squid: http://www.squid-cache.org/Doc/config/acl/. Перевод здесь:

ССЫЛКА — ещё не готово

Сами по себе Элементы acl ничего не меняют в поведение прокси-сервера, это только списки для дальнейшего использования с Правилами списка доступа. Как витиевато сказано в документации, сами по себе эти тесты ничего не делают, например, слово «воскресенье» соответствует дню недели, но не указывает, в какой день недели вы это читаете.

Использование ACL: http_access

Если вы записали только списки управления доступом, то фактически ничего не блокируется — это всего лишь определения. ACL можно использовать в различных местах вашего squid.conf. Самая полезная функция, с которой они могут использоваться в паре, это инструкция http_access. Она работает аналогично тому, как брандмауэр обрабатывает правила. Для каждого запроса, который получает Squid, он будет просматривать все операторы http_access по порядку, пока не найдёт соответствующую строку. Затем он либо принимает, либо отклоняет запрос в зависимости от ваших настроек. Остальные правила, идущие после сработавшего, игнорируются.

Общий синтаксис http_access следующий:

Следующий набор позволит получить доступ администраторам (независимо от того, как выглядит этот ACL; вероятно, ACL src указывает на подсеть, в которой находятся рабочие станции администраторов). Для всех остальных он будет запрещать доступ к URL-адресам porn. Третье правило позволит всем получить доступ к веб-сайтам в обеденное время (кроме сайтов porn). И, наконец, во всех других случаях будет запрет на подключение к Интернету.

То есть администраторы имеют доступ ко всем сайтам (даже porn) в любое время, а остальные пользователи имеют доступ в сеть только в обеденный перерыв.

Объединение ACL (И/ИЛИ)

Часто вам нужно комбинировать ACL. Допустим, вы хотите разрешить доступ к google.com только для бэк-офиса. Для этого нужно объединить два ACLS с помощью логического И. Это выглядело бы так:

Если вы хотите использовать ИЛИ и сказать, что либо доступ из бэк-офиса, либо доступ к google.com разрешён, правило будет выглядеть так:

Подводя итог: для И необходимо размещение условий в одной строке. Для ИЛИ необходимо использование отдельных строк.

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

Чтобы разрешить доступ через прокси IP адресам 10.0.0.1 и 10.0.0.2 правило нужно записать так:

Другие правила списка доступа

Кроме http_access имеется пара десятков других типов, например:

  • http_reply_access
  • icp_access
  • miss_access
  • cache
  • url_rewrite_access

Правило http_access по умолчанию

Если во всём конфигурационном файле отсутствуют строки с «http_access», то по умолчанию запрос отклоняется.

Если ни одна из строк «http_access» не приводит к совпадению, значение по умолчанию — противоположно последней строке в списке. Если последняя строка была deny, по умолчанию применяется значение allow. И наоборот, если последняя строка allow, по умолчанию будет применено deny. Мудрёно, да? По этим причинам рекомендуется иметь запись «deny all» в конце ваших списков доступа, чтобы избежать возможной путаницы. То есть после всех правил просто добавляйте строку:

Итак, вернёмся к нашей комбинации правил «блокировка сайтов + авторизация на прокси-сервере», почему следующий набор неправильный?

Дело в том, что вначале срабатывает правило требующее авторизации на сервере, а именно «http_access allow auth_users». Все последующие директивы http_access просто пропускаются, поэтому сайты не блокируются.

Рассмотрим следующий пример:

Поднятая блокировка сайтов срабатывает первой. Причём, ещё даже авторизации на прокси.

Ещё один вариант:

В этом случае правило срабатывает при соблюдении двух условий: аутентификация и сайт не включён в список заблокированных. Восклицательный знак означает логическое НЕ. Последний вариант является лучшим, логически он более понятный и он выполняет какие-либо действия (блокировку сайта) только после того, как пользователь ввёл логин и пароль прокси-сервера.

Как настроить Squid использовать различные IP адреса

Предположим, у сервера имеется несколько IP адресов — на одном интерфейсе или на разных — не важно.

Задача: использовать разные внешние IP адреса в зависимости от того, к какому порту прокси-сервера происходит обращение.

Итак, как вы можете видеть, на моём тестовом сервере 5 IP адресов, 1 IPv4 адрес и 4 IPv6 адресов:

  • 185.117.153.79
  • 2a02:f680:1:1100::3d5f
  • 2a02:f680:1:1100::3d60
  • 2a02:f680:1:1100::3d61
  • 2a02:f680:1:1100::3d62

Смотрите также:

  • Введение в IPv6 адреса: как пользоваться и как исследовать сеть (часть 1)
  • Введение в IPv6 адреса: как пользоваться и как исследовать сеть (часть 2)

Для решения указанной задачи содержимое файла /etc/squid/squid.conf следующее:

При обращении к странице https://w-e-b.site/ip/ показывается IP адрес клиента, сделавшего запрос. Проверим:

Теперь сделаем обращение к указанной странице через порты прокси-сервера от 24000 до 24003:

Как вы можете видеть, каждый раз выводится разный IPv6 адрес — в соответствии с тем, который из них привязан к определённому порту прокси-сервера.

Как вы думаете, какой IP адрес выведет следующая команда?

Напомню, что к порту 24004 привязан IPv4 185.117.153.79. Если ваш ответ «185.117.153.79», то вы ошибаетесь.

Выведено: 2a02:f680:1:1100::3d61 — это тот же самый IPv6 адрес, который используется по умолчанию.

Причина в том, что на самом деле привязка происходит не к IP адресу как к таковому, а к сетевому интерфейсу, на котором настроен данный IP. Кстати поэтому можно делать привязку и по MAC-адресу. При этом Squid работает следующим образом: если есть техническая возможность (локальный сервер и удалённый хост имеют IPv6 адреса), то по умолчанию используется именно IPv6.

У сайта w-e-b.site есть IPv4 и IPv6 адреса, Squid делает DNS запросы пытаясь получить A и AAAA записи, и если у удалённого хоста есть IPv6 адрес, то используется именно он. Чтобы подключиться к IPv6, сервер также должен использовать IPv6, поэтому выбирается один из доступных IPv6, а не привязанный к порту IPv4.

Можно ли было бы при привязке порта к IPv4 использовать именно IPv4 соединение даже если доступно IPv6? Технически для этого нет преград, но авторы Squid не сделали такой опции. Но вариант использовать IPv4 также есть, правда, не столь удобный.

Как заставить Squid использовать IPv4, а не IPv6

Поскольку для большинства сетей Интернет IPv6 является таким же быстрым или быстрее, чем Интернет IPv4, Squid предпочитает связываться с веб-сайтами через IPv6.

Опция «dns_v4_first on» меняет порядок предпочтений, чтобы Squid сначала связывался с веб-сайтами с двойным стеком через IPv4. Squid по-прежнему перед подключением будет выполнять запросы к DNS как IPv6, так и IPv4.

ПРЕДУПРЕЖДЕНИЕ. Этот параметр ограничивает ситуации, в которых используется (и проверяется) подключение IPv6. Это приводит к скрытию сетевых проблем, которые в противном случае были бы обнаружены и о которых было бы выведено предупреждение.

Итак, для переключения на IPv4 добавьте в конфигурационный файл следующую опцию:

Теперь запрос через порт 24004 выведет IPv4 адрес:

Но дело в том, что запросы к портам 24000-24003 также будут выводить IPv4 адреса, поскольку удалённый хост использует и те и другие, а по умолчанию теперь выбираются IPv4.

То есть по сути эта опция представляет собой переключение между IPv4 и IPv6. Это не совсем удобно и немного алогично. Нужно помнить об этом, поскольку используя различные IP адреса на одном прокси-сервере, вы можете заблуждаться о том, какой именно из них используется на самом деле.

Начиная с пятой версии Squid опция dns_v4_first будет удалена. Вместо того, чтобы подчиняться настройкам dns_v4_first, порядок использования семейства IP теперь в основном контролируется временем ответа DNS: если ответ DNS AAAA приходит первым, пока Squid ожидает IP-адреса, то Squid будет использовать сначала полученные IPv6-адреса. Для ранее кэшированных IP-адресов Squid сначала пробует адреса IPv6. Для управления семейством IP-адресов, используемых Squid, администраторы должны использовать межсетевые экраны, конфигурацию рекурсивного преобразователя DNS и/или —disable-ipv6. При планировании изменений конфигурации имейте в виду, что предстоящие улучшения Happy Eyeballs будут способствовать более быстрому установлению TCP-соединения, уменьшая влияние времени разрешения DNS.

В пятой версии реализован алгоритм «Happy Eyeballs», который использует полученный IP сразу же, как он понадобиться. Правила файерволов, запрещающие IPv6 TCP подключения, остаются предпочитаемым методом конфигурации для «отключения» подключений по IPv6, с конфигурацией рекурсивного преобразователя DNS.

Как добавлять, изменять и удалять HTTP заголовки в Squid

Прокси-сервер Squid позволяет произвольно менять, удалять и добавлять HTTP заголовки к ответам и запросам.

Важно: обратите внимание, что манипуляции с заголовками возможны ТОЛЬКО для HTTP подключений, в HTTPS трафике всё передаётся в зашифрованном виде и прокси-сервер не имеет доступ к заголовкам.

Директивы для обработки заголовков запросов:

  • request_header_access — позволяет удалять заголовки, если этой директивой удалён заголовок, то также проверяются записи request_header_replace, и если найдено подходящее правило для заголовка, то он меняется, если нет, то остаётся как есть (удалённым)

Следующий пример удалит из всех запросов HTTP заголовки From, Referer и User-Agent.

В следующих правилах перечислены HTTP заголовки, которые должны быть сохранены, остальные будут удалены:

  • request_header_replace — меняет заголовки, которые были отклонены request_header_access.

Пример подмены User-Agent:

  • request_header_add — добавляет HTTP заголовки к запросам.

Аналогичные директивы для манипуляции заголовков в ответах:

  • reply_header_access
  • reply_header_replace
  • reply_header_add

Вопросы и ответы по настройки и использованию Squid. Примеры конфигураций Squid

Как настроить веб-браузер (или Windows) для работы через прокси

Настройку Windows и Linux, а также веб-браузеров в этих операционных системах смотрите в статье «Настройка клиентов и операционных систем для работы через прокси».

Разрешение доступа на определённые сайты по паролю

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

В качестве пароля будем использовать аутентификацию на прокси сервере.

Список сайтов, доступ к которым доступен только по паролю, расположен в файле /etc/squid/restricted_sites.acl, тогда конфигурация следующая:

Как в URL блокировать определённые ключевые слова с помощью Squid

Чтобы заблокировать список ключевых слов, которые могут встречаться в URL, сначала создайте файл с именем «blockkeywords.lst», в котором будут храниться ключевые слова из чёрного списка.

Теперь добавьте ключевые слова, к которым вы хотите заблокировать доступ, например:

Теперь откройте файл конфигурации Squid и добавьте следующее правило — размещайте строки «http_access deny» (с блокировкой) выше строк с разрешением:

Теперь сохраните файл и перезапустите squid:

Обратите внимание, опять имеется разница в обработке сайтов на HTTPS и HTTP. Если поиск выполняется по части доменного имени, то данные правила будут работать в любом случае, но ошибки вновь будут отображаться по-разному. Поиск по пути URL за пределами доменного имени работает только для сайтов на HTTP. При использовании HTTPS весь трафик, в том числе адреса запрашиваемых страниц, передаётся в зашифрованном виде, поэтому возможность фильтровать отсутствует в принципе.

Конфигурация Squid для различных пользователей

Если вы предпочитаете делать настройки в отдельных файлах, то вы можете в основной конфигурационный файл (/etc/squid/squid.conf) добавить директиву include, например:

В результате будут импортированы настройки из указанного файла.

Поддерживаются кавычки и подстановочные символы, то есть если добавить следующую директиву:

То в результате будут включены настройки из всех файлов, находящихся в директории /etc/squid/conf.d/.

Включаемые элементы могут быть вложены до 16 уровней глубины (ограничение установлено в исходном коде программы). Это произвольное ограничение не позволяет рекурсивным ссылкам include заставлять Squid входить в бесконечный цикл при попытке загрузить файлы конфигурации.

Запуск Squid без перевода в фон

Выше показано, как запустить Squid как службу. Но вы можете запустить прокси-сервер как обычную программу, без перевода в фон. Чтобы процесс не уходил в фон, используйте опцию -N:

Другие опции, которые вам могут пригодиться в командной строке:

Как заблокировать все адреса назначения кроме одного

Эта настройка разрешит доступ только к IP адресу 10.0.0.1:

Аналогичное правило вы можете настроить для доменов, используя такие типы acl как dstdomain и url_regex.

Как только одному адресу разрешить доступ к определённому URL

В этом примере только special_client разрешается доступ к special_url. Любой другой клиент, который пытается получить доступ к special_url, отклоняется.

Почему в Squid рекомендуется блокировать некоторые порты

Имеются номера портов, к которым опасно разрешать Squid подключаться. Например, было продемонстрировано, что кто-то может использовать Squid в качестве ретранслятора SMTP (электронной почты). Как я уверен, вы знаете, ретрансляторы SMTP — это один из способов, с помощью которых спамеры отсылают свои письма. Чтобы предотвратить ретрансляцию почты, Squid отклоняет запросы, когда номер порта URL равен 25. Другие порты также должны быть заблокированы в качестве меры предосторожности против других менее распространённых атак.

Есть два способа фильтрации по номеру порта: разрешить определённые порты или запретить определённые порты. По умолчанию Squid использует первый вариант. Это запись ACL в файле squid.conf по умолчанию:

Для краткости её можно было бы записать так:

Приведённая выше конфигурация отклоняет запросы, когда номер порта URL отсутствует в списке. Список позволяет подключаться к стандартным портам для HTTP, FTP, Gopher, SSL, WAIS и всем непривилегированным портам.

Другой подход — запретить опасные порты. Список опасных портов должен выглядеть примерно так:

…и, вероятно, многие другие.

Пожалуйста, обратитесь к файлу /etc/services в вашей системе для получения списка известных портов и протоколов.

Поскольку по умолчанию в конфигурации squid разрешены только определённые порты, если вы хотите добавить больше, просто укажите их в файле конфигурации, как показано:

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

Чтобы изменения вступили в силу, вам нужно будет перезапустить squid ещё раз.

Как посмотреть, какие IP адреса прослушивает прокси-сервер Squid

Следующая команда выведет список портов и интерфейсов, которые прослушивают процессы Squid:

Как сделать так, чтобы прокси-сервер Squid прослушивал только локальный порт

По умолчанию, если с директивой http_port указать только порт, то он будет прослушиваться на всех интерфейсах, в том числе и на внешних:

Вы можете явно указать IP адрес интерфейса, который на котором прокси-сервер должен открыть порт:

Пример, когда с прокси-сервером должны работать только локальные приложения-пользователи:

Почему Squid открывает UDP порты

Если посмотреть, какие-порты открывает прокси сервер Squid

то можно увидеть, что кроме TCP порта, который указан в конфигурации Squid, также присутствуют 2 UDP порта.

Прокси-сервер Squid открывает 2 произвольных UDP порта во время своей работы. Причём открывает их на всех интерфейсах, в том числе на доступных для внешнего подключения. Зачем это делается? Официальное объяснение можно прочитать здесь: http://www.squid-cache.org/mail-archive/squid-users/200009/0750.html. Суть в том, что для своей работы Squid делает DNS запросы и открытые UDP порты ему нужны чтобы принимать DNS ответы.

Как настроить кэширование в прокси-сервере Squid

Поддерживает ли Squid SOCKS4 или SOCKS5

Нет, протокол SOCKS не поддерживается. Разработчики пишут, что для этого нет технических преград и, в принципе, реализация поддержки SOCKS должна быть не сложной, но не делают этого. Видимо, им это неинтересно.

Директивы из минимальной рекомендуемой конфигурации

В этой статье показаны примеры настройки прокси-сервера с нуля, чтобы уже имеющиеся директивы не приводили к непредвиденным результатам.

Тем не менее, некоторые настройки, такие как рассмотренные выше блокировки портов, важны. В рекомендуемой минимальной конфигурации имеются директивы, которые не стоит терять:

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

Как настроить работы прокси Squid с множеством пользователей

К примеру, задача организовать работу Squid с несколькими пользователями, каждый из которых в качестве настроек прокси получил IP адрес (одинаковый у всех) и номер порта (индивидуален у каждого пользователя). Также у пользователей индивидуальны логин и пароль. Сервер имеет несколько внешних IP (в данном случае IPv6) адресов, необходимо сделать так, чтобы каждый из пользователей выходил по индивидуальному IP адресу.

Допустим на входе имеем 127.0.0.1:1000:test1:pass1, а на выходе 2a02:f680:1:1100::3d60.

И на входе 127.0.0.1:1001:test2:pass2 и на выходе 2a02:f680:1:1100::3d61.

В последующем конфигурационном файле вам нужно заменить:

  • имена пользователей на выбранные вами имена
  • прописать желаемые порты
  • прописать желаемые IPv6 или IPv4 адреса как для прослушивания, так и в качестве исходящих адресов
  • продублировать аналогичные записи для каждого пользователя (порта, IP адреса)

Содержимое моего файла /etc/squid/squid.conf:

Настройка Squid для работы с OpenVPN

Вы можете использовать прокси Squid для подключение через него к OpenVPN.

Настройка прокси-сервера Squid для работы с OpenVPN не требует каких-то специальных опций. Например, для использования Squid в качестве прокси-сервера для подключения к OpenVPN без аутентификации достаточно указать следующие строки в конфигурационном файле (замените порт 45600 любой другой):

Дополнительно вы можете настроить Basic или Digest аутентификацию — OpenVPN поддерживает их обе.

Помните, что того, чтобы работало подключение к OpenVPN через HTTP прокси необходимо, чтобы OpenVPN сервер использовал протокол TCP.

Как отредактировать страничку блокировки в Squid? Вставить свои картинки и почту?

Настраиваемая страничка блокировки может быть показана только если пользователь подключается по HTTP протоколу. Для HTTPS соединений (которых в настоящее время подавляющее большинство) подменить показываемую страницу (то есть вывести настроенную страничку блокировки) невозможно из-за самой природы HTTPS, который как раз и предназначен для обеспечения невозможности модификации передаваемых данных.

То есть можно отредактировать страничку блокировки в Squid, но она будет показываться в тех немногих случаях, когда выполняется соединение по HTTP.

Для HTTPS соединений будет показываться стандартная страница веб-браузера с сообщение вроде «Прокси-сервер отказывается принимать соединения» (“The proxy server is refusing connections”).

То есть можно констатировать, что пользовательская страница блокировки в Squid будет применяться довольно редка и её настройку можно отнести скорее к устаревшему функционалу.

Squid имеет шаблоны страниц с различными сообщениями, в том числе о запрете доступа, на разных языках. К примеру: /usr/share/squid/errors/ru/ERR_ACCESS_DENIED — это страница с сообщением «Запрошенный URL не может быть получен». Аналогичная страница на английском – /usr/share/squid/errors/en/ERR_ACCESS_DENIED («ERROR: The requested URL could not be retrieved»).

Можно отредактировать эту страницу как обычный HTML файл.

На этой страницы используются коды для вставки в шаблон, например:

  • %U
  • %c
  • %w
  • %W

Значение этих кодов, а также многие другие коды вы найдёте на следующей странице: https://wiki.squid-cache.org/Features/CustomErrors

Как установить e-mail менеджера кэша Squid?

Если вы хотите только указать e-mail адрес менеджера кэша Squid, то вам необязательно редактировать файлы шаблонов. Вы можете использовать следующие директивы:

  • cache_mgr — это адрес электронной почты менеджера локального кеша, который будет получать почту, если кеш умрет. По умолчанию «webmaster».
  • email_err_data — если этот параметр включён, информация о возникшей ошибке будет включена в почтовые ссылки страниц ERR (если установлено значение %W), чтобы данные содержались в теле письма. Синтаксис: <A HREF="mailto:%w%W">%w</A>. По умолчанию уже включено, поэтому дополнительно настраивать не нужно.

Возможные ошибки и проблемы при использовании прокси-сервера

Ошибка «Прокси-сервер отказывается принимать соединения»

Данная ошибка возникает если:

  • прокси-сервер выключен
  • вы пытаетесь подключиться к неверному порту
  • вы пытаетесь подключиться к неверному IP
  • прокси-сервер настроен отклонять запросы от вашего IP адреса

Squid может открыть сайты по HTTP протоколу, но не может открыть HTTPS

Если вы столкнулись с ситуацией, когда HTTP сайты открываются нормально, а для HTTPS сайтов показывается сообщение:

то возможной причиной может быть то, что вы настроили свой браузер или систему работать с HTTP прокси, но не настроили их работать с HTTPS прокси — это разные типы прокси и они оба нуждаются в настройках.

По умолчанию Squid выступает и в роли HTTP прокси, и в роли HTTPS прокси, а клиенты должны настраивать оба этих типа.

Ошибка «Authentication helper program /usr/lib64/squid/basic_ncsa_auth: (2) No such file or directory»

Если при настройки входа по паролю ваш прокси-сервер не запускается и при проверки статуса службы выдаёт ошибку:

то вам нужно проверить путь до файла basic_ncsa_auth.

Возможно вместо пути /usr/lib64/squid/basic_ncsa_auth вам следует использовать /usr/lib/squid/basic_ncsa_auth.

Ошибка «Authentication helper program /usr/lib/squid/basic_ncsa_auth: (2) No such file or directory»

Ошибка аналогичная предыдущей, но вместо пути /usr/lib/squid/basic_ncsa_auth попробуйте использовать /usr/lib64/squid/basic_ncsa_auth.

VPS для прокси-сервера

Если вы хотите настроить прокси-сервер на VPS сервере, то я могу порекомендовать парочку хостингов:

PlugFox / .proxyauth

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters

## addusers in this format:
#user:CL:password
##see for documentation: http://www.3proxy.ru/howtoe.asp#USERS
#
# Username
MyUser:CL:MyPassword

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters

# Запускаем сервер от пользователя proxy3
# (возможно в вашей ОС uid и gid пользователя proxy3
# будут другими. Для их определения воспользуйтесь командой id proxy3)
setgid 112
setuid 107
#
# Пропишите правильные серверы имен посмотрев их
# на своем сервере в /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
socks -p1080

В этой статье мы расскажем, как установить и настроить прокси-сервер.

Прокси-сервер (от англ. proxy — «представитель, уполномоченный») выступает в роли посредника в коммуникациях между вашим ПК/мобильным и Интернетом.

img

Причин использовать его может быть множество, включая:

  • Обход ограничений доступа к определенным веб-ресурсам установленным администратором локальной сети.
  • Обход региональных ограничений доступа у определённых веб-ресурсов.
  • Анонимный доступ к веб-ресурсам путём сокрытия реального IP-адреса.

Среди всего многообразия прокси-серверов остановим свой выбор на открытом бесплатном кроссплатформенном сервере от Владимира ‘3APA3A’ Дубровина — 3proxy опубликованный под BSD-подобной лицензией. Текст лицензии.

Среди альтернатив можно выделить Squid, но он:

  • Сложен в настройках.
  • Потребляет больше ресурсов.
  • Не скомпилирован с поддержкой SSL по умолчанию и сложен для компиляции.

Также внимание заслуживает tinyproxy.

Преимущества и недостатки:

img

Он включает в себя:

  • HTTP прокси с поддержкой HTTPS и FTP.
  • SOCKSv4/SOCKSv4.5/SOCKSv5 прокси.
  • POP3 прокси.
  • SMTP прокси.
  • AIM/ICQ прокси.
  • MSN messenger / Live messenger прокси.
  • FTP прокси.
  • Кэширующий DNS прокси.
  • TCP и UDP портмапперы.

Так же доступны дополнительные возможности, такие как:

  • Управление доступом.
  • Ограничение ширины потребляемого канала.
  • Ограничение трафика на день, неделю и месяц.
  • Перенаправление соединений.
  • Построение цепочек соединений.
  • Ротация лог-файлов.
  • Ведение журналов через ODBC и syslog.
  • Поддержка IPv6.
  • и ряд других.

К недостаткам можно отнести:

  • Отсутствие поддержки кеширования веб-страниц.
  • Отсутствие в официальных репозиториях некоторых linux-дистрибутивов (включая Debian и Ubuntu), но в репозиториях Gentoo, RedHat, Alt Linux присутствует.
  • Операционная система Debian GNU/Linux (версии с 7 по 9) или Ubuntu (версии с 14.04 по 17.04) любой разрядности (32/64 бита).
  • Пользователь с привилегиями root (как вариант доступ через sudo).

Шаг 1. Подготавливаем инструментарий

В связи с тем что он отсутствует в официальных репозиториях Debian и Ubuntu, мы будем устанавливать его из исходников.

Но перед этим установим всё необходимое для дальнейшей работы.

Шаг 2. Скачиваем и распаковываем исходники

Последняя версия 0.8.10 (на момент написания руководства). Узнать последнюю версию можно на официальном сайте, при необходимости просто замените цифры на необходимые в следующих парах команд:

Шаг 3. Компилируем

Шаг 4. Устанавливаем

Копируем получившийся бинарный файл:

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

Узнаём UID и GID пользователя командой:

В ответ, например, получим:

Создаём файл настроек:

Вставляем в него следующий код:

(вставка из буфера обмена возможна по клику правой кнопки мыши или Ctrl+U или F10)

(Для сохранения и закрытия нажмите CTRL+X затем Y)

Комментарии начинаются со знака # и допустимы только с начала строки. Рекомендуется вообще удалить комментарии для более стабильной работы 3proxy. Рекомендуется также использовать другой порт вместо стандартного 3128 для прокси серверов, лучше всего из диапазона 49152—65535.

Другие примеры настроек можно посмотреть командами:

или же в одном из следующих руководств на которые ссылается официальный сайт:

Вот пример конфигурации без ведения логов:

Создаём файл с пользователями и паролями:

Вставляем в него следующий код:

(вставка из буфера обмена возможна по клику правой кнопки мыши или Ctrl+U или F10)

(Для сохранения и закрытия нажмите CTRL+X затем Y)

Где логин: username и пароль: strongpassword следует изменить на свои.

Каждый новый пользователь указывается с новой строки.

Выставляем права доступа к файлам прокси-сервера:

Создаём папку для ведения логов и назначаем права на неё:

В случае наличия IPv6 на сервере, рекомендуем запускать прокси со следующей строкой в /etc/3proxy/3proxy.cfg:

для сервера с IPv4:95.213.255.16 и IPv6:2002:5fd5:ff010::1 у вас же они будут иные. В таком случае будет поддержка IPv6 на выходе с прокси, например https://yandex.ru/internet отобразит оба адреса.

Шаг 5. Добавляем в автозагрузку и запускаем прокси-сервер

Вставляем в него следующий код:

(вставка из буфера обмена возможна по клику правой кнопки мыши или Ctrl+U или F10)

(Для сохранения и закрытия нажмите CTRL+X затем Y)

Ещё один вариант скрипта инициализации:

Делаем файл исполняемым:

Добавляем в автозагрузку:

В консоли мы увидим сообщение:

Проблемы с запуском чаще всего связаны с файлом /etc/3proxy/3proxy.cfg в т.ч. к последней строке файла. При возникновении ошибки обычно указан порядковый номер проблемной строки.

Также мы увидим его в списке запущенных процессов в ответе на команду:

Шаг 6. Открываем порт

Открываем порт (3128/tcp) на сервере. Либо указываем свой, который указан в файле /etc/3proxy/3proxy.cfg

При использовании iptables:

Шаг 7. Настраиваем окружение

Множество программ (включая веб-браузеры) поддерживают работу через прокси по умолчанию. Интерфейс настроек у каждой свой.

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

Либо использование программы проксификатора. Например такой как:

Настройки для браузера Google Chrome: Для подключения к сети Google Chrome использует системные настройки прокси-сервера. В случае Microsoft Windows это настройки можно также найти в Internet Explorer / MS Edge.

Форма с предложением ввода логина и пароля (username:strongpassword) появится, после первой попытки открытия любой веб-страницы.

Затем любые сервисы по проверки IP-адреса, например, такие как:

сообщат IP-адрес вашего Vscale-сервера вместо текущего.

Шаг 8. Удаляем временные файлы

Шаг 9. (ОПЦИОНАЛЬНО) Удаляем 3Proxy

Так как установка осуществлялась из исходников, то пакетный менеджер операционной системы бесполезен. Для удаления выполните следующие команды:

Мы рассмотрели установку и базовую настройку 3proxy. Безусловно у данного прокси-сервера есть еще множество настроек, которые мы не затронули, в том числе настройку SOCKS-прокси, построение цепочек соединений, управление доступом, ограничение ширины потребляемого канала, ограничение трафика по времени, но это тема уже для отдельного руководства.

Таким образом после выполненных действий вы получаете свой собственный прокси-сервер, который более безопасен для вас, так как ваш трафик заведомо не будет перехвачен и проанализирован третьими лицами, от чего вы не застрахованы при использовании сторонних решений. Хотя с этой точки зрения более эффективна настройка VPN-туннеля с шифрованием.

3proxy может выступать в роли высоко-анонимного прокси-сервера. Признаком использования подобного может быть лишь принадлежность выходного IP-адреса сервера к пулу адресов закреплённых за хостинговой компанией при просмотре WHOIS-данных и PTR-записи. В целом он хорош тем, что является маленьким и простым, но в то же время функциональным.

Создание и настройка SOCKS5 прокси сервера в Ubuntu

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

На всех серверах стоит Ubuntu Server 14.04, может где-то и 12.04, но описание должно подойти и для всех остальных систем основанных на Debian.

Есть 2 известных мне способа организации работы SOKS5 сервера:

  1. SOCKS через SSH. Этот способ удобен своей простотой но неудобен при частом использовании, или использовании с разных машин;
  2. Установка SOCKS сервера. При использовании этого способа уйдет чуть больше времени на первоначальную настройку, но потом пользоваться прокси будет быстрее и удобнее.

SOCKS через SSH

Для того чтоб поднять SOCKS5 через SSH нужен только доступ к SSH сервера.

Вводим в терминале или SSH клиенте (PuTTY для Windows)

Если запросит пароль, то нужно ввести пароль от SSH сервера.

-D – указывает порт по которому будет доступен SOKS5 сервер

Все, после этого вы можете подключиться к SOKS5 серверу по адресу localhost:1080 или 127.0.0.1:1080

Такой способ удобен тем что не нужно ничего дополнительно устанавливать и настраивать. Но перед каждым подключением или после разрыва ssh соединения, например из-за проблем с интернетом придется заново вводить эту команду.

Установка SOCKS сервера

Я знаю 2 SOCKS сервера 3proxy и Dante. У себя использовал Dante Server его настройку и опишу.

Установить Dante сервер можно с помощью apt-get, по умолчанию устанавливается старая версия (v.1.1). Ниже будут настройки для старой и новой (v.1.4) версий.

Установка новой версии Dante Server

После этих действий Dante Server будет установлен, но ругнется и не сможет запуститься, видимо дефолтные настройки имеют ошибку.

Далее нужно отредактировать файл настроек

Приведя его к такому виду

  • указываем лог файл который будет находиться по адресу /var/log/danted.log;
  • eth0 — сетевой интерфейс на котором висит внешний IP сервера, узнать его можно воспользовавшись командой ifconfig, либо можно просто указать свой внешний IP вместо названия интерфейса;
  • порт для SOKS5 прокси – 1080;
  • socksmethod — метод авторизации. username — авторизация с указанием логина и пароля системных пользователей. Можно указать none если вы хотите не использовать авторизацию, но не советую оставлять открытым для порт для прокси т.к. сканеры прокси не дремлют, и у меня через открытый порт начали спам рассылать, после чего мне хостер отписал что у моего IP идет спам и надо что-то решать, можно использовать не дефолтный порт а какой-то другой, это позволит отсрочить нахождения вашего прокси сканерами;
  • user.privileged — имя пользователя с расширенными правами;
  • user.unprivileged — имя пользователя с обычными правами (как я понял dante работает от имени этих пользователей в зависимости от того какими правами нужно обладать для выполнения операции).

После сохранения настроек нужно перезагрузить Dante

Все, теперь к SOKS5 прокси можно подключиться с любого устройства, указав IP сервера, порт – 1080, и данные для авторизации (имя и пароль пользователей которые зарегистрированы на сервере).

Я для доступа к прокси создал отдельного пользователя и указываю его данные. Создавал командой

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

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