Есть две подсети.. Пусть это будут 192.168.10.0/24 и 192.168.20.0/24. В 192.168.10.0/24 нужно блокировать соцсети и т.п по черному списку. В 192.168.20.0/24 есть пара клиентов, кто должен работать по черному списку, остальные по белому. Squid в https естественно не может. Есть костыль с ssl_bump, но я рассматриваю его как MiTM-атаку на пользователя. Лезть в персональные данные пользователя я не хочу. Интересно как это выглядит со стороны закона. Кто-нибудь знает? Есть друзья, кто так решил проблему фильтрации ssl трафика и не парится. Я бы не хотел, что бы данные какого-нибудь банк-клиента расшифровывались и фильтровались на шлюзе. Рассматриваю вариант с двумя dns-серверами. Один будет резолвить всё кроме черного списка, другой только то что из белого. Тут возникает проблема.. Если мне вдруг скажут, что несколько клиентов должны получить доступ к дополнительным сайтам, то мне придется создать еще один dns-сервер. Не хотелось бы плодить сущности. Второй вариант. Сделать один dns с черным списком, а для пользователей 192.168.20.0/24 запретить 443 и фильтровать контент squid'ом. Кто как решал данную проблему? Есть-ли какой-нибудь умный dns, который будет выдавать ответ клиенту на базе политик?
Палево уже то что ты решил 2 DNS,а .юзать - не знаю как это технически, однако интересно же - вот идея у чувака вполне нетривиальная, давайте послушаем реализацию.
Ну как-нибудь так: У клиентов нет прав на изменение настроек подключения к сети. Gateway/dhcp: Code: domain-needed bogus-priv no-dhcp-interface=eth0 interface=eth2 dhcp-range=set:red,192.168.20.0,192.168.20.255,24h dhcp-host=eth2,00:11:AA:BB:CC:DD,192.168.20.2,24h,set:green dhcp-host=eth2,00:22:AA:BB:CC:DD,192.168.20.3,24h,set:green dhcp-option=eth2,3,192.168.20.237 dhcp-option=tag:red,6,192.168.20.236 dhcp-option=tag:green,6,192.168.20.235 dns1 - 192.168.20.236 - ( белый список ) Code: domain-needed bogus-priv no-resolv no-dhcp-interface=eth0 interface=eth0 # Add other name servers here, with domain specs if they are for # non-public domains. server=/google.com/8.8.8.8 server=/yahoo.com/8.8.8.8 dns2 - 192.168.20.235 - (Черный список) Code: domain-needed bogus-priv no-resolv no-dhcp-interface=eth0 interface=eth0 server=8.8.8.8 no-hosts addn-hosts=/etc/dnsmasq.hosts в /etc/dnsmasq.hosts Code: 192.168.20.235 www.facebook.com 192.168.20.235 vk.com Боюсь что в один день может появиться третий клиент которому нужен vk для работы.. И что мне тогда? Третий dns создавать?
Можно использовать прозрачное проксирование SSL. Без детерминирования. В TLS есть одно полезное расширение - SNI. Из него можно вытащить хост.
Я так понимаю нужно перехватывать SNI info в TLS clientHello message во время хэндшейка. Смотреть в ssl::server_name и фильтровать по этому полю. Никаких левых сертификатов генерировать не нужно. Так? Ещё бы разобраться как это в squid'е реализовать.. Ситаксис ssl_bump с его SSL Peek and Splice разнится от версии к версии. На форумах одни багрепорты и ниодного примера нормальной реализации этого чуда. Поставил собираться deb пакет squid-3.5.8.
archlinux + squid-3.5.7 --enabled-ssl --with-openssl Работает на ура.. С помощью SSL Peek and Splice можно рвать ненужные соединения.. Если идти на заблоченый https сайт, то браузер выдает "Secure Connection Failed". На разрешенные ходит спокойно. Единственное что мне не нравится, это то что сертификат всеравно приходится генерировать и подключать к https_port 3129 Завтра на работе покручу на виртуалке... Надеюсь все будет хорошо
Решил написать решение проблемы. Сквид сильно ругался на ssl3, а у товарища вообще сегфолты сыпались. В доках сказано, что можно просто использовать ssl_bump peek all, однако, как оказалось, эта строка и была причиной описанных ранее проблем. Может данное решение кому-нибудь пригодится. Сборка пакета squid: Code: apt-get install git fakeroot build-essential devscripts apt-cache policy squid3 apt-get build-dep squid3 apt-get build-dep libecap2 apt-get install libssl-dev libgnutls28-dev vim /etc/apt/sources.list # deb-src http://ftp.de.debian.org/debian/ testing main contrib non-free apt-get update apt-get source squid3/testing apt-get source libecap3/testing cd libecap-1.0.1/ dpkg-buildpackage -us -uc -nc -d apt-get purge libecap2 dpkg -i libecap3_1.0.1-2_i386.deb dpkg -i libecap3-dev_1.0.1-2_i386.deb links squid-cache.org cd squid3-3.5.7/ uupdate -v 3.5.8 ../squid-3.5.8.tar.gz cd ../squid3-3.5.8/ vim debian/rules # --enable-ssl # --enable-ssl-crtd # --with-openssl dpkg-buildpackage -us -uc -nc apt-get install squid-langpack dpkg -i squid-common_3.5.8-1_all.deb dpkg -i squid_3.5.8-1_i386.deb dpkg -i squid3_3.5.8-1_all.deb dpkg -i squidclient_3.5.8-1_i386.deb Рабочий конфиг: Code: acl localnet src 192.168.15.0/24 acl trustedman src 192.168.15.1 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_port 192.168.15.237:3128 transparent acl blacklist url_regex -i "/etc/squid/blacklist" http_access deny blacklist localnet http_access allow localnet https_port 192.168.15.237:3129 intercept ssl-bump options=ALL:NO_SSLv3:NO_SSLv2 connection-auth=off cert=/etc/squid/squidCA.pem always_direct allow all sslproxy_cert_error allow all sslproxy_flags DONT_VERIFY_PEER acl blocked ssl::server_name .vk.com .google.ru .google.com acl step1 at_step SslBump1 ssl_bump peek step1 ssl_bump terminate blocked !trustedman ssl_bump splice all sslcrtd_program /usr/lib/squid/ssl_crtd -s /var/lib/ssl_db -M 4MB coredump_dir /var/spool/squid refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 refresh_pattern . 0 20% 4320