Кэширующий прокси-сервер позволяет ускорить процесс установки ОС GNU/Linux, FreeBSD. Он кэширует пакеты, которые скачиваются с зеркал и репозиториев в процессе установки ОС.

Рекомендуем в качестве кэширующего прокси-сервера использовать squid.

Обратите внимание!

В статье описана только начальная настройка. Для детальной настройки воспользуйтесь документацией squid.

Полную документацию squid 3.5 см. на официальном сайте.

Установка и настройка squid в CentOS7


Установите squid:

yum install squid.x86_64
systemctl enable squid.service
BASH

Настройка squid выполняется в файле /etc/squid/squid.conf.

После изменения конфигурационного файла перезапустите squid:

systemctl restart squid.service
BASH

Обратите внимание!

Разрешите подключения на TCP-порт squid в настройках вашего файрвола. По умолчанию squid использует порт 3128/TCP.

Конфигурационный файл squid 3.5 по умолчанию выглядит следующим образом:

Конфигурационный файл squid

[root@test squid]# cat /etc/squid/squid.conf
#
# Recommended minimum configuration:
#

# Example rule allowing access from your local networks.
# Adapt to list your (internal) IP networks from where browsing
# should be allowed
acl localnet src 10.0.0.0/8    # RFC1918 possible internal network
acl localnet src 172.16.0.0/12    # RFC1918 possible internal network
acl localnet src 192.168.0.0/16    # RFC1918 possible internal network
acl localnet src fc00::/7       # RFC 4193 local private network range
acl localnet src fe80::/10      # RFC 4291 link-local (directly plugged) machines

acl SSL_ports port 443
acl Safe_ports port 80        # http
acl Safe_ports port 21        # ftp
acl Safe_ports port 443        # https
acl Safe_ports port 70        # gopher
acl Safe_ports port 210        # wais
acl Safe_ports port 1025-65535    # unregistered ports
acl Safe_ports port 280        # http-mgmt
acl Safe_ports port 488        # gss-http
acl Safe_ports port 591        # filemaker
acl Safe_ports port 777        # multiling http
acl CONNECT method CONNECT

#
# Recommended minimum Access Permission configuration:
#
# Deny requests to certain unsafe ports
http_access deny !Safe_ports

# Deny CONNECT to other than secure SSL ports
http_access deny CONNECT !SSL_ports

# Only allow cachemgr access from localhost
http_access allow localhost manager
http_access deny manager

# We strongly recommend the following be uncommented to protect innocent
# web applications running on the proxy server who think the only
# one who can access services on "localhost" is a local user
#http_access deny to_localhost

#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#

# Example rule allowing access from your local networks.
# Adapt localnet in the ACL section to list your (internal) IP networks
# from where browsing should be allowed
http_access allow localnet
http_access allow localhost

# And finally deny all other access to this proxy
http_access deny all

# Squid normally listens to port 3128
http_port 3128

# Uncomment and adjust the following to add a disk cache directory.
#cache_dir ufs /var/spool/squid 100 16 256

# Leave coredumps in the first cache dir
coredump_dir /var/spool/squid

#
# Add any of your own refresh_pattern entries above these.
#
refresh_pattern ^ftp:        1440    20%    10080
refresh_pattern ^gopher:    1440    0%    1440
refresh_pattern -i (/cgi-bin/|\?) 0    0%    0
refresh_pattern .        0    20%    4320
BASH

Основные параметры конфигурационного файла squid


Обратите внимание!

Рассматриваются только параметры необходимые для минимальной конфигурации squid. Для тонкой настройки рекомендуем обратиться к официальной документации squid.

ACL

Управление доступом происходит с помощью списков доступа (ACL).

Списки доступа в конфигурационном файле squid указываются в виде:

acl aclname acltype argument ...
acl aclname acltype "file" ...
BASH

aclname — наименование списка доступа.

acltype — тип субъекта доступа.

argument, "file" — в зависимости от типа субъекта доступа — IP-адрес, порт, путь к файлу и т. д.


Основные типы субъектов доступа:

  1. acltype = src.
    acl localnet src <адрес_сети>/<маска сети> — список IP-адресов в качестве субъекта доступа.
  2. acltype = port.
    acl SSL_ports port <порт или диапазон портов> — список портов в качестве субъекта доступа.
  3. acltype = method.
    acl CONNECT method <метод> — метод HTTP-запроса {GET, POST, CONNECT...}.

HTTP_ACCESS

Операции доступа в конфигурационном файле squid указываются в виде:

http_access allow|deny [!]aclname ...
BASH

allow|deny — разрешить|запретить.

aclname — список доступа, к которому применяется правило.

!aclname — правило применяется ко всем субъектам, кроме списка доступа.

Например:

    • http_access allow localnet — разрешить доступ для localnet;
    • http_access deny CONNECT !SSL_ports — запретить CONNECT по всем портам, кроме SSL;
    • http_access deny all — запретить доступ для всех.

Правила проверяются поочерёдно, в порядке их указания в конфигурационном файле. Проверка происходит до тех пор, пока не будет найдено правило, подходящее для субъекта доступа. При отсутствии в конфигурационном файле операций доступа, запрос на доступ будет отклонён. При отсутствии подходящего правила доступа для запрашивающего субъекта, доступ будет разрешён, если последнее правило в списке запрещающее и доступ будет запрещён, если последнее правило в списке разрешающее. Рекомендуем в качестве последнего правила использовать "deny all". В таком случае, если ни одно из предыдущих правил не было применено к субъекту, доступ ему будет запрещён.

HTTP_PORT

Адреса сокетов, на которых squid будет ожидать запросы HTTP-клиентов, указываются в виде:

http_port <порт> [mode] [options]
http_port <имя хоста>:<порт> [mode] [options]
http_port <IP-адрес>:<порт> [mode] [options]
BASH

Например, http_port 3128


CACHE_DIR

По умолчанию кэш хранится только в памяти. Для хранения кэша на диске необходимо указать в конфигурационном файле параметр cache_dir:

cache_dir Type Directory-Name Fs-specific-data [options]
BASH

Type — тип хранилища (по умолчанию доступен только "ufs").

Directory-Name — директория для хранения кэша.

Fs-specific-data — дополнительные данные, зависят от типа хранилища.

Для "ufs":

cache_dir Type Directory-Name Mbytes L1 L2 [options]
BASH

<Mbytes> — объём дискового пространства для использования под кэш (100 МБайт по умолчанию). Не указывайте под кэш более 80% от общего объёма диска.

<L1> — количество поддиректорий первого уровня, которые будут созданы в указанной директории (16 по умолчанию).

<L2> — количество поддиректорий второго уровня, которые будут созданы в каждой директории первого уровня (256 по умолчанию).

COREDUMP_DIR

По умолчанию squid оставляет файлы ядра в директории, из которой он был запущен. Для использования определённой директории необходимо указать в конфигурационном файле параметр coredump_dir:

coredump_dir Directory-Name
BASH

Directory-Name — директория для хранения файлов ядра.

Например, coredump_dir /var/spool/squid.

REFRESH_PATTERN

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

refresh_pattern [-i] regex min percent max [options]
BASH

regexp — регулярное выражение, которое определяет, к каким объектам применяется данное правило.

min — время (в минутах), в течение которого объект считается новым.

percent — процент от времени жизни объекта, в течение которого объект считается новым. Время жизни объекта — время прошедшее с момента последнего изменения объекта на оригинальном источнике до момента загрузки объекта в кэше или сверки с кэшем. Время жизни запроса — время, прошедшее с момента загрузки объекта в кэш или сверки с кэшем до текущего момента. Время жизни запроса, по истечении которого объект считается старым, вычисляется как "percent" * время жизни объекта;

max — время, по истечению которого объект считается старым.

-i — отключение регистрочувствительности регулярного выражения.

Справедливо для объектов без явного указания срока действия.

При обработке refresh_pattern выполняется алгоритм. Выполнение останавливается при первом же совпадении. Кэшированный объект:

FRESH if expire > now, else STALE
STALE if age > max
FRESH if lm-factor < percent, else STALE
FRESH if age < min
else STALE
BASH

То есть кэшированный объект:

1. Если явно указан срок действия:

    1. Новый, если срок действия не истёк.
    2. Старый в противном случае.

2. Старый, если его возраст превысил максимальный срок действия.

3. Новый, если время жизни запроса не превышает указанное количество процентов от времени жизни объекта.

4. Новый, если возраст меньше минимального срока действия.

5. Старый.

Например, refresh_pattern ^gopher: 1440 0% 1440.

Проверка работы squid


Для проверки:

  1. Скачайте какой-либо файл через прокси с помощью wget, например:

    http_proxy=http://127.1.1.1:3128/ wget -O /dev/null http://ftp.freebsd.org/pub/FreeBSD/ports/ports/ports.tar.gz
    BASH
  2. Проверьте лог squid в /var/log/squid/access.log. Должна присутствовать запись вида:

    1381394282.324 12352 1.1.1.1 TCP_MISS/200 52127893 GET http://ftp.freebsd.org/pub/FreeBSD/ports/ports/ports.tar.gz - DIRECT/2001:6c8:130:800::4 application/x-gzip
    BASH
  3. При повторном скачивании файла в новой записи вместо "TCP_MISS" должно быть указано "TCP_HIT" или "TCP_HIT_MEM", например:

    1381394328.563 235 1.1.1.1 TCP_HIT/200 52127902 GET http://ftp.freebsd.org/pub/FreeBSD/ports/ports/ports.tar.gz - NONE/- application/x-gzip
    BASH

Настройка VMmanager


Укажите адрес прокси-сервера в Настройки кластера → Политики → поле HTTP proxy для IPv4 или HTTP proxy для IPv6. IPv4–адрес указывается в формате: http://<IP>:<Port>/, например http://127.1.1.1.1:3128/. IPv6–адрес указывается в формате: http://[<IP>]:<Port>/, например http://[1111:2222:3333::4444]:3128/. Укажите реальные IP-адреса, к которым виртуальные машины смогут подключиться. Если прокси расположен на том же сервере, что и панель управления, нельзя указывать loopback-адрес в качестве параметра, так как доступ к этому IP -адресу должен быть с любого из узлов кластера.