Загружаем и устанавливаем пакеты необходимого ПО:
# 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
# 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-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
#
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)
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
# 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
# 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
}
/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 с оперативной и дисковой памятью.
6 ноября 2012 в 16:23
6 ноября 2012 в 16:45
7 ноября 2012 в 16:13
7 ноября 2012 в 17:05
7 ноября 2012 в 17:11
7 ноября 2012 в 17:14
7 ноября 2012 в 17:23
7 ноября 2012 в 17:33
7 ноября 2012 в 17:42
7 ноября 2012 в 20:49
7 ноября 2012 в 23:17
12 ноября 2012 в 14:02
7 ноября 2012 в 17:26