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