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

«Недействительный URL» Squid 3.3.8 прозрачный прокси с / SSL Bump

Я пытаюсь запустить QLProxy Виртуальное устройство с SSL Bump в прозрачном прокси и не может заставить его работать. Я продолжаю получать сообщения об ошибке «Недопустимый URL» от Squid (версия 3.3.8).

Конфигурация Squid выглядит следующим образом

acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12  # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl localnet src fc00::/7       # RFC 4193 local private network range
acl localnet src fe80::/10      # RFC 4291 link-local (directly plugged) machines

acl SSL_ports port 443
acl Safe_ports port 80      # http
acl Safe_ports port 21      # ftp
acl Safe_ports port 443     # https
acl Safe_ports port 70      # gopher
acl Safe_ports port 210     # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 280     # http-mgmt
acl Safe_ports port 488     # gss-http
acl Safe_ports port 591     # filemaker
acl Safe_ports port 777     # multiling http
acl CONNECT method CONNECT
http_access deny !Safe_ports

http_access deny CONNECT !SSL_ports

http_access allow localhost manager
http_access deny manager

http_access allow localnet
http_access allow localhost

http_access deny all

include "/opt/qlproxy/etc/squid/squid.acl"

http_port 3128 
http_port 3129 intercept
http_port 3130 intercept ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/opt/qlproxy/etc/myca.pem
acl mylocalnet src 0.0.0.0/0.0.0.0
http_access allow mylocalnet

sslcrtd_program /usr/lib/squid3/ssl_crtd -s /var/spool/squid3_ssldb -M 4MB
forward_max_tries 25
cache_mem 1024 MB
maximum_object_size_in_memory 1024 KB
coredump_dir /var/spool/squid3
refresh_pattern ^ftp:       1440    20% 10080
refresh_pattern ^gopher:    1440    0%  1440
refresh_pattern -i (/cgi-bin/|\?) 0 0%  0
refresh_pattern (Release|Packages(.gz)*)$      0       20%     2880
refresh_pattern .       0   20% 4320
shutdown_lifetime 3 seconds
visible_hostname qlproxy
always_direct allow all
icap_enable on
icap_service_failure_limit -1
icap_preview_enable on
icap_persistent_connections on
adaptation_send_client_ip on
adaptation_send_username on
icap_service qlproxy1 reqmod_precache icap://127.0.0.1:1344/reqmod bypass=0
icap_service qlproxy2 respmod_precache icap://127.0.0.1:1344/respmod bypass=0
acl qlproxy_icap_edomains dstdomain "/opt/qlproxy/etc/squid/icap_exclusions_domains.conf"
acl qlproxy_icap_etypes rep_mime_type "/opt/qlproxy/etc/squid/icap_exclusions_contenttypes.conf"
adaptation_access qlproxy1 deny qlproxy_icap_edomains
adaptation_access qlproxy2 deny qlproxy_icap_edomains
adaptation_access qlproxy2 deny qlproxy_icap_etypes
acl icap_bypass_to_localnet dst 10.0.0.0/8      # RFC1918 possible internal network
acl icap_bypass_to_localnet dst 172.16.0.0/12   # RFC1918 possible internal network
acl icap_bypass_to_localnet dst 192.168.0.0/16  # RFC1918 possible internal network
adaptation_access qlproxy1 deny icap_bypass_to_localnet
adaptation_access qlproxy2 deny icap_bypass_to_localnet
adaptation_access qlproxy1 allow all
adaptation_access qlproxy2 allow all
dns_nameservers 8.8.8.8 4.2.2.2
dns_v4_first on

На брандмауэре есть правило NAT, чтобы установить dst-nat для всего трафика, предназначенного для порта 80, 443 TCP для пересылки на прокси-сервер на порт 3128.

Может ли кто-нибудь заметить, где я ошибся?

РЕДАКТИРОВАТЬ: Следует отметить, что я пытаюсь сделать это с помощью одной сетевой карты на прокси-сервере. Веб-трафик перенаправляется через правило NAT на MikroTik (который служит основным межсетевым экраном) на прокси, а с прокси он должен идти в Интернет.

Если вы используете маршрутизацию на основе политик для получения трафика на прокси-сервер, тогда что-то вроде следующего перенаправит трафик HTTP и HTTPS на правильные порты squid:

iptables -t nat -A PREROUTING -p tcp --dport 80 -i eth0 -j DNAT --to 127.0.0.1:3129
iptables -t nat -A PREROUTING -p tcp --dport 443 -i eth0 -j DNAT --to 127.0.0.1:3130

Если вы хотите сохранить исходный IP-адрес клиента для фильтрации squid, вместо того, чтобы весь трафик src выглядел как IP-адрес маршрутизатора, вам потребуются такие правила, как:

iptables -t nat -A PREROUTING -s 127.0.0.1:3129 -p tcp --dport 80 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 127.0.0.1:3129
iptables -t nat -A PREROUTING -s 127.0.0.1:3129 -p tcp --dport 443 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 127.0.0.1:3130
iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -t mangle -A PREROUTING -p tcp --dport 127.0.0.1:3129 -j DROP

Я не уверен, насколько хорошо этот последний подход работает с маршрутизацией на squid на основе политик. Я тестировал только со squid, настроенным как сетевой шлюз через DHCP.

В iptables нужно перенаправить HTTP-трафик на сквид перехватить порт, а не стандартный порт прокси. Вам также необходимо перенаправить HTTPS-трафик на перехватить ssl-bump порт.