SCROLL
Среднее время на прочтение: 2 мин.

Перехват и просмотр HTTPS трафика на прокси-сервере Squid 4.9

Рассмотрим как реализовать перехват пользовательских HTTPS-запросов в сеть интернет для дальнейшего анализа и учета их. Все ниже описанные действия производятся на Debian 9 Stretch с установленным прокси-сервером Squid 4.9.

Для работы с HTTPS трафиком необходимо, чтобы Squid был собран с следующими параметрами — --enable-ssl-crtd --with-openssl

Как собрать из исходников Squid 4.9 с необходимыми параметрами, можно посмотреть из этой статьи.

Для просмотра HTTPS трафика, прокси-сервер Squid должен иметь свой собственный СА сертификат, который используется для подписывания динамически генерируемых сертификатов для серверов, к которым пользователи посылают запросы.

Выполним генерацию CA сертификата и назначим права доступа для него, выполним команды:

cd /usr/local/etc/squid/ssl
openssl req -new -newkey rsa:2048 -days 3650 -nodes -x509 -keyout squidca.pem -out squidca.pem

chown proxy:proxy squidca.pem 
chmod 640 squidca.pem

Конвертируем сертификат в формат для импорта на пользовательские системы:

openssl x509 -outform der -in squidca.pem -out squidca.crt
Как скачать сертификат из Linux системы в Windows, можно посмотреть из этой статье.
Полученный сертификат необходимо установить в «Доверенные корневые сертификаты» на все пользовательские компьютеры, которые будут работать через прокси-сервер Squid. В доменной среде это проще всего сделать при помощи GPO (Group Policy objects).

Далее необходимо инициализировать каталог для хранения кэша имитированных сертификатов и указать разрешения на этот каталог для прокси-сервера Squid, выполним команды:

/usr/lib/squid/security_file_certgen -c -s /var/lib/ssl_db -M 4MB

chown proxy:proxy -R /var/lib/ssl_db

В файле конфигурации /etc/squid/squid.conf указываем следующие параметры:

/etc/squid/squid.conf
http_port 3128 ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/etc/squid/ssl/squidca.pem

acl step1 at_step SslBump1

ssl_bump peek step1
ssl_bump bump all

sslcrtd_program /usr/lib/squid/security_file_certgen -s /var/lib/ssl_db -M 4MB

Выше описанные параметры предполагают перехват всех запросов к HTTPS сайтам. Но как показала практика такой вариант настройки может наложить некие сложности в работе некоторых сайтов и для реализации возможности указания сайтов исключения из перехвата HTTPS трафика, зададим следующие параметры:

/etc/squid/squid.conf
acl nosslintercept ssl::server_name "/etc/squid/sites_nossl.txt"

acl step1 at_step SslBump1

ssl_bump peek step1
ssl_bump splice nosslintercept 
ssl_bump bump all

Указываем ACL (nosslintercept) с указанием списка сайтов исключений (прим. /etc/squid/sites_nossl.txt) и затем в обработке ssl_bump ничего не делаем с указанными в списке сайтами, а запросы к всем остальными сайтам мы перехватываем.

Перезапускаем squid и проверяем работу:

/etc/init.d/squid restart

На скриншоте выше видим что запрос к сайту https://yandex.ru был успешно перехвачен прокси-сервером, о чем свидетельствует имитированный сертификат и в лог-файле /var/log/access.log будут фиксироваться все действия на данном сайте.

В случае блокирования доступа какого либо сайта средствами прокси-сервера, будет корректно отрабатывать директива DENY_INFO. Пользователь при входе на заблокированный сайт будет видеть заглушку прокси-сервера, вместо не информативного сообщения о разрыве соединения…

Обсуждение

54 комментариев
  • Здравствуйте.
    Помогите пожалуйста с конфигом для squid-a, мучаюсь второй день, информации на эту тему в сети очень мало, а работающих примеров так и не нашёл.
    Нужен минимальный работающий конфиг чтобы работало проксирование для веб-сокетов через https (wss://).
    Заранее благодарен за любую помощь.

    • Это ответ на комментарий Алексей

      Добрый день,
      Можете прекратить мучаться, сокеты не поддерживаются в Squid, по крайней мере в 4.9 точно не поддерживаются.

  • Приветствую! После того, как создал сертификат, поправил конф. файл и рестартанул сквид вылезла следующая ошибка:
    FATAL: No valid signing certificate configured for HTTP_port [::]:3128
    FATAL: No valid signing certificate configured for HTTP_port [::]:3128
    Failed to start LSB: Squid HTTP Proxy version 4.x.

    В чём может быть беда? Заранее благодарю!

  • Доброго дня! А не существует разве реальных, а не самоподписных сертификатов для таких задач?
    И второе. WCCP не пощупали?

    • Это ответ на комментарий TinyRaccoon

      Да я думаю что можно с реальным сертификатом, я просто не задавался таким вопросом.
      WCCP щупал, но мне не подошло, я PBR заруливал трафик.

    • Это ответ на комментарий TinyRaccoon

      Как вы себе такое представляете? Один сервер, удостоверяет все веб сайты интернета? Какой тогда смыл в сертификатах? Любой тов. майор будет делать mitm и в шифровании смысла не будет. Это чисто моё мнение, не утверждение.

      • Это ответ на комментарий влад

        Что значит как я себе это представляю. Я представляю это так что я как системный администратор должен контролировать куда кто ходит из корпоративной сети.

  • Извините, а как это проделать в системе wbnlows? Возможно, я запутался, но всё же хотелось получить ответ. Буду благодарен

    • Это ответ на комментарий Sorx

      Без понятия, не задавался таким вопросом и не разбирал.

  • Существует ли возможность расшифровать трафик только для указанных пользователей, если известен только его логин(IP меняется постоянно)?

  • Добавь в конфиг pinger_enable off — это отключит ICMP pinger. Он так же нужен для настройки связки прокси серверов.

  • Насколько мне известно netdb нужен для настройки работы нескольких прокси серверов, у меня он отключен. Отключается в конфиге строчкой netdb_filename none, у меня она в самом вверху. После этого эти ошибки не появляются. Но думаю тормоза не из-за этих ошибок.

    • Это ответ на комментарий Unix_day

      Рестартанул сквид,netdb ошибки пропали,но еще были вот эти они так и остались.Но тоже думаю проблема в задержках не в этом
      2020/03/03 18:54:45| pinger: Initialising ICMP pinger …
      2020/03/03 18:54:45| Open icmp_sock: (1) Operation not permitted
      2020/03/03 18:54:45| pinger: Unable to start ICMP pinger.
      2020/03/03 18:54:45| Open icmp_sock: (1) Operation not permitted
      2020/03/03 18:54:45| pinger: Unable to start ICMPv6 pinger.
      2020/03/03 18:54:45| FATAL: pinger: Unable to open any ICMP sockets.
      2020/03/03 18:54:46 kid1| storeLateRelease: released 0 objects
      2020/03/03 18:54:59 kid1| Recv recv: (111) Connection refused
      2020/03/03 18:54:59 kid1| Closing Pinger socket on FD 26
      #####################
      Думаю может в конфиге slice/bump
      вот как у меня выглядит
      acl step1 at_step SslBump1
      ssl_bump peek step1
      ssl_bump splice all
      Самое интересное оно ж блин работает.Acceslog пишет правда изредка с ошибками HIER NONE,на сайты заходит сертификат не требует,но оч долго.Попробую завтра скормлю сертификат отпишу как работает

  • В логах /var/log/squid/cache все в порядке? Попробуйте для теста исключить микротик, перевести режим работы сквида на непрозрачный, будет так же тормозить? Если нет то коппйте в сторону микротика.

    • Это ответ на комментарий Unix_day

      Спасибо,за ответ.Дело в том что хочется именно прозрачный для мониторинга посещения сайтов и трафика.Нет не в порядке:
      2020/03/03 19:40:10 kid1| Logfile: opening log stdio:/var/cache/squid/netdb.state
      2020/03/03 19:40:10 kid1| logfile_mod_stdio_open ERROR: stdio:/var/cache/squid/netdb.state: (13) Permission denied
      2020/03/03 19:40:10 kid1| logfileOpen: stdio:/var/cache/squid/netdb.state: couldn’t open!
      2020/03/03 19:40:10 kid1| netdbSaveState stdio:/var/cache/squid/netdb.state: (13) Permission denied
      По непрозрачному не помню уже,давно тестировал вроде как все ок было

  • Доброго времени,есть проблема в очень медленной работе.Первое открытие сайта 5-10 секунд на http и 10-15с https сайт.Может подскажете что может быть…Squid работает внутри(прим) сети 192.168.10.0/24 имея ip 192.168.10.30. Роутер микрот с правилами
    /ip firewall mangle
    add action=mark-routing chain=prerouting dst-address=!192.168.10.0/24 \
    dst-port=80,443,8080 new-routing-mark=squid passthrough=yes protocol=tcp \
    src-address=!192.168.10.30 src-address-list=squid
    /ip route
    add distance=1 gateway=192.168.10.30 routing-mark=squid
    ——Конфиг squi.conf
    # Recommended minimum configuration:
    acl localnet src 0.0.0.1-0.255.255.255 # RFC 1122 «this» network (LAN)
    acl localnet src 10.0.0.0/8 # RFC 1918 local private network (LAN)
    acl localnet src 100.64.0.0/10 # RFC 6598 shared address space (CGN)
    acl localnet src 169.254.0.0/16 # RFC 3927 link-local (directly plugged) machines
    acl localnet src 172.16.0.0/12 # RFC 1918 local private network (LAN)
    acl localnet src 192.168.0.0/16 # RFC 1918 local private network (LAN)
    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
    #
    # Recommended minimum Access Permission configuration:
    #
    # Deny requests to certain unsafe ports
    http_access deny !Safe_ports

    # Deny CONNECT to other than secure SSL ports
    http_access deny CONNECT !SSL_ports

    # Only allow cachemgr access from localhost
    http_access allow localhost manager
    http_access deny manager

    # We strongly recommend the following be uncommented to protect innocent
    # web applications running on the proxy server who think the only
    # one who can access services on «localhost» is a local user
    #http_access deny to_localhost
    #
    # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
    #
    # Example rule allowing access from your local networks.
    # Adapt localnet in the ACL section to list your (internal) IP networks
    # from where browsing should be allowed
    http_access allow localnet
    http_access allow localhost

    # And finally deny all other access to this proxy
    http_access deny all

    # Squid normally listens to port 3128
    http_port 3128
    http_port 3129 intercept
    https_port 3130 intercept ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/etc/squid/ssl/squidca.pem

    acl step1 at_step SslBump1
    ssl_bump peek step1
    ssl_bump splice all

    sslcrtd_program /usr/lib/squid/security_file_certgen -s /var/lib/ssl_db -M 4MB

    # Uncomment and adjust the following to add a disk cache directory.
    #cache_dir ufs /var/cache/squid 100 16 256

    # Leave coredumps in the first cache dir
    coredump_dir /var/cache/squid
    error_directory /usr/share/squid/errors/ru
    #
    # Add any of your own refresh_pattern entries above these.
    #
    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

    На сервере в PREROUTING redirect 80 to 3129 и 443 на 3130

    Также в логах часто NONE/200 0 CONENCT «какие-то ip» — HIER_NONE/- —

    • Это ответ на комментарий klima

      Забыл написать,но по конфигу понятно,работаю в прозрачном режиме без установки серта в браузеры.Помогите пожалуйста!

    • Это ответ на комментарий Unix_day

      Опишите действия если поможет. Добавлю информацию в статью, вдруг кому еще тоже пригодится. Спасибо!

      • Это ответ на комментарий Жаконда

        Пересобрал squid все по вашей статье только версию использовал 4.10, c применением патча (long-term fix for v4, take2 (unofficial)). По итогу squid работает 24ч в режиме «SSL Bump all» без единого падения.

        Порядок действий:

        1. Скачиваем исходники Squid
        2. Распаковываем скаченный архив Squid
        3. Скачиваем патч long-term fix for v4, take2 (unofficial)
        https://bugs.squid-cache.org/show_bug.cgi?id=4864

        4. Переходим в распакованную директорию Squid «cd /squid-4.10/src/»
        5. Применяем патч командой. В команде указываем путь до патча.
        patch < /root/sqd/squid-4.10/SQUID-385-Comm_MonitorRead-assertion-simple-v4-t2.patch

        должен быть следующий вывод:
        patching file FwdState.cc
        patching file FwdState.h
        patching file peer_select.cc

        6. После собираем и устанавливаем наш Squid.

        • Это ответ на комментарий Unix_day

          Спасибо. Если не против то данный мануал оформлю как статью.

          Вопрос а почему выбор пал именно на версию 4.10 ?

        • Это ответ на комментарий Жаконда

          Конечно, только за, здорово если это поможет кому нибудь.4.10 выбрал потому как сейчас это последняя версия на момент 06.03.20, которая годиться для использования в pruduction среде. Только поэтому.

        • Это ответ на комментарий Unix_day

          Да конечно будет полезна кому нибудь данная информация!
          Еще раз спасибо за вклад в общее дело ! 🙂

  • Прошу помогите, сил больше нет. На данный момент установлен Squid 4.9 на Debian 9 x64. Собирал из исходников для работы с HTTPS трафиком со следующими параметрами:

    ./configure –prefix=/usr –localstatedir=/var –libexecdir=/usr/lib/squid –datadir=/usr/share/squid –sysconfdir=/etc/squid –enable-ssl-crtd –with-openssl –enable-translation –enable-cpu-profiling –disable-dependency-tracking —

    enable-delay-pools –enable-icmp –enable-linux-netfilter –with-large-files –enable-auth-negotiate=kerberos –with-default-user=proxy –with-logdir=/var/log/squid –with-pidfile=/var/run/squid.pid

    На прокси работают 160 пользователей. Настроена доменная авторизации по kerberos, доступ разграничен на основе групп в AD. Авторизация работает, по группам из AD squid доступ в интернет предоставляет, https трафик фильтрует. Но стабильно раз в час, а бывает и по 5 раз за час Squid перезапускается, в логах /var/log/squid/cache появляется всегда одна и та же ошибка:

    assertion failed: http.cc:1533: «!Comm::MonitorsRead(serverConnection->fd)»

    Эмпирическим путем выявил что ошибка кроется в работе SSL Bumpa, конкретно в режиме «bump all». Убирал «bump all», ставил «splice all» и ошибка не появлялась, но при таком режиме работы squid не может фильтровать https трафик. Что очень важно.Скорее всего я как то не так его сконфигурировал.

    Помогите пожалуйста, кто сталкивался с подобной проблемой, как ее решить. Посоветуйте пожалуйста какие еще существуют режимы работы ssl bumpa при которых возможна фильтрация https трафика. Возможно что при другом режиме работы ssl bumpa не будет данной ошибки. Или что можно поправить или добавить в существующую конфигурацию. Поделитесь опытом. До этого был squid 4.6 на Ubuntu 18 и была точно такая же проблема и думал это из-за бага в версии squid или о.с., но как выяснилось нет, тогда была такая же ошибка…

    Заранее прошу прощения если где-то туплю, со squidом работаю нетак давно Прошу Вашей помощи. Буду признателен если укажите на ошибки.

    сам конфиг:

    $ Recommended minimum configuration:

    pinger_enable off
    cache deny all
    netdb_filename none

    $ Example rule allowing access from your local networks.
    $ Adapt to list your (internal) IP networks from where browsing
    $ should be allowed

    $acl all src 0.0.0.0/0.0.0.0
    $acl localnet src 0.0.0.1-0.255.255.255 $ RFC 1122 «this» network (LAN)
    acl localnet src 10.0.0.0/8 $ RFC 1918 local private network (LAN)
    $acl localnet src 100.64.0.0/10 $ RFC 6598 shared address space (CGN)
    $acl localnet src 169.254.0.0/16 $ RFC 3927 link-local (directly plugged) machines
    acl localnet src 172.16.0.0/12 $ RFC 1918 local private network (LAN)
    acl localnet src 192.168.0.0/16 $ RFC 1918 local private network (LAN)
    $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

    $ LDAP Kerb Groups from DC
    external_acl_type DL-ACCESSALL ttl=300 negative_ttl=60 children-startup=30 children-max=80 %LOGIN /usr/lib/squid/ext_kerberos_ldap_group_acl -a -g DL-ACCESSALL -D domain.ru
    external_acl_type DL-STANDART ttl=300 negative_ttl=60 children-startup=30 children-max=80 %LOGIN /usr/lib/squid/ext_kerberos_ldap_group_acl -a -g DL-STANDART -D domain.ru
    external_acl_type DL-STUDENT ttl=300 negative_ttl=60 children-startup=30 children-max=80 %LOGIN /usr/lib/squid/ext_kerberos_ldap_group_acl -a -g DL-STUDENT -D domain.ru

    $ ACTIVE DIRECTORY AUTH (KERBEROS)
    auth_param negotiate program /usr/lib/squid/negotiate_kerberos_auth -s HTTP/srvproxy.domain.ru
    auth_param negotiate children 80 startup=20 idle=2
    auth_param negotiate keep_alive on

    $Domain groups ACL
    acl DL-ACCESSALL external DL-ACCESSALL
    acl DL-STANDART external DL-STANDART
    acl DL-STUDENT external DL-STUDENT

    $acl upload_limit1 req_header Content-Length [0-9]{6,}

    $acl auth proxy_auth REQUIRED

    $Список облачных ресурсов
    acl cloud url_regex -i «/etc/squid/accesses/cloud»

    $список запрещенных доменов для группы «standart»
    acl standart_block dst «/etc/squid/accesses/standart_block»

    $список запрещенных доменов для группы «student»
    acl student dst «/etc/squid/accesses/studentblock»

    $список запрещенных доменов для всех
    acl blockDOMAINall dst «/etc/squid/accesses/domain_block_for_all»

    $список запрещенных ip для всех
    acl blockIPall dst «/etc/squid/accesses/ip_block_for_all»

    $список разрешенных доменов для всех
    acl white_list dst «/etc/squid/accesses/white_list»

    $список разрешенных ip для всех
    acl allowIPall dst «/etc/squid/accesses/ip_allow_for_all»

    $список запрещенных HTTPS сайтов
    acl ssl_black_domain ssl::server_name_regex «/etc/squid/accesses/ssl_black_domain_reg»

    $Список сайтов для которых не будет подменяться сертификат по регулярным выражениям.
    acl NoSSLIntercept ssl::server_name_regex «/etc/squid/accesses/ssl_white_domain_reg»

    $Список сайтов для которых не будет подменяться сертификат
    acl domainwhite dst «/etc/squid/accesses/ssl_white_domain_dst»

    $Список ip сайтов для которых не будет подменяться сертификат
    acl white_ip dst «/etc/squid/accesses/ssl_white_ip»

    $acl upload_limit1 req_header Content-Length [0-9]{6,}

    $ ACL for method POST
    acl upload_method method post

    $Запрет POST на облачные ресурсы
    http_access deny cloud upload_method

    http_access deny blockIPall
    http_access deny blockDOMAINall

    http_access allow allowIPall
    http_access allow white_list

    $SSL Bump ACL
    acl DiscoverSNIHost at_step SslBump1

    $ Recommended minimum Access Permission configuration:
    $ Deny requests to certain unsafe ports
    http_access deny !Safe_ports

    $ Deny CONNECT to other than secure SSL ports
    http_access deny CONNECT !SSL_ports

    $ Only allow cachemgr access from localhost
    http_access allow localhost manager
    http_access deny manager

    $ We strongly recommend the following be uncommented to protect innocent
    $ web applications running on the proxy server who think the only
    $ one who can access services on «localhost» is a local user
    $http_access deny to_localhost

    $ INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS

    $ Example rule allowing access from your local networks.
    $ Adapt localnet in the ACL section to list your (internal) IP networks
    $ from where browsing should be allowed

    $ ACTIVE DIRECTORY AUTH USERS
    $http_access allow auth

    $ Access rules for Domain groups

    http_access allow DL-ACCESSALL
    http_access deny DL-STUDENT student
    http_access allow DL-STUDENT
    http_access deny DL-STANDART standart_block
    http_access allow DL-STANDART

    $http_access allow localnet
    http_access allow localhost

    $ And finally deny all other access to this proxy
    http_access deny all

    $принимаем даже ошибочные ssl сертификаты

    tls_outgoing_options flags=DONT_VERIFY_PEER
    sslproxy_cert_error allow all

    $HTTPS filter ON

    http_port 10.168.60.18:3128 ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/etc/squid/ssl/sq4.pem

    $ SSL bump rules

    ssl_bump peek DiscoverSNIHost
    ssl_bump splice NoSSLIntercept
    ssl_bump splice white_ip
    ssl_bump splice domainwhite
    ssl_bump terminate ssl_black_domain
    $ssl_bump peek all
    $ssl_bump splice all
    ssl_bump bump all

    $ Certs generate ON
    sslcrtd_program /usr/lib/squid/security_file_certgen -s /etc/squid/ssl/ssl_db -M 4MB
    sslcrtd_children 30 startup=10 idle=1

    $ HEADERS in logs
    strip_query_terms off
    $log_mime_hdrs on

    $ Запрещаем отображение версии прокси-сервера и имени
    httpd_suppress_version_string on
    visible_hostname PROXYSERVER

    $ DNS settings
    dns_nameservers 10.168.60.100
    dns_nameservers 10.168.60.200

    $ Uncomment and adjust the following to add a disk cache directory.
    $cache_dir ufs /var/cache/squid 100 16 256

    $ Leave coredumps in the first cache dir
    coredump_dir /var/cache/squid

    error_directory /usr/share/squid/errors/ru

    $
    $ Add any of your own refresh_pattern entries above these.
    $
    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

    • Это ответ на комментарий Unix_day

      Попробуйте больше памяти выделить модуль генерации сертификатов.
      sslcrtd_program /usr/lib/squid/security_file_certgen -s /etc/squid/ssl/ssl_db -M 16MB

      А в целом нагрузка какая на сервер в момент когда squid перезапускается ?

      Так же чисто мое ИМХО, я бы убрал

      ssl_bump terminate ssl_black_domain
      acl ssl_black_domain ssl::server_name_regex «/etc/squid/accesses/ssl_black_domain_reg»

      И вместо них указал бы (пример)

      acl blockedsites dstdomain «/etc/squid/sites_blocked.txt»
      http_access deny blockedsites

      В этом случае при входе на заблокированный HTTPS сайт, пользователю будет показана информационная страница SQUID (из директивы DENY_INFO), вместо не информативного EER_CONNECTION_CLOSED.. пользователь может подумать что тупо не работает интернет..

      • Это ответ на комментарий Жаконда

        Squid работает на виртуальной машине Hyper-V. ОЗУ выделено 4gb, всего потребляется от 650 до 800мб и 4 виртуальных процессора. Нагрузка на ядра не превышает 10-15%, но в момент перед падением нагрузка на все ядра подскакивает раза в 3-4. Сегодня переустановил squid с применением патча, завтра буду тестировать и тогда отпишусь. Идея с acl для ssl была в том, что бы блокировать определенные ресурсы в домене, а не весь домен целиком, но это у меня пока не получилось =)

  • Уважаемый автор, спасибо за статью, непременно попытаюсь повторить всё у себя, но сразу же вопрос в развитие темы кэширования: как можно дополнительно настроить Squid чтобы он стал выполнять ещё и функции AdBlock вырезая с веб-страниц рекламу или заменять некоторые сочетания на другие? Просто оказалось недостаточно установить pi-hole, много рекламы продолжает прорываться, особенно от Яндекса.

    • Это ответ на комментарий Павел

      К сожалению в данный вопрос не вникал, поэтому не могу показать практического метода решения задачи.. Но если решите, то поделитесь, размещу, может еще кому то пригодится

  • Выполнил все по Вашей статье .Пока полет нормальный, тех ошибок больше нет. Вопрос, насчет размера кэша для имитированных сертификатов, тут рекомендовано 4MB. Как Вы считаете будет ли этого достаточно для 170 пользователей или есть смысл увеличивать этот кэш или оставить как есть.
    /usr/lib/squid/security_file_certgen -c -s /var/lib/ssl_db -M 4MB
    Огромное Вам спасибо. Приятно осознавать, что есть специалисты готовые помочь в непонятных ситуациях.
    Еще один интересный момент, если прокси включен и я пытаюсь отправить сюда коммент, то появляется страница Forbidden
    You don’t have permission to access /wp-comments-post.php on this server.

    • Это ответ на комментарий Unix_day

      Спасибо!

      По размеру кеша, я бы посмотрел как оно будет работать, если будут проблемы, то увеличить, делается благо это быстро.

      По поводу второго, так бывает что некоторые сайты некорректно работать начинают когда происходит подмена сертификата, в моем случае я столкнулся с работой личных кабинетов некоторых банковских сайтов, их пришлось добавить в исключение от просмотра https трафика.

  • вот с такими параметрами создавал сертификат:
    openssl req -new -newkey rsa:2048 -sha256 -days 36500 -nodes -x509 -extensions v3_ca -keyout squidCA4.pem -out squidCA4.pem

    • Это ответ на комментарий Unix_day

      1 — Рекомендую выполнить все как у меня в статье написано, это точно рабочий вариант.
      2 — С правами на /etc/squid/ssl/ssl_db (создана ли она вообще) и на сертификат у вас все в порядке ?

  • Error negotiating SSL connection on FD 41: error:00000001:lib(0):func(0):reason(1) (1/-1) kid1| ERROR: negotiating TLS on FD 43: error:00000000:lib(0):func(0):reason(0) (5/-1/104
    Нашел, что эти ошибки возможно вызваны не squida, а OPENSSL, но как их исправить пока не ясно, никто не сталкивался с этими ошибками?

    • Это ответ на комментарий Unix_day

      Покажите полный конфиг, может что прояснит ситуацию.

      • Это ответ на комментарий Жаконда

        #
        # Recommended minimum configuration:
        #

        # Example rule allowing access from your local networks.
        # Adapt to list your (internal) IP networks from where browsing
        # should be allowed
        acl localnet src 0.0.0.1-0.255.255.255 # RFC 1122 «this» network (LAN)
        acl localnet src 10.0.0.0/8 # RFC 1918 local private network (LAN)
        acl localnet src 100.64.0.0/10 # RFC 6598 shared address space (CGN)
        acl localnet src 169.254.0.0/16 # RFC 3927 link-local (directly plugged) machines
        acl localnet src 172.16.0.0/12 # RFC 1918 local private network (LAN)
        acl localnet src 192.168.0.0/16 # RFC 1918 local private network (LAN)
        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

        #HTTPS filter ON

        sslcrtd_program /usr/lib/squid/security_file_certgen -s /etc/squid/ssl/ssl_db -M 16MB
        sslcrtd_children 50 startup=10 idle=10

        #QUICK ACL

        acl NoSSLIntercept ssl::server_name_regex «/etc/squid/accesses/ssl_white_domain_reg»

        acl DiscoverSNIHost at_step SslBump1

        #
        # Recommended minimum Access Permission configuration:
        #
        # Deny requests to certain unsafe ports
        http_access deny !Safe_ports

        # Deny CONNECT to other than secure SSL ports
        http_access deny CONNECT !SSL_ports

        # Only allow cachemgr access from localhost
        http_access allow localhost manager
        http_access deny manager

        # We strongly recommend the following be uncommented to protect innocent
        # web applications running on the proxy server who think the only
        # one who can access services on «localhost» is a local user
        #http_access deny to_localhost

        #
        # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
        #

        # Example rule allowing access from your local networks.
        # Adapt localnet in the ACL section to list your (internal) IP networks
        # from where browsing should be allowed
        http_access allow localnet
        http_access allow localhost

        # And finally deny all other access to this proxy
        http_access deny all

        #sslproxy_cert_error allow allow_certs

        always_direct allow all
        sslproxy_cert_error allow all
        sslproxy_flags DONT_VERIFY_PEER

        # Squid normally listens to port 3128

        # SSL bump rules
        ssl_bump peek DiscoverSNIHost
        ssl_bump splice NoSSLIntercept
        ssl_bump bump all

        http_port 10.168.70.119:3129 ssl-bump \
        cert=/etc/squid/ssl/squidCA4.pem \
        generate-host-certificates=on \
        dynamic_cert_mem_cache_size=16MB

        # HEADERS in logs
        strip_query_terms off
        #log_mime_hdrs on

        # Запрещаем отображение версии прокси-сервера и имени
        httpd_suppress_version_string on
        visible_hostname PROXYSERVER

        # DNS settings
        dns_nameservers 10.168.71.12
        dns_nameservers 10.168.71.2

        # DEBUG
        #debug_options 10,11
        #debug_options ALL,1 33,2 28,9

        forwarded_for off
        header_access Via deny all

        # Uncomment and adjust the following to add a disk cache directory.
        #cache_dir ufs /var/cache/squid 100 16 256

        # Leave coredumps in the first cache dir
        coredump_dir /var/cache/squid

        error_directory /usr/share/squid/errors/ru

        #
        # Add any of your own refresh_pattern entries above these.
        #
        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

  • Подскажите пожалуйста. Настроил squid4 на работу с «HTTPS». Создал ключ для debiana и открытый ключ, установил его в браузер и сайты открываются, но в логах /var/log/squid/cache сыпятся вот такие ошибки, подскажите пожалуйста куда копать:

    Error negotiating SSL connection on FD 41: error:00000001:lib(0):func(0):reason(1) (1/-1)

    kid1| ERROR: negotiating TLS on FD 43: error:00000000:lib(0):func(0):reason(0) (5/-1/104

    SSL bump rules
    ssl_bump peek DiscoverSNIHost

    ssl_bump splice NoSSLIntercept

    ssl_bump bump all

    в конфиге squid установлен следующий параметр:

    http_port 10.168.70.119:3129 ssl-bump
    cert=/etc/squid/ssl/squidCA4.pem
    generate-host-certificates=on
    dynamic_cert_mem_cache_size=16MB

  • поторопился я (

    как только включаю intercept сразу все падает (
    error:invalid-request в логах пишет

    • Это ответ на комментарий Ybrc

      Ох сложно сказать, по идее должно работать. На днях буду разбирать WCCP, соответственно он предполагает прозрачный режим работы. Проверю на себе прозрачный режим работы.

  • а вот этот сертификат в windows добавляем в доверенные корневые центры сертификации, а как быть если в компании есть Linux станции, как быть в этой ситуации?

    Заранее спасибо!

    • Это ответ на комментарий Ybrc

      Debian по идее так:

      cp certuficate.crt /usr/local/share/ca-certificate
      update-ca-certificates

      • Это ответ на комментарий Жаконда

        Спасибо большое!!!!
        ты супер!!!!

        Вопрос только один остался, получается прокси сервер не работает в прозрачном режиме и нужно на всех компах прописывать в браузере прокси?

        • Это ответ на комментарий Ybrc

          Не за что 🙂

          Прописывать нужно только в том случае если используется Kerberos SSO аутентификация.

        • Это ответ на комментарий Жаконда

          у меня AD 2012 по поводу Kerberos SSO аутентификация честно не могу сказать ((((((

          но у меня работает инет по твоей инструкции только через принудительное прописывание в браузере (

          может что то упустил из еще каких то настроек?

          У меня сквид стоит ни как роутер, а как машина внутри сети но настроенная как роутер (форвординг пакетов) + с заворотом портов 80 и 443 на 3128 и 3129

        • Это ответ на комментарий Ybrc

          Тогда надо в Squid пропиши:

          http 3128 intercept ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/etc/squid/ssl/squidca.pem

          А почему не заворачивать с 80,443 на один 3128 !?

        • Это ответ на комментарий Жаконда

          супер ) получилось!
          Спасибо большое!

  • Вопрос, позвольте, коль тема свеженькая.
    Кеширование некоторых объектов (тех же картинок с одноклассников и прочей ахинеи) приходящих по https реализованы в последних версиях сквида?

    Спасибо.

    • Это ответ на комментарий Сталин

      Так как ssl-bump делает https видимым как http, то да кеширование картинок и всего там вам еще надо будет осуществлятся.

  • что то ругается все равно (
    NONE/400 3620 NONE error:invalid-request — HIER_NONE/- text/html

    а можете показать полностью конфиг как у вас выглядит?

    • Это ответ на комментарий Виталий

      А в логах /var/log/squid/cache.log что пишут !?

      Полностью выкладывать нет смысла, т.к. там дефолтный с описанием работы с HTTPS трафика:

      acl nosslintercept dstdomain «/etc/squid/sites_nosslintercept.txt»

      http_port 3128 ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/etc/squid/ssl/squidca.pem

      acl step1 at_step SslBump1
      ssl_bump peek step1
      ssl_bump splice nosslintercept
      ssl_bump bump all

      sslcrtd_program /usr/lib/squid/security_file_certgen -s /var/lib/ssl_db -M 4MB

      Где в ACL у меня описываются сайты которые не нужно перехватывать..

      • Это ответ на комментарий Жаконда

        все заработало, но только когда я прописал прокси сервер у настройках браузера.
        почему так или так оно и должно было работать?

        • Это ответ на комментарий Виталий

          Сложно сказать не зная что и как вы там у себя реализовываете.. Но заработало и слава богу 🙂

        • Это ответ на комментарий Жаконда

          Четко по инструкции))) и больше ничего не делал.

          а у вас работает как прозрачный прокси или тоже ручками настраивали в браузере?

        • Это ответ на комментарий Виталий

          Ну у меня так же реализована Kerberos аутентификация пользователей, а такой метод не поддерживает прозрачное подключение.
          Поэтому я так же как и вы прописывал подключение к прокси на клиентских машинах.

        • Это ответ на комментарий Виталий

          Потому что нет опции intercept, она как раз и заставляет работать прокси на порту 3128 в прозрачном режиме, а у тебя в конфиге нет этой опции