Линуксоидам: Республика Squid
09.09.08
Мой Компьютер, №15, 07.04.2008
Все описанные действия будем производить в Ubuntu 6.06 Server LTS… и пару слов посвятим FreeBSD 6.3, так как этот вариант предполагает долгосрочную поддержку (до лета 2011 года). Кроме GNU/Linux есть версии Squid для: *BSD, MacOS X, SunOS/Solaris, Windows и некоторых других систем. За вычетом некоторых особенностей установки Squid в конкретном решении, все сказанное будет действительно и для них.
В Ubuntu есть еще один момент, о котором необходимо помнить. Так, в репозитарии Dapper Drake находится пакет с версией Squid 2.5, в последнем Gutsy Gibbon — 2.6.14. Но начиная с Festy Fawn (7.04) в репозитарии доступны пакеты с третьей версией Squid. Во всех вариантах — 2.5, 2.6 и 3.0 — есть небольшие изменения в отдельных параметрах конфигурационных файлов, поэтому следует быть внимательным. Но все описанное в статье будет работать в любой версии.
Установка Squid
Нужные пакеты, в том числе и сопутствующих приложений, можно найти, введя команду:
sudo apt-cache search squid
Установка второй версии Squid в Ubuntu стандартна:
$ sudo apt-get install squid
Или для Squid 3:
$ sudo apt-get install squid3
В портах FreeBSD также присутствуют обе версии. Для установки 2.6.x (2.6.18) вводим:
# cd /usr/ports/www/squid
Или для 3.0:
# cd /usr/ports/www/squid30
И далее:
# make install
После инсталляции Squid будет запущен с установками по умолчанию. Просмотреть их можно, введя:
$ sudo grep -v «^#» /etc/squid/squid.conf | sed -e ‘/^$/d’
В FreeBSD конфигурационный файл squid.conf находится в каталоге /usr/local/etc/squid/.
Если невозможно получить правильное имя компьютера, то в процессе первого запуска появляется ошибка:
FATAL: Could not determine fully qualified hostname. Please set ‘visible_hostname’
В выводе присутствует и подсказка — необходимо установить значение переменной ‘visible_hostname’.
Настраиваем запуск
Формат squid.conf стандартен для Unix, каждая запись состоит из строк вида:
параметр значение
Cтроки, начинающиеся со знака решетки, являются комментариями. Для удобства настройки все параметры разбиты по секциям, хоть, в принципе, можно прописывать свои параметры в любом месте файла, лишь бы затем было понятно. Но следует помнить — установки применяются в порядке очередности. Для начала запустим Squid, устранив ошибку, указанную выше. Заносим в этот файл строку с именем сервера Squid (оно не обязательно должно совпадать с DNS):
visible_hostname mysquidserver
В Ubuntu уже все готово, запускаем:
$ sudo /etc/init.d/squid start
После перезагрузки в настройках по умолчанию Squid будет стартовать автоматически, ничего больше делать не нужно.
Настройка сервера во FreeBSD имеет особенности. Вначале необходимо для автоматического старта добавить в /etc/rc.conf строку “squid_enable=YES”. Теперь создаем swap-каталог:
# /usr/local/sbin/squid -z
И запускаем Squid:
# /usr/local/sbin/squid -D
Еще один важный момент. После всех изменений в конфигурационных файлах необходимо, чтобы Squid его перечитал. Для этого в Ubuntu используем команду:
$ sudo /etc/init.d/squid restart
А во FreeBSD:
# /usr/local/sbin/squid –k reconfigure
Теперь можно переходить к другим настройкам.
Настройки рабочего порта
В настройках по умолчанию Сквид принимает входящие сообщения на 3128 порту всех сетевых интерфейсов компьютера. Проверить, слушается ли этот порт, можно, введя команду:
“netstat –ant | grep 3128”.
Пользователи вначале должны настроить соответствующим образом web-браузер. Для Firefox открываем Настройки, переходим в Основные, нажимаем кнопку Параметры соединения, устанавливаем флажок Настройка прокси вручную и заполняем поля.
Чтобы не перестраивать клиентские системы, можно использовать iptables, например так:
iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp —dport 80 -j DNAT —to-destination 192.168.0.1:3128
iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp —dport 80 -j REDIRECT —to-ports 3128
Во FreeBSD при помощи PF заносим в /etc/pf.conf следующие строки:
rdr on $int_if inet proto {tcp, udp} from $int_net to any port $www_port -> 192.168.0.1 port 3128
nat on $ext_if from $int_net to any -> ($ext_if)
Здесь $int_if — имя сетевого интерфейса локальной сети, $int_net — адрес локальной сети (в нашем случае это будет 192.168.0.0/24),
Если порт 3128 уже занят, можно использовать любой другой свободный. Для этого следует его указать в файле squid.conf в параметре http_port, не забыв изменить правила пакетного фильтра.
http_port 8080 transparent
Можно ограничить подключение к Squid только по конкретному адресу (интерфейсу):
http_port 192.168.0.1:3128 transparent
Но параметр transparent будет работать только в 2.6 и 3.0, версия 2.5 его не поддерживает. Для проверки правильности введенных параметров используейте “sudo squid –k parse”.
$ sudo squid -k parse
FATAL: Bungled squid.conf line 53: http_port 192.168.0.1:3128 transparent
Squid Cache (Version 2.5.STABLE12): Terminated abnormally.
Настраиваем acl
В настройках по умолчанию разрешена работа через Squid только с локального адреса (localhost). При попытке подключиться с другого компьютера в сети получаем Access Denied. Чтобы в Интернет могли попасть остальные пользователи сети, нужно установить разрешения, используя связку ACL/http_access. По умолчанию интересующие нас правила в секции “ACCESS CONTROL”выглядят так:
acl all src 0.0.0.0/0.0.0.0
acl localhost src 127.0.0.1/255.255.255.255
http_access allow localhost
http_access deny all
Вторая строка — all и localhost — это название нового списка доступа. Третья строка — тип списка доступа. В нашем случае использован src (от «source»). При помощи других параметров можно указать внешний адрес (dst), МАС-адрес (arp), доменное имя (srcdomain, dstdomain), порт (port), протокол (proto), время (time) и многие другие.
Чтобы разрешить всем пользователям сети 192.168.0.0 подключаться к Squid, добавляем описание нового списка доступа:
acl localnet src 192.168.0.0/24
Если нужно настроить доступ не для всей сети, а для отдельных ее узлов, проще записать их адреса в файл (по одному в строке), который и указать в качестве последнего параметра:
acl localip src “/etc/squid/ip”
Можно в ACL указывать и время. Например, чтобы указать рабочее время, используем такую конструкцию:
acl work_hours time M T W T F 9:00-18:00
В описании используются первые буквы английского языка, соответствующие дням недели. В правила по умолчанию описываются номера некоторых портов (привожу не все):
acl SSL_ports port 443 563 873
acl Safe_ports port 80 21 443 563 1025-65535
Следует внимательно просмотреть весь список и закомментировать строки с портами ненужных или неиспользуемых сервисов.
Настройка доступа
Когда списки составлены, самое время раздать всем по заслугам при помощи параметра http_access. Общий формат вызова такой:
http_access allow|deny [!] название_ACL
Восклицательный знак инвертирует значение списка — «все кроме». В самом конце списка должно стоять правило:
http_access deny all
То есть все соединения, которые явно не будут разрешены, блокируются. Чтобы разрешить подключение к Squid с указанных адресов и работу только с нужными портами, пишем:
http_access allow localnet
http_access deny !Safe_ports
http_access deny !SSL_ports
Сохраняем результат, перезапускаем Squid и пробуем подключиться. Для примера разрешим им подключаться только в work_hours.
http_access allow work_hours localnet
http_access deny localnet
Первая строка разрешит доступ при совпадении двух ACL: рабочее время и IP-адрес. Вторая запретит доступ всех записанных в ACL workip при несовпадении с первым правилом, то есть в другой временной промежуток.
Используя связку ACL/http_access, можно блокировать доступ к определенным ресурсам и резать баннеры, но об этом в следующий раз. Чтобы картина была полной, разберем настройку кэша.
Настройки кэша
Squid полезен еще и тем, что при повторном запросе ресурса он берет информацию из своего кэша, а не с сайта. Тем самым позволяя разгрузить канал и увеличить скорость доступа, ведь из кэша файл или страница отдается мгновенно. При большом количестве пользователей экономия трафика может быть приличной. Кэш находится в каталоге, на который указывает переменная cache_dir. В Ubuntu это /var/spool/squid, во FreeBSD — /usr/local/squid/cache. В других дистрибутивах может быть иначе. Формат переменной такой:
cache_dir type путь размер L1 L2 [options]
Например, во FreeBSD:
cache_dir ufs /usr/local/squid/cache 100 16 256
Поле type определяет формат кэша: ufs («unix file system»), aufs и diskd. Его можно не трогать. Максимальный размер, после которого кэш будет очищаться, установлен в 100 Мб. В больших сетях этого мало, поэтому есть смысл увеличить его до нескольких гигабайт. Кстати, можно указать несколько cache_dir, расположив кэш на разных дисках, что положительно сказывается на производительности. В Squid каждый кэшируемый объект располагается в отдельном файле, сами файлы не сваливаются в одно место, а используется двухуровневая иерархия каталогов. Количество каталогов 1 и 2 уровней определяют параметры L1 и L2. По умолчанию их значения — 16 и 256 соответственно. Дополнительно для каждого cache_dir можно определить параметр read-only (только чтение) и max-size (максимальный размер объекта).
Глобально максимальный размер объекта в кэше определяется переменной maximum_object_size, значение по умолчанию которой 4 Мб, имеет смысл его увеличить:
maximum_object_size 10240 Kб.
Объем оперативной памяти, используемый Squid для хранения обрабатываемых объектов, определяется параметром cache_mem (по умолчанию 8 Мб). Оставшееся пространство может быть использовано для хранения часто используемых и других объектов. Объемы современных ОЗУ позволяют использовать больший размер cache_mem, иначе Squid будет сбрасывать информацию на диск.
Отключенный по умолчанию параметр reload_into_ims разрешает игнорировать nocache или reload и выдавать объект из кэша. Это нарушение стандарта HTTP, и есть определенный риск при его использовании, но большинство серверов умеют корректно обработать такой запрос, потому:
reload_into_ims on
Хотя можно вместо глобальной установки установить параметры кэширования для конкретных типов файлов в refresh_pattern. В общем, шаблон записи выглядит так:
refresh_pattern [-i] regex min percent max [options]
В regex пишем регулярное выражение, которому будет отвечать правило; проверка производится до первого совпадения.
Поэтому последним всегда устанавливается «.», то есть правило для всех объектов. Параметр min и max указывают соответственно на минимальное и максимальное время в минутах, в течение которого объект считается новым. В percent указывается процент от времени последней модификации объекта, в течение которого объект считается новым. В min рекомендуется устанавливать 0, чтобы корректно работать с динамически обновляемыми страницами. В версии Squid 3.0 по умолчанию используются инструкции:
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern (cgi-bin|?) 0 0% 0
refresh_pattern . 0 20% 4320
В версии 2.6 третье правило отсутствует. В поле options через пробел указываются дополнительные параметры. В версии 2.x таких параметров семь, в 3.х добавилось еще два. Большинство из них противоречит стандартам HTTP, и их использование может вызвать проблемы при работе с некоторыми серверами.
В самом простом случае вместо правил по умолчанию можно написать одно правило, заставляющее принудительно кэшировать объекты на целый год:
refresh_pattern . 518400 80% 518400 override-expire override-lastmod reload-into-ims ignore-no-cache ignore-private ignore-auth ignore-no-store
И устанавливаем размер кэша побольше. Это даст весьма ощутимую экономию трафика. Не всегда такой подход приемлем, да и кэш старыми файлами заполнится быстро. Лучше установить свои варианты кэширования, для разных типов файлов. Например, укажем для некоторых файлов время хранения — в течение месяца:
refresh_pattern .exe$ 43200 100% 43200 override-expire override-lastmod reload-into-ims ignore-no-cache ignore-private ignore-auth ignore-no-store
refresh_pattern .zip$ 43200 100% 43200 override-expire override-lastmod reload-into-ims ignore-no-cache ignore-private ignore-auth ignore-no-store
И так далее. Таким же образом «вырезают» рекламу. Так как создавать универсальное правило для ACL/http_access тяжело и всегда можно допустить ошибку, рекламу админу проще кэшировать, чем запрещать. Например, так:
refresh_pattern http://ad. 43200 100% 43200 override-expire override-lastmod reload-into-ims ignore-no-cache ignore-private ignore-auth ignore-no-store
Это самый простой способ. Запускаем во FreeBSD:
# tail -f /usr/local/squid/logs/access.log
Или в Ubuntu:
$ sudo tail -f /var/log/squid/access.log
И составляем коллекцию адресов, которые нужно поместить в вечный кэш. Но есть и другие способы.
Мы рассмотрели лишь самые простые настройки Squid. Базовая настройка занимает совсем немного времени, после чего пользователи будут наслаждаться скоростью Интернета, а руководство — использованием трафика. Если ручная настройка не кажется удобной, то обратитесь к Webmin, в котором большинство установок можно произвести в удобной наглядной форме.
Linux forever!
Сергей «grinder» ЯРЕМЧУК
Web-droid editor

вологість:
тиск:
вітер:

Огляд джерела безперебійного живлення PowerWalker VFI 2000 AT: такі часи



Джерела безперебійного живлення стали як ніколи актуальними цієї зими. Про досвід використанням в умовах квартири з автономним опаленням, розкажемо на прикладі моделі PowerWalker VFI 2000 AT

Перша RPG про війну в Україні. Hollow Home розкаже про виживання в Маріуполі
війна ігри події в Україні розробкаКиївська студія Twigames повідомила про розробку наративної рольової гри Hollow Home про події в Маріуполі на початку його окупації російськими військами
Valve офіційно анонсувала Counter-Strike 2
Counter Strike Valve ігри розробка«Counter-Strike 2 — це найбільший технічний стрибок в історії Counter-Strike, що забезпечить нові особливості та оновлення на прийдешні роки», — розповідають у Valve.