Прозрачный прокси сервер SQUID на Ubuntu


Прозрачный прокси сервер SQUID — наиболее широко используемый в настоящее время прокси сервер, реализуемый на Linux. Отличается широким функционалом и достаточной сложностью конфигурации. Основной файл с настройками содержит около 4 000 строк. Рассмотрим процесс  конфигурации squid как прозрачный прокси.

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

/usr/sbin/squid -v



Делаем бэкап конфигурационного файла

cp /etc/sqid/squid.conf /etc/sqid/squid.conf.backup



Приступаем к редактированию файла

mcedit /etc/sqid/squid.conf



Находим закомментированную строку #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 имеет достаточно прав для того чтобы записывать в файлы, в нем размещающиеся информацию


Останавливаем прокси

/etc/init.d/squid stop


Даем команду на создание дерева директорий

squid -z


Снова запускаем сервис

/etc/init.d/squid start


du -sh /var/spool/squid



Если все сделано правильно вывод последней команды изначально должен показывать приблизительно 70 Мб, в дальнейшем размер каталога с кэшем, естественно, должен увеличиваться



Чтобы изображения на сайтах, посещаемых пользователями, обновлялись несколько быстрее используем следующую директиву — в ее синтаксисе зададим форматы файлов, которые будут считаться изображениями и будут обновляться чаще

refresh_pattern -i \.{gif|png|jpg|jpeg|ico}$ 3600    90%    43200



Также в конфиге присутствуют настройки безопасных портов — 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

/etc/init.d/squid restart


Проверяем статус службы

/etc/init.d/squid status



Настройка IPTABLES для работы в режиме 'SQUID прозрачный прокси'


Просматриваем используемые правила

iptables-save


-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



Сохраняем конфигурацию

iptables-save

Заходим в браузер и проверяем — должен появиться доступ по http (не по https) ко всем сайтам, кроме запрещенных ранее конфигурацией.



Помимо SQUID прозрачное прокирование может быть нужно там, где требуется доступ к серверу по стандартному порту только для определенных IP адресов и по альтернативному для всех остальных.

Проверять работу прокси можно вручную отправляя запросы с помощью curl с ключом proxy.

Сказать спасибо