Перенаправление пользователей по правилам в Squid

в 12:26, , рубрики: config, linux, radius, squid, Настройка Linux

По работе столкнулся с такой проблемой: есть десяток прокси серверов (squid) в разных странах и не один десяток пользователей. Каждый из них сам решает через какой сервер работать — есть chrome extension в котором они могут сделать выбор.

Но все сервера находятся на разном удалении от пользователя и пользователь из России, пользуясь сервером в Канаде сталкивается с хорошими тормозами. С другой стороны все сервера подключены в дата центрах к магистралям и между ними задержки много меньше.

Было принято решение направлять каждого пользователя к ближайшему к нему серверу, а от туда к выбранному.

Прокси-прокси

Первым пунктом необходимо настроить прокси для работы друг с другом. Самым простым путем было указать:

acl localnet srcdomain мой домен.com

Но оказалось, что не все позволяют обратное преобразование в указанный тобой домен. Пришлось прописывать все ip серверов:

acl localnet srcdomain IP серверa 1
acl localnet srcdomain IP серверa 2
acl localnet srcdomain IP серверa 3

Если кто подскажет другое решение, я буду рад поправить. Пока сервера не часто меняются и в случае изменения быстро правятся с помощью puppet-ов.

Управление перенаправлением

Следующий шаг настроить acl для перенаправления по серверам:

cache_peer		{сервер 1}	parent	3128	3130	name=peer1
cache_peer		{сервер 2}	parent	3128	3130	name=peer2
cache_peer		{сервер 3}	parent	3128	3130	name=peer3
cache_peer_access		peer1		allow	user1
cache_peer_access		peer2		allow	user2
cache_peer_access		peer3		allow	user3

При этом user1, user2 и user3 это acl пользователей.

Авторизация

В компании был уже настроен для этих случаев radius сервер. В centos 5 я шел путем настройки через pam, так как сам squid не собирал, но потом пришлось пойти по пути самостоятельной сборки (в стандартную не включен ssl) и я воспользовался ключом --enable-basic-auth-helpers=squid_radius_auth. Также, тем кто не хочет заморачиваться с pam я бы посоветовал отдельную библиотеку:

wget http://www.squid-cache.org/contrib/squid_radius_auth/squid_radius_auth-1.10.tar.gz
tar xvzf squid_radius_auth-1.10.tar.gz
cd squid_radius_auth-1.10
cp Makefile.default Makefile
make
make install

В любом варианте установки конфигурация squid не меняется, только пути к файлу в первой строчке:

auth_param basic program        /usr/local/squid/libexec/basic_radius_auth -f /usr/local/squid/etc/radius_config
auth_param basic children 5
auth_param basic realm {мой сервер} // будет отображаться в окошке авторизации
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off
acl     radius  proxy_auth      REQUIRED

Пример файла radius_config:

server {адрес radius сервера}
password {секретная фраза для подключения к radius}

Каждому серверу своего пользователя

Правила оказались достаточно просты. Сначала указываем какой пользователь будет управляться каким правилом:

acl     user1      proxy_auth      "/usr/local/squid/userlist/user1" no_cache
acl     user2      proxy_auth      "/usr/local/squid/userlist/user2" no_cache
acl     user3      proxy_auth      "/usr/local/squid/userlist/user3" no_cache

И, естественно разрешаем им пользоваться прокси:

http_access allow localnet // для proxy-proxy
http_access allow radius // для тех, кто не выбрал прокси - пользуется ближайшим
http_access allow user1
http_access allow user2
http_access allow user3
http_access deny all // не забываем запретить остальным

Вот и все. Когда пользователь выбирает сервер, отдельная программа удаляет пользователя из файлов в userlist и добавляет в выбранный. Но это уже другая история.

Источники

Основная информация была взята из wiki squid, но там не хватает примеров:

  • Основной сайт wiki.squid-cache.org. Без перевода на русский. Не указываю отдельные страницы, так как их много использовал.
  • Настройка radius Setup Squid and FreeRADIUS on CentOS 5 and CentOS 6
  • А это справочник по Acl — элементы ACL
  • В статье описан не весь сервис, а только настройка squid. Но не написанное относится только к динамике, а у всех она может быть своя. Я отметил только нужные моменты. Не пытайтесь все настроить методом копипаста — пропущены строки, отношения не имеющие к теме статьи.

Автор: nixson

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js