Привет, друзья Serverfault;
Я пытаюсь создать прокси-сервер Squid, действующий прозрачно для всех исходящих потоков трафика, в качестве доказательства концепции в моей среде.
У меня есть один вопрос и одна проблема (о которой я знаю!).
Вопрос:
У меня есть iptables, настроенный для перенаправления 80 и 443 на 3129 и 3130 соответственно, и http_access работает, когда я не уточнить transparent
или intercept
, что, как я думал, тебе нужно сделать?
Эта проблема:
Работа с перехватом https. Насколько я понимаю, лучше всего, чтобы прокси-сервер Squid действовал как посредник, проверял запрос и открывал его, а также генерировал новый запрос к фактическому целевому серверу, который, как мне кажется, сделано ниже?
Конфигурация кальмара:
visible_hostname squid.my.test.tech
#cache deny all
# Log format and rotation
logformat squid %ts.%03tu %6tr %>a %Ss/%03>Hs %<st %rm %ru %ssl::>sni %Sh/%<a %mt
logfile_rotate 10
debug_options rotate=10 ALL,1 11,2
sslproxy_cert_error allow all
# Handling HTTP requests
http_port 3128
http_port 3129
acl allowed_http_sites dstdomain "/etc/squid/whitelist.txt"
acl blocked_http_sites dstdomain "/etc/squid/blacklist.txt"
http_access allow allowed_http_sites
http_access deny blocked_http_sites
# Handling HTTPS requests
sslcrtd_program /usr/local/squid/libexec/security_file_certgen -s /var/lib/ssl_db -M 4MB
https_port 3130 transparent ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=16MB cert=/etc/squid/ssl/squid.crt key=/etc/squid/ssl/squid.key
acl allowed_https_sites ssl::server_name "/etc/squid/whitelist.txt"
http_access allow allowed_http_sites
http_access deny blocked_http_sites
always_direct allow all
acl step1 at_step SslBump1
ssl_bump peek step1
ssl_bump bump all
#Drop anything explicitly permitted
http_access deny all
В белом списке просто .google.com
и .cern.ch
, а в черном списке есть .foxnews.com
.
Таблицы IP обрабатывают предварительную маршрутизацию:
-A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3129
-A PREROUTING -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 3130
Я создал самозаверяющий сертификат и сохранил его в указанном выше каталоге. (/etc/squid/ssl)
скопировал его в /etc/pki/ca-trust/source/anchors
и побежал sudo update-ca-trust extract
для обновления списка CA для локального хоста. Затем экспортировал, скопировал сертификат на мою рабочую станцию, добавил сертификат в доверенный центр в firefox (это доказательство концепции, когда я увеличу картину, мы посмотрим на подписание центра сертификации - не беспокойтесь!).
Теперь я столкнулся с проблемой, когда, если я установил свой локальный экземпляр Firefox, http-запросы работают нормально и отображаются в журналах:
1582926343.272 415 172.16.0.199 TCP_MISS/304 264 GET http://info.cern.ch/ - HIER_DIRECT/188.184.64.53 -
(Я пропущу журнал http-попаданий в кеш)
Но запросы https отображаются как TCP_DENIED / 200:
1582926470.071 1 172.16.0.199 TCP_DENIED/200 0 CONNECT 10.161.128.139:443 - HIER_NONE/- -
С запросом, который выглядит так, как будто он отклонен в самом Squid:
----------
2020/02/28 21:47:51.554 kid1| 11,2| client_side.cc(2347) parseHttpRequest: HTTP Client local=10.161.128.139:443 remote=172.16.0.199:49219 FD 12 flags=33
2020/02/28 21:47:51.554 kid1| 11,2| client_side.cc(2348) parseHttpRequest: HTTP Client REQUEST:
---------
CONNECT 10.161.128.139:443 HTTP/1.12
Host: 10.161.128.139:443
2
----------
Я изменил squid.conf
файл, чтобы поиграть с различными вариантами, но похоже, что запрос просто умирает в коробке с кальмарами, и у меня не так много опыта работы с кальмарами, и с сотней или около того страниц, которые я откопал на how2squid, мне кажется, что я пытаюсь угадать и проверить, так что любое руководство будет оценено.