Фильтрация https

Discussion in 'Linux, Freebsd, *nix' started by taha, 7 Sep 2015.

  1. taha

    taha Elder - Старейшина

    Joined:
    20 Aug 2006
    Messages:
    399
    Likes Received:
    330
    Reputations:
    251
    Есть две подсети.. Пусть это будут 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. Turanchocks_

    Turanchocks_ Elder - Старейшина

    Joined:
    11 May 2013
    Messages:
    1,326
    Likes Received:
    3,283
    Reputations:
    17
    Палево уже то что ты решил 2 DNS,а .юзать - не знаю как это технически, однако интересно же - вот идея у чувака вполне нетривиальная, давайте послушаем реализацию.
     
  3. taha

    taha Elder - Старейшина

    Joined:
    20 Aug 2006
    Messages:
    399
    Likes Received:
    330
    Reputations:
    251
    Ну как-нибудь так:

    У клиентов нет прав на изменение настроек подключения к сети.

    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 создавать?
     
    #3 taha, 7 Sep 2015
    Last edited: 7 Sep 2015
    Turanchocks_ likes this.
  4. VY_CMa

    VY_CMa Green member

    Joined:
    6 Jan 2012
    Messages:
    917
    Likes Received:
    492
    Reputations:
    724
    Можно использовать прозрачное проксирование SSL. Без детерминирования. В TLS есть одно полезное расширение - SNI. Из него можно вытащить хост.
     
    _________________________
    Turanchocks_ and taha like this.
  5. taha

    taha Elder - Старейшина

    Joined:
    20 Aug 2006
    Messages:
    399
    Likes Received:
    330
    Reputations:
    251
    Я так понимаю нужно перехватывать SNI info в TLS clientHello message во время хэндшейка. Смотреть в ssl::server_name и фильтровать по этому полю. Никаких левых сертификатов генерировать не нужно. Так?

    Ещё бы разобраться как это в squid'е реализовать.. Ситаксис ssl_bump с его SSL Peek and Splice разнится от версии к версии. На форумах одни багрепорты и ниодного примера нормальной реализации этого чуда.

    Поставил собираться deb пакет squid-3.5.8.
     
  6. taha

    taha Elder - Старейшина

    Joined:
    20 Aug 2006
    Messages:
    399
    Likes Received:
    330
    Reputations:
    251
    archlinux + squid-3.5.7 --enabled-ssl --with-openssl

    Работает на ура.. С помощью SSL Peek and Splice можно рвать ненужные соединения..
    Если идти на заблоченый https сайт, то браузер выдает "Secure Connection Failed". На разрешенные ходит спокойно.

    [​IMG]

    Единственное что мне не нравится, это то что сертификат всеравно приходится генерировать и подключать к https_port 3129

    Завтра на работе покручу на виртуалке... Надеюсь все будет хорошо
     
    #6 taha, 7 Sep 2015
    Last edited: 7 Sep 2015
    makag likes this.
  7. taha

    taha Elder - Старейшина

    Joined:
    20 Aug 2006
    Messages:
    399
    Likes Received:
    330
    Reputations:
    251
    Решил написать решение проблемы. Сквид сильно ругался на 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
     
    makag, Fepsis, MAQUEEN and 1 other person like this.
  8. MAQUEEN

    MAQUEEN RadioActivity

    Joined:
    27 Sep 2008
    Messages:
    422
    Likes Received:
    126
    Reputations:
    32
  9. taha

    taha Elder - Старейшина

    Joined:
    20 Aug 2006
    Messages:
    399
    Likes Received:
    330
    Reputations:
    251
    Херасе Никитос гиперактивный.. Уже и статью для хабра накатал)))