UMGUM.COM 

Squid3 base configuration ( Базовая конфигурация Squid3. )

30 ноября 2011  (обновлено 31 января 2015)

OS: Debian GNU/Linux Squeeze.

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

# aptitude install squid3

Несколько упорядочиваем директорию с конфигурационными файлами, что выданы нам по умолчанию:

# mkdir /etc/squid3/misc
# mv -f /etc/squid3/msntauth.conf /etc/squid3/misc
# mv -f /etc/squid3/squid3.conf /etc/squid3/misc
# chown -R proxy:proxy /etc/squid3/misc

Создаём символическую ссылку на исполняемый файл для упрощённого управления:

# ln -sf /usr/sbin/squid3 /usr/sbin/squid3-ordinary

В Squid3 появился очень удобный функционал добавления внешних конфигурационных файлов с помощью директивы "include". Я стараюсь всегда пользоваться возможностью раздробить конфигурацию на логические сегменты, каждый из которых воспринять и осмыслить гораздо проще, нежели длиннющее полотенце, переполненное комментариями. В общем, для начала набросаем конфигурацию, при которой Squid запустится и начнёт работать, а уж потом добьём функционал до нужного нам.

Настругаем заготовок для внешних конфигурационных файлов:

# touch /etc/squid3/squid-ordinary-cache.conf
# touch /etc/squid3/squid-ordinary-acl.conf
# touch /etc/squid3/squid-ordinary-delay.conf
# touch /etc/squid3/squid-ordinary-ftp.conf
# touch /etc/squid3/squid-ordinary-snmp.conf

Создаём конфигурационный файл для обычного прокси:


# touch /etc/squid3/squid-ordinary.conf

# Указываем, от имени какого пользователя запускать сервер
#
cache_effective_user proxy
cache_effective_group proxy

# Указываем месторасположение PID файла
#
pid_filename /var/run/squid3-ordinary.pid

# Подавим вывод точного номера версии сервера (во избежание слишком лёгкого соблазна для деструктивных личностей)
#
httpd_suppress_version_string on

# Зададим условное "имя" сервера, отображаемое в сообщениях Squid пользователю
#
visible_hostname ordinary.proxy.local

# Зададим адрес электронного почтового ящика администратора, отображаемое в сообщениях Squid пользователю
#
cache_mgr address@email.example.com

# Задаём список интерфейсов и портов для прослушивания (из них 127.0.01 - только для подключения "менеджера")
#
http_port 127.0.0.1:3128
http_port 192.168.1.1:3128

# Отключаем прослушивание порта системой приёма управляющих запросов (если она вообще активна, конечно)
#
icp_port 0

# Отключаем встроенный в Squid HTTP-сервер, предназначенный для выдачи локальных статических ресурсов
#
global_internal_static off

# Включим внешние конфигурационные файлы
#
include /etc/squid3/squid-ordinary-cache.conf
include /etc/squid3/squid-ordinary-acl.conf
include /etc/squid3/squid-ordinary-delay.conf
include /etc/squid3/squid-ordinary-ftp.conf
include /etc/squid3/squid-ordinary-snmp.conf

# Укажем, от какого IP адреса должны будут исходить запросы прокси-сервера в сторону интернет
#
tcp_outgoing_address 192.168.1.1 allowed_src_ip

# Указываем месторасположение файлов и уровень детализации журнала доступа
#
access_log /var/log/squid3/access-ordinary.log squid
cache_log /var/log/squid3/cache-ordinary.log
cache_store_log none

# Укажем Squid не производить "обратный резольвинг" для IP-адресов подключающихся клиентов (применяется для внесения в журнал подключений FQDN вместо простого IP-адреса)
#
log_fqdn off

# Отключаем режим эмуляции лога HTTP сервера Apache (который по умолчанию и так выключен, но спокойный сон - залог здоровья)
#
emulate_httpd_log off

# Даём указание включить буферизацию записей лога (несколько облегчает работу дисковой подсистемы и в целом ускоряет работу)
#
buffered_logs on

# Указываем Squid не кешировать запросы содержащие определённые строки, например: "cgi-bin" или "?" (полагаю, что запретом кеширования должны заниматься сами web ресурсы, так что есть сильный соблазн отключить эту опцию)
#
# hierarchy_stoplist cgi-bin ?

# Устанавливаем время жизни статуса ошибочного ответа на запрос (это означает то, что при повторном запросе ресурса, с момента неудачного доступа к которому не прошло установленное время, Squid вернёт сообщение об ошибке без запроса ресурса)
#
negative_ttl 2 seconds

# Указываем Squid, как долго обслуживать подключения после получения сигналов SIGTERM или SIGHUP. После истечения периода, указанного в "shutdown_lifetime" клиенты получат сообщение об истечении "таймаута" и текущие соединения закроются перед остановкой сервера (по умолчанию значение "shutdown_lifetime" составляет 30 секунд, что, по моему, совершенно ни к чему)
#
shutdown_lifetime 3 seconds

# Разрешаем Squid закрывать установленные "постоянные" соединения, если есть подозрение на то, что они не используются и "зависли"
#
detect_broken_pconn on

# Указываем Squid не поддерживать "полузакрытые" соединения, работающие только в одну сторону (например, только на чтение с сервера, без отчёта о состоянии со стороны клиента); такие соединения используются достаточно редко при том, что аналогичное поведение бывает у "зависших" соединений, которые надо бы отключить для экономии ресурсов
#
half_closed_clients off

# Запрещаем Squid поддерживать "постоянные" TCP-соединения, в рамках которых могут быть осуществлено несколько HTTP-запросов (теоретически это удобно, но "глючно" временами)
#
server_persistent_connections off
client_persistent_connections off

# Укажем Squid игнорировать ответы от неизвестных ему DNS-серверов (один из элементов защиты от подмены ответов на запрос)
#
ignore_unknown_nameservers on

# Установим время кеширования корректных и некорректных DNS ответов (уменьшим значения относительно тех, что приняты по умолчанию; у нас свои кеширующие DNS-серверы и пусть они делают свою работу)
#
positive_dns_ttl 1 hour
negative_dns_ttl 30 seconds

# Установим укороченный интервал, используемый в арифметической прогрессии, определяющей периоды обхода DNS-серверов после неудачной попытки соединится с ними (через 2, 4, 6, 8 секунд, и так далее)
#
dns_retransmit_interval 2 seconds

# Определим время ожидания ответа от DNS-сервера, после которого ресурс будет считаться несуществующим
#
dns_timeout 20 seconds

# Указываем Squid проверять доменные имена запрашиваемых ресурсов на соответствие стандартам RFC
#
check_hostnames on

# Указываем Squid кодировать запросы содержащие пробелы в соответствии с RFC1738 (если это не сделано клиентом) и передавать дальше
#
uri_whitespace encode

# Запретим не соответствующие RFC символы "_" в доменных именах
#
allow_underscore off

# Укажем Squid делать записи в журнал об обнаружении неправильно оформленных HTTP-заголовков и не пропускать таковые
#
relaxed_header_parser warn

# Удаляем заголовки X-Forwarded-For из пакетов передаваемых прокси-сервером
# on|off|transparent|truncate|delete
#
forwarded_for delete

# Зададим количество попыток соединения Squid с запрашиваемым ресурсом с единственным IP адресом (если адресов несколько - они будут использованы Squid по очереди, по одному разу)
#
maximum_single_addr_tries 3

# Отключаем поддержку "умной" балансировки нагрузки на целевых серверах, имеющих несколько IP-адресов, когда Squid циклично перебирает IP-адреса целевого сервера при каждом новом запросе (выключение этого режима на Squid подразумевает переход к следующему IP-адресу, из пула целевого сервера, только тогда, когда нет возможности соединится по предыдущему; очень помогает в тех случаях, когда разработчики целевого сайта не отрастили достаточно прямые руки для поддержки сессий при произвольной смене точки входа на ресурс)
#
balance_on_multiple_ip off

# Определяем время ожидания установления соединения с запрошенным ресурсом, после истечения которого принимается решение о поиске альтернативного пути исполнения запроса
#
connect_timeout 20 seconds

# Определяем время ожидания ответа сервера после установления соединения с таковым
#
request_timeout 2 minutes

# Установим время ожидания очередной порции данных операции чтения в рамках установленного сеанса (означает то, что, если Squid не получит потока данных, или его продолжения, на запрос в течении указанного времени - сеанс будет отменён)
#
read_timeout 5 minutes

# Можно отключить сбор статистики по активности каждого клиента для Cache Manager (данные хранятся в оперативной памяти и разрастаются в объёме со временем; иногда может вполне хватить глобальной статистики и результатов анализа журнала).
# !!! Следует иметь в виду то, что если мы планируем осуществлять отлов клиентов, превысивших определённый лимит на количество одновременных подключений (ACL maxconn) или использовать SNMP для мониторинга - ведение "клиентской базы" придётся включить
#
client_db on

# Указываем серверу, откуда брать шаблоны сообщений об ошибках
#
error_directory /usr/share/squid3/errors/English

Проверяем конфигурационный файл на наличие ошибок, перед запуском его в работу:

# squid3 -f /etc/squid3/squid-ordinary.conf -k parse

Processing Configuration File: /etc/squid3/squid-ordinary.conf (depth 0)
Processing Configuration File: /etc/squid3/squid-ordinary-cache.conf (depth 1)
Processing Configuration File: /etc/squid3/squid-ordinary-acl.conf (depth 1)
Processing Configuration File: /etc/squid3/squid-ordinary-delay.conf (depth 1)
Processing Configuration File: /etc/squid3/squid-ordinary-ftp.conf (depth 1)
Processing Configuration File: /etc/squid3/squid-ordinary-snmp.conf (depth 1)

Ограничим доступ созданным файлам конфигурации:

# chown -R proxy:proxy /etc/squid3
# chmod -R g-w /etc/squid3
# chmod -R o-rwx /etc/squid3

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

Устанавливаем приложение ротации текстовых файлов с одновременным их сжатием:

# aptitude install logrotate gzip

Создаем конфигурационный файл ротации журнальных файлов для Squid:

# mkdir -p /etc/logrotate.d
# touch /etc/logrotate.d/squid3

# шаблон указывающий объекты подлежащие "ротации"
/var/log/squid3/*.log {
  # указание производить ротацию ежемесячно
  monthly
  # отсутствие файла не вызывает ошибку
  missingok
  # количество хранимых отработанных резервных копий
  rotate 10
  # указание сжимать отрабатываемые резервные копии
  compress
  # указание не сжимать первую резервную копию, делать это при повторном проходе
  delaycompress
  # указание не отрабатывать пустые файлы
  notifempty
  # добавлять к наименованию файла резервной копии даты в формате "-YYYYMMDD"
  dateext
  # задать права доступа, владельца и группу создаваемого журнального файла
  create 640 proxy proxy
  # указание на то, что следующие скрипты исполняются только один раз
  sharedscripts
  # скрипт даёт указание Squid перечитать конфигурацию и перейти на новые "лог" файлы
  postrotate
    /etc/init.d/squid3-ordinary reload
  endscript
}

Проверяем корректность конфигурационного файла:

# logrotate -d /etc/logrotate.d/squid3

Далее займёмся отношениями Squid с оперативной и дисковой памятью.


Заметки и комментарии к публикации:


Оставьте свой комментарий ( выразите мнение относительно публикации, поделитесь дополнительными сведениями или укажите на ошибку )