Настройка прокси-сервера в Убунту

Введение

Обратный прокси-сервер – это тип прокси-сервера, который ретранслирует HTTP/HTPPS-запросы на один или несколько бэкенд-серверов. Обратные прокси-серверы полезны, так как многие современные веб-приложения для обработки HTTP-запросов используют бэкенд-серверы приложений (к которым пользователи не должны иметь доступ напрямую), а также часто поддерживают только базовые функции HTTP.

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

Из этой статьи вы узнаете о том, как настроить Apache для использования в качестве обратного прокси-сервера при помощи mod_proxy – модуля Apache для перенаправления соединений на один или несколько бэкенд-серверов в этой же сети. В этом руководстве используется простой бэкенд, написанный с использованием фреймворка Flask, но вы можете использовать любой бэкенд на ваше усмотрение.

Настройка анонимности

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

1. Меняем порты, которые используются по умолчанию — 3128, 1080. Данные порты известны, как порты для прокси. Открываем конфигурационный файл 3proxy:

vi /etc/3proxy/3proxy.cfg

Меняем порты:

socks -p1088
proxy -n -p3111

* в данном примере мы укажем серверу работать на портах 3111 и 1088.

После перезапускаем сервис:

systemctl restart 3proxy

2. Необходимо, чтобы время на сервере совпадало с временем на компьютере.

На стороне сервера необходимо задать часовой пояс, например, если наш прокси находится в Германии, вводим:

timedatectl set-timezone Europe/Berlin

На стороне клиента либо меняем часовой пояс в системе, либо устанавливаем плагин для браузера, например, для Mozilla Firefox и меняем часовой пояс уже в нем.

3. Отключение icmp. По времени ответа на ping можно определить отдаленноесть клиента от прокси. Чтобы проверку нельзя было выполнить, отключаем на сервере icmp. Для этого создаем файл:

vi /etc/sysctl.d/icmp.conf

net.ipv4.icmp_echo_ignore_all=1

И применяем настройки:

sysctl -p /etc/sysctl.d/icmp.conf

4. Проверяем настройки.

Открываем браузер, который работает через прокси и переходим на страницу 2ip.ru/privacy — кликаем по Проверить:

Будет выполнена проверка анонимности нашего сервера.

Упрощенное использование прокси

Если у Вас один и тот же прокси-сервер для http, https и ftp трафика, Вы можете использовать следующие команды для включения и отключения прокси:

Если Вам приходится очень часто пользоваться прокси, Вы можете создать следующие bash функции (добавьте в Ваш ~/.bashrc) :

Примените настройки, перезагрузив ~/.bashrc.

. ~/.bashrc

Теперь, для включения и отключения прокси можно использовать команды setproxy и unsetproxy.

Как правила глобальной настройки прокси достаточно для того что бы все остальные приложения работали через прокси без необходимости настраивать прокси внутри приложения. Однако некоторые приложения не умеют работать с глобальными настройками или им нужны особенные настройки.

Настройка вашего браузера для использования прокси

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

Firefox

Приведенные ниже шаги одинаковы для Windows, macOS и Linux.

  1. В правом верхнем углу щелкните значок гамбургера, чтобы открыть меню Firefox:

  2. Щелкните ссылку.

  3. Прокрутите вниз до раздела и нажмите кнопку.

  4. Откроется новое окно.

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

     

На этом этапе ваш Firefox настроен, и вы можете просматривать Интернет через прокси-сервер Squid. Чтобы проверить это, откройте , введите «what is my ip», и вы должны увидеть IP-адрес своего сервера Squid.

Чтобы вернуться к настройкам по умолчанию, перейдите к , выберите переключатель и сохраните настройки.

Есть несколько плагинов, которые также могут помочь вам настроить параметры прокси-сервера Firefox, например, FoxyProxy .
 

Chrome

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

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

Linux:

macOS:

Окна:

Если профиль не существует, он будет создан автоматически. Таким образом, вы можете запускать несколько экземпляров Chrome одновременно.

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

Аутентификация Squid

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

В этом уроке мы настроим Squid на использование базовой аутентификации. Это простой метод аутентификации, встроенный в протокол HTTP.

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

Давайте создадим пользователя с именем «josh» с паролем « »:

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

Откройте основную конфигурацию и добавьте следующее:

Первые три выделенные строки создают новый ACL с именем а последняя выделенная строка разрешает доступ аутентифицированным пользователям.

Перезапустите сервис Squid:

Установка MTU и TTL

MTU (Maximum Transfer Unit) — параметр определяет величину максимальной единицы передачи.
Это максимальное количество октетов (байт), которое интерфейс способен поддерживать
за одну операцию приема/передачи. Для Ethernet это значение по умолчанию составляет
1500 (максимальный размер пакета Ethernet).

TTL (Time To Live) — время жизни ip-пакета в секундах. Нужен чтобы избежать перегрузки сети пакетами.
Обычно каждый роутер, через которого прошел пакет, уменьшает TTL на еденицу.
Если TTL=0, пакет из системы удаляется. Изначально TTL=128 (для Windows) и TTL=64 (для Ubuntu).
Для DNS-записей TTL определяет время актуальности данных при кешировании запросов.

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

auto eth0
iface eth0 inet static
address 192.168.1.5
netmask 255.255.255.0
mtu 600

Для изменения величины TTL наберите:

$ sudo su
затем
# echo "128" > /proc/sys/net/ipv4/ip_default_ttl

Значение TTL меняется только с правами администратора, для выхода из аккаунта администратора введите

Configure Squid Client

All this configuration has been done to set up your Squid proxy server. Now, switch to your client machine and open your web browser.

If you’re using Firefox, you can find the proxy settings under:

Menu > Options > Network Settings > Settings

Tick the radio button for Manual proxy configuration.

If you’ve entered a hostname in Step 4, you should be able to enter that name plus the port you have designated. Otherwise, use the IP address for the system hosting your Squid proxy.

To test it, you can visit https://whatismyipaddress.com/ip-lookup – if your proxy is working, your IP address should display as the proxy server’s IP address.

Add Squid ACL

Note: After each of these steps, you should save and exit, then restart the Squid service to apply the new configuration.

Create an access control list by editing the squid.conf file again, as in Step 4.

Add a new line as follows:

This will create a rule that only allows the system at this IP address to connect. It is recommended that you comment the line to identify the rule:

Anything after the # sign is ignored by Squid.

You can specify a range of IP addresses as follows:

Open Ports

To open a specific port, add the following:

Configure Proxy Authentication

This forces users to authenticate to use the proxy.

Start by installing apache2-utils:

Create a passwd file, and change the ownership to the Squid user proxy:

Add a new user and password

1. To add a new user to Squid, use the command:

The system will prompt you to enter and confirm a password for newuser.

2. Edit the /etc/squid/squid.conf file, and add the following command lines:

Block Websites on Squid Proxy

1. Create and edit a new text file /etc/squid/blocked.acl by entering:

2. In this file, add the websites to be blocked, starting with a dot:

Note: The dot specifies to block all subsites of the main site.

3. Open the /etc/squid/squid.conf file again:

4. Add the following lines just above your ACL list:

Шаг 9 — Настройка сайтов HTTPS с Let’s Encrypt (опционально)

На этом шаге мы настроим сертификаты TLS/SSL для обоих доменов, размещенных в Apache. Мы получим сертификаты посредством Let’s Encrypt. Nginx поддерживает конечные узлы SSL, и поэтому мы можем настроить SSL без изменения файлов конфигурации Apache. Модуль обеспечивает установку в Apache переменных среды, необходимых для бесшовной работы приложений за обратным прокси-сервером SSL.

Вначале мы разделим блоки обоих доменов так, что у каждого из них будет собственный сертификат SSL. Откройте в своем редакторе файл :

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

/etc/nginx/sites-available/apache

Мы используем Certbot для генерирования сертификатов TLS/SSL. Плагин Nginx изменит конфигурацию Nginx и перезагрузит ее, когда это потребуется.

Прежде всего, добавьте официальное хранилище Certbot:

Нажмите в диалоге, чтобы подтвердить добавление нового хранилища. Обновите список пакетов, чтобы получить данные пакета нового хранилища:

Установите пакет Certbot’s Nginx с :

После установки используйте команду для генерирования сертификатов для и :

Эта команда указывает Certbot, что нужно использовать плагин , а параметр задает имена, для которых должен действовать сертификат.

Если это первый запуск , вам будет предложено указать адрес эл. почты и принять условия обслуживания. После этого свяжется с сервером Let’s Encrypt и отправит запрос с целью подтвердить, что вы контролируете домен, для которого запрашиваете сертификат.

Далее Certbot запросит желаемый вариант настройки HTTPS:

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

Теперь выполните команду для второго домена:

Откройте один из доменов Apache в браузере с помощью префикса ; откройте , и вы увидите следующее:

Посмотрите раздел PHP Variables. Для переменной SERVER_PORT задано значение 443 и протокол HTTPS включен, как если бы осуществлялся прямой доступ к Apache через HTTPS. При такой настройке переменных не нужно специально настраивать приложения PHP для работы за обратным прокси-сервером.

Теперь отключим прямой доступ к Apache.

Пример конфигурации

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

network:
 version: 2
 # if specified, can only realistically have that value, as networkd cannot
 # render wifi/3G.
 renderer: NetworkManager
 ethernets:
  # opaque ID for physical interfaces, only referred to by other stanzas
  wlp3s0:
    match:
     macaddress: 00:11:22:33:44:55
    wakeonlan: true
    dhcp4: true
    addresses:
     - 192.168.14.2/24
     - 192.168.14.3/24
     - "2001:1::1/64"
    gateway4: 192.168.14.1
    gateway6: "2001:1::2"
    nameservers:
     search: 
     addresses: 
    routes:
     - to: 0.0.0.0/0
      via: 11.0.0.1
      table: 70
      on-link: true
      metric: 3
    routing-policy:
     - to: 10.0.0.0/8
      from: 192.168.14.2/24
      table: 70
      priority: 100
     - to: 20.0.0.0/8
      from: 192.168.14.3/24
      table: 70
      priority: 50
    # only networkd can render on-link routes and routing policies
    renderer: networkd
   lom:
     match:
      driver: ixgbe
     # you are responsible for setting tight enough match rules
     # that only match one device if you use set-name
     set-name: lom1
     dhcp6: true
   switchports:
     # all cards on second PCI bus unconfigured by
     # themselves, will be added to br0 below
     # note: globbing is not supported by NetworkManager
     match:
      name: enp2*
     mtu: 1280
 wifis:
   all-wlans:
     # useful on a system where you know there is
     # only ever going to be one device
     match: {}
     access-points:
      "Joe's home":
       # mode defaults to "infrastructure" (client)
       password: "s3kr1t"
   # this creates an AP on wlp1s0 using hostapd
   # no match rules, thus the ID is the interface name
   wlp1s0:
    access-points:
     "guest":
      mode: ap
      # no WPA config implies default of open
 bridges:
  # the key name is the name for virtual (created) interfaces
  # no match: and set-name: allowed
  br0:
   # IDs of the components; switchports expands into multiple interfaces
   interfaces: 
   dhcp4: true

Исходящий сетевой интерфейс

На нашем сервере может быть несколько внешний IP-адресов. По умолчанию, все исходящие запросы будут работать через интерфейс со шлюзом по умолчанию. Чтобы иметь возможность работы со squid через разные интерфейсы в настройку вносим:

vi /etc/squid/squid.conf

acl 217_66_157_33 localip 217.66.157.33
tcp_outgoing_address 217.66.157.33 217_66_157_33
acl 217_66_157_34 localip 217.66.157.34
tcp_outgoing_address 217.66.157.34 217_66_157_34

* в данном примере, при подключении к прокси через IP 217.66.157.33, исходящие пакеты будут от IP 217.66.157.33; аналогично для IP 217.66.157.34.

Перечитываем конфигурацию squid:

squid -k reconfigure

Шаг 8 — Установка и настройка mod_rpaf

На этом шаге вы установите модуль Apache под названием , который перезаписывает значения REMOTE_ADDR, HTTPS и HTTP_PORT на базе значений, предоставленных обратным прокси-сервером. Без этого модуля для некоторых приложений PHP потребуется изменение кода для бесшовной работы из-за прокси-сервера. Этот модуль представлен в хранилище Ubuntu как , однако он устарел и не поддерживает некоторые директивы конфигурации. Поэтому мы установим его из источника.

Установите пакеты, необходимые для построения модуля:

Загрузите последний стабильный выпуск из GitHub:

Выполните извлечение загруженного файла:

Перейдите в новый каталог, содержащий файлы:

Скомпилируйте и установите модуль:

Затем создайте в каталоге файл, который будет загружать модуль ,

Добавьте в файл следующий код для загрузки модуля:

/etc/apache2/mods-available/rpaf.load

Сохраните файл и выйдите из редактора.

Создайте в этом каталоге другой файл с именем , который будет содержать директивы конфигурации для :

Добавьте следующий блок кода для настройки и обязательно укажите IP-адрес своего сервера:

/etc/apache2/mods-available/rpaf.conf

Здесь приведено краткое описание каждой директивы. Дополнительную информацию можно найти в файле по модулю .

  • RPAF_Header — заголовок, используемый для реального IP-адреса клиента.
  • RPAF_ProxyIPs — IP-адрес прокси-сервера для корректировки запросов HTTP.
  • RPAF_SetHostName — обновляет имя vhost так, чтобы работали и .
  • RPAF_SetHTTPS — задает переменную среды на основе значения, содержащегося в .
  • RPAF_SetPort — задает переменную среды . Полезна для использования, когда сервер Apache находится за прокси-сервером SSL.

Сохраните и активируйте модуль:

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

Если ошибок нет, перезагрузите Apache:

Откройте в браузере страницы по адресам и и проверьте раздел PHP Variables. Переменная REMOTE_ADDR также будет использоваться для публичного IP-адрса вашего локального компьютера.

Теперь настроим шифрование TLS/SSL для каждого сайта.

Настройка аутентификации

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

Добавляем опции users и добавляем пользователей:

users 3APA3A:CL:3apa3a “test:CR:$1$qwer$CHFTUFGqkjue9HyhcMHEe1” users dmosk1:CL:password users “dmosk2:CR:$1$UsbY5l$ufEATFfFVL3xZieuMtmqC0”

* в данном примере мы добавили 3-х пользователей: 3APA3A с паролем 3apa3a, dmosk1 с открытым паролем password и dmosk2 с паролем dmosk2 в виде md5 и солью UsbY5l (Для получения хэша пароля можно воспользоваться командой openssl passwd -1 -salt UsbY5l, где в качестве соли можно использовать любую комбинацию)

* обратите внимание, при использовании знака $, строчка пишется в кавычках

* возможные типы паролей:

  • CL — текстовый пароль
  • CR — зашифрованный пароль (md5)
  • NT — пароль в формате NT.

Чтобы включить запрос логина, необходимо поменять значение для опции auth на strong:

* возможные варианты для auth:

  • none — без авторизации.
  • iponly — авторизация по IP-адресу клиента.
  • nbname — по Netbios имени.
  • strong — по логину и паролю.

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

auth nbname strong

После внесения изменений, перезапускаем службу:

systemctl restart 3proxy

Настройка аутентификации

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

vi /etc/3proxy/3proxy.cfg

Добавляем опции users и добавляем пользователей:

users 3APA3A:CL:3apa3a “test:CR:$1$qwer$CHFTUFGqkjue9HyhcMHEe1”
users dmosk1:CL:password
users “dmosk2:CR:$1$UsbY5l$ufEATFfFVL3xZieuMtmqC0”

* в данном примере мы добавили 3-х пользователей: 3APA3A с паролем 3apa3a, dmosk1 с открытым паролем password и dmosk2 с паролем dmosk2 в виде md5 и солью UsbY5l (Для получения хэша пароля можно воспользоваться командой openssl passwd -1 -salt UsbY5l, где в качестве соли можно использовать любую комбинацию).
* обратите внимание, при использовании знака $, строчка пишется в кавычках. * возможные типы паролей:

* возможные типы паролей:

  • CL — текстовый пароль
  • CR — зашифрованный пароль (md5)
  • NT — пароль в формате NT.

Чтобы включить запрос логина, необходимо поменять значение для опции auth на strong:


auth strong

* возможные варианты для auth:

  • none — без авторизации.
  • iponly — авторизация по IP-адресу клиента.
  • nbname — по Netbios имени.
  • strong — по логину и паролю.

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

auth nbname strong

После внесения изменений, перезапускаем службу:

systemctl restart 3proxy

Установка и запуск 3proxy

3proxy отсутствует в репозиториях Ubuntu, поэтому для установки сначала необходимо скачать его исходник.

Для начала устанавливаем пакет программ для компиляции пакетов:

apt-get install build-essential

Переходим на официальную страницу загрузки 3proxy и копируем ссылку на версию пакета для Linux:

. используя ссылку, скачиваем пакет:

* в моем случае скачена версия 0.8.12.

Распакуем скачанный архив:

tar xzf 0.8.12.tar.gz

Переходим в распакованный каталог:

Запускаем компиляцию 3proxy:

make -f Makefile.Linux

Создаем системную учетную запись:

adduser –system –disabled-login –no-create-home –group proxy3

Создаем каталоги и копируем файл 3proxy в /usr/bin:

mkdir -p /var/log/3proxy

cp src/3proxy /usr/bin/

Задаем права на созданные каталоги:

chown proxy3:proxy3 -R /etc/3proxy

chown proxy3:proxy3 /usr/bin/3proxy

chown proxy3:proxy3 /var/log/3proxy

Смотрим uid и gid созданной учетной записи:

Получим, примерно, такой результат:

Создаем конфигурационный файл:

setgid 113 setuid 109

nserver 77.88.8.8 nserver 8.8.8.8

nscache 65536 timeouts 1 5 30 60 180 1800 15 60

external 111.111.111.111 internal 111.111.111.111

log /var/log/3proxy/3proxy.log D logformat “- +_L%t.%. %N.%p %E %U %C:%c %R:%r %O %I %h %T”

allow * * * 80-88,8080-8088 HTTP allow * * * 443,8443 HTTPS

* необходимо обратить внимание на настройки setgid и setuid — это должны быть значения для созданной нами учетной записи; external и internal — внешний и внутренний интерфейсы (если наш прокси работает на одном адресе, то IP-адреса должны совпадать)

Настройка вашего браузера для использования прокси

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

Fire Fox

Приведенные ниже шаги одинаковы для Windows, macOS и Linux.

  1. В верхнем правом углу щелкните значок гамбургера чтобы открыть меню Firefox:

  2. Щелкните ссылку .

  3. Прокрутите вниз до раздела « » и нажмите кнопку « .

  4. Откроется новое окно.

    • Установите переключатель « ».
    • Введите IP-адрес вашего сервера Squid в поле и в поле .
    • Установите флажок .
    • Нажмите кнопку , чтобы сохранить настройки.

На этом этапе ваш Firefox настроен, и вы можете просматривать Интернет через прокси-сервер Squid. Чтобы проверить это, откройте , введите «what is my ip», и вы должны увидеть IP-адрес своего сервера Squid.

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

Гугл Хром

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

Linux:

macOS:

Windows:

Если профиль не существует, он будет создан автоматически. Таким образом, вы можете запускать несколько экземпляров Chrome одновременно.

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

Настроить SSH-туннель

Мы создадим SSH-туннель, который будет безопасно перенаправлять трафик с вашего локального компьютера через порт на SSH-сервер через порт . Вы можете использовать любой порт с номером больше , только root может открывать порты на привилегированных портах.

Linux и macOS

Если вы используете Linux, macOS или любую другую операционную систему на основе Unix на своем локальном компьютере, вы можете легко запустить туннель SSH с помощью следующей команды :

Используются следующие параметры:

  • — Указывает SSH не выполнять удаленную команду.
  • — открывает туннель SOCKS на указанном номере порта.
  • — ваш удаленный пользователь SSH и IP-адрес сервера.
  • Чтобы запустить команду в фоновом режиме, используйте параметр .
  • Если ваш SSH-сервер прослушивает порт, отличный от 22 (по умолчанию), используйте параметр .

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

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

Windows

  1. Запустите Putty и введите IP-адрес вашего сервера в поле .

  2. В меню « разверните и выберите « . Введите порт в поле и установите переключатель .

  3. Нажмите кнопку « , как показано на изображении ниже.

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

  5. Выберите сохраненный сеанс и войдите на удаленный сервер, нажав кнопку « .

    Появится новое окно с запросом вашего имени пользователя и пароля. После того, как вы введете свое имя пользователя и пароль, вы войдете в систему на своем сервере, и будет запущен туннель SSH.

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

Прозрачный прокси

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

Открываем конфигурационный файл:

vi /etc/squid/squid.conf

Находим строчку:

#  TAG: http_port

http_port 3128

И приводим ее к следующему виду:

#  TAG: http_port

http_port 3129
http_port 127.0.0.1:3128 intercept

* порт 3128 будет для прозрачного проксирования. Порт 3129 должен быть указан в качестве прокси.

И перезапускаем конфигурацию squid:

squid -k reconfigure

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

Для примера, если нашим шлюзом будет наш сервер со squid, то нужно выполнить команды:

iptables -t nat -A OUTPUT -o lo -p tcp -m tcp –dport 80 -j REDIRECT –to-ports 3128

iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp –dport 80 -j REDIRECT –to-ports 3128

iptables -t nat -A OUTPUT -o lo -p tcp -m tcp –dport 443 -j REDIRECT –to-ports 3128

iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp –dport 443 -j REDIRECT –to-ports 3128

Установка и запуск 3proxy

3proxy отсутствует в репозиториях Ubuntu, поэтому для установки сначала необходимо скачать его исходник.

Для начала устанавливаем пакет программ для компиляции пакетов:

apt-get install build-essential

Переходим на официальную страницу загрузки 3proxy и копируем ссылку на версию пакета для Linux:

… используя ссылку, скачиваем пакет:

wget https://github.com/z3APA3A/3proxy/archive/0.9.3.tar.gz

* в моем случае будет скачена версия 0.9.3.

Распакуем скачанный архив:

tar xzf 0.9.3.tar.gz

Переходим в распакованный каталог:

cd 3proxy-*

Запускаем компиляцию 3proxy:

make -f Makefile.Linux

Создаем системную учетную запись:

adduser –system –disabled-login –no-create-home –group proxy3

Создаем каталоги и копируем файл 3proxy в /usr/bin:

mkdir -p /var/log/3proxy

mkdir /etc/3proxy

cp bin/3proxy /usr/bin/

Задаем права на созданные каталоги:

chown proxy3:proxy3 -R /etc/3proxy

chown proxy3:proxy3 /usr/bin/3proxy

chown proxy3:proxy3 /var/log/3proxy

Смотрим uid и gid созданной учетной записи:

id proxy3

Получим, примерно, такой результат:

uid=109(proxy3) gid=113(proxy3) groups=113(proxy3)

* где 109 — идентификатор пользователя; 113 — идентификатор для группы.

Создаем конфигурационный файл:

vi /etc/3proxy/3proxy.cfg

setuid 109
setgid 113
nserver 77.88.8.8
nserver 8.8.8.8
nscache 65536
timeouts 1 5 30 60 180 1800 15 60
external 111.111.111.111
internal 111.111.111.111
daemon
log /var/log/3proxy/3proxy.log D
logformat “- +_L%t.%. %N.%p %E %U %C:%c %R:%r %O %I %h %T”
rotate 30
auth none
allow * * * 80-88,8080-8088 HTTP
allow * * * 443,8443 HTTPS
proxy -n

* необходимо обратить внимание на настройки setuid и setgid — это должны быть значения для созданной нами учетной записи; external и internal — внешний и внутренний интерфейсы (если наш прокси работает на одном адресе, то IP-адреса должны совпадать). 

Запускаем 3proxy:

/usr/bin/3proxy /etc/3proxy/3proxy.cfg

Шаг 1: включение необходимых модулей Apache

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

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

  • mod_proxy – главный модуль Apache для перенаправления соединений; благодаря ему Apache может выступать в качестве шлюза для основных серверов приложений;
  • mod_proxy_http – позволит использовать прокси для HTTP;
  • mod_proxy_balancer и mod_lbmethod_byrequests – добавляют функции балансировки нагрузки для бэкенд-серверов.

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

$ sudo a2enmod proxy
$ sudo a2enmod proxy_http
$ sudo a2enmod proxy_balancer
$ sudo a2enmod lbmethod_byrequests

Затем перезапустите Apache для того, чтобы изменения вступили в силу.

$ sudo systemctl restart apache2

Теперь Apache будет выступать в качестве обратного прокси-сервера для HTTP-запросов. Следующий шаг не является обязательным, но он поможет протестировать работу Apache и убедиться, что все работает так, как нужно. Для этого необходимо создать два базовых бэкенд-сервера, однако если у вас они уже есть в наличии, то вы можете сразу перейти к шагу 3.

Squid аутентификация

Если ограничение доступа на основе IP не работает для вашего варианта использования, вы можете настроить squid на использование серверной части для аутентификации пользователей. Squid поддерживает базовую аутентификацию Samba , LDAP и HTTP.

В этом руководстве мы будем использовать базовую аутентификацию. Это простой метод аутентификации, встроенный в протокол HTTP.

Чтобы сгенерировать зашифрованный пароль, используйте инструмент . Следующая команда добавляет пару в файл :

Например, чтобы создать пользователя «josh» с паролем « », вы должны запустить:

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

Откройте основную конфигурацию и добавьте следующее:

/etc/squid/squid.conf

Первые три выделенные строки создают новый список контроля доступа с именем « , а последняя выделенная строка разрешает доступ аутентифицированным пользователям.

Перезапустите сервис Squid:

Шаг 10 — Блокировка прямого доступа к Apache (опционально)

Поскольку Apache прослушивает порт на публичном IP-адресе, он доступен кому угодно. Его можно заблокировать с помощью следующей команды IPtables в наборе правил брандмауэра.

Обязательно используйте IP-адрес своего сервера вместо выделенного красным адреса в примере. Когда ваш брандмауэр заблокирует порт , убедитесь в недоступности Apache через этот порт. Для этого откройте браузер и попробуйте получить доступ к любому из доменных имен Apache через порт . Например: http://example.com:8080

Браузер должен вывести сообщение об ошибке Unable to connect (Не удается подключиться) или Webpage is not available (Страница недоступна). Если используется опция IPtables , сторонний наблюдатель не увидит разницы между портом и портом, где отсутствует какое-либо обслуживание.

Примечание. По умолчанию правила IPtables теряют силу после перезагрузки системы. Существует несколько способов сохранения правил IPtables, но проще всего использовать параметр в хранилище Ubuntu. Прочитайте эту статью, чтобы узнать больше о настройке IPTables.

Теперь настроим Nginx для обслуживания статических файлов для сайтов Apache.

Поделитесь в социальных сетях:FacebookXВКонтакте
Напишите комментарий