Как установить прокси сервер Squid на Debian 12
Squid — это программный пакет, реализующий функцию кэширующего прокси-сервера для протоколов HTTP, FTP, Gopher и (в случае соответствующих настроек) HTTPS.
В этом руководстве я покажу, как установить прокси сервер Squid на операционной системе Debian 12. Установку будем выполнять из исходников и актуальную на момент написания статьи версию 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 (подготовку) исходников к сборке.
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 -j$(nproc)
make installPost-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/sslLogrotate
Создаем файл ротации логов /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
}
EOFSystem V Init
Для управление запуском Squid создадим стартовый скрипт /etc/init.d/squid для System V Init.
#! /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ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОДДЕРЖИ АВТОРА ДОНАТОМ
						
                    
                    
Добрый вечер! При вводе команды $ sudo apt-get -y build-dep squid3
Выдает:
Чтение списков пакетов… Готово
E: Невозможно найти пакет с исходным кодом для squid3
Как можно это исправить?
Данная статья уже морально устарела.. пожалуйста воспользуйтесь вариантом установки более новой версии Squid — https://jakondo.ru/ustanovka-iz-ishodnikov-proksi-servera-squid-4-6-na-debian-9-stretch/
Добрый день! Спасибо огромное за ваши подробнейшие статьи:)
Подскажите пожалуйста, есть ли нюансы при обновлении squid 3.5.8 до 4.13?
Стоит Ubuntu 14.04
Добрый день! Рад что статьи приносят полезности для других 🙂
Не думаю что есть какие то ньюансы при апгрейде версии squid. Скачиваете новую версию, собираете ее, выполняете удаление старой версии Squid, устанавливаете новую. (да, предварительно файл конфигурации старого Squid рекомендую сохранить)
Рекомендую посмотреть мои свежие статьи:
https://jakondo.ru/ustanovka-iz-ishodnikov-proksi-servera-squid-4-6-na-debian-9-stretch/
https://jakondo.ru/perehvat-i-prosmotr-https-trafika-na-proksi-servere-squid-4-9/
«Squid будет у нас работать в обычном режиме. (В идеале хотелось бы конечно работать по прозрачному протоколу, но как только не пытался, не удается завернуть трафик с Mikrotik на Squid на прозрачные порты 80, 443, поэтому я остановился на работе по обычному режиму работы Squid).»
А что такое «обычный режим»? С указанием адреса прокси в браузерах?
Я так понял, что сквид у вас подключен либо к коммутаторы, либо к бриджу микротике, тому же самому, что и вся подсеть. А если пользователи уберут из конфигов браузеров указание ходить через прокси, они же пойдут без контроля? Ведь для этого не нужны права администратора компьютера (если только не используется ослик, а хосты с доменной политикой). При транспарентом режиме мы на бридже могли бы заблокировать обращение к портам 80 и 443, а здесь у нас такой возможности нет.
Вопрос такой, поставил систему Ubuntu 18.04 + squid Version 3.5.27 + поддержка https
все работает и все замечательно, но вот захотел я тут оплатить с сайта билеты и при клике на кнопку оплатить страница улетела в ошибку ))))
по логам смотрю нет с этого ip каких то ошибок и все сайты с кодом 200
Но подозреваю что проблема с ssl сертификтаом.
Какие могут быть нюансы с генерацией сертификата который мы создаем на сервере squid при работе с HTTPS/
Заранее спасибо!
Если честно, то я давно уже не использую https в кальмаре, т.к. мне на текущий момент хватает простого контроля посещения сайтов, а что делаю пользователи конкретно при запросах на https сайты мне не особо интересно.
Не смогу вам помочь в данном вопросе..
Хм.. почему то ругается на сертификат
admen@proxy:~$ /usr/sbin/squid -NCd1
2019/08/09 11:54:59| FATAL: No valid signing certificate configured for HTTPS_port 192.168.1.175:3129
2019/08/09 11:54:59| Squid Cache (Version 4.8): Terminated abnormally.
CPU Usage: 0.011 seconds = 0.008 user + 0.004 sys
Maximum Resident Size: 59328 KB
Page faults with physical i/o: 0
# Путь к списку IP-адресов пользователей, для которых не действуют запреты
acl AdminsIP src «/etc/squid/AdminsIP.txt»
Тут у вас указаны айпишники, а как указать группу из AD, чтобы рулить не конкретными машинами, а авторизованными пользователями?
Вы там выше в комментах где-то писали, что вы управляете группами из AD
Я немного не понял этот момент:
# Подключения через прозрачный порт
http_port 192.168.5.2:3128 intercept options=NO_SSLv3:NO_SSLv2
# Подключение через указания прокси-сервера на стороне клиента
http_port 192.168.5.2:3130 options=NO_SSLv3:NO_SSLv2
# Подключение по HTTPS через прозрачный порт с параметрами подставки сертификата
https_port 192.168.5.2:3129 intercept ssl-bump options=ALL:NO_SSLv3:NO_SSLv2 connection-auth=off cert=/etc/squid/squidca.pem
# Принимаем сертификаты, даже если они не прошли проверку.
А дальше у вас: «В моем случае осталось прописать на ПК пользователей в Свойствах обозревателя, параметры прокси-сервера и проверить работу.»
Так у нас HTTPS заработал или нет?
Щас вот по статье делаю и через настройки на клиентах работает, а по-другому — нет.
Так у вас же за комментирована строка для блокировки сайтов из списка:
# Блокировать запрещенные сайты
# http_access deny BlackList
снимите комментарий перед
http_access deny BlackList
Вот тут:
Измените ковычки с «» на
""И попробуйте
Замените пожалуйста предыдущий мой комментарий ( не хочу кэширования в яндексе) на
.odnoklassniki.ru
.ok.ru
.vk.me
.vk.com
.vk.ru
.vk.me
.vk.cc
.vkadre.ru
.vkuservideo.net
.facebook.com
.mycdn.me
А ковычкие нормальные , видимо такой текстовый редактор в вродпрессе
Покажите ACL-ы все в конфиге, с виду вроде правильно все.
.odnoklassniki.ru
.ok.ru
.vk.me
.vk.com
.vk.ru
.vk.me
.vk.cc
.vkadre.ru
.vkuservideo.net
.facebook.com
.mycdn.me