Назад | Перейти на главную страницу

Squid 3.5 на Centos7 работает как прозрачный прокси

Привет, друзья 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, мне кажется, что я пытаюсь угадать и проверить, так что любое руководство будет оценено.