<- содержание

 

Squid3

 

1. Установка и базовая настройка

2. Пересобираем пакет Squid3

3. Отключаем обновление пакетов.

4. Простая настройка прозрачного прокси-сервера на SQUID.

 

1. Установка и базовая настройка

 

Итак, для работы squid его необходимо соответственно установить. Можно взять последнюю версию с официального сайта, а можно и с репозиториев Ubuntu.

 

sudo apt-get install squid3

 

После установки — отредактируем конфигурационный файл

 

sudo nano /etc/squid3/squid.conf

 

И внесем в него соотвествующие измнения при условии, что у вас локальная сеть 192.168.1.0/24, а сервер имеет адрес 192.168.1.1

 

http_port 3128 transparent

 

visible_hostname любое_название_прокси_сервера

 

Можно указать абсолютно любой порт, но лучше оставить по умолчанию. transparent — указывает на то, что сервер будет «прозрачным» для пользователей. Если слово transparent не указывать, тогда придется вручную у каждого пользователя прописывать адрес proxy-сервера и порт 3128, а это на мой взгляд не удобно.

 

visible_hostname: если не указать имя proxy-сервера, то он будет сильно ругаться.

 

После раздела «TAG : acl» и перед разделом «TAG : http_acces» пишем следующее

 

acl our_networks src 192.168.1.0/24

 

Этой строкой мы создаем сеть 192.168.1.0/24 с названием our_networks, чтоб в последующем разрешить пользоваться proxy-сервером только из локальной сети 192.168.1.0/24

 

В конце раздела «TAG : http_access» перед строчкой «http_access»deny all» пишем следующее

 

http_access allow our_networks

 

Этой строкой мы разрешаем сети с именем our_networks пользоватся proxy-сервером.

 

Добавляем правило в iptables

 

sudo iptables -t nat -A PREROUTING -i eth0 -d ! 192.168.1.0/24 -p tcp -m multiport --dport 80,8080 -j DNAT --to 192.168.1.1:3128

 

Перенаправляем весь трафик с портов 80, 8080 на proxy-сервер 192.168.1.1:3128

 

перезапускаем squid командой и наслаждаемся проделанной работой

 

sudo /etc/init.d/squid3 restart

 

2. Пересобираем пакет Squid3

 

Как уже было замечено, в репозиториях Ubuntu пакет Squid3 собран с включенной поддержкой IPv6. Описанные ниже процедуры помогут нам пересобрать и установить этот пакет с отключенной поддержкой IPv6.

 

Шаг #1. Устанавливаем пакеты, необходимые для перестроения пакета squid3:

 

Для начала перейдем в домашнюю директорию

 

cd  /home/user

 

или если вы под root

 

cd  /root

 

и выполняем

 

sudo apt-get build-dep squid3

 

Reading package lists... Done

Building dependency tree

Reading state information... Done

Note, selecting 'libcap-dev' instead of 'libcap2-dev'

The following NEW packages will be installed:

 autoconf automake autotools-dev binutils build-essential cdbs comerr-dev cpp

 cpp-4.8 debhelper dh-apparmor dh-translations dpkg-dev g++ g++-4.8 gcc

 gcc-4.8 gettext intltool intltool-debian krb5-multidev libasan0 libatomic1

 libc-dev-bin libc6-dev libcap-dev libcloog-isl4 libcppunit-1.13-0

 libcppunit-dev libcroco3 libdb-dev libdb5.3-dev libdpkg-perl libecap2-dev

 libencode-locale-perl libexpat1-dev libfile-listing-perl libgcc-4.8-dev

 libgomp1 libhtml-parser-perl libhtml-tagset-perl libhtml-tree-perl

 libhttp-cookies-perl libhttp-date-perl libhttp-message-perl

 libhttp-negotiate-perl libio-html-perl libio-socket-ssl-perl libisl10

 libitm1 libkrb5-dev libldap2-dev libltdl-dev liblwp-mediatypes-perl

 liblwp-protocol-https-perl libmpc3 libmpfr4 libnet-http-perl

 libnet-ssleay-perl libnetfilter-conntrack-dev libnfnetlink-dev libpam0g-dev

 libquadmath0 libsasl2-dev libstdc++-4.8-dev libtsan0 libunistring0

 liburi-perl libwww-perl libwww-robotrules-perl libxml-parser-perl

 libxml2-dev linux-libc-dev m4 make pkg-config po-debconf python-scour

0 upgraded, 78 newly installed, 0 to remove and 0 not upgraded.

Need to get 33.6 MB of archives.

After this operation, 130 MB of additional disk space will be used.

Do you want to continue? [Y/n] Y

 

Если команды выпадет с ошибкой

 

E: You must put some 'source' URIs in your sources.list

 

То нужно раскоментировать строки начинающиеся на deb-src в файле /etc/apt/sources.list

 

и обязательно sudo apt-get update

 

Шаг #2. Загружаем исходные файлы используемые для сборки пакета squid3:

 

sudo apt-get source squid3

 

Reading package lists... Done

Building dependency tree

Reading state information... Done

Need to get 3,046 kB of source archives.

Get:1 http://ru.archive.ubuntu.com/ubuntu/ trusty/main squid3 3.3.8-1ubuntu6 (dsc) [1,703 B]

Get:2 http://ru.archive.ubuntu.com/ubuntu/ trusty/main squid3 3.3.8-1ubuntu6 (tar) [2,993 kB]

Get:3 http://ru.archive.ubuntu.com/ubuntu/ trusty/main squid3 3.3.8-1ubuntu6 (diff) [51.4 kB]

Fetched 3,046 kB in 8s (365 kB/s)

gpgv: Signature made Tue 18 Feb 2014 07:15:47 AM MSK using DSA key ID C6CEA0C9

gpgv: Can't check signature: public key not found

dpkg-source: warning: failed to verify signature on ./squid3_3.3.8-1ubuntu6.dsc

dpkg-source: info: extracting squid3 in squid3-3.3.8

dpkg-source: info: unpacking squid3_3.3.8.orig.tar.bz2

dpkg-source: info: unpacking squid3_3.3.8-1ubuntu6.debian.tar.gz

dpkg-source: info: applying 01-cf.data.debian.patch

dpkg-source: info: applying 02-makefile-defaults.patch

dpkg-source: info: applying 15-cachemgr-default-config.patch

dpkg-source: info: applying 16-ipc-statedir.patch

dpkg-source: info: applying 90-cf.data.ubuntu.patch

dpkg-source: info: applying 99-ubuntu-ssl-cert-snakeoil.patch

dpkg-source: info: applying fix-pod2man-config.test.patch

dpkg-source: info: applying fix-distribution.patch

 

В домашнем каталоге пользователя (он же текущий каталог) появятся новые файлы

 

ls -la | grep squid

 

drwxr-xr-x 20 root root    4096 Jun 24 11:16 squid3-3.3.8

-rw-r--r--  1 root root   51440 Feb 18 07:18 squid3_3.3.8-1ubuntu6.debian.tar.gz

-rw-r--r--  1 root root    1703 Feb 18 07:18 squid3_3.3.8-1ubuntu6.dsc

-rw-r--r--  1 root root 2992708 Aug 14  2013 squid3_3.3.8.orig.tar.bz2

 

Если по какой-то причине не появился распакованный каталог исходников squid3-3.3.8, запускаем команду на распаковку пакета исходных текстов из файла squid3_3.3.8-1ubuntu6.dsc

 

sudo dpkg-source -x /home/user/squid3_3.3.8-1ubuntu6.dsc

 

Шаг #3. Устанавливаем пакеты для обеспечения сборочной среды

 

sudo apt-get install build-essential devscripts fakeroot

 

Reading package lists... Done

Building dependency tree

Reading state information... Done

build-essential is already the newest version.

The following extra packages will be installed:

 dctrl-tools diffstat distro-info-data dput hardening-includes

 libapt-pkg-perl libarchive-zip-perl libauthen-sasl-perl libautodie-perl

 libclone-perl libcommon-sense-perl libdigest-hmac-perl libdistro-info-perl

 libemail-valid-perl liberror-perl libexporter-lite-perl libfakeroot

 libfile-basedir-perl libio-pty-perl libio-socket-inet6-perl

 libio-stringy-perl libipc-run-perl libipc-system-simple-perl libjson-perl

 libjson-xs-perl liblist-moreutils-perl libmailtools-perl libnet-dns-perl

 libnet-domain-tld-perl libnet-ip-perl libnet-smtp-ssl-perl

 libparse-debcontrol-perl libperlio-gzip-perl libsocket6-perl

 libsub-identify-perl libtext-levenshtein-perl libtie-ixhash-perl lintian

 patchutils python3-chardet python3-debian python3-magic python3-six t1utils

 wdiff

Suggested packages:

 debtags bsd-mailx mailx cvs-buildpackage devscripts-el gnuplot

 libfile-desktopentry-perl libterm-size-perl libyaml-syck-perl mutt

 svn-buildpackage debian-keyring equivs libsoap-lite-perl mini-dinstall

 python-bzrlib libgssapi-perl binutils-multiarch libtext-template-perl

 libyaml-perl

The following NEW packages will be installed:

 dctrl-tools devscripts diffstat distro-info-data dput fakeroot

 hardening-includes libapt-pkg-perl libarchive-zip-perl libauthen-sasl-perl

 libautodie-perl libclone-perl libcommon-sense-perl libdigest-hmac-perl

 libdistro-info-perl libemail-valid-perl liberror-perl libexporter-lite-perl

 libfakeroot libfile-basedir-perl libio-pty-perl libio-socket-inet6-perl

 libio-stringy-perl libipc-run-perl libipc-system-simple-perl libjson-perl

 libjson-xs-perl liblist-moreutils-perl libmailtools-perl libnet-dns-perl

 libnet-domain-tld-perl libnet-ip-perl libnet-smtp-ssl-perl

 libparse-debcontrol-perl libperlio-gzip-perl libsocket6-perl

 libsub-identify-perl libtext-levenshtein-perl libtie-ixhash-perl lintian

 patchutils python3-chardet python3-debian python3-magic python3-six t1utils

 wdiff

0 upgraded, 47 newly installed, 0 to remove and 0 not upgraded.

Need to get 3,480 kB of archives.

After this operation, 12.6 MB of additional disk space will be used.

Do you want to continue? [Y/n] Y

 

Шаг #4. После этого нужно внести изменения в файл squid3-3.3.8/debian/rules

 

sudo cp /home/user/squid3-3.3.8/debian/rules /home/user/squid3-3.3.8/debian/rules.default

sudo nano -Y sh /home/user/squid3-3.3.8/debian/rules

 

А именно в секции DEB_CONFIGURE_EXTRA_FLAGS добавить следующую строку:

 

--disable-ipv6 \

 

Соответственно указанная секция примет следующий вид:

 

DEB_CONFIGURE_EXTRA_FLAGS := --datadir=/usr/share/squid3 \

               --sysconfdir=/etc/squid3 \

               --mandir=/usr/share/man \

               --enable-inline \

               --enable-async-io=8 \

               --enable-storeio="ufs,aufs,diskd,rock" \

               --enable-removal-policies="lru,heap" \

               --enable-delay-pools \

               --enable-cache-digests \

               --enable-underscores \

               --enable-icap-client \

               --enable-follow-x-forwarded-for \

               --enable-auth-basic="DB,fake,getpwnam,LDAP,MSNT,MSNT-multi-domain,NCSA,NIS,PAM,POP3,RADIUS,SASL,SMB" \

               --enable-auth-digest="file,LDAP" \

               --enable-auth-negotiate="kerberos,wrapper" \

               --enable-auth-ntlm="fake,smb_lm" \

               --enable-external-acl-helpers="file_userip,kerberos_ldap_group,LDAP_group,session,SQL_session,unix_group,wbinfo_group" \

               --enable-url-rewrite-helpers="fake" \

               --enable-eui \

               --enable-esi \

               --enable-icmp \

               --enable-zph-qos \

               --enable-ecap \

               --disable-translation \

               --with-swapdir=/var/spool/squid3 \

               --with-logdir=/var/log/squid3 \

               --with-pidfile=/var/run/squid3.pid \

               --with-filedescriptors=65536 \

               --with-large-files \

               --disable-ipv6 \

               --with-default-user=proxy

 

Шаг #5. Затем собираем deb-пакет. Для этого переходим в каталог squid3-3.3.8 и выполняем команду:

 

cd /home/user/squid3-3.3.8/

sudo dpkg-buildpackage -rfakeroot

 

Операция займёт продолжительное время и после её завершения в каталоге верхнего уровня появятся deb-пакеты:

 

ls -l /home/user/ | grep .deb$

 

-rw-r--r--  1 root root 1876694 Jun 24 11:53 squid3_3.3.8-1ubuntu6_amd64.deb

-rw-r--r--  1 root root  103250 Jun 24 11:54 squid_3.3.8-1ubuntu6_amd64.deb

-rw-r--r--  1 root root  248114 Jun 24 11:53 squid3-common_3.3.8-1ubuntu6_all.deb

-rw-r--r--  1 root root 8667572 Jun 24 11:54 squid3-dbg_3.3.8-1ubuntu6_amd64.deb

-rw-r--r--  1 root root  128234 Jun 24 11:54 squid-cgi_3.3.8-1ubuntu6_amd64.deb

-rw-r--r--  1 root root  125458 Jun 24 11:54 squidclient_3.3.8-1ubuntu6_amd64.deb

-rw-r--r--  1 root root  119282 Jun 24 11:54 squid-purge_3.3.8-1ubuntu6_amd64.deb

 

Шаг #6. Смотрим какой версии пакет Squid3 уже установлен в системе:

 

dpkg -l | grep squid3

 

ii squid3         3.3.8-1ubuntu6   amd64  Full featured Web Proxy cache (HTTP proxy)

ii squid3-common  3.3.8-1ubuntu6   all    Full featured Web Proxy cache (HTTP proxy) - common files

 

Шаг #7. Несмотря на то, что основной конфигурационный файл Squid не должен быть перезаписан, сохраняем его на всякий случай.

 

sudo cp /etc/squid3/squid.conf /home/user/squid.conf.backup

 

Шаг #8. Устанавливаем полученный пакет:

 

cd /home/user/

sudo dpkg -i squid3_3.3.8-1ubuntu6_amd64.deb squid3-common_3.3.8-1ubuntu6_all.deb

 

(Reading database ... 98837 files and directories currently installed.)

Preparing to unpack squid3_3.3.8-1ubuntu6_amd64.deb ...

squid3 stop/waiting

Unpacking squid3 (3.3.8-1ubuntu6) over (3.3.8-1ubuntu6) ...

Preparing to unpack squid3-common_3.3.8-1ubuntu6_all.deb ...

Unpacking squid3-common (3.3.8-1ubuntu6) over (3.3.8-1ubuntu6) ...

Setting up squid3-common (3.3.8-1ubuntu6) ...

Setting up squid3 (3.3.8-1ubuntu6) ...

squid3 start/running, process 52972

Skipping profile in /etc/apparmor.d/disable: usr.sbin.squid3

Processing triggers for man-db (2.6.7.1-1) ...

Processing triggers for ufw (0.34~rc-0ubuntu2) ...

Processing triggers for ureadahead (0.100.0-16) ...

ureadahead will be reprofiled on next reboot

 

Шаг #9. Перезагружаем сервер и проверяем результат.

 

sudo ss -lnptu | grep :3128

 

tcp    LISTEN  0   128   127.0.0.1:3128             *:*      users:(("squid3",1271,1840))

tcp    LISTEN  0   128   10.160.0.2:3128            *:*      users:(("squid3",1271,1839))

 

 

3. Отключаем обновление пакетов.

 

Если используется автоматическое обновление пакетов, то при желании дополнительно можно исключить возможность обновления для пересобранных нами пакетов и тех пакетов, рабочие файлы которых мы модифицировали в процессе нашего описания.

Посмотрим какие пакеты были установлены вручную а какие автоматически (как зависимости):

 

sudo apt-mark showmanual | grep squid

 

lightsquid

squid3

 

sudo apt-mark showauto | grep squid

 

squid-langpack

squid3-common

 

Добавим на удержание (запрет обновления) интересующие нас пакеты:

 

sudo apt-mark hold squid3 squid3-common squid-langpack lightsquid

 

squid3 set on hold.

squid3-common set on hold.

squid-langpack set on hold.

lightsquid set on hold.

 

Проверим полный список поставленных на удержание пакетов:

 

sudo apt-mark showhold

 

lightsquid

squid-langpack

squid3

squid3-common

 

 

4. Простая настройка прозрачного прокси-сервера на SQUID.

 

Есть масса задач, для решения которых применяют прокси-серверы. Чаще всего это организация доступа в Интернет и кэширование трафика. Для этой цели выполним простую настройку прозрачного прокси-сервера на SQUID.

 

Для установки SQUID выполним в терминале:

 

sudo apt-get install squid

 

Перейдём в каталог /etc/squid

 

Переименуем оригинальный конфигурационный файл squid.conf в squid.conf.original выполнив команду в терминале:

 

sudo mv squid.conf squid.conf.original

 

Удалим из оригинального конфигурационного файла все комментарии и пустые строки, сохранив результат в /tmp/squid.tmp. Для этого в терминале выполним:

 

sudo grep -v '^#' squid.conf.original | sed '/^$/d' > /tmp/squid.tmp

 

Затем переместим полученный файл /tmp/squid.tmp в /etc/squid/squid.conf командой в терминале:

 

sudo mv /tmp/squid.tmp /etc/squid/squid.conf

 

Внесём изменения в файл настроек прокси-сервера, открыв его в редакторе nano командой в терминале:

 

sudo nano /etc/squid/squid.conf

 

Разрешаем доступ только из своей сети добавив строку в файл (укажите IP-адреса своей сети):

 

acl localnet src 172.16.8.0/21

 

Разрешаем http-доступ для localnet добавив в файл строку:

 

http_access allow localnet

 

Указываем порт прокси-сервера - 3128, IP-адрес интерфейса на котором будет работать прокси-сервер (в моём случае - 172.16.15.1) и режим "прозрачный прокси" исправив строку в файле на:

 

http_port 172.16.15.1:3128 transparent

 

Вписываем в файл директорию кэша и его параметры:

 

cache_dir ufs /var/spool/squid 4096 32 256

 

Указываем минимальный размер кэшируемого файла (кэширование слишком мелких файлов сильно нагружает дисковую подсистему прокси-сервера):

 

minimum_object_size 2 KB

 

Указываем максимальный размер кэшируемого файла (кэширование очень больших файлов требует много места малоэффективно):

 

maximum_object_size 65536 KB

 

Для того, чтобы сделать наш прокси анонимным (прятать внутренние IP-адреса) - добавляем строки в файл:

 

via off

forwarded_for delete

 

Для работы FTP

 

ftp_passive on

ftp_telnet_protocol on

 

А так же в автозапуск в файл /etc/rc.local добавлена команда:

modprobe modprobe ip_nat_ftp; modprobe nf_conntrack_ftp

 

Остановим прокси-сервер командой в терминале:

 

sudo service squid stop

 

Подготовим директорию кэша выполнив в терминале:

 

sudo squid -z

 

Теперь запустим прокси-сервер командой:

 

sudo service squid start

 

Описываемая в этой статье схема подразумевает работу прокси-сервера в "прозрачном" режиме. Для этого сервер на котором устанавливается прокси-сервер SQUID должен быть шлюзом по-умолчанию для компьютеров локальной сети, а настройки прокси у пользователей указывать не требуется. Такая простота развёртывания обеспечивается перехватом обращений на порт 80 (http) и принудительным перенаправлением их на порт прокси-сервера - 3128.

 

Делается это средствами IPTABLES командой в терминале:

 

sudo iptables -t nat -A PREROUTING ! -d 172.16.8.0/21 -i eth1 -p tcp -m multiport --dport 80 -j REDIRECT --to-port 3128

 

Данное правило для таблицы NAT обеспечивает перенаправление пакетов TCP, пришедших на порт 80 сетевого интерфейса ETH1 (но не в сторону сети 172.16.8.0/21 - не будем кэшировать трафик в локальной сети) на порт 3128.

 

Настройки IPTABLES в данной статье подробно не рассматриваются, поэтому способ включения приведённого выше правила при загрузке сервера необходимо выбрать самостоятельно (это может быть команда в /etc/rc.local или отдельный скрипт на bash, либо правило прописанное средствами webmin).

 

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

 

http_port 172.16.15.1:3128