- Вопрос или проблема
- Ответ или решение
- Настройка HTTPS-прокси с использованием Squid и Let’s Encrypt на домене
- Шаг 1: Установка Squid
- Шаг 2: Получение и установка сертификата Let’s Encrypt
- Шаг 3: Настройка конфигурационного файла Squid
- Шаг 4: Проверка конфигурации
- Шаг 5: Тестирование прокси-сервера
- Возможные проблемы
- Заключение
Вопрос или проблема
Я хочу создать 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
Ваша конфигурация уже содержит множество правильных настроек. Обратите внимание на следующие важные моменты:
-
Настройка 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"
-
Контроль доступа:
Ваша конфигурация содержит множество ACL (Access Control Lists), которые необходимо настроить так, чтобы обеспечить безопасный доступ. Например, важно отключить доступ для локальной сети:http_access deny localnet
-
Запрет на доступ к локальным адресам:
Убедитесь, что настройка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 позволяет создать безопасный интернет-доступ для пользователей. Следуя описанным рекомендациям и корректировкам, вы сможете настроить надежный прокси-сервер, который будет оберегать вашу сеть от нежелательного доступа, при этом предоставляя необходимые ресурсы для пользователей.