HTTPS (letsencrypt) прокси squid на домене?

Вопрос или проблема

Я хочу создать HTTPS-прокси-сервер squid (такого типа), который сможет использовать любой желающий для доступа к любому сайту. Это не обратный прокси, это для всего интернета. По соображениям безопасности IP-адреса в моей подсети не должны быть доступны. Я получил сертификат LetsEncrypt для proxy.mydomain.com и wondering, как правильно настроить squid для этого. Вот мой текущий конфигурационный файл:

########### squid.conf ###########
#
## интерфейс, порт и тип прокси
#http_port 0.0.0.0:80 transparent
https_port 0.0.0.0:443 intercept tls-cert="/etc/letsencrypt/live/proxy.mydomain.com/fullchain.pem"

## тайм-ауты
forward_timeout 30 seconds
connect_timeout 30 seconds
read_timeout 30 seconds
request_timeout 30 seconds
persistent_request_timeout 1 minute
client_lifetime 20 hours

## определения хостов
acl all src 0.0.0.0/0
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8

acl localnet src 0.0.0.1-0.255.255.255  # RFC 1122 "эта" сеть (LAN)
acl localnet src 10.0.0.0/8             # RFC 1918 локальная частная сеть (LAN)
acl localnet src 100.64.0.0/10          # RFC 6598 общая адресная область (CGN)
acl localnet src 169.254.0.0/16         # RFC 3927 локальные (прямо подключенные) машины
acl localnet src 172.16.0.0/12          # RFC 1918 локальная частная сеть (LAN)
acl localnet src 192.168.0.0/16         # RFC 1918 локальная частная сеть (LAN)
acl localnet src fc00::/7               # RFC 4193 диапазон локальных частных сетей
acl localnet src fe80::/10              # RFC 4291 локальные (прямо подключенные) машины

http_access deny localnet

## доступ к клиенту прокси-сервера
acl mynetworks src 127.0.0.0/8 10.10.10.0/28
#http_access deny !mynetworks

## максимальные подключения на IP
acl maxuserconn src 127.0.0.0/8 10.0.10.0/28
acl limitusercon maxconn 500
http_access deny maxuserconn limitusercon

## отключить кэширование
cache deny all
cache_dir null /tmp

## отключить мультикастовый icp
icp_port 0
icp_access deny all

## отключить идентификацию
ident_lookup_access deny all

## нет-доверия для динамического Content-Encoding
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache

## логи
logformat combined [%tl] %>A %{Host}>h "%rm %ru HTTP/%rv" %Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh
access_log /var/log/squid/access.log combined
cache_store_log /var/log/squid/store.log
cache_log  /var/log/squid/cache.log
logfile_rotate 8

## поддерживающие файлы
coredump_dir /tmp
pid_filename /var/log/squid/squid.pid

## разрешенные порты
acl Safe_ports port 80 443
http_access deny !Safe_ports

## разрешенные ssl порты/методы
acl SSL_ports port 443
acl CONNECT method CONNECT
http_access deny CONNECT !SSL_ports

## разрешенные протоколы
acl Safe_proto proto HTTP SSL
http_access deny !Safe_proto

## разрешенные методы
acl Safe_method method CONNECT GET HEAD POST OPTIONS PUT PATCH
http_access deny !Safe_method

## разрешить ответы на клиентские запросы
http_reply_access allow all

##########  END  ###########

Я отредактировал /etc/init.d/squid, чтобы запустить squid с флагом --with-openssl.

Запуск sudo service squid status показывает, что все выглядит нормально.

Но когда я пытаюсь подключиться к этому прокси через curl -p https://localhost:443 api.ipify.org -v, я получаю curl: (7) Failed to connect to localhost port 443: Connection refused.

Что я делаю не так?

Я не верю, что вам нужно настраивать SSL сертификат в squid, чтобы запустить HTTPS прокси.

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

Для HTTPS прокси соединение от вашего браузера к прокси (proxy.mydomain.com) не защищено, но первой вещью, которую делает браузер с вашим прокси, является отправка команды CONNECT на прокси для инициации соединения с HTTPS-назначением.

Таким образом, это HTTPS от вашего браузера до superuser.com, и proxy.mydomain.com просто передает данные, не способный прочитать их.

Ответ или решение

Настройка HTTPS-прокси с использованием Squid и Let’s Encrypt на домене

Создание HTTPS-прокси-сервера с помощью Squid — это отличный способ управлять интернет-трафиком и обеспечивать безопасность соединений. В данном руководстве мы рассмотрим, как правильно сконфигурировать прокси-сервер на домене proxy.mydomain.com с использованием сертификата Let’s Encrypt, чтобы обеспечить безопасный доступ для пользователей к любым сайтам, одновременно ограничивая доступ к внутренним IP-адресам в вашей подсети.

Шаг 1: Установка Squid

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

Для Debian/Ubuntu:

sudo apt update
sudo apt install squid

Для CentOS/RHEL:

sudo yum install squid

Шаг 2: Получение и установка сертификата Let’s Encrypt

Поскольку вы уже получили сертификат для proxy.mydomain.com, убедитесь, что файлы сертификата находятся по указанному пути:

  • /etc/letsencrypt/live/proxy.mydomain.com/fullchain.pem
  • /etc/letsencrypt/live/proxy.mydomain.com/privkey.pem

Эти файлы содержат ваш сертификат и закрытый ключ соответственно.

Шаг 3: Настройка конфигурационного файла Squid

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

  1. Настройка HTTPS-порта:
    Ваша конфигурация уже включает порт HTTPS, но следует убедиться, что он настроен правильно:

    https_port 0.0.0.0:443 intercept tls-cert="/etc/letsencrypt/live/proxy.mydomain.com/fullchain.pem" tls-key="/etc/letsencrypt/live/proxy.mydomain.com/privkey.pem"
  2. Контроль доступа:
    Ваша конфигурация содержит множество ACL (Access Control Lists), которые необходимо настроить так, чтобы обеспечить безопасный доступ. Например, важно отключить доступ для локальной сети:

    http_access deny localnet
  3. Запрет на доступ к локальным адресам:
    Убедитесь, что настройка http_access корректно запрещает любые запросы к IP-адресам из вашей подсети.

Шаг 4: Проверка конфигурации

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

squid -k parse

Если в конфигурационном файле нет ошибок, перезапустите службу Squid:

sudo systemctl restart squid

Шаг 5: Тестирование прокси-сервера

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

curl -x https://proxy.mydomain.com:443 -k https://api.ipify.org

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

Возможные проблемы

Если вы получаете ошибку Failed to connect to localhost port 443, это может означать, что служба Squid не слушает на этом порту. Убедитесь, что:

  • Squid запущен и работает.
  • Порт 443 открыт в файрволе вашей системы (например, на iptables или ufw).

Чтобы проверить, на каких портах запущен Squid, выполните:

sudo netstat -tuln | grep 443

Заключение

Настройка HTTPS-прокси на основе Squid с использованием сертификатов Let’s Encrypt позволяет создать безопасный интернет-доступ для пользователей. Следуя описанным рекомендациям и корректировкам, вы сможете настроить надежный прокси-сервер, который будет оберегать вашу сеть от нежелательного доступа, при этом предоставляя необходимые ресурсы для пользователей.

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

Капча загружается...