Skip to content

Настройка прокси сервера на CentOS

ЦЕЛЬ

Веб прокси сервер.

Требования:

  • Зашифровать подключение через HTTPS.
  • Аутентификация по пользователю/паролю.
  • Расщепление горизонта (split horizon), т.е. проксирование только определенных веб сайтов.

3-browser-proxy-configuration.png

ИСПОЛЬЗУЕМЫЕ РЕШЕНИЯ

  • Прокси сервер
    • Squid
    • nginx
  • Шифрование HTTPS
    • Let's encrypt
  • Аутентификация
    • PAM
  • Расщепление горизонта
    • PAC
    • plain text
  • Браузер
    • Firefox (поддерживается Chrome)
  • Веб сайт
    • 2ip.ru

ИМПЛЕМЕНТАЦИЯ

  • Установка прокси сервера

    • Squid
    • nginx
  • Настройка прокси сервера HTTP

  • Без аутентификации

    • Squid
    • nginx

    • Проверка

  • PAM basic аутентификация

    • Squid
    • nginx

    • Проверка

  • Настройка расщепления горизонта

    • Plain text
    • PAC
    • nginx
    • Проверка
  • Получение сертификата

    • nginx
    • Let's encrypt
  • Настройка прокси сервера HTTPS с PAM basic аутентификацией

    • Squid
    • PAC
    • Проверка
  • Настройка обновление сертификата автоматически

АДРЕСА

  • proxy.example.org- DNS имя прокси сервера
  • 1.1.1.1 - IP адрес прокси сервер внешний (перед NAT)
  • 10.1.1.4 - IP адрес прокси сервер внутренний (за NAT)
  • 195.201.201.32 - IP адрес 2ip.ru (проверка внешнего IP)
  • 2.2.2.2 - IP адрес клиента браузера внешний

УСТАНОВКА ПРОКСИ СЕРВЕРА

В качестве прокси сервера проверим Squid и nginx.

SQUID

Примечание: вся действия будут производиться под пользователем root. Это не безопасно. Для защиты рекомендуется использовать отдельного пользователя и команду sudo.

Команда установки

yum install squid

NGINX

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

Команда установки

yum install nginx

Узнаем версию nginx

nginx -V

смотрим вывод nginx version

Узнаем опции, с которыми был скомпилирован nginx

nginx -V

смотрим вывод configure arguments

1-2-nginx-v.png

Устанавливаем зависимости для компиляции PCRE, ZLIB, OPENSSL

yum groupinstall 'Development Tools'

yum install zlib zlib-devel pcre pcre-devel openssl openssl-devel pam-devel

Скачиваем исходный код nginx Примечание: версию используем ту же, что в выводе команды выше

mkdir -p /root/sources/nginx
cd /root/sources/nginx
wget http://nginx.org/download/nginx-1.14.0.tar.gz
tar zxf nginx-1.14.0.tar.gz

Скачиваем модуль PAM

Примечание: используем PAM модуль из репозитория проекта

mkdir -p /root/sources/http_auth_pam_module
cd /root/sources/http_auth_pam_module
wget https://raw.githubusercontent.com/sto/ngx_http_auth_pam_module/master/ngx_http_auth_pam_module.c
wget https://raw.githubusercontent.com/sto/ngx_http_auth_pam_module/master/config

Скачиваем модуль HTTP CONNECT

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

mkdir -p /root/sources/http_proxy_connect_module
cd /root/sources/http_proxy_connect_module
wget https://raw.githubusercontent.com/chobits/ngx_http_proxy_connect_module/master/patch/proxy_connect_1014.patch
wget https://raw.githubusercontent.com/chobits/ngx_http_proxy_connect_module/master/ngx_http_proxy_connect_module.c
wget https://raw.githubusercontent.com/chobits/ngx_http_proxy_connect_module/master/config

Применим патч http_proxy_connect_module

cd /root/sources/nginx/nginx-1.14.0
patch -p1 < /root/sources/http_proxy_connect_module/proxy_connect_1014.patch

Настраиваем сборку ngnix из исходного кода с модулями

Примечание: параметры могут отличаться от ваших.

./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie' --add-module=/root/sources/http_auth_pam_module --add-module=/root/sources/http_proxy_connect_module

Примечание: Для получения команды нужно взять опции компиляции из вывода команды выше и добавить к ним два модуля --add-module=/root/sources/http_auth_pam_module --add-module=/root/sources/http_proxy_connect_module

Собираем nginx из исходных кодов

ВНИМАНИЕ: Команда установки сама заменит файлы в папках. Если у вас на этом nginx сервере запущено что-то оно может перестать работать.

make
make install

НАСТРОЙКА ПРОКСИ СЕРВЕРА HTTP

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

БЕЗ АУТЕНТИФИКАЦИИ

SQUID

Примечание: для чистоты эксперимента отключим кэш.

Файл конфигурации /etc/squid/squid.conf

http_port 3128
http_access allow all
cache deny all

Проверим конфигурацию командой

squid -k parse

ВНИМАНИЕ: руководство не учитывает наличие сетевых экранов. Если у вас используется какой-то брандмауэр не забудьте на нем разрешить порт TCP 3128 для входящих подключений.

NGINX

Для включения прокси в nginx используются две части. Proxy_pass для незашифрованных подключений. И Proxy_connect для зашифрованных соединений, передающихся через HTTP CONNECT.

Файл конфигурации /etc/nginx/conf.d/default.conf

server {
    listen                         3128;
    resolver                       8.8.8.8;
    proxy_connect;
    proxy_connect_allow            all;
    location / {
        proxy_pass                 http://$host;
        proxy_set_header           Host $host;
    }
}

Проверим конфигурацию командой

nginx -t

ПРОВЕРКА

Проверим работу прокси сервера. Используем по очереди Squid и nginx. Настройка браузера вручную. Для проверки настроим браузер на использование прокси сервера 2-3-browser.png

Тестовые шаги:

  • Запустить Squid

    systemctl start squid
    
  • Проверить что порт прослушивается

    ss -naut | grep 3128
    
  • Проверить зайдя на сайт 2ip.ru (он показывает IP под которым браузер подключился)

  • Остановить Squid

    systemctl stop squid
    
  • Запустить nginx

    systemctl start nginx
    
  • Проверить что порт прослушивается

    ss -naut | grep 3128
    
  • Проверить зайдя на сайт 2ip.ru

  • Остановить nginx

systemctl stop nginx

Захват пакетов:

Посмотрим на обмен пакетами в варианте, когда прокси сервер nginx.

Примечание: сайт 2ip.ru использует переадресацию с HTTP версии на HTTPS.

2-3-nginx-http-no-auth-01.png

  • Браузер подключается с прокси серверу. Браузер запрашивает сайт 2ip.ru у прокси сервера.

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

2-3-nginx-http-no-auth-02.png

  • Прокси запрашивает DNS сервер об адресе сайта. DNS сервер отвечает A записью.

2-3-nginx-http-no-auth-03.png

  • Прокси подключается к сайту. Получает ответ HTTP 301 что сайт переехал.

2-3-nginx-http-no-auth-04.png

  • Прокси отвечает браузеру. Сайт переехал на https://2ip.ru.

2-3-nginx-http-no-auth-05.png

  • Браузер подключается к прокси. Использует HTTP CONNECT метод. Браузер запрашивает подключение к 2ip.ru на порт 443 у прокси сервера.

2-3-nginx-http-no-auth-06.png

  • Прокси подключился к 2ip.ru на порт 443.
  • Прокси отвечает браузеру HTTP соединение установлено.
  • Браузер устанавливает TLS подключение к прокси.

Примечание: с этого момента соединение между браузером и прокси, а также прокси и веб сервером зашифровано. Если бы 2ip.ru не использовал HTTPS редирект, то трафик был бы открытым.

2-3-nginx-http-no-auth-07.png

2-3-nginx-http-no-auth-08.png

2-3-nginx-http-no-auth-09.png

2-3-nginx-http-no-auth-10.png

  • Прокси транслирует через себя установку TLS между браузером и веб сервером 2ip.ru.

Примечание: для самого прокси это по сути туннель, внутрь которого он не имеет доступ.

2-3-nginx-http-no-auth-11.png

  • Браузер запрашивает статус сертификата 2ip.ru. Используется OCSP через HTTP.

Примечание: интересный момент, что соединение с 2ip.ru еще не произошло, но браузеру нужно удостовериться в подлинности сертификата. Для этого он создает отдельное HTTP соединение, которое тоже отправляется на прокси сервер.

2-3-nginx-http-no-auth-12.png

  • Прокси запрашивает у DNS адрес OCSP сервера.

2-3-nginx-http-no-auth-13.png

  • OCSP сервер отвечает, что статус сертификата хороший.

2-3-nginx-http-no-auth-14.png

  • Прокси отвечает браузеру сайтом.

PAM BASIC АУТЕНТИФИКАЦИЯ

Добавим аутентификацию. Имя пользователя и пароль будут такими же, как для входа в систему. Соединение оставим незашифрованным.

SQUID

Для включения PAM аутентификации в Suid используется программа аутентификации и список контроля доступа, который указывает для кого применять аутентификацию.

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

Окно с запросом логина и пароля

5-3-browser-auth-req.png

Файл конфугуракции /etc/squid/squid.conf

http_port 3128
auth_param basic program /usr/lib64/squid/basic_pam_auth
auth_param basic realm SquidProxyAuth
acl authenticated proxy_auth REQUIRED
http_access allow authenticated
cache deny all

Включаем PAM аутентификацию Для того чтобы Squid мог задействовать PAM аутентификацию нужно создать файл конфигурации PAM, с таким именем как сервис Squid.

Файл конфигурации /etc/pam.d/squid

auth        include     password-auth
account     include     password-auth

Меняем права доступа к модулю аутентификации

Примечание: данный шаг снижает уровень безопасности. Запуск модуля аутентификации от имени root (SETUID). необходим чтобы PAM мог получить доступ к файлу с паролями /etc/shadow. По умолчанию модуль запускается с правами пользователя сервиса, использующего модуль. В случае со squid это пользователь squid. У него нет доступа к этому файлу и аутентификации PAM невозможна.

chmod u+s /usr/lib64/squid/basic_pam_auth

NGINX

Файл конфигурации /etc/nginx/conf.d/default.conf

server {
    listen                         3128;
    resolver                       8.8.8.8;
    auth_pam                       "nginxProxyAuth";
    auth_pam_service_name          "nginx";
    proxy_connect;
    proxy_connect_allow            all;
    location / {
        proxy_pass                 http://$host;
        proxy_set_header           Host $host;
    }
}

Включаем PAM аутентификацию

cp /etc/pam.d/squid /etc/pam.d/nginx

Файл конфигурации /etc/pam.d/nginx

auth        include     password-auth
account     include     password-auth

ПРОВЕРКА

ВНИМАНИЕ: к сожалению модуль HTTP CONNECT не может работать с аутентификацией PAM. На данный момент единственный рабочий вариант прокси с PAM аутентификацией это Squid. Поэтому конфигурация nginx выше приведена для примера.

Захват пакетов:

Для проверки оставим настройки браузера такими же

2-3-browser.png

2-4-squid-http-auth-01.png

  • Браузер обращается к прокси серверу. Запрашивает веб сайт 2ip.ru. Запрос по незашифрованному HTTP.

2-4-squid-http-auth-02.png

  • Прокси сервер отвечает HTTP 407. Необходима аутентификация.

2-4-squid-http-auth-03.png

  • Браузер снова запрашивает веб сайт у прокси сервера. В этот раз в запросе указывается заголовок Proxy-Authorization. Метод аутентификации Basic, логин и пароль. Они передаются в открытом виде.

2-4-squid-http-auth-04.png

  • Прокси сервер принимает запрос.
  • Прокси сервера соединяется с веб сайтом 2ip.ru.
  • Получается ответ, что веб сайт переехал 302.
  • Передает этот ответ браузеру.

2-4-squid-http-auth-05.png

  • Браузер запрашивает подключение к HTTPS сайту. Используется HTTP CONNECT метод. В запросе сразу указываются логин и пароль для доступа прокси серверу.

2-4-squid-http-auth-06.png

  • После установления TLS туннеля, браузер запрашивает веб-сайт у прокси сервера. В запросе не указываются логин и пароль, т.к. прокси сервер не имеет доступа к данным внутри туннеля. Данный запрос зашифрован.

2-4-squid-http-auth-07.png

  • Прокси сервер перенаправляет запрос на веб-сайт. Содержимое запроса не меняется.

2-4-squid-http-auth-08.png

2-4-squid-http-auth-09.png

  • Веб-сайт отвечает прокси серверу содержимым сайта.
  • Сервер передает ответ браузеру. Ответ зашифрован.

НАСТРОЙКА РАСЩИПЛЕНИЯ ГОРИЗОНТА

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

  • Ручной - адрес прокси сервера указывается вручную. При ручной настройке все веб-запросы отправляются через прокси сервер.
  • Полу-автоматический - адрес файла прокси конфигурации указывается вручную. Для того чтобы выбрать какие запросы пускать через прокси сервер используется механизм Proxy Autoconfiguration (PAC). С помощью него можно фильтровать какие запросы отправлять на прокси сервер. А все остальные отправлять напрямую веб серверу.
  • Автоматический - адрес файла прокси конфигурации получается браузером из сети. Механизм WPAD может использовать разные методы: DHCP и DNS. Самый простой способ на DHCP сервере настроить опцию 252. В опции auto-proxy-config указывается URL адрес PAC файла. Мы уже рассматривали ранее DHCP опции.

Для настройки веб браузера на автоматический прокси используется URL адрес. По этому URL веб браузер обращается и получает функцию FindProxyForURL. Эта функция инструктирует какие запросы следует отправлять через прокси сервер. В самом простом случае можно указать чтобы все запросы шли через прокси сервер. В этом случае это будет аналогом ручной настройки адреса прокси сервера в браузере.

function FindProxyForURL(url, host)
{return "PROXY proxy.example.org:3128";}

PLAIN TEXT

Обычно для автоматической настройки прокси создается файл с содержанием функции. Затем файл размещается на веб-сервере. URL в настройках веб браузера указывает на этот файл. Однако существует обходной путь без веб сервера. Для этого в поле URL указывается сама функция _FindProxyForURL. Это может быть не очень удобно, если правил фильтрации много, однако позволяет сэкономить на веб сервере. В дальнейшем веб сервер будет использоваться для выдачи сертификата, поэтому данный способ может быть полезен для тестов.

PAC

Создадим PAC файл. В нем будет содержаться инструкция. Только запрос на 2ip.ru должен идти через прокси сервер. Дальше положим этот файл на веб сервер nginx.

function FindProxyForURL(url, host)
{
        if (shExpMatch(host, "(*.2ip.ru|2ip.ru)")) {
                return "PROXY proxy.example.org:3128";
        }
    return "DIRECT";
}

NGINX

Настроем nginx для размещения PAC файла. По стандарту PAC файл должен помечаться специальным типом x-ns-proxy-autoconfig.

Примечание: поскольку nginx не работает с PAM аутентификацией, то оставим в файле конфигурации только выдачу PAC файла. В дальнейшем ngninx будет также использоваться для получения сертификата.

Файл конфигурации /etc/nginx/conf.d/default.conf

types {
    application/x-ns-proxy-autoconfig pac;
}
server {
    listen             80;
    location /proxy.pac {
        default_type               application/x-ns-proxy-autoconfig;
        root               /usr/share/nginx/html/pac;
    try_files                  $uri =404;
    }
}

Создаем директорию для PAC файла

mkdir -p /usr/share/nginx/html/pac
cd /usr/share/nginx/html/pac

Создаем файл proxy.pac в этой директории с содержанием выше.

Даем права на файл

chmod a+r /usr/share/nginx/html/pac/proxy.pac

ПРОВЕРКА

Проверим механизм Plain text. Для этого в настройках браузера укажем Automatic proxy configuration URL с содержанием функции FindProxyForURL. В функции укажем, что все запросы отправлять через прокси сервер.

data:text/plain,function FindProxyForURL(url, host){return "PROXY proxy.example.org:3128";}

3-4-squid-http-auth-pac-01.png

Тестовые шаги:

Запустить Squid

systemctl start squid

Проверить что порт прослушивается

ss -naut | grep 3128

Проверить зайдя на сайт 2ip.ru (он показывает IP под которым браузер подключился)

Остановить Squid

systemctl stop squid

Проверим nginx с PAC файлом. Для этого в настройках браузера укажем Automatic proxy confgiration URL с адресом PAC файла.

Запустить nginx

systemctl start nginx

Запустить Squid

systemctl start squid

Проверить что порт прослушивается

ss -naut | grep "3128\|80"

Настроим браузер на автоконфигурацию прокси URL

http://proxy.example.org/proxy.pac

3-4-browser.png

Проверить зайдя на сайт 2ip.ru (он показывает IP под которым браузер подключился)

Остановить nginx

systemctl stop nginx

Остановить Squid

systemctl stop squid

Захват пакетов:

Пример пакетов при использовании PAC файла.

  • Веб браузер сначала обращаться за файлом автоконфигурации прокси

3-4-squid-http-auth-pac-03.png

  • Сервер отправляет файл

Примечание: обратите внимание на тип контента

3-4-squid-http-auth-pac-04.png

ПОЛУЧЕНИЕ СЕРТИФИКАТА

Для получения сертификата воспользуемся Let's Encrypt. Он позволяет автоматизировать процесс получения и обновления сертификата. И к тому же свободен. Чтобы получить сертификат на домен нужно подтвердить его владение. Для подтверждения существует несколько вариантов. Мы воспользуемся размещением специальных файлов на веб сервере. Let's Encrypt будет проверять наличие этих файлов по определенному URL с доменом. Если файлы существуют, то домен считается подтвержденным и произойдет выдача сертификатов.

Другая статья по Let's Encrypt.

NGINX

Создаем папку для файлов

mkdir -p /usr/share/nginx/html/certbot/.well-known/acme-challenge/

Добавляем в конфигурацию nginx информацию о пути до файлов.

Файл конфигурации /etc/nginx/conf.d/default.conf

types {
    application/x-ns-proxy-autoconfig pac;
}
server {
    listen             80;
    location /proxy.pac {
        default_type               application/x-ns-proxy-autoconfig;
        root               /usr/share/nginx/html/pac;
        try_files                  $uri =404;
    }
    location /.well-known/acme-challenge/ {
        default_type               text/plain;
        root                       /usr/share/nginx/html/certbot;
        try_files                  $uri =404;
    }
}

LET'S ENCRYPT

Установим Let's Encrypt

yum install epel-release
yum install certbot

Запустим certbot на выдачу сертификата. Примечание: будем использовать модуль webroot. В нем укажем директорию, где будут располагаться файлы для проверки домена.

certbot certonly --webroot -w /usr/share/nginx/html/certbot -d proxy.example.org

Примечание: В процессе первого запуска произойдет регистрация аккаунта (запрос почты). И сохранение аутентификации в директории /etc/letsencrypt. В этой же директории будут сохранены публичный и закрытый ключи. Рекомендуется сделать резервную копию.

После прохождения мастера можно проверить, что сертификаты сохранились

ls -la /etc/letsencrypt/live/proxy.example.org/

В этой папке нас интересуют следующие файлы:

  • fullchain.pem - содержит цепочку сертификатов, включая сертификат на сам домен proxy.example.org
  • privkey.pem - содержит закрытый ключ

Примечание: эти файлы будут ссылками на файлы в директории /etc/letsencrypt/archive/proxy.example.org. Для того, чтобы в будущем при обновлении сертификатов не нужно было менять конфигурацию веб сервера. В конфигурации сервера будут указаны ссылки, а certbot будет автоматически обновлять эти ссылки на самые последние версии файлов.

Также можно запустить certbot на вывод всех сертификатов

certbot certificates
Found the following certs:
  Certificate Name: proxy.example.org
    Domains: proxy.example.org
    Expiry Date: 2018-12-26 17:30:01+00:00 (VALID: 89 days)
    Certificate Path: /etc/letsencrypt/live/proxy.example.org/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/proxy.example.org/privkey.pem

Примечание: обратите внимание, что сертификаты Let's Encrypt выдаются сроком 90 дней. Именно поэтому необходимо предусмотреть автоматизацию процесса их обновления.

На захваченном пакете можно увидеть как сервер letsencrypt проверяет наличие файла

6-certbot-certificate-renew-01.png

НАСТРОЙКА ПРОКСИ СЕРВЕРА HTTPS С PAM BASIC АУТЕНТИФИКАЦИЕЙ

Примечание: поскольку nginx не работает с PAM, будем настраивать только Squid.

SQUID

Для включения HTTPS в Squid нужно указать файлы сертификата и закрытого ключа.

Примечание: обратите внимание, что изменился порт прокси.

Файл конфигурации /etc/squid/squid.conf

https_port 3129 cert=/etc/letsencrypt/live/proxy.example.org/fullchain.pem key=/etc/letsencrypt/live/proxy.example.org/privkey.pem
auth_param basic program /usr/lib64/squid/basic_pam_auth
auth_param basic realm SquidProxyAuth
acl authenticated proxy_auth REQUIRED
http_access allow authenticated
cache deny all

PAC

Изменим PAC файл. Укажем адрес прокси сервера с новым портом.

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

function FindProxyForURL(url, host)
{
        if (shExpMatch(host, "(*.2ip.ru|2ip.ru)")) {
                return "HTTPS proxy.example.org:3129";
        }
    return "DIRECT";
}

ПРОВЕРКА

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

Настройку браузера используем прежнюю

3-4-browser.png

Захват пакетов:

5-3-squid-https-auth-pac-01.png

  • Браузер подключается к прокси серверу. Браузер запрашивает файл автоконфигурации прокси. Запрос по обычному HTTP порту.

5-3-squid-https-auth-pac-02-1.png

  • Прокси сервер отправляет файл браузеру. Можно увидеть содержимое файла.

5-3-squid-https-auth-pac-03-1.png

5-3-squid-https-auth-pac-04-1.png

5-3-squid-https-auth-pac-05-1.png

  • Устанавливается TLS подключение между браузером и прокси сервером. В зашифрованном подключении передаются логин и пароль для доступа к прокси серверу.

5-3-squid-https-auth-pac-06-1.png

  • Браузер запрашивает веб-сайт 2ip.ru Подключение между браузером и прокси зашифровано. Между прокси и веб сайтом используется незашифрованный HTTP. Обратите внимания не заголовки HTTP с указанием IP адреса браузера.

5-3-squid-https-auth-pac-07-1.png

  • Веб сайт отвечает прокси серверу HTTP 301 Moved Permanently.

5-3-squid-https-auth-pac-08-1.png

5-3-squid-https-auth-pac-09-1.png

  • Браузер запрашивает подключение к зашифрованному сайту у прокси сервера.
  • Прокси сервер устанавливает TLS соединение.

5-3-squid-https-auth-pac-10-1.png

  • Веб сервер отвечает содержимым сайта для прокси сервера.
  • Прокси сервер передает этот ответ браузеру.

НАСТРОЙКА ОБНОВЛЕНИЯ СЕРТИФИКАТА АВТОМАТИЧЕСКОЕ

Настроем сервис certbot на регулярный запрос обновления сертификата. Используем систему timer из systemd. Certbot будет запускаться каждый день. После чего обновлять сертификаты. И перезапускать прокси сервер.

Примечание: данный этап лучше провести спустя несколько дней, чтобы отследить, что сертификат обновился.

Изменим настройку таймера

Примечание: после обновления сертификата Squid нужно перезапускать. Он подхватит новый сертификат. Для этого введем команду перезапуска Squid в конфигурации certbot.

Файл конфигурации таймера /etc/sysconf/certbot

PRE_HOOK="--pre-hook 'systemctl stop squid'"
POST_HOOK="--post-hook 'systemctl start squid'"

Файл конфигурации таймера /usr/lib/systemd/system/certbot-renew.timer

[Unit]
Description=This is the timer to set the schedule for automated renewals
[Timer]
OnCalendar=daily
RandomizedDelaySec=5m
Persistent=true
[Install]
WantedBy=timers.target

Запустим таймер обновления

systemctl start certbot-renew.timer

Проверим статус сертификатов

certbot certificates
ls -la /etc/letsencrypt/live/proxy.example.org/

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

Включим автоматический запуск nginx, Squid и таймера Let's Encrypt при включении машины

systemctl enable nginx
systemctl enable squid
systemctl enable certbot-renew.timer
systemctl list-unit-files nginx
systemctl list-unit-files squid
systemctl list-unit-files certbot-renew.timer

Проверим что таймер есть в списке на запуск

systemctl list-timers

Источник 1

Источник 2

Источник 3

Источник 4

Источник 5

Источник 6

Источник 7

Источник 8

Источник 9

Источник 10

Источник 11

Источник 12

Источник 13

Источник 14

Источник 15

Источник 16