Как установить прокси сервер 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
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
.
#! /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