Настройка прокси сервера Squid 3.3 на Ubuntu Server 14.04 LTS. Часть 10. Отключаем IPv6

imageВ интернете можно встретить ряд свидетельств того, что при включенной по умолчанию в Squid3 поддержке IPv6 и при этом ненастроенных и неиспользуемых интерфейсах IPv6 можно столкнуться с разнообразными проблемами. В этой заметке мы рассмотрим то, как можно отключить на Ubuntu Server 14.04 LTS поддержку IPv6, а также выполним пересборку пакета Squid3, чтобы отбить у Squid желание использовать IPv6.

Отключаем IPv6 в Ubuntu Server

Убедимся в том, что в системе действительно присутствуют ipv6 интерфейсы:

ip a | grep inet

Также можно увидеть, что некоторые приложения вывешивают TCP прослушиватели на интерфейсах IPv6. Посмотреть все прослушиваемые в системе порты можно командой:

sudo ss -lnptu | sort

Чтобы выключить поддержку IPv6 на всех сетевых интерфейсах сразу, открываем на редактирование файл sysctl.conf

sudo nano -Y sh /etc/sysctl.conf

В конец файла добавляем строку:

net.ipv6.conf.all.disable_ipv6 = 1

Для проверки того, что наша опция сможет быть прочитана sysctl во время загрузки выполним:

sudo sysctl -p

Перезагружаем сервер и снова проверяем список интерфейсов, где inet6 интерфейсов уже не должно остаться

ip a | grep inet

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

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

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

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

 Шаг #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))

 

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

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

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

***

На этом мы завершим серию заметок по настройке прокси-сервера Squid 3.3 на Ubuntu Server 14.04 LTS. В конечном итоге мы получили решение представляющее бесплатную альтернативу Forefront TMG в части базовой функциональности прямого прокси (forward proxy) с поддержкой аутентификации и авторизации пользователей в домене Active Directory.

***

Предыдущие части цикла заметок:

Часть 1. Установка ОС на ВМ Hyper-V Gen2
Часть 2. Настройка диска для кэша Squid
Часть 3. Конфигурация DNS , NTP и установка Squid
Часть 4. Конфигурация Kerberos и NTLM
Часть 5. Конфигурация Squid 3
Часть 6. Настройка Proxy Auto Configuration (WPAD)
Часть 7. Кастомизация страниц ошибок
Часть 8. Конфигурация SqStat
Часть 9. Конфигурация LightSquid

Всего комментариев: 13 Комментировать

  1. rust /

    хотелось бы почитать про настройку netflow

  2. Alexander K. /

    Большое Вам спасибо за этот цикл статей!

  3. Danis.P /

    Просто респект за столь подробную статью. Ни багов ни косяков. Настроил и работай. Класс!!!

  4. Можно не отключать IPv6, а установить Miredo (реализация туннеля Teredo для Linux).

  5. Обратная ссылка: Обновляем Squid 3.3.8 до версии 3.4.8 из исходных файлов на Ubuntu Server 14.04.1 LTS | Блог IT-KB /

  6. Илья /

    Спасибо за статью! продела все по мануалу, было пару ошибок но вроде справился. в итоге получилась занятная ситуация:
    ext_ldap_group_acl отрабатывает только 4 пользователей..(( остальные не определяются в группах доступа

    проверяю например:
    sudo /usr/lib/squid3/ext_ldap_group_acl -v 3 -P -R -K -b "ou=Groups,dc=corp,dc=aeroem,dc=ru" -D SquidKerb@XXX.XXX.ru -W /etc/squid3/conf_param_ldappass.txt -f "(&(objectclass=person)(sAMAccountName=%v)(memberOf:1.2.840.113556.1.4.1941:=CN=%g,OU=Groups,DC=XXX,DC=XXX,DC=ru))" -h ad.XXX.XXX.ru adc.XXX.XXX.ru
    kff corp-internet-standard
    OK
    update corp-internet-standard
    ERR

    оба пользователя лежат в одном каталоге внутри АД...

    при чем проработало несколько дней.. и вот те пользователи которые в эти дни работали... работают до сих пор, но новых добавляю в группы и скуид их не пускает. Я если честно в тупике.

    если например на ад удалю пользователя kff из группы corp-internet-standard, то ext_ldap_group_acl выдает ERR... т.е. отрабатывает и с доменом работает.

    1. Алексей Максимов / Автор записи

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

  7. Woot /

    Добрый вечер.
    Всё работает прекрасно .
    Есть одно но и непонятно почему.
    Все администраторы домена отлично работают , статистика ведётся, всё согласно групп доступа к сайтам, всё ок.
    Но обычному пользователю , куда бы я его не добавлял по группам, всегда отказано в доступе.
    В чём может быть подвох ?

    1. Илья /

      тоже самое было... разобрался.
      нужно сделать делегирование управления для учетки компа-пользователя на "Чтение информации о всех пользователях" я тоже с этим намучился)) Предлагаю Алексею сделать в манулае где то сноску об этом.

  8. Ярослав /

    Спасибо Вам огромное, Алексей!За подробный и крутой manual по настройке Squid!

  9. Oshor /

    Это просто бомба!!! Спасибо тебе Мужик! По банерам понатыкаю!

  10. Алексей Максимов / Автор записи

    Спасибо всем за тёплые слова :)

  11. Serg Morozov /

    Еще одно огромное спасибо, отключение IPv6 и пересборка Squid - это то, что я искал.

Добавить комментарий