Содержание статьи:
Рассмотрим как установить из исходников актуальную (на момент написания статьи) версию кеширующего прокси-сервера Squid 4.6 на Debian 9 Stretch.
Подготовка системы
Обновляем систему до актуального состояния:
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» не будет рассматриваться, с вариантом настройки можно ознакомится в этой статье.
ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОДДЕРЖИ АВТОРА ДОНАТОМ
Здравствуйте.
Все делаю по инструкции. При запуске ошибка. Помогите 🙁
https://yadi.sk/i/OJl3ZpMKaBRTCA
Поправил листинг INIT-файла, проверил сейчас нормально.
Я тоже столкнулся с такой же ошибкой при запуске сервиса. Решил путем конвертирования файла скрипта в UNIX формат, т.к. файл создал на Винде изначально.
Т.е. после того как скрипт squid размещен по пути /etc/init.d, его необходимо конвертировать командой dos2unix squid и запустить сервис systemctl daemon-reload.
P.S. Утилиту dos2unix предварительно установить: sudo apt install dos2unix.
Почему при добавлении в конфиг HTTPS_PORT 3130 начинает ругаться
Добрый день!
После всех манипуляций при запуске получаю ошибку:
————-
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% проверено и не раз разворачивалось.
«Выполняем конфигурацию «squid», с указанием каталогов размещения файлов «squid», а так же поддержку HTTS:»
вот тут важный опечаток 🙂
HTTP или 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. и конфиг кальмара с поставленной задачей совпадают 🙂
это я сам_дурак называется.
ругается совсем на другую строчку.
sslproxy_flags DONT_VERIFY_PEER
вот на нее. отключил. все равно не запускается кальмар… причем squid -k parse не ругается и ошибок нет.
отключил все строки по https — завелось. Ковыряюсь дальше 🙂
Здравствуйте!
Аналогичная проблема, все по инструкции, и вот нате вам!
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’.
После выполнения команды «Make» и «Make Install» возникает сообщение
make: *** No targets specified and no makefile found. Stop.
config.status: creating Makefile
config.status: creating config.h
config.status: executing depfiles commands
config.status: executing libtool commands
Подскажите последние 2 вывода насчет depfiles и libtool, что они означают.
Означают что выполняются depfiles и libtool команды
Коллеги приветствую!
Подскажите, есть ли возможность заставить работать delay_pools на squid4.
Уважаемый автор, я только начинаю познавать linux Debain/ubuntu. Подскажите где на официальном сайте сквида брать информацию о зависимостях для сборки сквида с поддержкой https. Кучу сайтов перерыл, но версии скид обновляются и старые зависимости уже не работают (не актуальны). При этом постоянно вылазят ошибки при сборке. Очень утомительно.
ну вот на основе вываливающихся ошибок нужно анализировать и за чего она, если из за отсутствующего пакета, то нужно его ставить. Делайте как по статье, там все должно без ошибок получится.
Попробую сегодня или завтра выложить конфиг пример.
Выложите, пожалуйста, конфиг для фильтрации https…
Большое спасибо за блог!
Скажите, пожалуйста, у Вас есть телеграмм канал или форум?
Здравствуйте.
Начал устанавливать по вашей инструкции на сервер и сразу на шаге установке пакетов пошли ошибки: Package ‘g++-6’ has no installation candidate.
Дано:
Ubuntu 20.04.3 LTS, Codename: focal
Полистав интернет нашел следующую информацию, при проверке в репозитории ubuntu, что данного пакета для focal нет. Однако имеется g++-10.
Вопрос: ставить пакет g++-10 или пропустить?
Также нашел и другие пакеты которые указаны у вас, но отсутствуют в репозитории.
С уважением, Алексей.
Здравствуйте.
Устанавливаю на Ububtu server 20.04 ругается на пакет g++-6. Вопрос пропускать ли данный пакет или же есть альтернатива?