- Прозрачный прокси сервер SQUID на Ubuntu
- Режимы работы SQUID и идентификация
- Установка и базовая настройка SQUID
- Включение кэширования в SQUID
- SQUID прозрачный прокси — настройка
- Настройка IPTABLES для работы в режиме ‘SQUID прозрачный прокси’
- Установка и настройка Squid на Ubuntu
- Установка и базовая настройка
- Проверка
- Прозрачный прокси
- Авторизация по логину и паролю
- Слушаем на определенном интерфейсе
- Исходящий сетевой интерфейс
- Настройка цепочки прокси-серверов
Прозрачный прокси сервер SQUID на Ubuntu
Прозрачный прокси сервер SQUID — наиболее широко используемый в настоящее время прокси сервер, реализуемый на Linux. Отличается широким функционалом и достаточной сложностью конфигурации. Основной файл с настройками содержит около 4 000 строк. Рассмотрим процесс конфигурации squid как прозрачный прокси.
Режимы работы SQUID и идентификация
Режимы работы: обычный, анонимный прокси сервер, SQUID прозрачный прокси
Прозрачный прокси (transparent) подразумевает отсутствие необходимости указывать на использование прокси со стороны клиента (в интернет-браузерах на клиентских компьютерах). Трафик со стандартных портов (80, 8080, 443) переадресуется на порт, на котором работает SQUID.
Анонимный прокси сервер не предполагает авторизации. т.е. его может использовать кто-угодно в Интернете, знающий IP сервера, на котором установлено и сконфигурировано ПО.
SQUID поддерживает насколько способов идентификации пользователей — самый распространенный способ — по IP адресам
SQUID применяется в домашних и, чаще, корпоративных сетях для фильтрации трафика и установки ограничений на использование сетевых ресурсов. Также SQUID часто настраивается для возможности кэширования данных. Прокси серверы часто применяются в образовательных учреждениях: школах и ВУЗах.
Установка и базовая настройка SQUID
Сложность конфигурации squid, упомянутая ранее проявляется при необходимости выполнения программным продуктом специфических задач — многоуровневой фильтрации трафика по множеству правил.
Настройка же базового функционала довольно проста. Она и будет рассмотрена в рамках данного материала.
Устанавливаем необходимые пакеты из репозитория
apt-get install squid squid-common
После установки с дефолтным конфигурационным файлом squid блокирует доступ в Интернет полностью.
В этом можно убедиться обратившись к какому-либо ресурсу в Интернете через браузер
Обращаемся к файлу, запускающему squid из консоли с ключом -v, таким образом мы сможем увидеть установленную версию программного пакета, в данном случае 3.2
Делаем бэкап конфигурационного файла
cp /etc/sqid/squid.conf /etc/sqid/squid.conf.backup
Приступаем к редактированию файла
Находим закомментированную строку #TAG: visible_hostname, копируем visible_hostname и вставляем в тело конфигурационного файла
#TAG: visible_hostname
visible_hostname remote-tech-support-ProxyServer
Вписываем имя прокси сервера. На его работы это влияния не окажет, данной строкой определяется имя, отображаемое на странице ошибки при попытке попасть на страницу, доступ к которой ограничен
Аналогичным образом поступаем с переменной, определяющей e-mail администратора прокси сервера, он также будет отображаться на странице с ошибкой, клиенты компании смогут направить на него письма с вопросами относительно разумности ограничения доступа к определенному веб-сайту)
#TAG: cache-mgr
cache-mgr [email protected]
Переходим непосредственно к конфигурации. Находим строки содержащие acl localnet, раскомментируем при необходимости и редактируем их определяя сети, на пользователей, принадлежащих к которым будут распространяться правила, устанавливаемые в настройках прокси сервера
acl localnet 192.168.0.0/24
Маску можно задавать непосредственно как это показано строкой выше, можно задавать в виде нулей
Например, при указании следующего адреса к прокси смогут использовать клиенты из всей сети 192.Х.Х.Х
acl localnet 192.0.0.0
В конфигурационном файле может быть задано множество правил — например, ограничение на возможность использования сервера по времени:
acl hours time S M T W H F A 2:00-20:00
После задания правила — его нужно активировать используя директивы allow или deny
http_access allow network hours
Включение кэширования в SQUID
Чтобы включить кэширование необходимо найти и раскомментировать следующую строку:
cache_dir ufs /var/spool/squid 100 16 256
100 здесь — размер буфера под кэш в Мб, его можно изменить, максимальное адекватное значение параметра 1/3 объема жесткого диска
Кэш будет храниться в /var/spool/squid. Необходимо убедиться в том, что каталог существует и SQUID имеет достаточно прав для того чтобы записывать в файлы, в нем размещающиеся информацию
Даем команду на создание дерева директорий
Если все сделано правильно вывод последней команды изначально должен показывать приблизительно 70 Мб, в дальнейшем размер каталога с кэшем, естественно, должен увеличиваться
Чтобы изображения на сайтах, посещаемых пользователями, обновлялись несколько быстрее используем следующую директиву — в ее синтаксисе зададим форматы файлов, которые будут считаться изображениями и будут обновляться чаще
refresh_pattern -i \.
Также в конфиге присутствуют настройки безопасных портов — safe ports — портов, с которыми будет производиться работа и SSL портов (настройка squid для работы по https является несколько более сложной задачей, чем разбираемая сейчас — она будет рассмотрена в рамках другой статьи). Настройки портов можно изменить.
acl SSL_ports port 443
Следующая директива запрещает доступ со всех портов, которые не определены в качестве безопасных
http_access deny !Safe_ports
Аналогично можно установить обязательность использования защищенного соединения — сейчас в тестовой среде директиву не применяем — здесь они приведена для примера
http_access deny CONNECT !SSL_ports
Разрешаем доступ служебному пользователю manager, это сделает возможным, в частности, для него читать статистику — доступ даем только к localhost
http_access allow localhost manager
http_access deny manager
http_access allow localhost
Если необходимо быстро дать приостановить использование прокси можно раскомментировать одну из следующих строк конфига, закомментировав при этом все строки с ограничивающими доступ правилами
#http_access allow localnet
#http_access allow all
Раскомментировав forwarded_for off мы спрячем ip адреса клиентов от Интернета — в лог файлах будет фигурировать адрес прокси сервера — используется в анонимайзерах, сейчас оставим знак комментария
#forwarded_for off
Ограничим возможность получения трафика с определенных сайтов указав их подряд разделяя имена пробелами
acl block_websites dstdomain .bad.com .yahoo.com
http_access deny block_websites
SQUID прозрачный прокси — настройка
В конфиге зададим IP адрес прокси сервера в локальной сети и порт на котором он работает (по умолчанию 3128). Адрес обязательно указывать только если используется более одного сетевого интерфейса
http_port 192.168.0.9:3128
Основная настройка завершена. Чтобы клиенты могли его использовать адрес прокси потребуется указать в браузере каждого клиента. Это может быть неудобно, необходимости выполнять данные действия можно избежать настроив прокси в качестве «прозрачного»
http_port 192.168.0.9:3128 intercept
Добавляем в строку параметр intercept, в squid версии до 3.1 — transparent
Конфигурация завершена — перезагружаем squid
Настройка IPTABLES для работы в режиме ‘SQUID прозрачный прокси’
Просматриваем используемые правила
-A FORWARD -s 192.168.0.0/24 -p tcp -m multiport —ports 110,25,21 -j ACCEPT
-A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
Видим, что использование протоколов http, https не разрешается правилами iptables
Добавляем правило, позволяющее подключение по порту 3128
iptables -A INPUT -s 192.168.0.0/24 -p tcp -m multiport —ports 3128 -j ACCEPT
Делаем редирект с веб портов 80,8080 3128
Заходим в браузер и проверяем — должен появиться доступ по http (не по https) ко всем сайтам, кроме запрещенных ранее конфигурацией.
Помимо SQUID прозрачное прокирование может быть нужно там, где требуется доступ к серверу по стандартному порту только для определенных IP адресов и по альтернативному для всех остальных.
Проверять работу прокси можно вручную отправляя запросы с помощью curl с ключом proxy.
Установка и настройка Squid на Ubuntu
Обновлено: 11.11.2021 Опубликовано: 30.07.2020
Используемые термины: Squid, Ubuntu. Данную инструкцию можно также применять для установки SQUID на Debian. В качестве клиентов могут использоваться Windows, Linux, Mac OS и любые браузеры.
Установка и базовая настройка
Если сеть клиентских компьютеров отличается от стандартной (192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8), необходимо ее добавить в acl, например:
* кавычки обязательны
** после необходимо создать файл /etc/squid/acl_localnet и с каждой строчки перечислить разрешенные IP-адреса. С точки зрения безопасности, лучше закомментировать все подсети, которые не используются в нашей локальной сети, например:
# TAG: acl
.
#acl localnet src 0.0.0.1-0.255.255.255
#acl localnet src 10.0.0.0/8
#acl localnet src 100.64.0.0/10
#acl localnet src 169.254.0.0/16
#acl localnet src 172.16.0.0/12
acl localnet src 192.168.0.0/16
#acl localnet src fc00::/7
#acl localnet src fe80::/10
* в данном примере мы оставили только подсеть 192.168.0.0/16. Разрешаем доступ для локальных сетей, которые заданы опцией acl localnet:
* данную опцию нужно либо раскомментировать, либо вставить выше опции http_access deny all. Настраиваем директорию для кэша:
* где ufs — файловая система (ufs для SQUID является самой подходящей); /var/spool/squid — директория хранения кэша; 4096 — объем пространства в мегабайтах, которое будет выделено под кэш; 32 — количество каталогов первого уровня, которое будет создано для размещение кэша; 256 — количество каталогов второго уровня, которое будет создано для размещение кэша. Останавливаем squid:
Проверка
Заходим в настройки браузера и настраиваем использование прокси-сервера. Например, в Mozilla Firefox настройки нужно выставить такими: * где 192.168.163.166 — IP-адрес моего прокси-сервера. Теперь открываем сайт 2ip.ru. После его загрузки мы увидим внешний IP-адрес — он должен соответствовать той сети, от которой работает настроенный SQUID.
Прозрачный прокси
Прозрачный прокси позволяет автоматически использовать прокси-сервер, не настраивая при этом браузер компьютера. Пользователи могут даже не знать, что трафик идет через squid. Открываем конфигурационный файл:
* порт 3128 будет для прозрачного проксирования. Порт 3129 должен быть указан в качестве прокси. И перезапускаем конфигурацию squid:
Для работы прозрачного проксирования. необходимо, чтобы шлюз перекидывал запросы по нужным портам на наш прокси. Это выполняется разными способами в зависмости от реализации шлюза. Для примера, если нашим шлюзом будет наш сервер со squid, то нужно выполнить команды:
Авторизация по логину и паролю
# TAG: auth_param
.
auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/auth_users
auth_param basic children 25
auth_param basic realm SQUID PROXY
auth_param basic credentialsttl 3 hours
* где /usr/lib/squid/basic_ncsa_auth — расположение ncsa_auth (в зависимости от системы может находиться в другом каталоге); /etc/squid/auth_users — файл с логинами и паролями; children 25 разрешает 25 одновременных подключений; SQUID PROXY — произвольная фраза для приветствия; credentialsttl 3 hours будет держать сессию 3 часа, после потребуется повторный ввод логина и пароля. Создаем acl для пользователей, которые прошли регистрацию. Сделаем регистрацию обязательной:
Слушаем на определенном интерфейсе
По умолчанию, squid будет слушать запросы на всех сетевых интерфейсах, которые доступны серверу. Чтобы указать конкретный, добавляем его IP к http_port:
* в данном примере squid будет слушать на адресе 192.168.1.15. И перечитываем конфигурацию squid:
Исходящий сетевой интерфейс
На нашем сервере может быть несколько внешний IP-адресов. По умолчанию, все исходящие запросы будут работать через интерфейс со шлюзом по умолчанию. Чтобы иметь возможность работы со squid через разные интерфейсы в настройку вносим:
acl 217_66_157_33 localip 217.66.157.33
tcp_outgoing_address 217.66.157.33 217_66_157_33
acl 217_66_157_34 localip 217.66.157.34
tcp_outgoing_address 217.66.157.34 217_66_157_34
* в данном примере, при подключении к прокси через IP 217.66.157.33, исходящие пакеты будут от IP 217.66.157.33; аналогично для IP 217.66.157.34. Перечитываем конфигурацию squid:
Настройка цепочки прокси-серверов
- hostname — другой сервер, на который мы будем передавать запрос.
- type — тип «родства» другого сервера. Могут быть варианты:
- parent
- sibling
- multicast
* более подробное описание можно найти в самом конфигурационном файле SQUID.
Если на прокси, к которому мы подключаемся, необходима авторизация, добавляем опцию login:
cache_peer 10.11.12.13 parent 3128 3128 proxy-only login=loginname:password
Запрещаем использование нашего прокси-сервера напрямую (не через cache_peer):
# TAG: never_direct
.
never_direct allow allПеречитываем конфигурацию squid: