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

Как установить прокси сервер Squid на Debian 12

Squid — это программный пакет, реализующий функцию кэширующего прокси-сервера для протоколов HTTP, FTP, Gopher и (в случае соответствующих настроек) HTTPS.

В этом руководстве я покажу, как установить прокси сервер Squid на операционной системе Debian 12. Установку будем выполнять из исходников и актуальную на момент написания статьи версию Squid.

Официальная ветка Squid в Github — https://github.com/squid-cache/squid

Установка зависимостей

Устанавливаем необходимые пакеты зависимостей.

apt-get update
apt-get install build-essential make automake autoconf libtool libtool-bin ed libssl-dev libkrb5-dev libldap2-dev libk5crypto3 libsasl2-dev libpam0g libcap2-dev git -y

Сборка и установка

Актуальную версию пакета можно посмотреть по ссылке:

Клонируем репозиторий Squid с GitHub:

cd /opt
git clone https://github.com/squid-cache/squid.git squid 

Переходим в клонированный репозиторий.

cd squid

Актуальная версия

Если нужна самая актуальная версия релиза, то переключится на нее можно выполнив команду:

LATEST_TAG=$(curl -s https://api.github.com/repos/squid-cache/squid/releases/latest | grep -oP '"tag_name": "\K[^"]+')
git checkout $LATEST_TAG

Определенная версия

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

git tag | grep '^SQUID_' | sort -t_ -k2,2V -k3,3V -k4,4V

А затем переключаемся на нужную ветку:

git checkout SQUID_5_9

Подготовка

Выполним bootstrapping (подготовку) исходников к сборке.

bootstrapping — это процесс подготовки среды для компиляции и сборки программы. Обычно это включает в себя генерацию файлов configure, Makefile и других вспомогательных файлов, необходимых для сборки.
./bootstrap.sh

Успешный вывод:

automake (1.16.5) : automake
autoconf (2.71) : autoconf
libtool  (2.4.7) : libtool
libtool path : /usr/bin
Bootstrapping primary Squid sources
Bootstrapping libltdl sub-project
Fixing configure recursion
Autotool bootstrapping complete.

Сборка

Выполняем конфигурирование с поддержкой 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 \
--disable-ipv6 \
--enable-removal-policies="lru,heap" \
--enable-delay-pools \
--enable-icmp \
--enable-linux-netfilter \
--enable-external-acl-helpers \
--with-large-files \
--with-default-user=proxy \
--with-logdir=/var/log/squid \
--with-pidfile=/var/run/squid.pid

Собираем и устанавливаем пакет Squid:

make
make install

Post-Install настройка

Создаем необходимые каталоги для работы Squid и назначаем для них соответствующие права доступа:

mkdir -p /var/log/squid /var/spool/squid /etc/squid/ssl
chown proxy:proxy /var/log/squid /var/spool/squid /etc/squid/ssl

chmod 750 /var/log/squid /var/spool/squid /etc/squid/ssl

Logrotate

Создаем файл ротации логов /etc/logrotate.d/squid:

cat << EOF > /etc/logrotate.d/squid
/var/log/squid/access.log {
daily
compress
delaycompress
rotate 4
missingok
nocreate
sharedscripts
postrotate
    /etc/init.d/squid reload
endscript
}

/var/log/squid/cache.log {
daily
compress
delaycompress
rotate 4
missingok
nocreate
sharedscripts
postrotate
    /etc/init.d/squid reload
endscript
}
EOF

System V Init

Для управление запуском Squid создадим стартовый скрипт /etc/init.d/squid для System V Init.

/etc/init.d/squid
#! /bin/sh
#
# squid         Startup script for the SQUID HTTP proxy-cache.
#
# Version:      @(#)squid.rc  1.0  07-Jul-2006  luigi@debian.org
#
# pidfile: /var/run/squid.pid
#
### BEGIN INIT INFO
# Provides:          squid
# Required-Start:    $network $remote_fs $syslog
# Required-Stop:     $network $remote_fs $syslog
# Should-Start:      $named
# Should-Stop:       $named
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Squid HTTP Proxy version 4.x
### END INIT INFO

NAME=squid
DESC="Squid HTTP Proxy"
DAEMON=/usr/sbin/squid
PIDFILE=/var/run/$NAME.pid
CONFIG=/etc/squid/squid.conf
SQUID_ARGS="-YC -f $CONFIG"

[ ! -f /etc/default/squid ] || . /etc/default/squid

. /lib/lsb/init-functions

PATH=/bin:/usr/bin:/sbin:/usr/sbin

[ -x $DAEMON ] || exit 0

ulimit -n 65535

find_cache_dir () {
        w="     " # space tab
        res=`$DAEMON -k parse -f $CONFIG 2>&1 |
                grep "Processing:" |
                sed s/.*Processing:\ // |
                sed -ne '
                        s/^['"$w"']*'$1'['"$w"']\+[^'"$w"']\+['"$w"']\+\([^'"$w"']\+\).*$/\1/p;
                        t end;
                        d;
                        :end q'`
        [ -n "$res" ] || res=$2
        echo "$res"
}

grepconf () {
        w="     " # space tab
        res=`$DAEMON -k parse -f $CONFIG 2>&1 |
                grep "Processing:" |
                sed s/.*Processing:\ // |
                sed -ne '
                        s/^['"$w"']*'$1'['"$w"']\+\([^'"$w"']\+\).*$/\1/p;
                        t end;
                        d;
                        :end q'`
        [ -n "$res" ] || res=$2
        echo "$res"
}

create_run_dir () {
        run_dir=/var/run/squid
        usr=`grepconf cache_effective_user proxy`
        grp=`grepconf cache_effective_group proxy`

        if [ "$(dpkg-statoverride --list $run_dir)" = "" ] &&
           [ ! -e $run_dir ] ; then
                mkdir -p $run_dir
                chown $usr:$grp $run_dir
                [ -x /sbin/restorecon ] && restorecon $run_dir
        fi
}

start () {
        cache_dir=`find_cache_dir cache_dir`
        cache_type=`grepconf cache_dir`
        run_dir=/var/run/squid

        #
        # Create run dir (needed for several workers on SMP)
        #
        create_run_dir

        #
        # Create spool dirs if they don't exist.
        #
        if test -d "$cache_dir" -a ! -d "$cache_dir/00"
        then
                log_warning_msg "Creating $DESC cache structure"
                $DAEMON -z -f $CONFIG
                [ -x /sbin/restorecon ] && restorecon -R $cache_dir
        fi

        umask 027
        ulimit -n 65535
        cd $run_dir
        start-stop-daemon --quiet --start \
                --pidfile $PIDFILE \
                --exec $DAEMON -- $SQUID_ARGS < /dev/null
        return $?
}

stop () {
        PID=`cat $PIDFILE 2>/dev/null`
        start-stop-daemon --stop --quiet --pidfile $PIDFILE --exec $DAEMON
        #
        #       Now we have to wait until squid has _really_ stopped.
        #
        sleep 2
        if test -n "$PID" && kill -0 $PID 2>/dev/null
        then
                log_action_begin_msg " Waiting"
                cnt=0
                while kill -0 $PID 2>/dev/null
                do
                        cnt=`expr $cnt + 1`
                        if [ $cnt -gt 24 ]
                        then
                                log_action_end_msg 1
                                return 1
                        fi
                        sleep 5
                        log_action_cont_msg ""
                done
                log_action_end_msg 0
                return 0
        else
                return 0
        fi
}

cfg_pidfile=`grepconf pid_filename`
if test "${cfg_pidfile:-none}" != "none" -a "$cfg_pidfile" != "$PIDFILE"
then
        log_warning_msg "squid.conf pid_filename overrides init script"
        PIDFILE="$cfg_pidfile"
fi

case "$1" in
    start)
        res=`$DAEMON -k parse -f $CONFIG 2>&1 | grep -o "FATAL: .*"`
        if test -n "$res";
        then
                log_failure_msg "$res"
                exit 3
        else
                log_daemon_msg "Starting $DESC" "$NAME"
                if start ; then
                        log_end_msg $?
                else
                        log_end_msg $?
                fi
        fi
        ;;
    stop)
        log_daemon_msg "Stopping $DESC" "$NAME"
        if stop ; then
                log_end_msg $?
        else
                log_end_msg $?
        fi
        ;;
    reload|force-reload)
        res=`$DAEMON -k parse -f $CONFIG 2>&1 | grep -o "FATAL: .*"`
        if test -n "$res";
        then
                log_failure_msg "$res"
                exit 3
        else
                log_action_msg "Reloading $DESC configuration files"
                start-stop-daemon --stop --signal 1 \
                        --pidfile $PIDFILE --quiet --exec $DAEMON
                log_action_end_msg 0
        fi
        ;;
    restart)
        res=`$DAEMON -k parse -f $CONFIG 2>&1 | grep -o "FATAL: .*"`
        if test -n "$res";
        then
                log_failure_msg "$res"
                exit 3
        else
                log_daemon_msg "Restarting $DESC" "$NAME"
                stop
                if start ; then
                        log_end_msg $?
                else
                        log_end_msg $?
                fi
        fi
        ;;
    status)
        status_of_proc -p $PIDFILE $DAEMON $NAME && exit 0 || exit 3
        ;;
    *)
        echo "Usage: /etc/init.d/$NAME {start|stop|reload|force-reload|restart|status}"
        exit 3
        ;;
esac

exit 0

Настройка Squid для автозапуска, обновление конфигурации systemd, запуск и проверка работы службы:

chmod a+x /etc/init.d/squid
update-rc.d squid defaults

systemctl daemon-reexec
systemctl daemon-reload

/etc/init.d/squid start
/etc/init.d/squid status
 

ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОДДЕРЖИ АВТОРА ДОНАТОМ

Обсуждение

Ответ на комментарий vladОтмена ответа
104 комментариев
  • Делал по вашему мануалу на 18.04. Работает но блек листы не отрабатывает
    1545309485.923 0 10.21.160.96 TCP_DENIED/407 4167 CONNECT vk.com:443 — HIER_NONE/- text/html
    1545309485.925 0 10.21.160.96 TCP_DENIED/407 4167 CONNECT vk.com:443 — HIER_NONE/- text/html
    1545309486.593 667 10.21.160.96 TCP_TUNNEL/200 4343 CONNECT vk.com:443 user@home.loc HIER_DIRECT/22.22.22.22 —
    1545309486.683 747 10.21.160.96 TCP_TUNNEL/200 4342 CONNECT vk.com:443 user@home.locHIER_DIRECT/22.22.22.23 —

    # Путь к белому списку сайтов
    acl WhiteList dstdomain «/etc/squid/acl/white_list»
    # Путь к черному списку сайтов
    acl BlackList dstdomain «/etc/squid/acl/black_list»
    #########################
    # Параметры DNS записей #
    #########################
    # Список DNS серверов(IP адреса), которые будут использоваться вместо тех, что определены в /etc/resolv.conf файле
    dns_nameservers 22.22.22.22
    dns_nameservers 22.22.22.23
    #########################################
    # Правила ограничений доступа клиентов #
    #########################################
    # Запретить доступ к портам, отсутствующим в списке выше
    http_access deny !Safe_ports
    # Запретить метод CONNECT не на SSL-порт
    http_access deny CONNECT !SSL_ports
    # Разрешить только локальное управление кэшем
    http_access allow localhost manager
    http_access deny manager
    # Не ограничивать локальный доступ с сервера
    http_access allow localhost
    # Доступ в интернет без ограничения доступа
    http_access allow PROXY_ADMINS

    http_access allow PROXY_WHITE !BlackList
    # Блокировать интернет всем кто в указанной ниже группе AD
    http_access deny PROXY_BLOCK
    # Блокировать запрещенные сайты
    # http_access deny BlackList
    # Правила разрешающего доступ в интернет только авторизованным пользователям AD
    http_access allow auth
    # Блокирует все, что не было разрешено выше
    http_access deny all
    ################################################
    # Правила подключений клиентов к прокси-серверу#
    ################################################
    # Подключения через прозрачный порт
    http_port 10.21.160.9:3128 intercept options=NO_SSLv3:NO_SSLv2
    # Подключение через указания прокси-сервера на строне клиента
    http_port 10.21.160.9:3130 options=NO_SSLv3:NO_SSLv2
    # Подключение по HTTPS через прозрачный порт с параметрами подставки сертификата
    https_port 10.21.160.9: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
    # Укажем список блокируемых ресурсов (в файле домены вида .domain.com) и правила блокировки их
    acl blocked ssl::server_name «/etc/squid/acl/black_list»
    # Устанавливаем защищенное соединение
    acl step1 at_step SslBump1
    # Cчитываем заголовок HTTP
    ssl_bump peek step1
    # Закрываем соединение, если клиент заходит на ресурс указанные в blocked
    ssl_bump terminate blocked
    ssl_bump splice all
    sslcrtd_program /usr/lib/squid/ssl_crtd -s /var/lib/ssl_db -M 4MB

    • Это ответ на комментарий Игорь

      На первый взгляд все ок.. а как в файле /etc/squid/acl/black_list указываете адреса для блокировки ? Покажите пример (не весь 300-метровый файл :))

  • Добрый день ! спасибо за статью, squid установился, при блокировке web странице или если страница не найдена squid выводит в браузере стандартное сообщение но без картинки, в css указан url на картинку backgraund: url(‘sams.perm.ru/squid-internal-static/icons/SN.png’) можно изменить адрес на папку с картинкой ?

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

      В файле /etc/squid/errorpage.css стили css блокировки странице squida
      /usr/share/squid-langpack/ папки с текстовыми файлами об ошибках

  • Устонавливал все по вашей инструкции но сквид так и не запустился

    При установке:

    «Устанавливаем пакеты Squid в очередности как указано ниже.
    sudo dpkg —install squid-common_3.5.19-1_all.deb
    sudo dpkg —install squid_3.5.19-1_amd64.deb
    sudo dpkg —install squidclient_3.5.19-1_amd64.deb»
    — система выдает сообщение: «dpkg: ошибка при обработке архива squid-common_3.5.19-1_all.deb …: No such file or directory»

    И в конце при запуске сквида выдаёт:

    Job for squid.service failed because the control process exited with error code.
    See «systemctl status squid.service» and «journalctl -xe» for details.

    Конфиг такой же как и в вашей статье

    При вводе команды «systemctl status squid.service» выдаёт лог:

    ● squid.service — LSB: Squid HTTP Proxy version 3.x
    Loaded: loaded (/etc/init.d/squid; generated; vendor preset: disabled)
    Active: failed (Result: exit-code) since Fri 2018-01-19 16:55:48 UTC; 1min 46s ago
    Docs: man:systemd-sysv-generator(8)
    Process: 32424 ExecStart=/etc/init.d/squid start (code=exited, status=3)

    янв 19 16:55:48 kali systemd[1]: Starting LSB: Squid HTTP Proxy version 3.x…
    янв 19 16:55:48 kali squid[32429]: Bungled /etc/squid/squid.conf line 66: http_port 192.168.0.1:3128 intercept options=NO_SSLv3
    янв 19 16:55:48 kali squid[32434]: Bungled /etc/squid/squid.conf line 66: http_port 192.168.0.1:3128 intercept options=NO_SSLv3
    янв 19 16:55:48 kali squid[32424]: FATAL: Unknown http_port option ‘options=NO_SSLv3:NO_SSLv2’. FATAL: Bungled /etc/squid/squid
    янв 19 16:55:48 kali systemd[1]: squid.service: Control process exited, code=exited status=3
    янв 19 16:55:48 kali systemd[1]: squid.service: Failed with result ‘exit-code’.
    янв 19 16:55:48 kali systemd[1]: Failed to start LSB: Squid HTTP Proxy version 3.x.

  • Здравствуйте! Извините может вопрос глупый но….
    После того как вручную забили свою конфигурацию похожую на Вашу, Вы не описали как её сохранить и выйти

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

      Добрый день! Все зависит от того какие текстовым редактором вы пользуетесь. Прим. если nano — Ctrl + O (Сохранить), Ctrl + X (Выйти), если vi\vim — :wr (Сохранить), :q (Выйти).

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

  • Добрый день.

    Все сделано по статье.
    https работает.

    При попытке открыть http — страница не открывается. В cache.log
    ERROR: NF getsockopt(ORIGINAL_DST) failed on local=192.168.8.254:3128 remote=192.168.8.101:52869 FD 32 flags=33: (92) Protocol not available
    ERROR: NAT/TPROXY lookup failed to locate original IPs on local=192.168.8.254:3128 remote=192.168.8.101:52869 FD 32 flags=33

  • Добрый день.
    Огромное спасибо за подробную инструкцию, всё заработало, хоть и не сразу)
    Кальмар сперва не запускался, выдавал ошибку: open failed to shm_open(/squid-ssl_session_cache.shm).
    Долго мучался, оказалось в конфиге нужно поменять местами вот эти строки:
    maximum_object_size 61440 KB
    minimum_object_size 3 KB
    Может пригодится кому.

  • Спасибо за хорошую статью, действительно проблем с зависимостью в 14ой версии нет. По вашей инструкции все заработало.
    Вижу что сквид кеширует, что от него и было необходимо.
    Правда выходит подключатся только по 2130у порту (на стороне клиента, прописываю в браузере)Но меня и такой вариант устраивает.
    Кеширующий сервер должен быть на работе, что бы кешировать один большой сайт.
    Из дому подключиться не могу к прокси серверу, не подскажите где необходимо указать свой ИП что бы прокси сервер меня не блочил, в вайтлисте и админ листе?

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

      подскажите, как понять, кешиурет сквид или нет?
      кеш находится у меня в /var/spool/squid
      смотрю, изначально она весила 48мб, за 20 минут работы 54 мб, поидее кеш пишется? Хотя я думаю она должна гораздо больше весить.

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

        Я понял почему не нужный мне сайт, так как он https, и как я понял мне нужно выполнить подключение к прокси по 3129му порту. Но когда я в браузере его ввожу в настройках мне высвечивается следующее :
        «Ошибка при установлении защищённого соединения»
        Все успешно поставилось, ssl сертификат я сгенирировал. (может с ним проблема? к примеру когда на webadmin захожу, то там ssl сертификат пишет красным, или это тут не причем?)
        Ниже конфиг прикреплю, быть может сможете мне советом помочь.
        Сервер со сквидом находится в локальной сети 172.17.17.0
        Сам сквид сервер 172.17.17.75
        (на роутере я порты перебросил на сквид сервер, но из дому не выходит подключится к проксе)

        acl localnet src 172.17.17.0/24
        #################################################
        # Правила какие порты разрешены прокси-сервером #
        #################################################
        # Порт SSL для подключений по HTTPS-протоколу
        acl SSL_ports port 443
        # Список портов, к которым разрешен доступ через прокси-сервер по протоколу HTTP
        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
        ################################################################
        # Пути к файлам запрещающих, разрешающих определенные действия #
        ################################################################
        # Путь к списку IP-адресов пользователей, для которых не действуют запреты
        acl AdminsIP src «/etc/squid/AdminsIP.txt»
        # Путь к черному списку сайтов
        acl BlackList dstdomain «/etc/squid/BlackList.txt»
        # Путь к списку адресов которым запрещен интернет
        acl BlockInetExlWhite src «/etc/squid/BlockInetExlWhite.txt»
        # Путь к белому списку сайтов
        acl WhiteList dstdomain «/etc/squid/WhiteList.txt»
        #########################
        # Параметры DNS записей #
        #########################
        # Список DNS серверов(IP адреса), которые будут использоваться вместо тех, что определены в /etc/resolv.conf файле
        dns_nameservers 8.8.8.8
        ########################################
        # Правила ограничений доступа клиентов #
        ########################################

        # Запретить доступ к портам, отсутствующим в списке выше
        http_access deny !Safe_ports
        # Запретить метод CONNECT не на SSL-порт
        http_access deny CONNECT !SSL_ports
        # Разрешить только локальное управление кэшем
        http_access allow localhost manager
        http_access deny manager
        # Не ограничивать локальный доступ с сервера
        http_access allow localhost
        # Не ограничивать доступ администраторам
        http_access allow AdminsIP
        # Блокировать интернет конкретным пользователям
        http_access deny BlockInetExlWhite !WhiteList
        # Блокировать запрещенные сайты
        http_access deny BlackList
        # Правила разрешающего доступ в интернет из локальной сети указанной в localnet
        http_access allow localnet
        # Блокирует все, что не было разрешено выше
        http_access deny all

        #############################################
        # Правила подключений клиентов к прокси-серверу#
        #############################################
        # Подключения через прозрачный порт
        http_port 172.17.17.75:3128 intercept options=NO_SSLv3:NO_SSLv2
        # Подключение через указания прокси-сервера на стороне клиента
        http_port 172.17.17.75:3130 options=NO_SSLv3:NO_SSLv2
        # Подключение по HTTPS через прозрачный порт с параметрами подставки сертификата
        https_port 172.17.17.75: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
        # Укажем список блокируемых ресурсов (в файле домены вида .domain.com) и правила блокировки их
        acl blocked ssl::server_name «/etc/squid/BlackList.txt»
        # Устанавливаем защищенное соединение и считываем заголовок HTTP
        acl step1 at_step SslBump1
        ssl_bump peek step1
        # Закрываем соединение, если клиент заходит на ресурс указанные в blocked
        ssl_bump terminate blocked
        ssl_bump splice all
        sslcrtd_program /usr/lib/squid/ssl_crtd -s /var/lib/ssl_db -M 4MB
        #########################################
        # Дополнительные параметры конфигурации #
        #########################################
        # Путь для дискового кеширования
        cache_dir aufs /var/spool/squid 20000 49 256
        # Путь сохранения дампов аварийного завершения
        coredump_dir /var/spool/squid
        # Время жизни объектов для протоколов FTP и GOPHER
        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
        maximum_object_size 61440 KB
        minimum_object_size 1 KB
        cache_swap_low 90
        cache_swap_high 95
        # Максимальный размер объекта, сохраняемого в оперативной памяти
        maximum_object_size_in_memory 4084 KB
        memory_replacement_policy lru
        # Количество ротаций лог-файлов (0 — отключена ротация, 15 — максимальное количество)
        logfile_rotate 0
        # E-mail адрес Cache менеджера, для отправки уведомлений и отображении в страницах ошибок
        #cache_mgr it@admin.ru
        icp_access allow all

  • при выполненнии
    sudo dpkg-buildpackage -rfakeroot -b

    dpkg-buildpackage: предупреждение: неудовлетворительные зависимости/конфликты при сборке; прерываемся
    dpkg-buildpackage: предупреждение: (Используйте параметр -d, чтобы продолжить сборку.)

    после чего исполняю с -d

    configure: error: Basic auth helper LDAP … found but cannot be built
    /usr/share/cdbs/1/class/autotools.mk:42: ошибка выполнения рецепта для цели «debian/stamp-autotools»
    make: *** [debian/stamp-autotools] Ошибка 1
    dpkg-buildpackage: ошибка: debian/rules build возвратил код ошибки 2

    может это следствие того что не удается выполнить sudo apt-get -y build-dep squid3

    root@unix-server:/home/user/build/squid3/squid3-3.5.19# sudo apt-get -y build-dep squid3
    Чтение списков пакетов… Готово
    E: Вы должны заполнить sources.list, поместив туда URI источников пакетов

    п.с. Подскажите пожалуйста в чем проблема, ставлю на чистую убунту 16.04

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

      Ну по всей видимости дело в зависимостях. Заметка корректно ставится на 14.04, на 16.04 без понятия что там за грабли могут возникать при установке.

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

        Спасибо, попробую на 14ую установить.

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

          Попробуйте, на 14.04 должно все встать, не однократно проверялось мной.

  • Делаем установку по Вашей статье, но доходя до:
    «Устанавливаем пакеты Squid в очередности как указано ниже.
    sudo dpkg —install squid-common_3.5.19-1_all.deb
    sudo dpkg —install squid_3.5.19-1_amd64.deb
    sudo dpkg —install squidclient_3.5.19-1_amd64.deb»
    — система выдает сообщение: «dpkg: ошибка при обработке архива squid-common_3.5.19-1_all.deb …: No such file or directory»
    Подскажите что надо сделать?

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

      «dpkg: ошибка при обработке архива squid-common_3.5.19-1_all.deb …: No such file or directory»
      У вас отсутствует файл squid-common_3.5.19-1_all.deb

      А отсутствует он потому что вы не все шаги выполнили как написано в инструкции. А точнее вы не скомпилировали его из исходников. Пройдитесь заново по шагам, не упуская всех деталей и все получится у вас !

  • Спасибо большое за статью.

    Возник нюанс. При использовании непрозрачного режима (явно указываю в браузере proxy ip:3130) сайты из BlackList.txt, доступные по http фильтруются с отображением страницы ошибки squid, доступные только по https — с ошибкой ERR_TUNNEL_CONNECTION_FAILED (в браузере на стороне клиента).
    При этом, например, https://vk.com, который не указан в BlackList.txt недоступен с ошибкой ERR_NAME_RESOLUTION_FAILED

    nslookup/ping отрабатывают корректно с консоли сервера с установленным squid.

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

      Вопрос снимается, проблема была в настройке клиента

  • Неее, это там не причем. Все как я указал, сначала разрешаем, затем запрещаем.

    У меня в работе правда в связке с AD работает сквид, но там принцип тот же сначала я разрешаю группе AD админов доступ везде, затем выставляю запрет Blocklist.txt.

    Все обрабатывает как часы

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

      Думаю что в связке с AD можно блокировать https без подмены сертификата на уровне доменных имен.

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

        Не уверен на 100%, но думаю что нельзя. Т.к. в связке с AD идет только LDAP аутентификация

  • Приветствую.
    Сделал все по вашей статье, все работает, но немного не так.
    Добавил в BlackList два сайта с http и https, пытаюсь зайти на них, отсекает все работает прекрасно.
    Затем если свой IP добавить в админы, то сайт с http стал открывается, а с https все равно не открывает, как бы https игнорирует админов)
    Подскажите что еще можно посмотреть?

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

        Похоже блокирует на этом уровне. Может там тоже нужно указать путь до айпи админов?

        # Укажем список блокируемых ресурсов (в файле домены вида .domain.com) и правила блокировки их
        acl blocked ssl::server_name «/etc/squid/BlackList.txt»
        # Устанавливаем защищенное соединение и считываем заголовок HTTP
        acl step1 at_step SslBump1
        ssl_bump peek step1
        # Закрываем соединение, если клиент заходит на ресурс указанные в blocked
        ssl_bump terminate blocked

        Полный конфиг.

        ######################################
        # Обслуживаемые прокси-сервером сети #
        ######################################
        acl localnet src 192.168.20.0/24
        #################################################
        # Правила какие порты разрешены прокси-сервером #
        #################################################
        # Порт SSL для подключений по HTTPS-протоколу
        acl SSL_ports port 443
        # Список портов, к которым разрешен доступ через прокси-сервер по протоколу HTTP
        acl Safe_ports port 80 # http
        acl Safe_ports port 8080 # 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
        ################################################################
        # Пути к файлам запрещающих, разрешающих определенные действия #
        ################################################################
        # Путь к списку IP-адресов пользователей, для которых не действуют запреты
        acl AdminsIP src «/etc/squid/AdminsIP.txt»
        # Путь к черному списку сайтов
        acl BlackList dstdomain «/etc/squid/BlackList.txt»
        # Путь к списку адресов которым запрещен интернет
        acl BlockInetExlWhite src «/etc/squid/BlockInetExlWhite.txt»
        # Путь к белому списку сайтов
        acl WhiteList dstdomain «/etc/squid/WhiteList.txt»
        #########################
        # Параметры DNS записей #
        #########################
        # Список DNS серверов(IP адреса), которые будут использоваться вместо тех, что определены в /etc/resolv.conf файле
        dns_nameservers 192.168.20.1
        ########################################
        # Правила ограничений доступа клиентов #
        ########################################
        # Запретить доступ к портам, отсутствующим в списке выше
        http_access deny !Safe_ports
        # Запретить метод CONNECT не на SSL-порт
        http_access deny CONNECT !SSL_ports
        # Разрешить только локальное управление кэшем
        http_access allow localhost manager
        http_access deny manager
        # Не ограничивать локальный доступ с сервера
        http_access allow localhost
        # Не ограничивать доступ администраторам
        http_access allow AdminsIP
        # Блокировать интернет конкретным пользователям
        http_access deny BlockInetExlWhite !WhiteList
        # Блокировать запрещенные сайты
        http_access deny BlackList
        # Правила разрешающего доступ в интернет из локальной сети указанной в localnet
        http_access allow localnet
        # Блокирует все, что не было разрешено выше
        http_access deny all
        #############################################
        # Правила подключений клиентов к прокси-серверу#
        #############################################
        # Подключения через прозрачный порт
        http_port 192.168.20.11:3128 intercept options=NO_SSLv3:NO_SSLv2
        # Подключение через указания прокси-сервера на стороне клиента
        http_port 192.168.20.11:3130 options=NO_SSLv3:NO_SSLv2
        # Подключение по HTTPS через прозрачный порт с параметрами подставки сертификата
        https_port 192.168.20.11: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
        # Укажем список блокируемых ресурсов (в файле домены вида .domain.com) и правила блокировки их
        acl blocked ssl::server_name «/etc/squid/BlackList.txt»
        # Устанавливаем защищенное соединение и считываем заголовок HTTP
        acl step1 at_step SslBump1
        ssl_bump peek step1
        # Закрываем соединение, если клиент заходит на ресурс указанные в blocked
        ssl_bump terminate blocked
        ssl_bump splice all
        sslcrtd_program /usr/lib/squid/ssl_crtd -s /var/lib/ssl_db -M 4MB

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

          Да вроде все правильно, должно нормально отрабатывать. В конфиге все правильно сразу разрешаем все админам:
          # Не ограничивать доступ администраторам
          http_access allow AdminsIP
          А затем запрещаем сайты для всех остальных:
          # Блокировать запрещенные сайты
          http_access deny BlackList

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

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

          У меня нормально отрабатывает для http сайтов.

          Возможно когда запрос дальше идет на сертификат по 443 порту, в действие вступает данный кусок правил. Т.к. получается он повторно блокирует? Потому что мы выше указали что блокировать, а в секции https указали повторную блокировку https ресурсов.

          # Укажем список блокируемых ресурсов (в файле домены вида .domain.com) и правила блокировки их
          acl blocked ssl::server_name «/etc/squid/BlackList.txt»
          # Устанавливаем защищенное соединение и считываем заголовок HTTP
          acl step1 at_step SslBump1
          ssl_bump peek step1
          # Закрываем соединение, если клиент заходит на ресурс указанные в blocked
          ssl_bump terminate blocked

  • Здравствуйте! Хотел бы задать вопрос не совсем по теме статьи, но по squid’у. Хочу сделать так чтоб к моему прокси могли подключаться снаружи, т.е. чтоб другой пользователь (мой знакомый например) мог прописать ip и порт моего прокси у себя в браузере и пользоваться. Но я не очень понимаю, но видимо данные между моим прокси и этим пользователем будут не шифрованы? Пользователь должен проходить авторизацию, в этом случае этот процесс тоже идёт в открытом виде?

  • добрый день. Такая проблема. Некоторые сайты долго открываются. Ютуб например вообще не открывается. В логах вот такое:
    2017/03/06 13:05:49 kid1| SECURITY ALERT: on URL: img.imgsmail.ru:443
    2017/03/06 13:05:49 kid1| SECURITY ALERT: Host header forgery detected on local=217.69.141.145:443 remote=192.168.1.2:64414 FD 150 flags=33 (local IP does not match any domain IP)
    2017/03/06 13:05:49 kid1| SECURITY ALERT: on URL: stat.radar.imgsmail.ru:443
    2017/03/06 13:05:49 kid1| SECURITY ALERT: Host header forgery detected on local=217.69.139.42:443 remote=192.168.1.2:64416 FD 154 flags=33 (local IP does not match any domain IP)
    2017/03/06 13:05:49 kid1| SECURITY ALERT: on URL: an.mail.ru:443
    2017/03/06 13:06:04 kid1| SECURITY ALERT: Host header forgery detected on local=40.77.226.246:443 remote=192.168.1.2:64417 FD 33 flags=33 (local IP does not match any domain IP)
    2017/03/06 13:06:04 kid1| SECURITY ALERT: on URL: client.wns.windows.com:443
    2017/03/06 13:06:22 kid1| SECURITY ALERT: Host header forgery detected on local=74.125.131.196:443 remote=192.168.1.2:64418 FD 31 flags=33 (local IP does not match any domain IP)
    2017/03/06 13:06:22 kid1| SECURITY ALERT: on URL: apis.google.com:443
    2017/03/06 13:06:23 kid1| SECURITY ALERT: Host header forgery detected on local=173.194.221.198:443 remote=192.168.1.2:64419 FD 35 flags=33 (local IP does not match any domain IP)
    2017/03/06 13:06:23 kid1| SECURITY ALERT: on URL: http://www.youtube.com:443

    Может подскажете куда копнуть.

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

        https сайты открываются, но не всё, ютуб не открывается. В acl пусто пока во всех. В логах что написал, stat.radar.imgsmail.ru это какие счётчики на сайте на который заходил. вот они отсекаются по чему то из-за этого некоторые сайты вообще очень долго открываются.

  • День добрый. Настроил, всё работает. Но очень долго открывает некоторые сайты. Вот частичка лога кэша. Может кто подскажет как решить?
    2017/03/06 12:29:34 kid1| SECURITY ALERT: Host header forgery detected on local=64.233.165.95:443 remote=192.168.1.2:62671 FD 173 flags=33 (local IP does not match any domain IP)
    2017/03/06 12:29:34 kid1| SECURITY ALERT: on URL: fonts.googleapis.com:443
    2017/03/06 12:29:34 kid1| SECURITY ALERT: Host header forgery detected on local=64.233.165.95:443 remote=192.168.1.2:62670 FD 167 flags=33 (local IP does not match any domain IP)
    2017/03/06 12:29:34 kid1| SECURITY ALERT: on URL: fonts.googleapis.com:443
    2017/03/06 12:30:06 kid1| SECURITY ALERT: Host header forgery detected on local=64.233.161.198:443 remote=192.168.1.2:62687 FD 124 flags=33 (local IP 57does not match any domain IP)
    2017/03/06 12:30:06 kid1| SECURITY ALERT: on URL: http://www.youtube.com:443
    2017/03/06 12:30:06 kid1| SECURITY ALERT: Host header forgery detected on local=64.233.161.198:443 remote=192.168.1.2:62688 FD 125 flags=33 (local IP does not match any domain IP)
    2017/03/06 12:30:06 kid1| SECURITY ALERT: on URL: http://www.youtube.com:443
    2017/03/06 12:30:06 kid1| SECURITY ALERT: Host header forgery detected on local=64.233.161.198:443 remote=192.168.1.2:62690 FD 138 flags=33 (local IP does not match any domain IP)
    2017/03/06 12:30:06 kid1| SECURITY ALERT: on URL: http://www.youtube.com:443

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

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

  • Решил вернуться и добить по Вашей инструкции. Все работает=) Нашел свой косяк — squid не той версии.
    Но возникает проблема — блочу клиентов, открываю только определенный сайт (например https://taxi.yandex.ru/)
    при переходе на этот сайт ругаеться на сертификат. На клиенте ставлю сертификат в «корневые» но ситуация не изменяется.
    Может есть идеи?

  • Большое спасибо за статью!
    Но очень интересно было бы посмотреть настройки iptables
    Можно глянуть, если не сложно?

  • На виртуалке был. Снапшот уже удалил. поставил по другой статье
    Взял у Вас идею по правилам ограничений доступа клиентов.
    Но все равно большое спасибо за содействие=)

    (Отредактировано, ссылки на чужие ресурсы постить нельзя)

  • Доброго дня!
    2 дня уже убил, сделал все по инструкции.
    при переходе на https ресурсы — валит сообщение
    TAG_NONE/400 4325 NONE error:invalid-request — HIER_NONE/- text/html
    кальмар собран с
    —with-openssl \
    —enable-ssl \
    —enable-ssl-crtd
    сертификат есть. Что не так — не могу понять. Подскажите, инструкция то грамотная, расжевана, но я уткнулся и встал.

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

      Добрый день !
      А покажите ваш конфиг, может там где ошибка. Посмотрим

Постраничная навигация комментариев