Базовая настройка SQUID
admin 24 Апреля 2008 в 17:24:45
Итак приступим.
Будем считать, что SQUID уже установлен(например из дистра операционки).
Если нет, рекомендую ставить из исходников, которые можно взять здесь.
Процедура установки довольно стандартна, при выполнении "configure"
рекомендуется указать некоторые опции(список всех - ./configure --help)
Например, включить delay pools для ограничения трафика.
Опции:
--prefix=/usr/local/squid (куда инсталлировать файлы, также имеется множество дополнительных ключей для тонкой настройки расположения файлов)
--enable-async-io=число-нитей (говорят, что в ядрах 2.4 заработало)
--enable-storeio="список-методов-хранения" (ufs - unix file system; aufs - async unix file system; diskd - отдельные процессы для асинхронного доступа к файлам; null - не хранить данные на диске; coss - файловая система COSS)
--enable-truncate (обнулять файлы вместо их удаления: быстрее, но требует много inode; были проблемы, когда переполнялась таблица inode; наверное, параметр minimum_object_size из-за этого появился; не рекомендуется для асинхронного ввода/вывода)
--disable-unlinkd (запретить использование внешних процессов для удаления файлов)
--enable-icmp (измерять путь до каждого HTTP-сервера при запросах с помощью ICMP, используется для оптимизации выбора сервера или соседа)
--enable-htcp (HTCP - вариант ICP по TCP, синхронизация кеша с соседями)
--enable-forw-via-db (включить поддержку БД Forw/Via для оптимизации выбора сервера или соседа)
--enable-cache-digests (использовать Cache Digests для оптимизации выбора сервера или соседа)
--enable-carp (Enable CARP support, cache ... routing protocol)
--disable-wccp (не включать поддержку протокола WCCP - Web Cache Coordination Protocol - позволяет Cisco IOS автоматически распознавать падение сервера)
--enable-delay-pools (управление ограничением трафика)
--enable-useragent-log (журнализовать заголовок Useragent)
--enable-referer-log (журнализовать заголовок Referer)
--enable-kill-parent-hack (помогает сделать shutdown чисто)
--enable-snmp (Enable SNMP monitoring)
--enable-arp-acl (ether address ACL)
--enable-cachemgr-hostname=имя-хоста (cachemgr.cgi будет по умолчанию натравлен на этот хост)
--enable-err-language=языки-для-сообщений-об-ошибках (по умолчанию - все)
--enable-default-err-language=язык-сообщений-об-ошибках
--enable-gnuregex (вместо regex, плохо работающего в Linux)
--enable-poll (можно использовать poll или select; poll быстрее, но не на всех платформах работает; обычно выбор делается автоматически, но если вы умнее configure...)
--disable-poll
--disable-http-violations (игнорировать все строки в конфигурации, которые нарушают стандарты HTTP)
--enable-ipf-transparent (разрешить поддержку transparent proxy для систем, использующих IP-Filter - в ядре Linux 2.2 и без этого хорошо)
--enable-pf-transparent (разрешить поддержку transparent proxy для систем, использующих PF network address redirection)
--enable-linux-netfilter (transparent proxy для ядра Linux 2.4)
--disable-ident-lookups (ident в современном мире - вещь бесполезная)
--disable-internal-dns (вместо внутренних запросов использовать внешние процессы dnsserver; рекомендуется для версий до 2.4)
--enable-underscores (позволять подчеркивания в именах хостов, надеясь что резолвер их не обрежет)
--enable-heap-replacement (использовать улучшенные алгоритмы замещения кеша вместо стандартного LRU, в версиях Squid до 2.4)
--enable-removal-policies="lru,heap" (улучшенные алгоритмы замещения кеша вместо стандартного LRU, в версиях Squid 2.4 и выше)
--enable-dlmalloc (своя библиотека malloc, не быстрая но без memore leak)
--enable-ssl (включить поддержку работы в качестве шлюза SSL с помощью OpenSSL)
--enable-auth="список методов авторизации" (basic, digest, ntlm; имеется множество дополнительных ключей, позволяющих настраивать методы авторизации: getpwnam, LDAP, multi-domain-NTLM, PAM, SMB, MSNT, NCSA, SASL, YP, )
Потом: make
make install
Допустим,что мы имеем сеть с внешним интерфейсом (например ppp(IP 212.96.100.2(адрес придуман))), смотрящим в интернет. И внутренним интерфейсом eth c IP 192.168.1.3
Пример конфига SQUID:
Указываем IP адрес и порт SQUID. Этот же адрес и порт нужно использовать для настройки прокси в программах (Opera,ICQ,IE ну и т.д., если прокси не используется как transparent)
#IP интерфейса и порт, где будет SQUID
http_port 192.168.1.3:3128
Порт ICP (кстати тоже можно указывать интерфейс: 192.168.1.3:3130) для использования Вашего SQUID как родительского прокси. Для выключения "0"
#Порт icp
icp_port 0
#Не кешировать скрипты
acl QUERY urlpath_regex cgi-bin ?
no_cache deny QUERY
Объем "быстрого" кеша в ОЗУ, например для страниц, которые используются сейчас и самых используемых объектов.
#Кол-во ОЗУ для SQUID
cache_mem 32 MB
Формат хранилища SQUID - ufs. Размер кеша(МБ): 1000. Кеш первого уровня: 16, кеш второго - 256.
#Путь к директории кеша и его размер(1000)
cache_dir ufs /var/spool/squid 1000 16 256
Путь к лог-файлу доступа. В ем хранятся статистика использования SQUID по IP адресам. Именно этот файл обрабатывают все программы, отображающие статистику работы через SQUID.
#Путь к лог-файлу доступа к SQUID(Статистика работы через SQUID)
cache_access_log /var/log/squid/access.log
Здесь информация о том, как прошел запуск SQUID и его дочерних процессов(напрмер редиректора)
#Путь к лог-файлу SQUID - в нем события запуска SQUID и дочерних программ
cache_log /var/log/squid/cache.log
Путь к лог-файлу Strore(не знаю че эта фигня значит)
#Путь к лог-файлу Strore
cache_store_log /var/log/squid/store.log
Параметр определяющий тип ротации логов, которая производится командой "squid -k logrotate".Команду можно использовать для формирования ежедневныхеженедельных отчетов, совместно с SARG например.
#Ротация логов
logfile_rotate 10
Таблица MIME-типов для SQUID. Тип файла, содержимое, расширение и т.п.
#Таблица MIME-типов для SQUID
mime_table /etc/squid/mime.conf
Идентификатор процесса SQUID (для убийства или рестарта процесса).
#PID-файл SQUID
pid_filename /var/run/squid.pid
Ниже параметры для работы SQUID с FTP-серверами
#Пользователь для анонимного доступа к FTP
ftp_user anonymous@
#SQUID формирует страницу с папками на FTP - этот параметр - кол-во папок
ftp_list_width 32
#Пассивный режим FTP
ftp_passive on
#Проверка подлинности FTP
ftp_sanitycheck on
Адреса DNS серверов, которые SQUID будет использовать.
#Адрес(а) DNS сервера(ов)
dns_nameservers 192.168.1.3
Списки контроля доступа - IP адреса/диапазоны IP адресов с маской подсети (для нашей сети маска будет выглядеть довольно необычно )
#Списки контроля доступа
acl server src 192.168.1.3/255.255.255.255 #Наш сервер - ему тоже нужен инет
acl zal src 192.168.1.10-192.168.1.20/255.255.255.255 #Группа компов(класс напрмер)
acl bibl src 192.168.1.30-192.168.1.40/255.255.255.255 #Еще одна группа(библиотека)
#Стандартные ACL
acl all src 0.0.0.0/0.0.0.0 #Все
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255 #Адрес localhost
acl SSL_ports port 443 563 #Порты SSL
acl SMTP port 25 #Для защиты от спама ;) Оказывается SQUID может делать relay
Порты, которые будет пропускать SQUID
#Служебные ACL
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 # https, snews
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
Разрешаем доступ, указанным в ACL. Принцип - что не разрешено - запрещено.
#Теперь разрешаем доступ тому, кто указан в ACL
http_access allow server #
http_access allow zal #
http_access allow bibl #
http_access deny !Safe_ports #
http_access deny SMTP #
http_access deny all #
#Разрешаем ICP-доступ всем
icp_access deny all
#Каталог со страницами неполадок SQUID
error_directory /etc/squid/errors
#Ограничение трафика
delay_pools 3 #Выделяем 3 пула задержки
delay_class 1 2 #Пул класса 2
delay_class 2 3 #Пул класса 3
delay_class 3 2 #Пул класса 2
Классы пулов задержки:
Класс 1 - одна часть пула на всех из этого класса
Класс 2 - одна общая часть пула и 255 отдельных для каждого хоста из C-сетки
Класс 3 - 255 частей для каждой сетки (класс B) и отдельная для каждого хоста
Формат строки параметрой пула:
delay_parameters [номер пула] [all_downl/all_size] [net_downl/net_size] [one_downl/one_size]
all - на всех
net - на подсеть
one - на отдельный адрес
downl - скорость заполнения части (байт/сек)
size - объем части пула (байт)
Для пула класса 1 используется только all
Для пула класса 2 используется all и net
Для пула класса 3 используется all, net и one
delay_access 1 allow server #Разрешаем серверу ходить через 1-й пул
delay_access 1 deny all #Остальным запрещаем
delay_parameters 1 -1/-1 -1/-1 #Параметры 1-го пула - без ограничений
delay_access 2 allow zal #Разрешаем комп. классу ходить через 2-й пул
delay_access 2 deny all #Остальным запрещаем
delay_parameters 2 8000/8000 8000/8000 4000/4000 #Параметры 2-го пула: канал на все и сеть - 8 кбсек(64 кбитсек) и на каждую машину не более 4 кбсек
delay_access 2 allow bibl #Разрешаем библиотеке ходить через 3-й пул
delay_access 3 deny all #Остальным запрещаем
delay_parameters 3 6000/6000 -1/-1 #Параметры 3-го пула: канал на все - 6 кбсек(56 кбитсек), а как они его поделят - не наши проблемы ;)
Для того, чтобы squid работал как transparent прокси на компе должен быть установлен и настроен iptables(форвардинг,маскарадинг). Перенаправляем пакеты, с помощью iptables,с порта 80 на порт 3128.
#Акселерация(для transparent прокси)
http_port 3128 # redirect д.б. на этот порт
httpd_accel_host virtual # имитирует акселератор http-сервера, но не совсе нормально
httpd_accel_port 80
httpd_accel_with_proxy on # иначе при работе в режиме акселератора отключается кеширование
httpd_accel_uses_host_header on # иначе виртуальные домены будут неправильно кешироваться
Будем считать, что SQUID уже установлен(например из дистра операционки).
Если нет, рекомендую ставить из исходников, которые можно взять здесь.
Процедура установки довольно стандартна, при выполнении "configure"
рекомендуется указать некоторые опции(список всех - ./configure --help)
Например, включить delay pools для ограничения трафика.
Опции:
--prefix=/usr/local/squid (куда инсталлировать файлы, также имеется множество дополнительных ключей для тонкой настройки расположения файлов)
--enable-async-io=число-нитей (говорят, что в ядрах 2.4 заработало)
--enable-storeio="список-методов-хранения" (ufs - unix file system; aufs - async unix file system; diskd - отдельные процессы для асинхронного доступа к файлам; null - не хранить данные на диске; coss - файловая система COSS)
--enable-truncate (обнулять файлы вместо их удаления: быстрее, но требует много inode; были проблемы, когда переполнялась таблица inode; наверное, параметр minimum_object_size из-за этого появился; не рекомендуется для асинхронного ввода/вывода)
--disable-unlinkd (запретить использование внешних процессов для удаления файлов)
--enable-icmp (измерять путь до каждого HTTP-сервера при запросах с помощью ICMP, используется для оптимизации выбора сервера или соседа)
--enable-htcp (HTCP - вариант ICP по TCP, синхронизация кеша с соседями)
--enable-forw-via-db (включить поддержку БД Forw/Via для оптимизации выбора сервера или соседа)
--enable-cache-digests (использовать Cache Digests для оптимизации выбора сервера или соседа)
--enable-carp (Enable CARP support, cache ... routing protocol)
--disable-wccp (не включать поддержку протокола WCCP - Web Cache Coordination Protocol - позволяет Cisco IOS автоматически распознавать падение сервера)
--enable-delay-pools (управление ограничением трафика)
--enable-useragent-log (журнализовать заголовок Useragent)
--enable-referer-log (журнализовать заголовок Referer)
--enable-kill-parent-hack (помогает сделать shutdown чисто)
--enable-snmp (Enable SNMP monitoring)
--enable-arp-acl (ether address ACL)
--enable-cachemgr-hostname=имя-хоста (cachemgr.cgi будет по умолчанию натравлен на этот хост)
--enable-err-language=языки-для-сообщений-об-ошибках (по умолчанию - все)
--enable-default-err-language=язык-сообщений-об-ошибках
--enable-gnuregex (вместо regex, плохо работающего в Linux)
--enable-poll (можно использовать poll или select; poll быстрее, но не на всех платформах работает; обычно выбор делается автоматически, но если вы умнее configure...)
--disable-poll
--disable-http-violations (игнорировать все строки в конфигурации, которые нарушают стандарты HTTP)
--enable-ipf-transparent (разрешить поддержку transparent proxy для систем, использующих IP-Filter - в ядре Linux 2.2 и без этого хорошо)
--enable-pf-transparent (разрешить поддержку transparent proxy для систем, использующих PF network address redirection)
--enable-linux-netfilter (transparent proxy для ядра Linux 2.4)
--disable-ident-lookups (ident в современном мире - вещь бесполезная)
--disable-internal-dns (вместо внутренних запросов использовать внешние процессы dnsserver; рекомендуется для версий до 2.4)
--enable-underscores (позволять подчеркивания в именах хостов, надеясь что резолвер их не обрежет)
--enable-heap-replacement (использовать улучшенные алгоритмы замещения кеша вместо стандартного LRU, в версиях Squid до 2.4)
--enable-removal-policies="lru,heap" (улучшенные алгоритмы замещения кеша вместо стандартного LRU, в версиях Squid 2.4 и выше)
--enable-dlmalloc (своя библиотека malloc, не быстрая но без memore leak)
--enable-ssl (включить поддержку работы в качестве шлюза SSL с помощью OpenSSL)
--enable-auth="список методов авторизации" (basic, digest, ntlm; имеется множество дополнительных ключей, позволяющих настраивать методы авторизации: getpwnam, LDAP, multi-domain-NTLM, PAM, SMB, MSNT, NCSA, SASL, YP, )
Потом: make
make install
Допустим,что мы имеем сеть с внешним интерфейсом (например ppp(IP 212.96.100.2(адрес придуман))), смотрящим в интернет. И внутренним интерфейсом eth c IP 192.168.1.3
Пример конфига SQUID:
Указываем IP адрес и порт SQUID. Этот же адрес и порт нужно использовать для настройки прокси в программах (Opera,ICQ,IE ну и т.д., если прокси не используется как transparent)
#IP интерфейса и порт, где будет SQUID
http_port 192.168.1.3:3128
Порт ICP (кстати тоже можно указывать интерфейс: 192.168.1.3:3130) для использования Вашего SQUID как родительского прокси. Для выключения "0"
#Порт icp
icp_port 0
#Не кешировать скрипты
acl QUERY urlpath_regex cgi-bin ?
no_cache deny QUERY
Объем "быстрого" кеша в ОЗУ, например для страниц, которые используются сейчас и самых используемых объектов.
#Кол-во ОЗУ для SQUID
cache_mem 32 MB
Формат хранилища SQUID - ufs. Размер кеша(МБ): 1000. Кеш первого уровня: 16, кеш второго - 256.
#Путь к директории кеша и его размер(1000)
cache_dir ufs /var/spool/squid 1000 16 256
Путь к лог-файлу доступа. В ем хранятся статистика использования SQUID по IP адресам. Именно этот файл обрабатывают все программы, отображающие статистику работы через SQUID.
#Путь к лог-файлу доступа к SQUID(Статистика работы через SQUID)
cache_access_log /var/log/squid/access.log
Здесь информация о том, как прошел запуск SQUID и его дочерних процессов(напрмер редиректора)
#Путь к лог-файлу SQUID - в нем события запуска SQUID и дочерних программ
cache_log /var/log/squid/cache.log
Путь к лог-файлу Strore(не знаю че эта фигня значит)
#Путь к лог-файлу Strore
cache_store_log /var/log/squid/store.log
Параметр определяющий тип ротации логов, которая производится командой "squid -k logrotate".Команду можно использовать для формирования ежедневныхеженедельных отчетов, совместно с SARG например.
#Ротация логов
logfile_rotate 10
Таблица MIME-типов для SQUID. Тип файла, содержимое, расширение и т.п.
#Таблица MIME-типов для SQUID
mime_table /etc/squid/mime.conf
Идентификатор процесса SQUID (для убийства или рестарта процесса).
#PID-файл SQUID
pid_filename /var/run/squid.pid
Ниже параметры для работы SQUID с FTP-серверами
#Пользователь для анонимного доступа к FTP
ftp_user anonymous@
#SQUID формирует страницу с папками на FTP - этот параметр - кол-во папок
ftp_list_width 32
#Пассивный режим FTP
ftp_passive on
#Проверка подлинности FTP
ftp_sanitycheck on
Адреса DNS серверов, которые SQUID будет использовать.
#Адрес(а) DNS сервера(ов)
dns_nameservers 192.168.1.3
Списки контроля доступа - IP адреса/диапазоны IP адресов с маской подсети (для нашей сети маска будет выглядеть довольно необычно )
#Списки контроля доступа
acl server src 192.168.1.3/255.255.255.255 #Наш сервер - ему тоже нужен инет
acl zal src 192.168.1.10-192.168.1.20/255.255.255.255 #Группа компов(класс напрмер)
acl bibl src 192.168.1.30-192.168.1.40/255.255.255.255 #Еще одна группа(библиотека)
#Стандартные ACL
acl all src 0.0.0.0/0.0.0.0 #Все
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255 #Адрес localhost
acl SSL_ports port 443 563 #Порты SSL
acl SMTP port 25 #Для защиты от спама ;) Оказывается SQUID может делать relay
Порты, которые будет пропускать SQUID
#Служебные ACL
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 # https, snews
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
Разрешаем доступ, указанным в ACL. Принцип - что не разрешено - запрещено.
#Теперь разрешаем доступ тому, кто указан в ACL
http_access allow server #
http_access allow zal #
http_access allow bibl #
http_access deny !Safe_ports #
http_access deny SMTP #
http_access deny all #
#Разрешаем ICP-доступ всем
icp_access deny all
#Каталог со страницами неполадок SQUID
error_directory /etc/squid/errors
#Ограничение трафика
delay_pools 3 #Выделяем 3 пула задержки
delay_class 1 2 #Пул класса 2
delay_class 2 3 #Пул класса 3
delay_class 3 2 #Пул класса 2
Классы пулов задержки:
Класс 1 - одна часть пула на всех из этого класса
Класс 2 - одна общая часть пула и 255 отдельных для каждого хоста из C-сетки
Класс 3 - 255 частей для каждой сетки (класс B) и отдельная для каждого хоста
Формат строки параметрой пула:
delay_parameters [номер пула] [all_downl/all_size] [net_downl/net_size] [one_downl/one_size]
all - на всех
net - на подсеть
one - на отдельный адрес
downl - скорость заполнения части (байт/сек)
size - объем части пула (байт)
Для пула класса 1 используется только all
Для пула класса 2 используется all и net
Для пула класса 3 используется all, net и one
delay_access 1 allow server #Разрешаем серверу ходить через 1-й пул
delay_access 1 deny all #Остальным запрещаем
delay_parameters 1 -1/-1 -1/-1 #Параметры 1-го пула - без ограничений
delay_access 2 allow zal #Разрешаем комп. классу ходить через 2-й пул
delay_access 2 deny all #Остальным запрещаем
delay_parameters 2 8000/8000 8000/8000 4000/4000 #Параметры 2-го пула: канал на все и сеть - 8 кбсек(64 кбитсек) и на каждую машину не более 4 кбсек
delay_access 2 allow bibl #Разрешаем библиотеке ходить через 3-й пул
delay_access 3 deny all #Остальным запрещаем
delay_parameters 3 6000/6000 -1/-1 #Параметры 3-го пула: канал на все - 6 кбсек(56 кбитсек), а как они его поделят - не наши проблемы ;)
Для того, чтобы squid работал как transparent прокси на компе должен быть установлен и настроен iptables(форвардинг,маскарадинг). Перенаправляем пакеты, с помощью iptables,с порта 80 на порт 3128.
#Акселерация(для transparent прокси)
http_port 3128 # redirect д.б. на этот порт
httpd_accel_host virtual # имитирует акселератор http-сервера, но не совсе нормально
httpd_accel_port 80
httpd_accel_with_proxy on # иначе при работе в режиме акселератора отключается кеширование
httpd_accel_uses_host_header on # иначе виртуальные домены будут неправильно кешироваться
|