Прозрачный Squid никуда не пускает (connection refused)

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

Tiarasu
Сообщения: 64
ОС: Fedora 11

Прозрачный Squid никуда не пускает

Сообщение Tiarasu »

День добрый. На freeBSD 10 поднял Squid 3.3.11.
Настроил его прозрачным.
Вот конфиг

Код: Выделить всё

dns_nameservers 192.168.0.122 192.168.0.10

dns_v4_first on

shutdown_lifetime 10 seconds

coredump_dir /usr/local/squid


log_mime_hdrs off

visible_hostname serv.altest.net

icap_enable on
icap_service_failure_limit 500
icap_service_revival_delay 30
icap_service Zgate_ICAP_Proxy reqmod_precache bypass=0 icap://192.168.0.231:1344/reqmod
icap_service Zgate_ICAP_Logger respmod_precache routing=1 icap://192.168.0.231:1344/respmod
icap_send_client_ip on
icap_send_client_username on
adaptation_service_set class_proxy Zgate_ICAP_Proxy
adaptation_service_set class_logger Zgate_ICAP_Logger
adaptation_access class_proxy allow all
adaptation_access class_logger allow all

http_port 127.0.0.1:3129
http_port 127.0.0.1:3128 intercept ssl-bump cert=/usr/local/etc/squid/root.cer key=/usr/local/etc/squid/root.key generate-host-certificates=on
ssl_bump client-first all
always_direct allow all
sslproxy_cert_error allow all

acl QUERY urlpath_regex cgi-bin \\?
no_cache deny !QUERY
cache_dir ufs /usr/local/etc/squid/cache 3000 16 256
maximum_object_size 320 MB
quick_abort_min 5 MB


acl localnet src 192.168.0.0/22

acl localnet src 10.10.0.0/24

acl CONNECT method CONNECT

acl BlockSite dstdomain .woman.ru

acl BlockSite dstdomain .odnoklassniki.ru

http_access allow manager localhost

http_access deny to_localhost

http_access deny all BlockSite

http_access allow localnet

http_reply_access allow all

cache_peer 192.168.0.162 parent 3128 0 no-query default no-digest no-netdb-exchange
never_direct allow all


refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern .               0       20%     4320


Сделал форвардинг:

Код: Выделить всё

00100    816   594626 allow ip from any to any via lo0
00109   1132   293472 allow tcp from me to any out via igb0 uid squid keep-state
00110    712   361905 allow tcp from me to any out via igb1 uid squid keep-state
00120    308    33185 fwd 127.0.0.1,3128 tcp from 10.10.0.3 to any via igb1
00130   6153   454660 fwd 127.0.0.1,3128 tcp from 192.168.0.231 to any via igb0
00200      0        0 deny ip from any to 127.0.0.0/8
00300      0        0 deny ip from 127.0.0.0/8 to any
00400      0        0 fwd 192.168.1.222,3128 tcp from any to any dst-port 80 in recv igb0
00500 126542 13879095 allow ip from any to any
00600      0        0 allow ipv6-icmp from :: to ff02::/16
00700      0        0 allow ipv6-icmp from any to any ip6 icmp6types 2,135,136
65000      0        0 allow ip from any to any
65535     53     3673 allow ip from any to any


К сожалению, в cache.log выдается ошибка, которая не поддается гуглению:
SECURITY ALERT: Host header forgery detected on local=10.10.0.2:3128 remote=10.10.0.3:2368 FD 11 flags=33 (intercepted port does not match 443)

И, соответственно, никуда не пускает. Что я делаю не так?
Спасибо сказали:
lazhu
Сообщения: 70
ОС: FreeBSD 9-STABLE / clang 3.3

Re: Прозрачный Squid никуда не пускает

Сообщение lazhu »

Ругается на то, что ему суют ВЕСЬ трафик с хостов по 120 и 130 правилам, а он ловит только HTTP.
Что вы хотели сделать 400-м правилом? Оно не будет работать никогда.
https_port у вас в конфиге сквида не настроен.
Как сделать прозрачный HTTPS читайте вот тут
Спасибо сказали:
Tiarasu
Сообщения: 64
ОС: Fedora 11

Re: Прозрачный Squid никуда не пускает

Сообщение Tiarasu »

lazhu писал(а):
19.09.2014 09:43
Ругается на то, что ему суют ВЕСЬ трафик с хостов по 120 и 130 правилам, а он ловит только HTTP.

Правильно. Он недоволен. Только если я добавляю правило 00125 0 0 fwd 127.0.0.1,3128 tcp from 10.10.0.3 to any dst-port 80-83,8080-8088 out via igb1 - оно не отрабатывает. Почему то работает только с этим!
lazhu писал(а):
19.09.2014 09:43
Что вы хотели сделать 400-м правилом? Оно не будет работать никогда.

Осознал, удалил, спасибо.
lazhu писал(а):
19.09.2014 09:43
https_port у вас в конфиге сквида не настроен.
Как сделать прозрачный HTTPS читайте вот тут

Спасибо большое. Однако опять уперся в ту же Ж... Если пускать any - трафик идет. Если пускать по портам - не работает.
Спасибо сказали:
lazhu
Сообщения: 70
ОС: FreeBSD 9-STABLE / clang 3.3

Re: Прозрачный Squid никуда не пускает

Сообщение lazhu »

Tiarasu писал(а):
19.09.2014 12:27
lazhu писал(а):
19.09.2014 09:43
Ругается на то, что ему суют ВЕСЬ трафик с хостов по 120 и 130 правилам, а он ловит только HTTP.

Правильно. Он недоволен. Только если я добавляю правило 00125 0 0 fwd 127.0.0.1,3128 tcp from 10.10.0.3 to any dst-port 80-83,8080-8088 out via igb1 - оно не отрабатывает. Почему то работает только с этим!

Ну конечно не работает. И не будет. Вот пример работающего правила:

Код: Выделить всё

00125 0 0 fwd 127.0.0.1,3128 tcp from <local_network_ip> to not me dst-port 80 in recv <local_network_interface>
Спасибо сказали:
Tiarasu
Сообщения: 64
ОС: Fedora 11

Re: Прозрачный Squid никуда не пускает

Сообщение Tiarasu »

lazhu писал(а):
19.09.2014 13:31
Ну конечно не работает. И не будет. Вот пример работающего правила:


Заработало. Оказывается, Mozilla зачем-то отправляла трафик на порт Squid'a 3128. Прописал ручками в свойствах браузера использовать для http 8080 порт, для https 443 порт.
Допилил конфиг Squid'a в соответствии со статьей Юрий Воинова (та, что по ссылке).
Обновленная часть squid.conf выглядит так:

Код: Выделить всё

https_port 127.0.0.1:3128 intercept ssl-bump cert=/usr/local/etc/squid/root.cer key=/usr/local/etc/squid/root.key generate-host-certificates=on
http_port 127.0.0.1:3129 intercept


IPFW выдает такую картину:

Код: Выделить всё

00100     7      280 allow ip from any to any via lo0
00110 16536 10496875 allow tcp from me to any out via igb0 uid squid keep-state
00120  6435  4812889 allow tcp from me to any out via igb1 uid squid keep-state
00126   462    58629 fwd 127.0.0.1,3129 tcp from 10.10.0.3 to any dst-port 80-83,8080-8088 via igb1
00127   152    15615 fwd 127.0.0.1,3128 tcp from 10.10.0.3 to any dst-port 443 via igb1
00200     0        0 deny ip from any to 127.0.0.0/8
00300     0        0 deny ip from 127.0.0.0/8 to any
00500 57651  6546058 allow ip from any to any
00600     0        0 allow ipv6-icmp from :: to ff02::/16
00700     0        0 allow ipv6-icmp from any to any ip6 icmp6types 2,135,136
65000     0        0 allow ip from any to any
65535     0        0 allow ip from any to any


К сожалению, в cache.log вылезла новая ошибка:

Код: Выделить всё

2014/09/19 13:53:49 kid1| clientNegotiateSSL: Error negotiating SSL connection on FD 11: error:1407609B:SSL routines:SSL23_GET_CLIENT_HELLO:https proxy request (1/-1)


Что интересно, если https_port поменять на http_port, браузер говорит, что прокси-сервер отказывается принимать соединения, и в cache.log падает очередная ошибка:

Код: Выделить всё

2014/09/19 14:42:41.272 kid1| SECURITY ALERT: Host header forgery detected on local=192.168.1.222:443 remote=192.168.0.231:54656 FD 19 flags=33 (local IP does not match any domain IP)
2014/09/19 14:42:41.272 kid1| SECURITY ALERT: By user agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0
2014/09/19 14:42:41.272 kid1| SECURITY ALERT: on URL: mail.ru:443
2014/09/19 14:42:41.272 kid1| abandoning local=192.168.1.222:443 remote=192.168.0.231:54656 FD 19 flags=33


Похожий случай описан в этой статье.
http://forum.ubuntu.ru/index.php?topic=216889.0


И еще один вопрос. Каким образом можно добиться, чтобы в access.log родительского Squid писался не IP-адрес дочернего, а IP-адрес клиента?
Спасибо сказали:
Tiarasu
Сообщения: 64
ОС: Fedora 11

Re: Прозрачный Squid никуда не пускает

Сообщение Tiarasu »

День добрый.
Добился полностью прозрачного Squid'a, с генерацией самоподписанных SSL, которые вполне себе жуют большинство сайтов, работающих по HTTPS.
Примерно разобрался, как выпустить Squid через parrent proxy.
Вот кусок Squid.conf дочернего сервера (Squid1), отвечающий за parrent proxy:

Код: Выделить всё

cache_peer 192.168.0.162 parent 8080 0 ssl no-query default no-digest no-netdb-exchange originserver
cache_peer_access 192.168.0.162 allow all
never_direct allow all

К сожалению, пока не осилил, как подружить два Squid'a через SSl.
В cache.log дочернего Squid'a вылезает ошибка:

Код: Выделить всё

2014/09/25 06:25:00 kid1| fwdNegotiateSSL: Error negotiating SSL connection on FD 13: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol (1/-1/0)
2014/09/25 06:25:00 kid1| TCP connection to 192.168.0.162/8080 failed
Аналогичная ошибка вылезает и в браузере:

Код: Выделить всё

(92) Protocol error (TLS code: SQUID_ERR_SSL_HANDSHAKE)
Handshake with SSL server failed: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol

В связи в этим вопрос - какие сертификаты надо подсовывать родительскому Squid'у, если надо именно это?
Или настроить ему точно такую же SSL-генерацию как и дочернему?

На всякий случай, вот куски конфигов, описывающие генерацию SSL:
Дочерний squid (Squid1):

Код: Выделить всё

#HTTPS SECTION
https_port 127.0.0.1:3128 intercept ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/usr/local/etc/squid/ssl/squid.pem key=/usr/local/etc/squid/ssl/root.key
http_port 127.0.0.1:3129 intercept
http_port 3130
ssl_bump server-first all
sslproxy_cert_error allow all
sslproxy_flags DONT_VERIFY_PEER
sslcrtd_program /usr/local/libexec/squid/ssl_crtd -s /usr/local/etc/squid/ssl/ssl_db -M 4MB

Родительский squid (Squid2):

Код: Выделить всё

#HTTPS SECTION
http_port 8080 ssl-bump cert=/usr/local/etc/squid/root.cer key=/usr/local/etc/squid/root.key generate-host-certificates=on
ssl_bump client-first all
sslproxy_cert_error allow all

Из одинакового у них только ключевой сертификат root.key

Сорри, раньше с сертификацией особо сталкиваться не приходилось.
Спасибо сказали: