Установка из исходников прокси-сервера Squid 4.6 на Debian 9 Stretch
Рассмотрим как установить из исходников актуальную (на момент написания статьи) версию кеширующего прокси-сервера Squid 4.6 на Debian 9 Stretch.
[stextbox id=’info’]ИНФОРМАЦИЯ. Хочу сообщить что ниже описанное руководство, так же применимо к установке версии Squid 4.9.[/stextbox]
Подготовка системы
Обновляем систему до актуального состояния:
apt-get update && apt-get upgrade
Устанавливаем необходимые пакеты для сборки и работы squid:
apt-get install autoconf automake autopoint autotools-dev binutils build-essential cdbs comerr-dev cpp cpp-6 debhelper dh-autoreconf dh-strip-nondeterminism dpkg-dev g++ g++-6 gcc gcc-6 gettext icu-devtools intltool-debian krb5-multidev libarchive-zip-perl libasan3 libatomic1 libc-dev-bin libc6-dev libcap-dev libcc1-0 libcilkrts5 libcppunit-1.13-0v5 libcppunit-dev libcroco3 libdb-dev libdb5.3-dev libdpkg-perl libecap3 libecap3-dev libexpat1-dev libfile-stripnondeterminism-perl libgcc-6-dev libgmp-dev libgmpxx4ldbl libgnutls-dane0 libgnutls-openssl27 libssl-dev libgnutls28-dev libgnutlsxx28 libgomp1 libgssrpc4 libicu-dev libidn11-dev libisl15 libitm1 libkadm5clnt-mit11 libkadm5srv-mit11 libkdb5-8 libkrb5-dev libldap2-dev liblsan0 libltdl-dev libltdl7 libmpc3 libmpfr4 libmpx2 libnetfilter-conntrack-dev libnfnetlink-dev libp11-kit-dev libpam0g-dev libquadmath0 libsasl2-dev libsigsegv2 libstdc++-6-dev libtasn1-6-dev libtimedate-perl libtool libtsan0 libubsan0 libunbound2 libxml2-dev linux-libc-dev m4 make nettle-dev patch pkg-config po-debconf zlib1g-dev
Установка прокси-сервера Squid
Скачиваем исходник «squid», распаковываем его:
cd /opt/ wget http://www.squid-cache.org/Versions/v4/squid-4.6.tar.gz tar -zxvf squid-4.6.tar.gz cd squid-4.6
Выполняем конфигурацию «squid», с указанием каталогов размещения файлов «squid», а так же поддержку 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
Компилируем «squid» и по окончании компиляции выполняем установку:
make make install
Создаем необходимые каталоги, для работы «squid» и назначаем для них права доступа:
mkdir -p /var/log/squid mkdir -p /etc/squid/ssl chown proxy:proxy /var/log/squid chown proxy:proxy /etc/squid/ssl chmod 700 /var/log/squid chmod 700 /etc/squid/ssl
В файле конфигурации (/etc/squid/squid.conf), необходимо указать расположение каталога с файлами ошибок:
error_directory /usr/share/squid/errors/ru
Теперь создаем стартовый скрипт прокси-сервера «squid»:
nano /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
Делаем скрипт исполняемым и добавляем в автозагрузку:
chmod a+x /etc/init.d/squid update-rc.d squid defaults
Запускаем прокси-сервер «squid»:
service squid start
Проверим запустился ли демон «squid»:
service squid status
● squid.service - LSB: Squid HTTP Proxy version 4.x
Loaded: loaded (/etc/init.d/squid; generated; vendor preset: enabled)
Active: active (running) since Wed 2019-03-06 12:51:40 MSK; 37min ago
Docs: man:systemd-sysv-generator(8)
Process: 30537 ExecStop=/etc/init.d/squid stop (code=exited, status=0/SUCCESS)
Process: 30435 ExecReload=/etc/init.d/squid reload (code=exited, status=0/SUCCESS)
Process: 30585 ExecStart=/etc/init.d/squid start (code=exited, status=0/SUCCESS)
Main PID: 30623 (squid)
Tasks: 3 (limit: 4915)
CGroup: /system.slice/squid.service
├─30623 /usr/sbin/squid -YC -f /etc/squid/squid.conf
├─30625 (squid-1) --kid squid-1 -YC -f /etc/squid/squid.conf
└─30626 (logfile-daemon) /var/log/squid/access.log
На этом установка кешируешего прокси-сервера Squid 4.6 завершена. В рамках данной статьи, настройка «squid» не будет рассматриваться, с вариантом настройки можно ознакомится в этой статье.
ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОДДЕРЖИ АВТОРА ДОНАТОМ
Здравствуйте.
Устанавливаю на Ububtu server 20.04 ругается на пакет g++-6. Вопрос пропускать ли данный пакет или же есть альтернатива?
Здравствуйте.
Начал устанавливать по вашей инструкции на сервер и сразу на шаге установке пакетов пошли ошибки: Package ‘g++-6’ has no installation candidate.
Дано:
Ubuntu 20.04.3 LTS, Codename: focal
Полистав интернет нашел следующую информацию, при проверке в репозитории ubuntu, что данного пакета для focal нет. Однако имеется g++-10.
Вопрос: ставить пакет g++-10 или пропустить?
Также нашел и другие пакеты которые указаны у вас, но отсутствуют в репозитории.
С уважением, Алексей.
Попробую сегодня или завтра выложить конфиг пример.
Выложите, пожалуйста, конфиг для фильтрации https…
Большое спасибо за блог!
Скажите, пожалуйста, у Вас есть телеграмм канал или форум?
Уважаемый автор, я только начинаю познавать linux Debain/ubuntu. Подскажите где на официальном сайте сквида брать информацию о зависимостях для сборки сквида с поддержкой https. Кучу сайтов перерыл, но версии скид обновляются и старые зависимости уже не работают (не актуальны). При этом постоянно вылазят ошибки при сборке. Очень утомительно.
ну вот на основе вываливающихся ошибок нужно анализировать и за чего она, если из за отсутствующего пакета, то нужно его ставить. Делайте как по статье, там все должно без ошибок получится.
Коллеги приветствую!
Подскажите, есть ли возможность заставить работать delay_pools на squid4.
config.status: creating Makefile
config.status: creating config.h
config.status: executing depfiles commands
config.status: executing libtool commands
Подскажите последние 2 вывода насчет depfiles и libtool, что они означают.
Означают что выполняются depfiles и libtool команды
После выполнения команды «Make» и «Make Install» возникает сообщение
make: *** No targets specified and no makefile found. Stop.
Здравствуйте!
Аналогичная проблема, все по инструкции, и вот нате вам!
root@omv:~# service squid start
Job for squid.service failed because the control process exited with error code.
See «systemctl status squid.service» and «journalctl -xe» for details.
root@omv:~# service squid status
● squid.service — LSB: Squid HTTP Proxy version 4.x
Loaded: loaded (/etc/init.d/squid; generated; vendor preset: enabled)
Active: failed (Result: exit-code) since Sat 2019-10-12 21:34:33 +05; 34s ago
Docs: man:systemd-sysv-generator(8)
Process: 2465 ExecStart=/etc/init.d/squid start (code=exited, status=2)
окт 12 21:34:33 omv systemd[1]: Starting LSB: Squid HTTP Proxy version 4.x…
окт 12 21:34:33 omv squid[2465]: /etc/init.d/squid: 103: /etc/init.d/squid: Syntax error: «(» unexpected (expecting «}»)
окт 12 21:34:33 omv systemd[1]: squid.service: Control process exited, code=exited status=2
окт 12 21:34:33 omv systemd[1]: Failed to start LSB: Squid HTTP Proxy version 4.x.
окт 12 21:34:33 omv systemd[1]: squid.service: Unit entered failed state.
окт 12 21:34:33 omv systemd[1]: squid.service: Failed with result ‘exit-code’.
это я сам_дурак называется.
ругается совсем на другую строчку.
sslproxy_flags DONT_VERIFY_PEER
вот на нее. отключил. все равно не запускается кальмар… причем squid -k parse не ругается и ошибок нет.
отключил все строки по https — завелось. Ковыряюсь дальше 🙂
пыхчу сейчас над конфигурацией прокси v4.8 с https
использую твои 2 статьи и еще несколько ресурсов познания.
вопрос. 🙂
кальмар ругается на опции ssl
ERROR: Directive ‘sslproxy_flags’ is obsolete.
sslproxy_flags : Remove this line. Use tls_outgoing_options flags= instead.
как теперь должна выглядеть следующая строка?
acl blocked ssl::server_name «/etc/squid/blsite/blacklist»
получается что из следующей статьи конфиг кальмара сюда уже не совсем подходит.
Там все проще, в первой статье этой первый опыт был работы со Squid, много считаю лишнего там в конфиге. Сейчас все проще сделано у меня и успешно контрится HTTP и HTTPS трафик. Попробую сегодня или завтра выложить конфиг пример.
буду благодарен.
Прочитав кучу статей, мне больше понравились твои 2. и конфиг кальмара с поставленной задачей совпадают 🙂
«Выполняем конфигурацию «squid», с указанием каталогов размещения файлов «squid», а так же поддержку HTTS:»
вот тут важный опечаток 🙂
HTTP или HTTPS?
Опечатка 🙂 Поправил, спасибо!
Добрый день!
После всех манипуляций при запуске получаю ошибку:
————-
squid.service — LSB: Squid HTTP Proxy version 4.x
Loaded: loaded (/etc/init.d/squid; generated)
Active: failed (Result: exit-code) since Tue 2019-05-28 11:46:18 MSK; 1min 23s ago
Docs: man:systemd-sysv-generator(8)
Process: 1403 ExecStart=/etc/init.d/squid start (code=exited, status=0/SUCCESS)
Main PID: 1494 (code=exited, status=1/FAILURE)
мая 28 11:46:16 chr1-proxy02 squid[1494]: Squid Parent: (squid-1) process 1527 started
мая 28 11:46:17 chr1-proxy02 (squid-1)[1527]: FATAL: I don’t handle this error well!
мая 28 11:46:17 chr1-proxy02 squid[1494]: Squid Parent: squid-1 process 1527 exited with status 1
мая 28 11:46:17 chr1-proxy02 squid[1494]: Squid Parent: (squid-1) process 1536 started
мая 28 11:46:18 chr1-proxy02 (squid-1)[1536]: FATAL: I don’t handle this error well!
мая 28 11:46:18 chr1-proxy02 squid[1494]: Squid Parent: squid-1 process 1536 exited with status 1
мая 28 11:46:18 chr1-proxy02 squid[1494]: Squid Parent: squid-1 process 1536 will not be restarted for 3600 secon
мая 28 11:46:18 chr1-proxy02 squid[1494]: Exiting due to repeated, frequent failures
мая 28 11:46:18 chr1-proxy02 systemd[1]: squid.service: Main process exited, code=exited, status=1/FAILURE
мая 28 11:46:18 chr1-proxy02 systemd[1]: squid.service: Failed with result ‘exit-code’.
———
Подскажите, пожалуйста, как исправить!
Добрый день! Видимо не все манипуляции были выполнены корректно. Внимательно еще раз идите по шагам. Все что написано в статье 146% проверено и не раз разворачивалось.
Почему при добавлении в конфиг HTTPS_PORT 3130 начинает ругаться
Здравствуйте.
Все делаю по инструкции. При запуске ошибка. Помогите 🙁
https://yadi.sk/i/OJl3ZpMKaBRTCA
Поправил листинг INIT-файла, проверил сейчас нормально.
Я тоже столкнулся с такой же ошибкой при запуске сервиса. Решил путем конвертирования файла скрипта в UNIX формат, т.к. файл создал на Винде изначально.
Т.е. после того как скрипт squid размещен по пути /etc/init.d, его необходимо конвертировать командой dos2unix squid и запустить сервис systemctl daemon-reload.
P.S. Утилиту dos2unix предварительно установить: sudo apt install dos2unix.