Теперь, когда мы, в предыдущих заметках, определились с конфигурацией Squid в области работы с памятью, приступим к уточнению принципов взаимодействия с внутренними и внешними ресурсами. Списки доступа (ACL) - как много в этих словах потаённого смысла для начинающего бестолкового выпускника ВУЗ или ПТУ. Если параметры работы с оборудованием можно просто "скопипастить" из статьи, то с "акеэлами" приходится мозг напрягать, что непривычно порой.
Для начала создадим место пребывания списков:
# mkdir -p /etc/squid3/acl
Создадим заранее файлы со списками доступа, которые после будем использовать в конфигурациях Squid. Все диапазоны IP будем указывать в CIDR.
Описываем источники, от которых разрешено принимать запросы (например):
# touch /etc/squid3/acl/allowed_src_ip
192.168.0.0/16
10.10.0.0/16
....
192.168.1.0/24
192.168.2.0/24
10.0.0.0/8
....
192.168.11.0/24
192.168.30.172/32
192.168.12.36/32
10.10.0.0/16
....
192.168.1.0/24
192.168.2.0/24
10.0.0.0/8
....
192.168.11.0/24
192.168.30.172/32
192.168.12.36/32
Описываем источники, от которых запрещено принимать запросы (например):
# touch /etc/squid3/acl/banned_src_ip
....
192.168.3.0/24
....
192.168.3.0/24
....
Описываем источники, запросы которых не будут кешироваться. Укажем здесь список клиентов, генерирующих заведомо уникальный трафик в очень больших количествах в короткий промежуток времени, способных поставить Squid "на колени" стремительным увеличением размера индекса "кеша" и забить этот самый "кеш" бесполезными для других клиентов данными, например: серверы обновления и зеркалирования (например):
# touch /etc/squid3/acl/nocache_src_ip
....
192.168.4.1/32
....
192.168.4.1/32
....
Описываем источники, количество одновременных запросов с которых не будет ограничиваться (например):
# touch /etc/squid3/acl/sessions_nolimit_src_ip
....
192.168.3.1/32
....
192.168.3.1/32
....
Описываем целевые ресурсы в виде URL, к которым запрещено принимать запросы (например):
# touch /etc/squid3/acl/banned_dst_url
.*banner.*
.*/counter/.*
....
.*/counter/.*
....
Описываем целевые ресурсы, к которым запрещено принимать запросы (например):
# touch /etc/squid3/acl/banned_dst_ip
64.12.0.0/16
205.188.0.0/16
....
205.188.0.0/16
....
Теперь сводим всё это во единое целое, подключаемое к конфигурации Squid:
# cat /etc/squid3/squid-ordinary-acl.conf
# ACL: begin
# Описываем конфигурацию, которую после применим
# acl all src all
acl localhost src 127.0.0.1/32
# Именуем способы и протоколы
#
acl manager proto cache_object
# acl allowed_protocol proto http
# acl allowed_protocol proto ftp
# Явно именуем и группируем обслуживаемые порты и методы
#
acl allowed_port port 21
acl allowed_port port 80
acl allowed_port port 443
#
acl ssl_port port 443
acl connect method CONNECT
# Указываем месторасположение файлов, в которых будут размещены списки субъектов ACL
#
acl allowed_src_ip src "/etc/squid3/acl/allowed_src_ip"
acl banned_src_ip src "/etc/squid3/acl/banned_src_ip"
acl nocache_src_ip src "/etc/squid3/acl/nocache_src_ip"
acl sessions_nolimit_src_ip src "/etc/squid3/acl/sessions_nolimit_src_ip"
acl banned_dst_url url_regex "/etc/squid3/acl/banned_dst_url"
acl banned_dst_ip dst "/etc/squid3/acl/banned_dst_ip"
# Отлавливаем клиентов, создающих слишком большое количество одновременных подключений через прокси (на практике более двадцати-тридцати одновременных соединений открывают только много-поточные "загрузчики", на широком канале вполне способные вынести всю оперативную память сервера, на котором работает Squid). На самом деле Squid некрасиво отрабатывает отлов превышения количества одновременных соединений, просто отключая клиента до того момента, как тот не снизит число подключений, вместо того, чтобы просто не пропускать соединения выше лимита. Именно потому я указываю здесь этот параметр более в общеобразовательных, чем практических целях
#
# acl exceeded_maxconn maxconn 32
# ACL: end
# ACL applay: begin
# Применяем конфигурацию, последовательно
# Указываем Squid не кешировать запросы от группы "nocache_src_ip"
#
cache deny nocache_src_ip
# Запрещаем излишнюю активность неиспользуемых управляющих служб
#
http_access deny manager
icp_access deny all
# Явно запрещаем доступ группе "banned_src_ip"
#
http_access deny banned_src_ip
# Явно запрещаем доступ к ресурсам группы "banned_dst_url"
#
http_access deny banned_dst_url all
# Явно запрещаем доступ к ресурсам группы "banned_dst_ip"
#
http_access deny banned_dst_ip
# Создаем правила для доступа локальных сервисов к прокси
#
http_access allow localhost
http_access allow manager localhost
# Запрещаем запросы к портам не входящим в группу "allowed_port"
#
http_access deny !allowed_port
# Запрещаем открытие прямого подключения всем, кроме группы "ssl port"
#
http_access deny CONNECT !ssl_port
# Запрещаем трафик пользователей, перебравших с количеством одновременных подключений, не включая источники в группе "sessions_nolimit_src_ip" (об этом функционале читать выше)
#
# http_access deny exceeded_maxconn !sessions_nolimit_src_ip
# Явно разрешаем доступ группе "allowed_src_ip"
#
http_access allow allowed_src_ip
# Всё остальное запрещаем
#
http_access deny all
# ACL applay: end
# Описываем конфигурацию, которую после применим
# acl all src all
acl localhost src 127.0.0.1/32
# Именуем способы и протоколы
#
acl manager proto cache_object
# acl allowed_protocol proto http
# acl allowed_protocol proto ftp
# Явно именуем и группируем обслуживаемые порты и методы
#
acl allowed_port port 21
acl allowed_port port 80
acl allowed_port port 443
#
acl ssl_port port 443
acl connect method CONNECT
# Указываем месторасположение файлов, в которых будут размещены списки субъектов ACL
#
acl allowed_src_ip src "/etc/squid3/acl/allowed_src_ip"
acl banned_src_ip src "/etc/squid3/acl/banned_src_ip"
acl nocache_src_ip src "/etc/squid3/acl/nocache_src_ip"
acl sessions_nolimit_src_ip src "/etc/squid3/acl/sessions_nolimit_src_ip"
acl banned_dst_url url_regex "/etc/squid3/acl/banned_dst_url"
acl banned_dst_ip dst "/etc/squid3/acl/banned_dst_ip"
# Отлавливаем клиентов, создающих слишком большое количество одновременных подключений через прокси (на практике более двадцати-тридцати одновременных соединений открывают только много-поточные "загрузчики", на широком канале вполне способные вынести всю оперативную память сервера, на котором работает Squid). На самом деле Squid некрасиво отрабатывает отлов превышения количества одновременных соединений, просто отключая клиента до того момента, как тот не снизит число подключений, вместо того, чтобы просто не пропускать соединения выше лимита. Именно потому я указываю здесь этот параметр более в общеобразовательных, чем практических целях
#
# acl exceeded_maxconn maxconn 32
# ACL: end
# ACL applay: begin
# Применяем конфигурацию, последовательно
# Указываем Squid не кешировать запросы от группы "nocache_src_ip"
#
cache deny nocache_src_ip
# Запрещаем излишнюю активность неиспользуемых управляющих служб
#
http_access deny manager
icp_access deny all
# Явно запрещаем доступ группе "banned_src_ip"
#
http_access deny banned_src_ip
# Явно запрещаем доступ к ресурсам группы "banned_dst_url"
#
http_access deny banned_dst_url all
# Явно запрещаем доступ к ресурсам группы "banned_dst_ip"
#
http_access deny banned_dst_ip
# Создаем правила для доступа локальных сервисов к прокси
#
http_access allow localhost
http_access allow manager localhost
# Запрещаем запросы к портам не входящим в группу "allowed_port"
#
http_access deny !allowed_port
# Запрещаем открытие прямого подключения всем, кроме группы "ssl port"
#
http_access deny CONNECT !ssl_port
# Запрещаем трафик пользователей, перебравших с количеством одновременных подключений, не включая источники в группе "sessions_nolimit_src_ip" (об этом функционале читать выше)
#
# http_access deny exceeded_maxconn !sessions_nolimit_src_ip
# Явно разрешаем доступ группе "allowed_src_ip"
#
http_access allow allowed_src_ip
# Всё остальное запрещаем
#
http_access deny all
# ACL applay: end
Проверяем конфигурационный файл на наличие ошибок, перед запуском его в работу:
# squid3 -f /etc/squid3/squid-ordinary-acl.conf -k parse
Processing Configuration File: /etc/squid3/squid-ordinary-acl.conf (depth 0)
Конфигурация почти готова для запуска Squid в работу, но - погодим. Следующим шагом будет определение принципов разделения канала между пользователями сервиса.